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