[vlc-commits] avcodec: simplify thread support checks

Rémi Denis-Courmont git at videolan.org
Fri Jul 19 18:29:41 CEST 2013


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Jul 19 19:18:38 2013 +0300| [0c24ccc0d82940553467c7226b3c40ba2ad41159] | committer: Rémi Denis-Courmont

avcodec: simplify thread support checks

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0c24ccc0d82940553467c7226b3c40ba2ad41159
---

 modules/codec/avcodec/video.c |   41 ++++++++++++++---------------------------
 1 file changed, 14 insertions(+), 27 deletions(-)

diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index 2631920..3e10808 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -318,6 +318,7 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
 
     /* Always use our get_buffer wrapper so we can calculate the
      * PTS correctly */
+    p_sys->p_context->get_format = ffmpeg_GetFormat;
     p_sys->p_context->get_buffer = ffmpeg_GetFrameBuf;
     p_sys->p_context->reget_buffer = avcodec_default_reget_buffer;
     p_sys->p_context->release_buffer = ffmpeg_ReleaseFrameBuf;
@@ -337,44 +338,30 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
     i_thread_count = __MIN( i_thread_count, 16 );
     msg_Dbg( p_dec, "allowing %d thread(s) for decoding", i_thread_count );
     p_sys->p_context->thread_count = i_thread_count;
-
-    if( i_codec_id == AV_CODEC_ID_MPEG4 )
-        p_sys->p_context->thread_count = 1;
-
     p_sys->p_context->thread_safe_callbacks = true;
-#endif
 
-    char *hw = var_CreateGetString( p_dec, "avcodec-hw" ); /* FIXME */
-    if( (hw == NULL || strcasecmp( hw, "none" )) &&
-        (i_codec_id == AV_CODEC_ID_MPEG1VIDEO || i_codec_id == AV_CODEC_ID_MPEG2VIDEO ||
-         i_codec_id == AV_CODEC_ID_MPEG4 || i_codec_id == AV_CODEC_ID_H263 ||
-         i_codec_id == AV_CODEC_ID_H264 ||
-         i_codec_id == AV_CODEC_ID_VC1 || i_codec_id == AV_CODEC_ID_WMV3) )
+    switch( i_codec_id )
     {
-#if defined(HAVE_AVCODEC_MT)
+        case AV_CODEC_ID_MPEG4:
+        case AV_CODEC_ID_H263:
+            p_sys->p_context->thread_type = 0;
+            break;
+        case AV_CODEC_ID_MPEG1VIDEO:
+        case AV_CODEC_ID_MPEG2VIDEO:
+            p_sys->p_context->thread_type &= ~FF_THREAD_SLICE;
+            /* fall through */
 # if (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 1, 0))
-        if( p_sys->p_context->thread_type & FF_THREAD_FRAME )
-        {
-            msg_Warn( p_dec, "threaded frame decoding is not compatible with avcodec-hw, disabled" );
+        case AV_CODEC_ID_H264:
+        case AV_CODEC_ID_VC1:
+        case AV_CODEC_ID_WMV3:
             p_sys->p_context->thread_type &= ~FF_THREAD_FRAME;
-        }
 # endif
-        if( ( p_sys->p_context->thread_type & FF_THREAD_SLICE ) &&
-            ( i_codec_id == AV_CODEC_ID_MPEG1VIDEO || i_codec_id == AV_CODEC_ID_MPEG2VIDEO ) )
-        {
-            msg_Warn( p_dec, "threaded slice decoding is not compatible with avcodec-hw, disabled" );
-            p_sys->p_context->thread_type &= ~FF_THREAD_SLICE;
-        }
-#endif
-        p_sys->p_context->get_format = ffmpeg_GetFormat;
     }
-    free( hw );
-#ifdef HAVE_AVCODEC_MT
+
     if( p_sys->p_context->thread_type & FF_THREAD_FRAME )
         p_dec->i_extra_picture_buffers = 2 * p_sys->p_context->thread_count;
 #endif
 
-
     /* ***** misc init ***** */
     p_sys->i_pts = VLC_TS_INVALID;
     p_sys->b_has_b_frames = false;



More information about the vlc-commits mailing list