CASPAR_LOG(trace) << print() << " Looping.";
}
else
+ {
+ // Needed by some decoders to decode remaining frames based on last packet.
+ auto flush_packet = create_packet();
+ flush_packet->data = nullptr;
+ flush_packet->size = 0;
+ flush_packet->pos = -1;
+
+ buffer_.push(flush_packet);
+
executor_.stop();
+ }
}
else
{
}
packets_.pop();
- file_frame_number_ = static_cast<uint32_t>(packet->pos);
- avcodec_flush_buffers(codec_context_.get());
- return flush_video();
+
+ if (packet->pos != -1)
+ {
+ file_frame_number_ = static_cast<uint32_t>(packet->pos);
+ avcodec_flush_buffers(codec_context_.get());
+ return flush_video();
+ }
+ else // Really EOF
+ return nullptr;
}
packets_.pop();