]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2: tbb_avcodec: Added better check for thread slicing support.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 19 May 2011 14:27:18 +0000 (14:27 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 19 May 2011 14:27:18 +0000 (14:27 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@787 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/tbb_avcodec.cpp

index b1d68757c8dd849f592ef0d941319177215429e9..68c1bf676879f8cb7aadab2347d9186f1c91109a 100644 (file)
@@ -57,11 +57,8 @@ int thread_execute2(AVCodecContext* s, int (*func)(AVCodecContext* c2, void* arg
        }, arg, ret, count, 0);\r
 }\r
 \r
-int thread_init(AVCodecContext *s)\r
+void thread_init(AVCodecContext* s)\r
 {\r
-    if(!(s->thread_type & FF_THREAD_SLICE))           \r
-       return 0;    \r
-\r
        static const size_t MAX_THREADS = 16; // See mpegvideo.h\r
        static int dummy_opaque;\r
 \r
@@ -72,20 +69,21 @@ int thread_init(AVCodecContext *s)
     s->thread_count              = MAX_THREADS; // We are using a task-scheduler, so use as many "threads/tasks" as possible. \r
 \r
        CASPAR_LOG(info) << "Initialized ffmpeg tbb context.";\r
-\r
-    return 0;\r
 }\r
 \r
 void thread_free(AVCodecContext* s)\r
 {\r
        s->thread_opaque = nullptr;\r
+\r
        CASPAR_LOG(info) << "Released ffmpeg tbb context.";\r
 }\r
 \r
 int tbb_avcodec_open(AVCodecContext* avctx, AVCodec* codec)\r
 {\r
-       thread_init(avctx);\r
-       // ff_thread_init will not be executed since thread_opaque != nullptr.\r
+       avctx->thread_count = 1;\r
+       if((codec->capabilities & CODEC_CAP_SLICE_THREADS) && (avctx->thread_type & FF_THREAD_SLICE))\r
+               thread_init(avctx);\r
+       // ff_thread_init will not be executed since thread_opaque != nullptr || thread_count == 1.\r
        return avcodec_open(avctx, codec); \r
 }\r
 \r