]> git.sesse.net Git - casparcg/commitdiff
2.0.2: ffmpeg_producer: Fixed file_frame_number.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 27 Nov 2011 20:35:48 +0000 (20:35 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 27 Nov 2011 20:35:48 +0000 (20:35 +0000)
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
modules/ffmpeg/producer/input/input.cpp

index 042f8f1607892ad794fe226d7fb8856df348886b..dd0542aa89aea8907de387166951e8282787ffff 100644 (file)
@@ -204,7 +204,7 @@ public:
 \r
        virtual int64_t file_frame_number() const override\r
        {\r
-               return file_frame_number_;\r
+               return std::max<int64_t>(0, file_frame_number_-frame_buffer_.size()+1);\r
        }\r
 \r
        virtual boost::unique_future<std::wstring> call(const std::wstring& param) override\r
index e9c35c651690e9100d7abf7433e0f6be449e70a4..1622c6cc0d08afd174b1d5b02b42a4baa07cf745 100644 (file)
@@ -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);\r
        }\r
        \r
-       void do_seek(int64_t target)\r
+       void do_seek(const int64_t target)\r
        {       \r
                CASPAR_LOG(debug) << print() << " Seeking: " << target;\r
 \r
@@ -249,11 +249,11 @@ struct input::implementation : boost::noncopyable
                }\r
                \r
                auto time_base = format_context_->streams[default_stream_index_]->time_base;\r
-               target = (target*time_base.den)/time_base.num;\r
+               auto fixed_target = (target*time_base.den)/time_base.num;\r
                auto fixed_time_base = fix_time_base(time_base);\r
-               target = (target * fixed_time_base.num) / fixed_time_base.den;\r
+               fixed_target = (target * fixed_time_base.num) / fixed_time_base.den;\r
 \r
-               THROW_ON_ERROR2(avformat_seek_file(format_context_.get(), default_stream_index_, std::numeric_limits<int64_t>::min(), target, std::numeric_limits<int64_t>::max(), 0), print());                \r
+               THROW_ON_ERROR2(avformat_seek_file(format_context_.get(), default_stream_index_, std::numeric_limits<int64_t>::min(), fixed_target, std::numeric_limits<int64_t>::max(), 0), print());          \r
 \r
                is_eof_ = false;\r
                buffer_cond_.notify_all();\r