From 53977d8992163fff46099451ac687794db6b7c36 Mon Sep 17 00:00:00 2001 From: ronag Date: Sat, 3 Sep 2011 14:02:19 +0000 Subject: [PATCH] git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1332 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- core/producer/frame_producer.h | 18 +++++++ modules/ffmpeg/producer/ffmpeg_producer.cpp | 52 +++++++++------------ modules/oal/consumer/oal_consumer.cpp | 2 +- 3 files changed, 42 insertions(+), 30 deletions(-) diff --git a/core/producer/frame_producer.h b/core/producer/frame_producer.h index 830461d5b..3cf7e5010 100644 --- a/core/producer/frame_producer.h +++ b/core/producer/frame_producer.h @@ -23,6 +23,7 @@ #include +#include #include #include #include @@ -72,4 +73,21 @@ safe_ptr create_producer(const safe_ptr&, c safe_ptr create_destroy_producer_proxy(executor& destroy_context, const safe_ptr& producer); +template +typename std::decay::type get_param(const std::wstring& name, const std::vector& params, T fail_value) +{ + auto it = std::find(params.begin(), params.end(), name); + if(it == params.end() || ++it == params.end()) + return fail_value; + + T value = fail_value; + try + { + value = boost::lexical_cast::type>(*it); + } + catch(boost::bad_lexical_cast&){} + + return value; +} + }} diff --git a/modules/ffmpeg/producer/ffmpeg_producer.cpp b/modules/ffmpeg/producer/ffmpeg_producer.cpp index 3db902f5f..d20cbaca4 100644 --- a/modules/ffmpeg/producer/ffmpeg_producer.cpp +++ b/modules/ffmpeg/producer/ffmpeg_producer.cpp @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -204,7 +205,19 @@ public: safe_ptr create_ffmpeg_producer(const safe_ptr& frame_factory, const std::vector& params) { static const std::vector extensions = boost::assign::list_of - (L"mpg")(L"mpeg")(L"avi")(L"mov")(L"qt")(L"webm")(L"dv")(L"mp4")(L"f4v")(L"flv")(L"mkv")(L"mka")(L"wmv")(L"wma")(L"ogg")(L"divx")(L"xvid")(L"wav")(L"mp3")(L"m2v"); + (L"mpg")(L"mpeg")(L"m2v")(L"m4v")(L"mp3")(L"mp4")(L"mpga") + (L"avi") + (L"mov") + (L"qt") + (L"webm") + (L"dv") + (L"f4v")(L"flv") + (L"mkv")(L"mka") + (L"wmv")(L"wma")(L"wav") + (L"rm")(L"ram") + (L"ogg")(L"ogv")(L"oga")(L"ogx") + (L"divx")(L"xvid"); + std::wstring filename = env::media_folder() + L"\\" + params[0]; auto ext = boost::find_if(extensions, [&](const std::wstring& ex) @@ -215,35 +228,16 @@ safe_ptr create_ffmpeg_producer(const safe_ptr::max(); - - auto seek_it = boost::find(params, L"SEEK"); - if(seek_it != params.end()) - { - if(++seek_it != params.end()) - start = boost::lexical_cast(*seek_it); - } + auto path = filename + L"." + *ext; + auto loop = boost::range::find(params, L"LOOP") != params.end(); + auto start = core::get_param(L"SEEK", params, 0); + auto length = core::get_param(L"LENGTH", params, std::numeric_limits::max()); + auto filter_str = core::get_param(L"FILTER", params, L""); + + boost::replace_all(filter_str, L"DEINTERLACE", L"YADIF=0:-1"); + boost::replace_all(filter_str, L"DEINTERLACE_BOB", L"YADIF=1:-1"); - auto length_it = boost::find(params, L"LENGTH"); - if(length_it != params.end()) - { - if(++length_it != params.end()) - length = boost::lexical_cast(*length_it); - } - - std::wstring filter = L""; - auto filter_it = boost::find(params, L"FILTER"); - if(filter_it != params.end()) - { - if(++filter_it != params.end()) - filter = *filter_it; - } - - return make_safe(frame_factory, path, filter, loop, start, length); + return make_safe(frame_factory, path, filter_str, loop, start, length); } } \ No newline at end of file diff --git a/modules/oal/consumer/oal_consumer.cpp b/modules/oal/consumer/oal_consumer.cpp index 6fb766cfe..7186dc74c 100644 --- a/modules/oal/consumer/oal_consumer.cpp +++ b/modules/oal/consumer/oal_consumer.cpp @@ -125,7 +125,7 @@ public: safe_ptr create_oal_consumer(const std::vector& params) { - if(params.size() < 1 || params[0] != L"OAL") + if(params.size() < 1 || params[0] != L"AUDIO") return core::frame_consumer::empty(); return make_safe(); -- 2.39.2