X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libswscale%2Fyuv2rgb.c;h=62abb7df8f48e988a756f83b03177bd8d6bcca70;hb=b3dc51dd571f0852d47e67c4c02fc7eb73720059;hp=3671fe342fcf14da2f828249ab7cf055ec759e99;hpb=470bfab470893d45328f4e6e25d60b89c9af1abe;p=ffmpeg diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c index 3671fe342fc..62abb7df8f4 100644 --- a/libswscale/yuv2rgb.c +++ b/libswscale/yuv2rgb.c @@ -817,25 +817,25 @@ av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], c->uOffset = 0x0400040004000400LL; c->vOffset = 0x0400040004000400LL; - c->yCoeff = roundToInt16(cy * 8192) * 0x0001000100010001ULL; - c->vrCoeff = roundToInt16(crv * 8192) * 0x0001000100010001ULL; - c->ubCoeff = roundToInt16(cbu * 8192) * 0x0001000100010001ULL; - c->vgCoeff = roundToInt16(cgv * 8192) * 0x0001000100010001ULL; - c->ugCoeff = roundToInt16(cgu * 8192) * 0x0001000100010001ULL; - c->yOffset = roundToInt16(oy * 8) * 0x0001000100010001ULL; - - c->yuv2rgb_y_coeff = (int16_t)roundToInt16(cy << 13); - c->yuv2rgb_y_offset = (int16_t)roundToInt16(oy << 9); - c->yuv2rgb_v2r_coeff = (int16_t)roundToInt16(crv << 13); - c->yuv2rgb_v2g_coeff = (int16_t)roundToInt16(cgv << 13); - c->yuv2rgb_u2g_coeff = (int16_t)roundToInt16(cgu << 13); - c->yuv2rgb_u2b_coeff = (int16_t)roundToInt16(cbu << 13); + c->yCoeff = roundToInt16(cy * (1 << 13)) * 0x0001000100010001ULL; + c->vrCoeff = roundToInt16(crv * (1 << 13)) * 0x0001000100010001ULL; + c->ubCoeff = roundToInt16(cbu * (1 << 13)) * 0x0001000100010001ULL; + c->vgCoeff = roundToInt16(cgv * (1 << 13)) * 0x0001000100010001ULL; + c->ugCoeff = roundToInt16(cgu * (1 << 13)) * 0x0001000100010001ULL; + c->yOffset = roundToInt16(oy * (1 << 3)) * 0x0001000100010001ULL; + + c->yuv2rgb_y_coeff = (int16_t)roundToInt16(cy * (1 << 13)); + c->yuv2rgb_y_offset = (int16_t)roundToInt16(oy * (1 << 9)); + c->yuv2rgb_v2r_coeff = (int16_t)roundToInt16(crv * (1 << 13)); + c->yuv2rgb_v2g_coeff = (int16_t)roundToInt16(cgv * (1 << 13)); + c->yuv2rgb_u2g_coeff = (int16_t)roundToInt16(cgu * (1 << 13)); + c->yuv2rgb_u2b_coeff = (int16_t)roundToInt16(cbu * (1 << 13)); //scale coefficients by cy - crv = ((crv << 16) + 0x8000) / FFMAX(cy, 1); - cbu = ((cbu << 16) + 0x8000) / FFMAX(cy, 1); - cgu = ((cgu << 16) + 0x8000) / FFMAX(cy, 1); - cgv = ((cgv << 16) + 0x8000) / FFMAX(cy, 1); + crv = ((crv * (1 << 16)) + 0x8000) / FFMAX(cy, 1); + cbu = ((cbu * (1 << 16)) + 0x8000) / FFMAX(cy, 1); + cgu = ((cgu * (1 << 16)) + 0x8000) / FFMAX(cy, 1); + cgv = ((cgv * (1 << 16)) + 0x8000) / FFMAX(cy, 1); av_freep(&c->yuvTable);