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

Rémi Denis-Courmont remi at remlab.net
Wed Apr 1 13:27:38 CEST 2015


Le 2015-03-31 13:16, Steve Lhomme a écrit :
> Fixes #14054

This will leave threading enabled if the video track starts with an 
hardware-unsupported profile, then downgrades to a hardware-supported 
profile (e.g. due to new H.264 SPS). If DxVA2 is compatible with 
threading, then you should remove the whole ifdef. If DxVA2 is not 
compatible with threading, then the patch is wrong.

> ---
>  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 )

-- 
Rémi Denis-Courmont



More information about the vlc-devel mailing list