summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Eric Hameleers <alien@slackware.com>2010-06-13 19:48:47 +0000
committer Eric Hameleers <alien@slackware.com>2010-06-13 19:48:47 +0000
commit7688f428c1c64aa7c8df6584b5ade0b2fdabb2df (patch)
tree69823dc0bbc2810751377507e97fbd6f035b9f53
parent235f2afb4a6b951f73e0feb42db64abd5ca26711 (diff)
downloadasb-7688f428c1c64aa7c8df6584b5ade0b2fdabb2df.tar.gz
asb-7688f428c1c64aa7c8df6584b5ade0b2fdabb2df.tar.xz
Initial revision
-rw-r--r--vlc/build/vlc-1.1.0.vaapi.patch127
1 files changed, 127 insertions, 0 deletions
diff --git a/vlc/build/vlc-1.1.0.vaapi.patch b/vlc/build/vlc-1.1.0.vaapi.patch
new file mode 100644
index 00000000..74c0b3a1
--- /dev/null
+++ b/vlc/build/vlc-1.1.0.vaapi.patch
@@ -0,0 +1,127 @@
+From: Laurent Aimar <fenrir@videolan.org>
+Date: Sat, 12 Jun 2010 23:25:43 +0000 (+0200)
+Subject: Fixed potential unaligned access in vaapi/dxva2 picture copy.
+X-Git-Url: http://git.videolan.org/?p=vlc%2Fvlc-1.1.git;a=commitdiff_plain;h=3e949628bdd9fd17a6b43d612f70902a48d92804
+
+Fixed potential unaligned access in vaapi/dxva2 picture copy.
+
+It (probably) happens only when the video is non mod 16, or non mod 32
+with YV12 hardware surface.
+(cherry picked from commit 957409b26fea130c93c740dbb1a032b1e7624794)
+
+Close #3606
+
+Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+---
+
+diff --git a/modules/codec/avcodec/copy.c b/modules/codec/avcodec/copy.c
+index 6bc0d82..9c9a44b 100644
+--- a/modules/codec/avcodec/copy.c
++++ b/modules/codec/avcodec/copy.c
+@@ -63,7 +63,6 @@
+ */
+ static void CopyFromUswc(uint8_t *dst, size_t dst_pitch,
+ const uint8_t *src, size_t src_pitch,
+- unsigned unaligned,
+ unsigned width, unsigned height,
+ unsigned cpu)
+ {
+@@ -71,6 +70,7 @@ static void CopyFromUswc(uint8_t *dst, size_t dst_pitch,
+
+ ASM_SSE2(cpu, "mfence");
+ for (unsigned y = 0; y < height; y++) {
++ const unsigned unaligned = (intptr_t)src & 0x0f;
+ unsigned x;
+
+ for (x = 0; x < unaligned; x++)
+@@ -237,13 +237,11 @@ static void CopyPlane(uint8_t *dst, size_t dst_pitch, const uint8_t *src, size_t
+ assert(hstep > 0);
+
+ for (unsigned y = 0; y < height; y += hstep) {
+- const unsigned unaligned = (intptr_t)src & 0x0f;
+ const unsigned hblock = __MIN(hstep, height - y);
+
+ /* Copy a bunch of line into our cache */
+ CopyFromUswc(cache, w16,
+ src, src_pitch,
+- unaligned,
+ width, hblock, cpu);
+
+ /* Copy from our cache to the destination */
+@@ -270,13 +268,11 @@ static void SplitPlanes(uint8_t *dstu, size_t dstu_pitch,
+ assert(hstep > 0);
+
+ for (unsigned y = 0; y < height; y += hstep) {
+- const unsigned unaligned = (intptr_t)src & 0x0f;
+ const unsigned hblock = __MIN(hstep, height - y);
+
+ /* Copy a bunch of line into our cache */
+ CopyFromUswc(cache, w2_16,
+ src, src_pitch,
+- unaligned,
+ 2*width, hblock, cpu);
+
+ /* Copy from our cache to the destination */
+
+From: Laurent Aimar <fenrir@videolan.org>
+Date: Sat, 12 Jun 2010 23:41:11 +0000 (+0200)
+Subject: Workaround a potential segfault when using VAAPI/DXVA2 (close #3606).
+X-Git-Url: http://git.videolan.org/?p=vlc%2Fvlc-1.1.git;a=commitdiff_plain;h=f134a12a7469c003ba95177dc23e65c70a4a5a72
+
+Workaround a potential segfault when using VAAPI/DXVA2 (close #3606).
+
+It seems that some avcodec decoders release frames even after being flushed.
+
+Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
+---
+
+diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
+index 230010d..bc37e12 100644
+--- a/modules/codec/avcodec/video.c
++++ b/modules/codec/avcodec/video.c
+@@ -725,7 +725,10 @@ void EndVideoDec( decoder_t *p_dec )
+ if( p_sys->p_ff_pic ) av_free( p_sys->p_ff_pic );
+
+ if( p_sys->p_va )
++ {
+ vlc_va_Delete( p_sys->p_va );
++ p_sys->p_va = NULL;
++ }
+ }
+
+ /*****************************************************************************
+@@ -1079,25 +1082,24 @@ static void ffmpeg_ReleaseFrameBuf( struct AVCodecContext *p_context,
+ if( p_sys->p_va )
+ {
+ vlc_va_Release( p_sys->p_va, p_ff_pic );
+-
+- /* */
+- for( int i = 0; i < 4; i++ )
+- p_ff_pic->data[i] = NULL;
+ }
+ else if( !p_ff_pic->opaque )
+ {
+- avcodec_default_release_buffer( p_context, p_ff_pic );
++ /* We can end up here without the AVFrame being allocated by
++ * avcodec_default_get_buffer() if VA is used and the frame is
++ * released when the decoder is closed
++ */
++ if( p_ff_pic->type == FF_BUFFER_TYPE_INTERNAL )
++ avcodec_default_release_buffer( p_context, p_ff_pic );
+ }
+ else
+ {
+ picture_t *p_pic = (picture_t*)p_ff_pic->opaque;
+
+ decoder_UnlinkPicture( p_dec, p_pic );
+-
+- /* */
+- for( int i = 0; i < 4; i++ )
+- p_ff_pic->data[i] = NULL;
+ }
++ for( int i = 0; i < 4; i++ )
++ p_ff_pic->data[i] = NULL;
+ }
+
+ static void ffmpeg_NextPts( decoder_t *p_dec )
+