Ticket #421: yuv2rgb-vanilla-fix.patch

File yuv2rgb-vanilla-fix.patch, 2.6 kB (added by wiking, 3 months ago)

This file fixed yuv2rgb/bgr function but only for vanilla implementation

  • oggplay_yuv2rgb.c

    old new  
    357357    ptro2 = ptro; 
    358358    for (j = 0; j < yuv->y_width; j += 2) { 
    359359 
    360       short pr, pg, pb
     360      short pr, pg, pb, y
    361361      short r, g, b; 
    362362 
    363     //pr = ((128 + (ptrv[j/2] - 128) * 292) >> 8) - 16; /* 1.14 * 256 */ 
    364       pr = (-41344 + ptrv[j/2] * 292) >> 8; 
    365     //pg = ((128 - (ptru[j/2] - 128) * 101 - (ptrv[j/2] - 128) * 149) >> 8)-16; 
    366     //                                /* 0.395 & 0.581 */ 
    367       pg = (28032 - ptru[j/2] * 101 - ptrv[j/2] * 149) >> 8; 
    368     //pb = ((128 + (ptru[j/2] - 128) * 520) >> 8) - 16; /* 2.032 */ 
    369       pb = (-70528 + ptru[j/2] * 520) >> 8; 
     363      pr = (-56992 + ptrv[j/2] * 409) >> 8; 
     364      pg = (34784 - ptru[j/2] * 100 - ptrv[j/2] * 208) >> 8; 
     365      pb = (-70688 + ptru[j/2] * 516) >> 8; 
    370366 
    371       r = ptry[j] + pr; 
    372       g = ptry[j] + pg; 
    373       b = ptry[j] + pb; 
     367      y = 298*ptry[j] >> 8; 
     368      r = y + pr; 
     369      g = y + pg; 
     370      b = y + pb; 
    374371 
    375372      *ptro2++ = CLAMP(r); 
    376373      *ptro2++ = CLAMP(g); 
    377374      *ptro2++ = CLAMP(b); 
    378375      *ptro2++ = 255; 
    379376 
    380       r = ptry[j + 1] + pr; 
    381       g = ptry[j + 1] + pg; 
    382       b = ptry[j + 1] + pb; 
     377      y = 298*ptry[j + 1] >> 8; 
     378      r = y + pr; 
     379      g = y + pg; 
     380      b = y + pb; 
    383381 
    384382      *ptro2++ = CLAMP(r); 
    385383      *ptro2++ = CLAMP(g); 
     
    409407    ptro2 = ptro; 
    410408    for (j = 0; j < yuv->y_width; j += 2) { 
    411409 
    412       short pr, pg, pb
     410      short pr, pg, pb, y
    413411      short r, g, b; 
    414412 
    415     //pr = ((128 + (ptrv[j/2] - 128) * 292) >> 8) - 16; /* 1.14 * 256 */ 
    416       pr = (-41344 + ptrv[j/2] * 292) >> 8; 
    417     //pg = ((128 - (ptru[j/2] - 128) * 101 - (ptrv[j/2] - 128) * 149) >> 8)-16; 
    418     //                                /* 0.395 & 0.581 */ 
    419       pg = (28032 - ptru[j/2] * 101 - ptrv[j/2] * 149) >> 8; 
    420     //pb = ((128 + (ptru[j/2] - 128) * 520) >> 8) - 16; /* 2.032 */ 
    421       pb = (-70528 + ptru[j/2] * 520) >> 8; 
     413      pr = (-56992 + ptrv[j/2] * 409) >> 8; 
     414      pg = (34784 - ptru[j/2] * 100 - ptrv[j/2] * 208) >> 8; 
     415      pb = (-70688 + ptru[j/2] * 516) >> 8; 
    422416 
    423       r = ptry[j] + pr; 
    424       g = ptry[j] + pg; 
    425       b = ptry[j] + pb; 
     417      y = 298*ptry[j] >> 8; 
     418      r = y + pr; 
     419      g = y + pg; 
     420      b = y + pb; 
    426421 
    427422      *ptro2++ = CLAMP(b); 
    428423      *ptro2++ = CLAMP(g); 
    429424      *ptro2++ = CLAMP(r); 
    430425      *ptro2++ = 255; 
    431426 
    432       r = ptry[j + 1] + pr; 
    433       g = ptry[j + 1] + pg; 
    434       b = ptry[j + 1] + pb; 
     427      y = 298*ptry[j + 1] >> 8; 
     428      r = y + pr; 
     429      g = y + pg; 
     430      b = y + pb; 
    435431 
    436432      *ptro2++ = CLAMP(b); 
    437433      *ptro2++ = CLAMP(g);