]> git.sesse.net Git - casparcg/commitdiff
2.0. parallel_yadif: Disable for % 64 != 0.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 22 Aug 2011 11:27:09 +0000 (11:27 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 22 Aug 2011 11:27:09 +0000 (11:27 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1265 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/filter/filter.cpp
modules/ffmpeg/producer/filter/parallel_yadif.cpp
modules/ffmpeg/producer/filter/parallel_yadif.h

index d2c3bd41fee7a994e9c7b7f65167ed6bf1aa61a4..58591093e31edeb1e9798e392eb620a7e89494e1 100644 (file)
@@ -74,7 +74,6 @@ struct filter::implementation
 \r
        void push(const std::shared_ptr<AVFrame>& frame)\r
        {               \r
-\r
                if(!graph_)\r
                {\r
                        graph_.reset(avfilter_graph_alloc(), [](AVFilterGraph* p){avfilter_graph_free(&p);});\r
@@ -111,7 +110,7 @@ struct filter::implementation
                        {\r
                                auto filter_name = graph_->filters[n]->name;\r
                                if(strstr(filter_name, "yadif") != 0)\r
-                                       parallel_yadif_ctx_ = make_parallel_yadif(graph_->filters[n]);\r
+                                       parallel_yadif_ctx_ = make_parallel_yadif(graph_->filters[n], frame->height);\r
                        }\r
                }\r
        \r
index b467bfae0e9cf694ecdae1759cc21270ccfd15e3..919528ca0448907bba4c76f9d74bab43cbba64e9 100644 (file)
@@ -105,14 +105,17 @@ void return_parallel_yadif(void* func)
                parallel_line_func_pool.push(reinterpret_cast<decltype(fs[0])>(func));\r
 }\r
 \r
-std::shared_ptr<void> make_parallel_yadif(AVFilterContext* ctx)\r
+std::shared_ptr<void> make_parallel_yadif(AVFilterContext* ctx, size_t height)\r
 {\r
+       if(height % 64 != 0)\r
+               return std::shared_ptr<void>(nullptr, return_parallel_yadif);\r
+\r
        static boost::once_flag flag = BOOST_ONCE_INIT;\r
        boost::call_once(&init_pool, flag);\r
 \r
        YADIFContext* yadif = (YADIFContext*)ctx->priv;\r
        org_yadif_filter_line = yadif->filter_line; // Data race is not a problem.\r
-\r
+       \r
        decltype(org_yadif_filter_line) func = nullptr;\r
        if(!parallel_line_func_pool.try_pop(func))      \r
                CASPAR_LOG(warning) << "Not enough scalable-yadif context instances. Running non-scalable";\r
index 44a0e87211003c0776090847106e53689e476f35..505ccc48fbdc8da15f7417a4f07a937b369ed320 100644 (file)
@@ -6,6 +6,6 @@ struct AVFilterContext;
 \r
 namespace caspar {\r
        \r
-std::shared_ptr<void> make_parallel_yadif(AVFilterContext* ctx);\r
+std::shared_ptr<void> make_parallel_yadif(AVFilterContext* ctx, size_t height);\r
 \r
 }
\ No newline at end of file