diff options
-rw-r--r-- | src/video_out/alphablend.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/video_out/alphablend.c b/src/video_out/alphablend.c index 9275db9f8..2f966f7f0 100644 --- a/src/video_out/alphablend.c +++ b/src/video_out/alphablend.c @@ -1014,21 +1014,25 @@ void blend_yuy2 (uint8_t * dst_img, vo_overlay_t * img_overl, if (o && mask) { l = rlelen>>1; - if( !(x & 1) ) { - yuy2 = my_clut[clr].y + (my_clut[clr].cb << 8) + - (my_clut[clr].y << 16) + (my_clut[clr].cr << 24); + if( x & 1 ) { + *(((uint8_t *)&yuy2) + 0) = my_clut[clr].y; + *(((uint8_t *)&yuy2) + 1) = my_clut[clr].cb; + *(((uint8_t *)&yuy2) + 2) = my_clut[clr].y; + *(((uint8_t *)&yuy2) + 3) = my_clut[clr].cr; } else { - yuy2 = my_clut[clr].y + (my_clut[clr].cr << 8) + - (my_clut[clr].y << 16) + (my_clut[clr].cb << 24); + *(((uint8_t *)&yuy2) + 0) = my_clut[clr].y; + *(((uint8_t *)&yuy2) + 1) = my_clut[clr].cr; + *(((uint8_t *)&yuy2) + 2) = my_clut[clr].y; + *(((uint8_t *)&yuy2) + 3) = my_clut[clr].cb; } if (o >= 15) { while(l--) { - *((uint16_t *)dst)++ = yuy2 >> 16; - *((uint16_t *)dst)++ = yuy2 & 0xffff; + *((uint16_t *)dst)++ = *(((uint16_t *)&yuy2) + 0); + *((uint16_t *)dst)++ = *(((uint16_t *)&yuy2) + 1); } if(rlelen & 1) - *((uint16_t *)dst)++ = yuy2 & 0xffff; + *((uint16_t *)dst)++ = *(((uint16_t *)&yuy2) + 0); } else { if( l ) { mem_blend32(dst, (uint8_t *)&yuy2, o, l); @@ -1036,9 +1040,9 @@ void blend_yuy2 (uint8_t * dst_img, vo_overlay_t * img_overl, } if(rlelen & 1) { - *dst = BLEND_BYTE(*dst, *((uint8_t *)&yuy2), o); + *dst = BLEND_BYTE(*dst, *(((uint8_t *)&yuy2) + 0), o); dst++; - *dst = BLEND_BYTE(*dst, *((uint8_t *)&yuy2+1), o); + *dst = BLEND_BYTE(*dst, *(((uint8_t *)&yuy2) + 1), o); dst++; } } |