openbsd-ports/multimedia/xine-lib/patches/patch-src_xine-engine_alphablend_c
ajacoutot 204e300af1 Merge several bugfixes from upstream.
from Brad (maintainer)
2012-04-28 09:14:33 +00:00

63 lines
2.9 KiB
Plaintext

$OpenBSD: patch-src_xine-engine_alphablend_c,v 1.1 2012/04/28 09:14:33 ajacoutot Exp $
Make OSD blend buffers 16-byte aligned.
--- src/xine-engine/alphablend.c.orig Thu Apr 26 15:16:24 2012
+++ src/xine-engine/alphablend.c Thu Apr 26 15:17:47 2012
@@ -1114,7 +1114,10 @@ static uint8_t *(*blend_yuv_grow_extra_data(alphablend
uint8_t *data[ 3 ][ 2 ];
} *header = (struct header_s *)extra_data->buffer;
- size_t needed_buffer_size = sizeof (*header) + osd_width * sizeof (uint8_t[ 3 ][ 2 ]);
+ /* align buffers to 16 bytes */
+ size_t header_size = (sizeof(*header) + 15) & (~15);
+ size_t alloc_width = (osd_width + 15) & (~15);
+ size_t needed_buffer_size = 16 + header_size + alloc_width * sizeof (uint8_t[ 3 ][ 2 ]);
if (extra_data->buffer_size < needed_buffer_size) {
@@ -1133,12 +1136,12 @@ static uint8_t *(*blend_yuv_grow_extra_data(alphablend
header->id = ME_FOURCC('y', 'u', 'v', 0);
header->max_width = osd_width;
- header->data[ 0 ][ 0 ] = ((uint8_t *)extra_data->buffer) + sizeof (*header);
- header->data[ 0 ][ 1 ] = header->data[ 0 ][ 0 ] + osd_width;
- header->data[ 1 ][ 0 ] = header->data[ 0 ][ 1 ] + osd_width;
- header->data[ 1 ][ 1 ] = header->data[ 1 ][ 0 ] + osd_width;
- header->data[ 2 ][ 0 ] = header->data[ 1 ][ 1 ] + osd_width;
- header->data[ 2 ][ 1 ] = header->data[ 2 ][ 0 ] + osd_width;
+ header->data[ 0 ][ 0 ] = ((uint8_t *)extra_data->buffer) + header_size;
+ header->data[ 0 ][ 1 ] = header->data[ 0 ][ 0 ] + alloc_width;
+ header->data[ 1 ][ 0 ] = header->data[ 0 ][ 1 ] + alloc_width;
+ header->data[ 1 ][ 1 ] = header->data[ 1 ][ 0 ] + alloc_width;
+ header->data[ 2 ][ 0 ] = header->data[ 1 ][ 1 ] + alloc_width;
+ header->data[ 2 ][ 1 ] = header->data[ 2 ][ 0 ] + alloc_width;
}
return &(header->data);
@@ -1556,7 +1559,10 @@ static uint8_t *(*blend_yuy2_grow_extra_data(alphablen
uint8_t *data[ 3 ];
} *header = (struct header_s *)extra_data->buffer;
- size_t needed_buffer_size = sizeof (*header) + osd_width * sizeof (uint8_t[ 3 ]);
+ /* align buffers to 16 bytes */
+ size_t header_size = (sizeof(*header) + 15) & (~15);
+ size_t alloc_width = (osd_width + 15) & (~15);
+ size_t needed_buffer_size = 16 + header_size + alloc_width * sizeof (uint8_t[ 3 ]);
if (extra_data->buffer_size < needed_buffer_size) {
@@ -1575,9 +1581,9 @@ static uint8_t *(*blend_yuy2_grow_extra_data(alphablen
header->id = ME_FOURCC('y', 'u', 'y', '2');
header->max_width = osd_width;
- header->data[ 0 ] = ((uint8_t *)extra_data->buffer) + sizeof (*header);
- header->data[ 1 ] = header->data[ 0 ] + osd_width;
- header->data[ 2 ] = header->data[ 1 ] + osd_width;
+ header->data[ 0 ] = ((uint8_t *)extra_data->buffer) + header_size;
+ header->data[ 1 ] = header->data[ 0 ] + alloc_width;
+ header->data[ 2 ] = header->data[ 1 ] + alloc_width;
}
return &(header->data);