Commit 3e949628 authored by Laurent Aimar's avatar Laurent Aimar Committed by Jean-Baptiste Kempf

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: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 0e9bb2b6
......@@ -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 */
......
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