diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2021-04-29 00:46:25 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2021-04-29 00:46:25 -0700 |
commit | fab459dd474511cb672e5690e1bd17692f34150e (patch) | |
tree | 1e41831925c80526e8457d5daa0b7cf566a671db | |
parent | 85e2c925f21bd27e25bc57b81050893e07080d51 (diff) |
yuv_utils: more cleanups
other than a div to shift coversion, this is just formatting
cleanups
-rw-r--r-- | src/rmd_yuv_utils.c | 95 |
1 files changed, 47 insertions, 48 deletions
diff --git a/src/rmd_yuv_utils.c b/src/rmd_yuv_utils.c index ec1b884..6570945 100644 --- a/src/rmd_yuv_utils.c +++ b/src/rmd_yuv_utils.c @@ -43,48 +43,46 @@ unsigned char *yblocks, void rmdMakeMatrices (void) { - int i; - - /* assuming 8-bit precision */ - float Yscale = 219.0, Yoffset = 16.0; - float Cscale = 224.0, Coffset = 128.0; - float RGBscale = 255.0; - - float r, g, b; - float yr, yg, yb; - float ur, ug, ub; - float vg, vb; /* vr intentionally missing */ - - /* as for ITU-R BT-601-6 specifications: */ - r = 0.299; - b = 0.114; - g = 1.0 - r - b; - - /* as a note, here are the coefficients - as for ITU-R BT-709 specifications: - r=0.2126; b=0.0722; g=1.0-r-b; */ - - yr = r * Yscale / RGBscale; - yg = g * Yscale / RGBscale; - yb = b * Yscale / RGBscale; - ur = ( -0.5 * r / ( 1 - b ) ) * Cscale / RGBscale; - ug = ( -0.5 * g / ( 1 - b ) ) * Cscale / RGBscale; - ub = ( 0.5 * Cscale / RGBscale); - /* vr = ub so UbVr = ub*i = vr*i */ - vg = ( -0.5 * g / ( 1 - r ) ) * Cscale / RGBscale; - vb = ( -0.5 * b / ( 1 - r ) ) * Cscale / RGBscale; - - for (i = 0; i < 256; i++) { - Yr[i] = (unsigned char) rmdRoundf( Yoffset + yr * i ); - Yg[i] = (unsigned char) rmdRoundf( yg * i ); - Yb[i] = (unsigned char) rmdRoundf( yb * i ); - - Ur[i] = (unsigned char) rmdRoundf( Coffset + ur * i ); - Ug[i] = (unsigned char) rmdRoundf( ug * i ); - UbVr[i] = (unsigned char) rmdRoundf( ub * i ); - - Vg[i] = (unsigned char) rmdRoundf( vg * i ); - Vb[i] = (unsigned char) rmdRoundf( Coffset + vb * i ); + /* assuming 8-bit precision */ + float Yscale = 219.0, Yoffset = 16.0; + float Cscale = 224.0, Coffset = 128.0; + float RGBscale = 255.0; + + float r, g, b; + float yr, yg, yb; + float ur, ug, ub; + float vg, vb; /* vr intentionally missing */ + + /* as for ITU-R BT-601-6 specifications: */ + r = 0.299; + b = 0.114; + g = 1.0 - r - b; + + /* as a note, here are the coefficients + as for ITU-R BT-709 specifications: + r=0.2126; b=0.0722; g=1.0-r-b; */ + + yr = r * Yscale / RGBscale; + yg = g * Yscale / RGBscale; + yb = b * Yscale / RGBscale; + ur = (-0.5 * r / (1 - b)) * Cscale / RGBscale; + ug = (-0.5 * g / (1 - b)) * Cscale / RGBscale; + ub = ( 0.5 * Cscale / RGBscale); + /* vr = ub so UbVr = ub*i = vr*i */ + vg = (-0.5 * g / (1 - r)) * Cscale / RGBscale; + vb = (-0.5 * b / (1 - r)) * Cscale / RGBscale; + + for (int i = 0; i < 256; i++) { + Yr[i] = (unsigned char)rmdRoundf(Yoffset + yr * i); + Yg[i] = (unsigned char)rmdRoundf(yg * i); + Yb[i] = (unsigned char)rmdRoundf(yb * i); + + Ur[i] = (unsigned char)rmdRoundf(Coffset + ur * i); + Ug[i] = (unsigned char)rmdRoundf(ug * i); + UbVr[i] = (unsigned char)rmdRoundf(ub * i); + + Vg[i] = (unsigned char)rmdRoundf(vg * i); + Vb[i] = (unsigned char)rmdRoundf(Coffset + vb * i); } } @@ -284,7 +282,7 @@ static inline int blocknum(int xv, int yv, int widthv, int blocksize) ((y_tm >> 1) * (yuv)->uv_stride), \ *yuv_V = (yuv)->v + (x_tm >> 1) + \ ((y_tm >> 1) * (yuv)->uv_stride), \ - *_ur = Ur, *_ug = Ug, *_ubvr = UbVr, \ + *_ur = Ur, *_ug = Ug, *_ubvr = UbVr, \ *_vg = Vg, *_vb = Vb; \ \ register u_int##__depth__##_t *datapi = (u_int##__depth__##_t *)data, \ @@ -452,10 +450,11 @@ static inline unsigned char avg_4_pixels( unsigned char *data_array, int i_tm, int offset) { - return ((data_array[(k_tm*width_img+i_tm)*RMD_ULONG_SIZE_T+offset]+ - data_array[((k_tm-1)*width_img+i_tm)*RMD_ULONG_SIZE_T+offset]+ - data_array[(k_tm*width_img+i_tm-1)*RMD_ULONG_SIZE_T+offset]+ - data_array[((k_tm-1)*width_img+i_tm-1)*RMD_ULONG_SIZE_T+offset])/4); + return (( data_array[(k_tm * width_img + i_tm) * RMD_ULONG_SIZE_T + offset] + + data_array[((k_tm - 1) * width_img + i_tm) * RMD_ULONG_SIZE_T + offset] + + data_array[(k_tm * width_img + i_tm - 1) * RMD_ULONG_SIZE_T + offset] + + data_array[((k_tm - 1) * width_img + i_tm - 1) * RMD_ULONG_SIZE_T + offset] + ) >> 2); } void rmdXFixesPointerToYuv( yuv_buffer *yuv, @@ -505,7 +504,7 @@ void rmdXFixesPointerToYuv( yuv_buffer *yuv, ((Ur[avg2] + Ug[avg1] + UbVr[avg0]) % (UCHAR_MAX + 1)) * avg3) / UCHAR_MAX; - yuv->v[idx]= + yuv->v[idx] = (yuv->v[idx] * (UCHAR_MAX - avg3) + ((UbVr[avg2] + Vg[avg1] + Vb[avg0]) % (UCHAR_MAX + 1)) * avg3) / UCHAR_MAX; |