CASPAR_LOG(info) << L"frame_muxer: Truncating " << truncate << L" audio samples.";\r
}\r
\r
- CASPAR_LOG(debug) << L"audio-chunk-count: " << audio_sample_count_;\r
+ CASPAR_LOG(debug) << L"audio-chunk-count: " << audio_sample_count_/format_desc_.audio_samples_per_frame;\r
audio_sample_count_ = 0;\r
return;\r
}\r
if(!codec_context_)\r
result.push_back(std::make_shared<std::vector<int16_t>>(format_desc_.audio_samples_per_frame, 0));\r
else if(!packets_.empty())\r
- { \r
- if(packets_.front()) \r
+ { \r
+ auto packet = std::move(packets_.front());\r
+ packets_.pop();\r
+\r
+ if(packet) \r
{\r
AVPacket pkt;\r
av_init_packet(&pkt);\r
- pkt.data = packets_.front()->data;\r
- pkt.size = packets_.front()->size;\r
+ pkt.data = packet->data;\r
+ pkt.size = packet->size;\r
\r
for(int n = 0; n < 64 && pkt.size > 0; ++n)\r
result.push_back(decode(pkt));\r
avcodec_flush_buffers(codec_context_.get());\r
result.push_back(nullptr);\r
}\r
-\r
- packets_.pop();\r
}\r
\r
return result;\r
\r
void decode_frame()\r
{\r
- bool flush = false;\r
-\r
for(int n = 0; n < 32 && ((muxer_.video_frames() < 2 && !video_decoder_.ready()) || (muxer_.audio_chunks() < 2 && !audio_decoder_.ready())); ++n) \r
{\r
std::shared_ptr<AVPacket> pkt;\r
{\r
video_decoder_.push(pkt);\r
audio_decoder_.push(pkt);\r
-\r
- flush = !pkt;\r
}\r
}\r
\r
}\r
\r
if(frame_finished != 0) \r
+ {\r
av_frames.push_back(make_safe(decoded_frame));\r
+ if(decoded_frame->repeat_pict != 0)\r
+ CASPAR_LOG(warning) << "video_decoder: repeat_pict not implemented.";\r
+ }\r
\r
return frame_finished != 0;\r
}\r