[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