204e300af1
from Brad (maintainer)
63 lines
2.9 KiB
Plaintext
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);
|