]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/producer/ffmpeg_producer.cpp
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / modules / ffmpeg / producer / ffmpeg_producer.cpp
index d1ca8c0295a97d0f420c87ef472398903f3f0778..02083d5bafaebb484cd020c9690771357817cf8a 100644 (file)
@@ -46,7 +46,7 @@
 \r
 #include <tbb/parallel_invoke.h>\r
 \r
-namespace caspar {\r
+namespace caspar { namespace ffmpeg {\r
                                \r
 struct ffmpeg_producer : public core::frame_producer\r
 {\r
@@ -79,7 +79,6 @@ struct ffmpeg_producer : public core::frame_producer
 public:\r
        explicit ffmpeg_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::wstring& filename, const std::wstring& filter, bool loop, int start, size_t length) \r
                : filename_(filename)\r
-               , graph_(diagnostics::create_graph([this]{return print();}))\r
                , frame_factory_(frame_factory)         \r
                , format_desc_(frame_factory->get_video_format_desc())\r
                , input_(graph_, filename_, loop, start, length)\r
@@ -98,23 +97,10 @@ public:
                graph_->add_guide("frame-time", 0.5);\r
                graph_->set_color("frame-time", diagnostics::color(0.1f, 1.0f, 0.1f));\r
                graph_->set_color("underflow", diagnostics::color(0.6f, 0.3f, 0.9f));   \r
+               diagnostics::register_graph(graph_);\r
                \r
-               // Do some pre-work in order to not block rendering thread for initialization and allocations.\r
-\r
-               push_packets();\r
-               auto video_frames = video_decoder_.poll();\r
-               if(!video_frames.empty())\r
-               {\r
-                       auto& video_frame = video_frames.front();\r
-                       auto  desc                = get_pixel_format_desc(static_cast<PixelFormat>(video_frame->format), video_frame->width, video_frame->height);\r
-                       if(desc.pix_fmt == core::pixel_format::invalid)\r
-                               get_pixel_format_desc(PIX_FMT_BGRA, video_frame->width, video_frame->height);\r
-                       \r
-                       for(int n = 0; n < 3; ++n)\r
-                               frame_factory->create_frame(this, desc);\r
-               }\r
-               BOOST_FOREACH(auto& video, video_frames)                        \r
-                       muxer_.push(video, 0);  \r
+               for(int n = 0; n < 3; ++n)\r
+                       frame_factory->create_frame(this, std::max<size_t>(2, video_decoder_.width()), std::max<size_t>(2, video_decoder_.height()));\r
        }\r
                        \r
        virtual safe_ptr<core::basic_frame> receive(int hints)\r
@@ -137,6 +123,8 @@ public:
                        else                    \r
                                graph_->add_tag("underflow");   \r
                }\r
+\r
+               graph_->set_text(print());\r
                \r
                return frame;\r
        }\r
@@ -221,7 +209,7 @@ public:
        }\r
 };\r
 \r
-safe_ptr<core::frame_producer> create_ffmpeg_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_producer> create_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::vector<std::wstring>& params)\r
 {              \r
        static const std::vector<std::wstring> extensions = boost::assign::list_of\r
                (L"mpg")(L"mpeg")(L"m2v")(L"m4v")(L"mp3")(L"mp4")(L"mpga")\r
@@ -259,4 +247,4 @@ safe_ptr<core::frame_producer> create_ffmpeg_producer(const safe_ptr<core::frame
        return make_safe<ffmpeg_producer>(frame_factory, path, filter_str, loop, start, length);\r
 }\r
 \r
-}
\ No newline at end of file
+}}
\ No newline at end of file