mirror of https://git.ffmpeg.org/ffmpeg.git
sws/yuv2rgb: avoid a few ub on signed left shifts
This commit is contained in:
parent
5156578d1f
commit
f9987464cf
|
@ -824,18 +824,18 @@ av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4],
|
|||
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->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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue