]> git.sesse.net Git - casparcg/commitdiff
2.1.0: -ffmpeg_producer: Minor fixes to LENGTH, still broken.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 19 Mar 2012 07:11:50 +0000 (07:11 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 19 Mar 2012 07:11:50 +0000 (07:11 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.1.0@2686 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/ffmpeg/producer/input/input.cpp

index e07d29e1dbaba7bb8cf5c58e19bb9c8f4fa83c5c..9e5dfd0a7c8f2269ba013f55de2ba981098176da 100644 (file)
@@ -176,8 +176,11 @@ public:
                graph_->set_text(print());\r
 \r
                if(frame != core::draw_frame::late())           \r
+               {\r
+                       last_frame_ = frame;\r
                        ++frame_number_;                \r
-                               \r
+               }\r
+\r
                event_subject_  << monitor::event("file/time")                  % monitor::duration(file_frame_number()/fps_) \r
                                                                                                                                % monitor::duration(file_nb_frames()/fps_)\r
                                                << monitor::event("file/frame")                 % static_cast<int32_t>(file_frame_number())\r
@@ -188,10 +191,7 @@ public:
                \r
                if(frame == core::draw_frame::late() && input_.eof())\r
                        return last_frame();\r
-               \r
-               if(frame != core::draw_frame::late())\r
-                       last_frame_ = frame;\r
-               \r
+                               \r
                return frame;\r
        }\r
 \r
index 7af517547fdb9fee7856921669bdf0b5ffde49b0..53d08a6a75b2c5fdbcad98108c495af4f28ea16b 100644 (file)
@@ -216,10 +216,7 @@ struct input::impl : boost::noncopyable
                                        eof_ = false;\r
 \r
                                        THROW_ON_ERROR(ret, "av_read_frame", print());\r
-\r
-                                       if(packet->stream_index == default_stream_index_)\r
-                                               ++frame_number_;\r
-\r
+                                       \r
                                        THROW_ON_ERROR2(av_dup_packet(packet.get()), print());\r
                                \r
                                        // Make sure that the packet is correctly deallocated even if size and data is modified during decoding.\r
@@ -234,12 +231,16 @@ struct input::impl : boost::noncopyable
 \r
                                        auto time_base = format_context_->streams[packet->stream_index]->time_base;\r
                                        packet->pts = static_cast<uint64_t>((static_cast<double>(packet->pts * time_base.num)/time_base.den)*fps_);\r
-                                       \r
-                                       buffer_.try_push(packet);\r
-                                       buffer_size_ += packet->size;\r
+                                       frame_number_ = static_cast<uint32_t>(packet->pts);\r
+\r
+                                       if(frame_number_ <= frame_number_)\r
+                                       {\r
+                                               buffer_.try_push(packet);\r
+                                               buffer_size_ += packet->size;\r
                                \r
-                                       graph_->set_value("buffer-size", (static_cast<double>(buffer_size_)+0.001)/MAX_BUFFER_SIZE);\r
-                                       graph_->set_value("buffer-count", (static_cast<double>(buffer_.size()+0.001)/MAX_BUFFER_COUNT));                \r
+                                               graph_->set_value("buffer-size", (static_cast<double>(buffer_size_)+0.001)/MAX_BUFFER_SIZE);\r
+                                               graph_->set_value("buffer-count", (static_cast<double>(buffer_.size()+0.001)/MAX_BUFFER_COUNT));\r
+                                       }\r
                                }       \r
 \r
                                if(!eof_)\r
@@ -262,7 +263,7 @@ struct input::impl : boost::noncopyable
                //if(ret == AVERROR_EOF)\r
                //      CASPAR_LOG(trace) << print() << " Received EOF. ";\r
 \r
-               return ret == AVERROR_EOF || ret == AVERROR(EIO) || frame_number_ >= length_; // av_read_frame doesn't always correctly return AVERROR_EOF;\r
+               return ret == AVERROR_EOF || ret == AVERROR(EIO) || frame_number_ > length_; // av_read_frame doesn't always correctly return AVERROR_EOF;\r
        }\r
 };\r
 \r