[vlc-devel] [PATCH] avcodec: only disable frame threading if DXVA2 is likely to be used

Steve Lhomme robUx4 at videolabs.io
Tue Mar 31 12:16:06 CEST 2015


Fixes #14054
---
 modules/codec/avcodec/video.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index 381fe62..379bc62 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -396,19 +396,18 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
             break;
     }
 
+# if defined(_WIN32)
     /* Workaround: frame multithreading is not compatible with
      * DXVA2. When a frame is being copied to host memory, the frame
      * is locked and cannot be used as a reference frame
      * simultaneously and thus decoding fails for some frames. This
      * causes major image corruption. */
-# if defined(_WIN32)
-    char *avcodec_hw = var_InheritString( p_dec, "avcodec-hw" );
-    if( avcodec_hw == NULL || strcasecmp( avcodec_hw, "none" ) )
+    enum PixelFormat test_formats[] = { AV_PIX_FMT_DXVA2_VLD, AV_PIX_FMT_NONE };
+    if( AV_PIX_FMT_DXVA2_VLD == ffmpeg_GetFormat( p_context, &test_formats ) )
     {
         msg_Warn( p_dec, "threaded frame decoding is not compatible with DXVA2, disabled" );
         p_context->thread_type &= ~FF_THREAD_FRAME;
     }
-    free( avcodec_hw );
 # endif
 
     if( p_context->thread_type & FF_THREAD_FRAME )
-- 
2.3.2




More information about the vlc-devel mailing list