summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2020-11-08 23:37:24 -0800
committerVito Caputo <vcaputo@pengaru.com>2020-11-08 23:37:24 -0800
commit1a06acc0e75eacb6f284999e7530b729b3cb261c (patch)
tree79053d3101949cb51a196447eb0f463f7408173c
parentf910449154719024f274be9fad1046f26cef457c (diff)
yuv_utils: fixup yuv chroma offset/stride math
hopefully this is is all of it, will need more testing I noticed during some non-full-shots tests that the dirty areas didn't seem to be getting rounded up properly so my single pixel window border's color was sometimes omitted on the right edge and bottom...
-rw-r--r--src/rmd_yuv_utils.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/rmd_yuv_utils.c b/src/rmd_yuv_utils.c
index 21bce16..7deef4e 100644
--- a/src/rmd_yuv_utils.c
+++ b/src/rmd_yuv_utils.c
@@ -197,10 +197,10 @@ static inline int blocknum(int xv, int yv, int widthv, int blocksize)
__depth__) { \
\
register u_int##__depth__##_t t_val; \
- register unsigned char *yuv_U = (yuv)->u + x_tm / 2 + \
- (y_tm * (yuv)->uv_width) / 2, \
- *yuv_V = (yuv)->v + x_tm / 2 + \
- (y_tm * (yuv)->uv_width) / 2, \
+ register unsigned char *yuv_U = (yuv)->u + (x_tm >> 1) + \
+ (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, \
*_vg = Vg, *_vb = Vb; \
register u_int##__depth__##_t *datapi = (u_int##__depth__##_t *)data, \
@@ -228,8 +228,8 @@ static inline int blocknum(int xv, int yv, int widthv, int blocksize)
yuv_V++; \
} \
\
- yuv_U += ((yuv)->y_stride - (width_tm - w_odd * 2)) >> 1; \
- yuv_V += ((yuv)->y_stride - (width_tm - w_odd * 2)) >> 1; \
+ yuv_U += ((yuv)->uv_stride - ((width_tm - w_odd * 2) >> 1)); \
+ yuv_V += ((yuv)->uv_stride - ((width_tm - w_odd * 2) >> 1)); \
\
datapi += width_tm + w_odd; \
if (sampling == __PXL_AVERAGE) \
@@ -280,10 +280,10 @@ static inline int blocknum(int xv, int yv, int widthv, int blocksize)
__depth__) { \
\
register u_int##__depth__##_t t_val; \
- register unsigned char *yuv_U = (yuv)->u + x_tm / 2 + \
- (y_tm * (yuv)->uv_width) / 2, \
- *yuv_V = (yuv)->v + x_tm / 2 + \
- (y_tm * (yuv)->uv_width) / 2, \
+ register unsigned char *yuv_U = (yuv)->u + (x_tm >> 1) + \
+ ((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, \
*_vg = Vg, *_vb = Vb; \
\
@@ -309,12 +309,12 @@ static inline int blocknum(int xv, int yv, int widthv, int blocksize)
t_val, \
datapi, \
datapi_next, \
- _ur,_ug,_ubvr,_vg,_vb, \
+ _ur, _ug, _ubvr, _vg, _vb, \
sampling, \
__depth__); \
\
- ublocks[blocknum(x_tm + i, y_tm + k, (yuv)->y_width, Y_UNIT_WIDTH)] = 1; \
- vblocks[blocknum(x_tm + i, y_tm + k, (yuv)->y_width, Y_UNIT_WIDTH)] = 1; \
+ ublocks[blocknum(x_tm + i, y_tm + k, (yuv)->y_width, Y_UNIT_WIDTH)] = 1;\
+ vblocks[blocknum(x_tm + i, y_tm + k, (yuv)->y_width, Y_UNIT_WIDTH)] = 1;\
} \
\
datapi += 2; \
@@ -326,8 +326,8 @@ static inline int blocknum(int xv, int yv, int widthv, int blocksize)
yuv_V++; \
} \
\
- yuv_U += ((yuv)->y_stride - (width_tm - w_odd * 2)) >> 1; \
- yuv_V += ((yuv)->y_stride - (width_tm - w_odd * 2)) >> 1; \
+ yuv_U += ((yuv)->uv_stride - ((width_tm - w_odd * 2) >> 1)); \
+ yuv_V += ((yuv)->uv_stride - ((width_tm - w_odd * 2) >> 1)); \
\
datapi += width_tm + w_odd; \
datapi_back += width_tm + w_odd; \
@@ -347,8 +347,8 @@ static inline int blocknum(int xv, int yv, int widthv, int blocksize)
sampling, \
__depth__); \
\
- ublocks[blocknum(x_tm + i, y_tm + k, (yuv)->y_width, Y_UNIT_WIDTH)] = 1; \
- vblocks[blocknum(x_tm + i, y_tm + k, (yuv)->y_width, Y_UNIT_WIDTH)] = 1; \
+ ublocks[blocknum(x_tm + i, y_tm + k, (yuv)->y_width, Y_UNIT_WIDTH)] = 1;\
+ vblocks[blocknum(x_tm + i, y_tm + k, (yuv)->y_width, Y_UNIT_WIDTH)] = 1;\
} \
\
datapi += 2; \
© All Rights Reserved