]> git.sesse.net Git - casparcg/blobdiff - modules/decklink/producer/decklink_producer.cpp
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / modules / decklink / producer / decklink_producer.cpp
index d211ff16b9f4fe1a06d8c751f5d0977c8ea943ce..de51381ca2cd2fe940e0d4086154c8b8842c8a56 100644 (file)
@@ -197,8 +197,17 @@ public:
                        // It is assumed that audio is always equal or ahead of video.\r
                        if(audio && SUCCEEDED(audio->GetBytes(&bytes)))\r
                        {\r
+                               auto sample_frame_count = audio->GetSampleFrameCount();\r
                                auto audio_data = reinterpret_cast<short*>(bytes);\r
-                               muxer_.push(std::vector<int16_t>(audio_data, audio_data + audio->GetSampleFrameCount()*2));\r
+                               audio_samples_.insert(audio_samples_.end(), audio_data, audio_data + sample_frame_count*2);\r
+\r
+                               if(audio_samples_.size() > frame_factory_->get_video_format_desc().audio_samples_per_frame)\r
+                               {\r
+                                       const auto begin = audio_samples_.begin();\r
+                                       const auto end   = begin +  frame_factory_->get_video_format_desc().audio_samples_per_frame;\r
+                                       muxer_.push(std::vector<int16_t>(begin, end));\r
+                                       audio_samples_.erase(begin, end);\r
+                               }\r
                        }\r
                        else\r
                                muxer_.push(std::vector<int16_t>(frame_factory_->get_video_format_desc().audio_samples_per_frame, 0));\r