From: ronag Date: Mon, 22 Aug 2011 11:27:09 +0000 (+0000) Subject: 2.0. parallel_yadif: Disable for % 64 != 0. X-Git-Tag: 2.0.1~75 X-Git-Url: https://git.sesse.net/?p=casparcg;a=commitdiff_plain;h=a9c35446e99247a3445e7c9f1633adcb30f22546 2.0. parallel_yadif: Disable for % 64 != 0. git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1265 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- diff --git a/modules/ffmpeg/producer/filter/filter.cpp b/modules/ffmpeg/producer/filter/filter.cpp index d2c3bd41f..58591093e 100644 --- a/modules/ffmpeg/producer/filter/filter.cpp +++ b/modules/ffmpeg/producer/filter/filter.cpp @@ -74,7 +74,6 @@ struct filter::implementation void push(const std::shared_ptr& frame) { - if(!graph_) { graph_.reset(avfilter_graph_alloc(), [](AVFilterGraph* p){avfilter_graph_free(&p);}); @@ -111,7 +110,7 @@ struct filter::implementation { auto filter_name = graph_->filters[n]->name; if(strstr(filter_name, "yadif") != 0) - parallel_yadif_ctx_ = make_parallel_yadif(graph_->filters[n]); + parallel_yadif_ctx_ = make_parallel_yadif(graph_->filters[n], frame->height); } } diff --git a/modules/ffmpeg/producer/filter/parallel_yadif.cpp b/modules/ffmpeg/producer/filter/parallel_yadif.cpp index b467bfae0..919528ca0 100644 --- a/modules/ffmpeg/producer/filter/parallel_yadif.cpp +++ b/modules/ffmpeg/producer/filter/parallel_yadif.cpp @@ -105,14 +105,17 @@ void return_parallel_yadif(void* func) parallel_line_func_pool.push(reinterpret_cast(func)); } -std::shared_ptr make_parallel_yadif(AVFilterContext* ctx) +std::shared_ptr make_parallel_yadif(AVFilterContext* ctx, size_t height) { + if(height % 64 != 0) + return std::shared_ptr(nullptr, return_parallel_yadif); + static boost::once_flag flag = BOOST_ONCE_INIT; boost::call_once(&init_pool, flag); YADIFContext* yadif = (YADIFContext*)ctx->priv; org_yadif_filter_line = yadif->filter_line; // Data race is not a problem. - + decltype(org_yadif_filter_line) func = nullptr; if(!parallel_line_func_pool.try_pop(func)) CASPAR_LOG(warning) << "Not enough scalable-yadif context instances. Running non-scalable"; diff --git a/modules/ffmpeg/producer/filter/parallel_yadif.h b/modules/ffmpeg/producer/filter/parallel_yadif.h index 44a0e8721..505ccc48f 100644 --- a/modules/ffmpeg/producer/filter/parallel_yadif.h +++ b/modules/ffmpeg/producer/filter/parallel_yadif.h @@ -6,6 +6,6 @@ struct AVFilterContext; namespace caspar { -std::shared_ptr make_parallel_yadif(AVFilterContext* ctx); +std::shared_ptr make_parallel_yadif(AVFilterContext* ctx, size_t height); } \ No newline at end of file