From: ronag Date: Fri, 28 Oct 2011 09:30:45 +0000 (+0000) Subject: git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches... X-Git-Tag: 2.1.0_Beta1~1105 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=679365e29ccd4363d0fa2d3e831b89cc8091c3e0;p=casparcg git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0 concrt-experimental@1499 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- diff --git a/common/common.vcxproj b/common/common.vcxproj index 807ff5f93..449d16135 100644 --- a/common/common.vcxproj +++ b/common/common.vcxproj @@ -211,6 +211,7 @@ + diff --git a/common/common.vcxproj.filters b/common/common.vcxproj.filters index 43c4f0eef..8fe9e9872 100644 --- a/common/common.vcxproj.filters +++ b/common/common.vcxproj.filters @@ -130,5 +130,8 @@ source\concurrency + + source\concurrency + \ No newline at end of file diff --git a/common/concurrency/throw_away.h b/common/concurrency/throw_away.h new file mode 100644 index 000000000..6d2609a77 --- /dev/null +++ b/common/concurrency/throw_away.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +namespace caspar { + +template +void link_throw_away(Concurrency::ISource& source) +{ + static Concurrency::call throw_away([](const T& elem){}); + source.link_target(&throw_away); +} + +} \ No newline at end of file diff --git a/modules/ffmpeg/producer/ffmpeg_producer.cpp b/modules/ffmpeg/producer/ffmpeg_producer.cpp index 1db34675b..274e43134 100644 --- a/modules/ffmpeg/producer/ffmpeg_producer.cpp +++ b/modules/ffmpeg/producer/ffmpeg_producer.cpp @@ -28,9 +28,10 @@ #include "video/video_decoder.h" #include "../ffmpeg_error.h" +#include #include -#include #include +#include #include #include @@ -63,8 +64,6 @@ struct ffmpeg_producer : public core::frame_producer const bool loop_; const size_t length_; - call throw_away_packets_; - call throw_away_frames_; unbounded_buffer packets_; std::shared_ptr> video_; std::shared_ptr> audio_; @@ -85,8 +84,6 @@ public: , start_(start) , loop_(loop) , length_(length) - , throw_away_packets_([](const input::target_element_t&){}) - , throw_away_frames_([](const frame_muxer2::target_element_t&){}) , input_(packets_, graph_, filename_, loop, start, length) , last_frame_(core::basic_frame::empty()) { @@ -124,7 +121,7 @@ public: CASPAR_VERIFY(video_decoder_ || audio_decoder_, ffmpeg_error()); - packets_.link_target(&throw_away_packets_); + link_throw_away(packets_); muxer_.reset(new frame_muxer2(video_.get(), audio_.get(), frames_, video_decoder_ ? video_decoder_->fps() : frame_factory->get_video_format_desc().fps, frame_factory)); graph_->set_color("underflow", diagnostics::color(0.6f, 0.3f, 0.9f)); @@ -137,7 +134,7 @@ public: ~ffmpeg_producer() { input_.stop(); - frames_.link_target(&throw_away_frames_); + link_throw_away(frames_); } virtual safe_ptr receive(int hints) diff --git a/modules/ffmpeg/producer/muxer/frame_muxer.cpp b/modules/ffmpeg/producer/muxer/frame_muxer.cpp index 2db845dc4..bf623f23b 100644 --- a/modules/ffmpeg/producer/muxer/frame_muxer.cpp +++ b/modules/ffmpeg/producer/muxer/frame_muxer.cpp @@ -96,11 +96,7 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya video = receive(video_source_); if(video == flush_video()) - { - if(filter_.has_value()) - filter_.value()->push(nullptr); return receive_video(); - } if(video == eof_video()) return nullptr; diff --git a/modules/flash/producer/flash_producer.cpp b/modules/flash/producer/flash_producer.cpp index bee63d72a..9bfb82af1 100644 --- a/modules/flash/producer/flash_producer.cpp +++ b/modules/flash/producer/flash_producer.cpp @@ -34,8 +34,9 @@ #include #include -#include +#include #include +#include #include #include #include @@ -296,8 +297,7 @@ public: ~flash_producer() { is_running_ = false; - auto frame = core::basic_frame::empty(); - while(try_receive(frames_, frame)){} + link_throw_away(frames_); agent::wait(this); }