// 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