]> git.sesse.net Git - casparcg/commitdiff
2.0.2: ffmpeg/input: Use avformat_seek_file for seeking instead of av_seek_frame.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 23 Nov 2011 08:16:13 +0000 (08:16 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 23 Nov 2011 08:16:13 +0000 (08:16 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.2@1626 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/input/input.cpp

index 16002f3609f00c7ef5eeaa68e3b4f07ce61d78e4..42a285b55bb5b61a5f68d349ceb2211bfe38f646 100644 (file)
@@ -188,8 +188,6 @@ private:
                auto packet = create_packet();\r
                auto ret        = av_read_frame(format_context_.get(), packet.get()); // packet is only valid until next call of av_read_frame. Use av_dup_packet to extend its life.   \r
                \r
-               CASPAR_ASSERT(nb_frames_ < 1000);\r
-\r
                if(is_eof(ret))                                                                                                              \r
                {\r
                        ++nb_loops_;\r
@@ -255,19 +253,22 @@ private:
 \r
        void seek_frame(int64_t frame, int flags = 0)\r
        {                       \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
-\r
-               THROW_ON_ERROR2(av_seek_frame(format_context_.get(), default_stream_index_, frame, flags), print());            \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
+               \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
 \r
                buffer_.push(flush_packet());\r
        }               \r