Commit f97a4cf8 authored by Felix Abecassis's avatar Felix Abecassis Committed by Jean-Baptiste Kempf

avcodec: disable frame multithreading with dxva2

Fix #11930, #11693

(cherry picked from commit bf9b995528941436fbdfad6e60ce7af76f20ea2e)
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 16bc6fb1
...@@ -351,6 +351,21 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context, ...@@ -351,6 +351,21 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
# endif # endif
} }
/* 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" ) )
{
msg_Warn( p_dec, "threaded frame decoding is not compatible with DXVA2, disabled" );
p_sys->p_context->thread_type &= ~FF_THREAD_FRAME;
}
free( avcodec_hw );
# endif
if( p_sys->p_context->thread_type & FF_THREAD_FRAME ) if( p_sys->p_context->thread_type & FF_THREAD_FRAME )
p_dec->i_extra_picture_buffers = 2 * p_sys->p_context->thread_count; p_dec->i_extra_picture_buffers = 2 * p_sys->p_context->thread_count;
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment