ref: 66d57ced36e86949df7793fe4c21826951934fea
parent: 66c086c68d190935c0113735278a99b100bf07da
author: Sigrid Haflínudóttir <ftrvxmtrx@gmail.com>
date: Wed Sep 23 11:08:56 EDT 2020
YUV: reformat
--- a/misc.h
+++ b/misc.h
@@ -1,9 +1,10 @@
int str2fmt(char *s);
uvlong nanosec(void);
void yuv420_rgb24(
- u32int width, u32int height,
- const u8int *Y, const u8int *U, const u8int *V, u32int Y_stride, u32int UV_stride,
- u8int *RGB, u32int RGB_stride);
+ int width, int height,
+ u8int *y, u8int *u, u8int *v,
+ u32int ystride, u32int uvstride,
+ u8int *rgb, u32int rgbstride);
extern int nproc;
extern int debug;
--- a/yuv.c
+++ b/yuv.c
@@ -1,43 +1,44 @@
#include <u.h>
void yuv420_rgb24(
- u32int width, u32int height,
- const u8int *Y, const u8int *U, const u8int *V, u32int Y_stride, u32int UV_stride,
- u8int *RGB, u32int RGB_stride)
+ int width, int height,
+ u8int *y, u8int *u, u8int *v,
+ u32int ystride, u32int uvstride,
+ u8int *rgb, u32int rgbstride)
{
- u32int x, y;
- int yy1, cb1, cr1;
- int r, g, b, go;
+ u32int w, h;
+ int r, g, b;
+ int yy1, cb1, cr1, go;
- for(y = 0; y < height-1; y += 2){
- for(x = 0; x < width-1; x += 2){
- cb1 = *U - 0x80;
- cr1 = *V - 0x80;
+ for(h = 0; h < height-1; h += 2){
+ for(w = 0; w < width-1; w += 2){
+ cb1 = *u - 0x80;
+ cr1 = *v - 0x80;
go = 22554*cb1 + 46802*cr1;
#define ONE do{ \
- yy1 = *Y * 0x10101; \
+ yy1 = *y * 0x10101; \
b = yy1 + 116130*cb1; \
- RGB[0] = (b >> 24) ? ~(b >> 31) : (b>>16); \
+ rgb[0] = (b >> 24) ? ~(b >> 31) : (b>>16); \
g = yy1 - go; \
- RGB[1] = (g >> 24) ? ~(g >> 31) : (g>>16); \
+ rgb[1] = (g >> 24) ? ~(g >> 31) : (g>>16); \
r = yy1 + 91881*cr1; \
- RGB[2] = (r >> 24) ? ~(r >> 31) : (r>>16); \
+ rgb[2] = (r >> 24) ? ~(r >> 31) : (r>>16); \
}while(0)
- ONE; Y += 1; RGB += 3;
- ONE; Y += Y_stride; RGB += RGB_stride;
- ONE; Y -= 1; RGB -= 3;
- ONE; Y -= Y_stride; RGB -= RGB_stride - 6;
+ ONE; y += 1; rgb += 3;
+ ONE; y += ystride; rgb += rgbstride;
+ ONE; y -= 1; rgb -= 3;
+ ONE; y -= ystride; rgb -= rgbstride - 6;
- Y += 2;
- U += 1;
- V += 1;
+ y += 2;
+ u += 1;
+ v += 1;
}
- Y += Y_stride*2 - x;
- U += UV_stride - x/2;
- V += UV_stride - x/2;
- RGB += RGB_stride*2 - 3*x;
+ y += ystride*2 - w;
+ u += uvstride - w/2;
+ v += uvstride - w/2;
+ rgb += rgbstride*2 - 3*w;
}
}