\r
if(loop_)\r
{\r
- int flags = AVSEEK_FLAG_BACKWARD;\r
-\r
- int vid_stream_index = av_find_best_stream(format_context_.get(), AVMEDIA_TYPE_VIDEO, -1, -1, 0, 0);\r
- if(vid_stream_index >= 0)\r
- {\r
- auto codec_id = format_context_->streams[vid_stream_index]->codec->codec_id;\r
- if(codec_id == CODEC_ID_VP6A || codec_id == CODEC_ID_VP6F || codec_id == CODEC_ID_VP6)\r
- flags |= AVSEEK_FLAG_BYTE;\r
- }\r
-\r
- seek_frame(start_, flags);\r
+ seek_frame(start_);\r
graph_->add_tag("seek"); \r
CASPAR_LOG(debug) << print() << " Looping."; \r
} \r
return is_running_ && (buffer_size_ > MAX_BUFFER_SIZE || buffer_.size() > MAX_BUFFER_COUNT) && buffer_.size() > MIN_BUFFER_COUNT;\r
}\r
\r
- void seek_frame(int64_t frame, int flags = 0)\r
+ void seek_frame(int64_t frame)\r
{ \r
CASPAR_LOG(debug) << print() << " Seeking: " << frame;\r
\r
- flags |= AVSEEK_FLAG_FRAME;\r
- //if(flags == AVSEEK_FLAG_BACKWARD)\r
- //{\r
- // // Fix VP6 seeking\r
- // int vid_stream_index = av_find_best_stream(format_context_.get(), AVMEDIA_TYPE_VIDEO, -1, -1, 0, 0);\r
- // if(vid_stream_index >= 0)\r
- // {\r
- // auto codec_id = format_context_->streams[vid_stream_index]->codec->codec_id;\r
- // if(codec_id == CODEC_ID_VP6A || codec_id == CODEC_ID_VP6F || codec_id == CODEC_ID_VP6)\r
- // flags |= AVSEEK_FLAG_BYTE;\r
- // }\r
- //}\r
+ int flags = AVSEEK_FLAG_FRAME;\r
+ if(frame == 0)\r
+ {\r
+ // Fix VP6 seeking\r
+ int vid_stream_index = av_find_best_stream(format_context_.get(), AVMEDIA_TYPE_VIDEO, -1, -1, 0, 0);\r
+ if(vid_stream_index >= 0)\r
+ {\r
+ auto codec_id = format_context_->streams[vid_stream_index]->codec->codec_id;\r
+ if(codec_id == CODEC_ID_VP6A || codec_id == CODEC_ID_VP6F || codec_id == CODEC_ID_VP6)\r
+ flags = AVSEEK_FLAG_BYTE;\r
+ }\r
+ }\r
\r
- THROW_ON_ERROR2(avformat_seek_file(format_context_.get(), default_stream_index_, std::max<int64_t>(0, frame-50), frame, frame+50, flags), print()); \r
+ THROW_ON_ERROR2(avformat_seek_file(format_context_.get(), default_stream_index_, std::numeric_limits<int64_t>::min(), frame, std::numeric_limits<int64_t>::max(), flags), print()); \r
\r
buffer_.push(flush_packet());\r
} \r