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

Steve Lhomme robux4 at videolabs.io
Fri Apr 3 13:29:27 CEST 2015


Discard this patch. There's a better fix that doesn't disable
FF_THREAD_FRAME at all.

On Tue, Mar 31, 2015 at 12:16 PM, Steve Lhomme <robUx4 at videolabs.io> wrote:
> 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
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list