AVPacket tmp_packet;\r
safe_ptr<AVPacket> read_packet(&tmp_packet, av_free_packet); \r
\r
- if (av_read_frame(format_context_.get(), read_packet.get()) >= 0) // NOTE: read_packet is only valid until next call of av_safe_ptr<read_frame> or av_close_input_file\r
+ if (av_read_frame(format_context_.get(), read_packet.get()) >= 0 && frame_count_ != 0) // NOTE: read_packet is only valid until next call of av_safe_ptr<read_frame> or av_close_input_file\r
{\r
auto packet = std::make_shared<aligned_buffer>(read_packet->data, read_packet->data + read_packet->size);\r
if(read_packet->stream_index == video_s_index_) \r
{\r
buffer_size_ += packet->size();\r
video_packet_buffer_.try_push(std::move(packet)); \r
- frame_count_ = frame_count_ != 0 ? frame_count_ - 1 : 0;\r
+\r
+ if(frame_count_ > 0)\r
+ --frame_count_;\r
}\r
else if(read_packet->stream_index == audio_s_index_) \r
{\r
bool reset_frame()\r
{\r
bool result = av_seek_frame(format_context_.get(), -1, start_frame_*AV_TIME_BASE, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0;\r
+ if(!result)\r
+ CASPAR_LOG(warning) << "Failed to seek frame.";\r
frame_count_ = end_frame_;\r
return result;\r
}\r