summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPetri Hintukainen <phintuka@users.sourceforge.net>2014-04-22 15:28:42 +0300
committerPetri Hintukainen <phintuka@users.sourceforge.net>2014-04-22 15:28:42 +0300
commit59a458e756ee8dd7b99f6180047de1d4cf13341a (patch)
tree55e1b60392de0d24a654f75303735630bc17051d /src
parente3ee41ccae05d06258d37a9643c091720e14f600 (diff)
downloadxine-lib-59a458e756ee8dd7b99f6180047de1d4cf13341a.tar.gz
xine-lib-59a458e756ee8dd7b99f6180047de1d4cf13341a.tar.bz2
fix aliasing in x11osd.c
Diffstat (limited to 'src')
-rw-r--r--src/video_out/x11osd.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/video_out/x11osd.c b/src/video_out/x11osd.c
index 95fb0d347..4a362c9c0 100644
--- a/src/video_out/x11osd.c
+++ b/src/video_out/x11osd.c
@@ -480,26 +480,30 @@ void x11osd_blend(x11osd *osd, vo_overlay_t *overlay)
if (overlay->rle[i].color > max_palette_colour[use_clip_palette]) {
int j;
- clut_t *src_clut;
+ uint32_t *src_color;
uint8_t *src_trans;
if (use_clip_palette) {
- src_clut = (clut_t *)&overlay->hili_color;
+ src_color = overlay->hili_color;
src_trans = (uint8_t *)&overlay->hili_trans;
}
else {
- src_clut = (clut_t *)&overlay->color;
+ src_color = overlay->color;
src_trans = (uint8_t *)&overlay->trans;
}
for (j=max_palette_colour[use_clip_palette]+1; j<=overlay->rle[i].color; j++) {
if (src_trans[j]) {
+ union {
+ uint32_t u32;
+ clut_t c;
+ } tmp = { src_color[j] };
+
if (1) {
XColor xcolor;
int y, u, v, r, g, b;
-
- y = saturate(src_clut[j].y, 16, 235);
- u = saturate(src_clut[j].cb, 16, 240);
- v = saturate(src_clut[j].cr, 16, 240);
+ y = saturate(tmp.c.y, 16, 235);
+ u = saturate(tmp.c.cb, 16, 240);
+ v = saturate(tmp.c.cr, 16, 240);
y = (9 * y) / 8;
r = y + (25 * v) / 16 - 218;
xcolor.red = (65536 * saturate(r, 0, 255)) / 256;
@@ -515,7 +519,7 @@ void x11osd_blend(x11osd *osd, vo_overlay_t *overlay)
palette[use_clip_palette][j] = xcolor.pixel;
}
else {
- if (src_clut[j].y > 127) {
+ if (tmp.c.y > 127) {
palette[use_clip_palette][j] = WhitePixel(osd->display, osd->screen);
}
else {