[vlc-commits] avcodec: disable frame multithreading with dxva2
Felix Abecassis
git at videolan.org
Mon Aug 25 12:17:05 CEST 2014
vlc | branch: master | Felix Abecassis <felix.abecassis at gmail.com> | Mon Aug 25 12:07:22 2014 +0200| [bf9b995528941436fbdfad6e60ce7af76f20ea2e] | committer: Felix Abecassis
avcodec: disable frame multithreading with dxva2
Fix #11930, #11693
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bf9b995528941436fbdfad6e60ce7af76f20ea2e
---
modules/codec/avcodec/video.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index d1fa89b..e75cc21 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -347,6 +347,21 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
# 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 )
p_dec->i_extra_picture_buffers = 2 * p_sys->p_context->thread_count;
#endif
More information about the vlc-commits
mailing list