From 9b9fbe69b0357402037c5a93a0f5f355ea23f40c Mon Sep 17 00:00:00 2001 From: ronag Date: Sun, 27 Nov 2011 20:35:48 +0000 Subject: [PATCH] 2.0.2: ffmpeg_producer: Fixed file_frame_number. git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.2@1689 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- modules/ffmpeg/producer/ffmpeg_producer.cpp | 2 +- modules/ffmpeg/producer/input/input.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/ffmpeg/producer/ffmpeg_producer.cpp b/modules/ffmpeg/producer/ffmpeg_producer.cpp index 042f8f160..dd0542aa8 100644 --- a/modules/ffmpeg/producer/ffmpeg_producer.cpp +++ b/modules/ffmpeg/producer/ffmpeg_producer.cpp @@ -204,7 +204,7 @@ public: virtual int64_t file_frame_number() const override { - return file_frame_number_; + return std::max(0, file_frame_number_-frame_buffer_.size()+1); } virtual boost::unique_future call(const std::wstring& param) override diff --git a/modules/ffmpeg/producer/input/input.cpp b/modules/ffmpeg/producer/input/input.cpp index e9c35c651..1622c6cc0 100644 --- a/modules/ffmpeg/producer/input/input.cpp +++ b/modules/ffmpeg/producer/input/input.cpp @@ -231,7 +231,7 @@ struct input::implementation : boost::noncopyable return is_running_ && (is_eof_ || (buffer_size_ > MAX_BUFFER_SIZE || buffer_.size() > MAX_BUFFER_COUNT) && buffer_.size() > MIN_BUFFER_COUNT); } - void do_seek(int64_t target) + void do_seek(const int64_t target) { CASPAR_LOG(debug) << print() << " Seeking: " << target; @@ -249,11 +249,11 @@ struct input::implementation : boost::noncopyable } auto time_base = format_context_->streams[default_stream_index_]->time_base; - target = (target*time_base.den)/time_base.num; + auto fixed_target = (target*time_base.den)/time_base.num; auto fixed_time_base = fix_time_base(time_base); - target = (target * fixed_time_base.num) / fixed_time_base.den; + fixed_target = (target * fixed_time_base.num) / fixed_time_base.den; - THROW_ON_ERROR2(avformat_seek_file(format_context_.get(), default_stream_index_, std::numeric_limits::min(), target, std::numeric_limits::max(), 0), print()); + THROW_ON_ERROR2(avformat_seek_file(format_context_.get(), default_stream_index_, std::numeric_limits::min(), fixed_target, std::numeric_limits::max(), 0), print()); is_eof_ = false; buffer_cond_.notify_all(); -- 2.39.2