Code cleanup (untested)

This commit is contained in:
Pierre Pronchery 2012-12-22 02:23:13 +01:00
parent ad157bba16
commit d3982a06f3

View File

@ -467,6 +467,8 @@ static int _open_setup(Camera * camera)
/* camera_on_refresh */ /* camera_on_refresh */
static void _refresh_convert(Camera * camera, unsigned char * buf); static void _refresh_convert(Camera * camera, unsigned char * buf);
static void _refresh_convert_yuv(uint8_t y, uint8_t u, uint8_t v,
uint8_t * r, uint8_t * g, uint8_t * b);
static gboolean _camera_on_refresh(gpointer data) static gboolean _camera_on_refresh(gpointer data)
{ {
@ -494,15 +496,8 @@ static gboolean _camera_on_refresh(gpointer data)
static void _refresh_convert(Camera * camera, unsigned char * buf) static void _refresh_convert(Camera * camera, unsigned char * buf)
{ {
const int amp = 255;
size_t i; size_t i;
size_t j; size_t j;
unsigned char y;
unsigned char u;
unsigned char v;
double r;
double g;
double b;
switch(camera->format.fmt.pix.pixelformat) switch(camera->format.fmt.pix.pixelformat)
{ {
@ -511,33 +506,17 @@ static void _refresh_convert(Camera * camera, unsigned char * buf)
i += 4, j += 6) i += 4, j += 6)
{ {
/* pixel 0 */ /* pixel 0 */
y = camera->buffer[i]; _refresh_convert_yuv(camera->buffer[i],
u = camera->buffer[i + 1]; camera->buffer[i + 1],
v = camera->buffer[i + 3]; camera->buffer[i + 3],
r = amp * (0.004565 * y + 0.007935 * u - 1.088); &buf[j + 2], &buf[j + 1],
g = amp * (0.004565 * y - 0.001542 * u &buf[j]);
- 0.003183 * v + 0.531);
b = amp * (0.004565 * y + 0.000001 * u
+ 0.006250 * v - 0.872);
r = (r < 0) ? 0 : ((r > 255) ? 255 : r);
g = (g < 0) ? 0 : ((g > 255) ? 255 : g);
b = (b < 0) ? 0 : ((b > 255) ? 255 : b);
buf[j] = b;
buf[j + 1] = g;
buf[j + 2] = r;
/* pixel 1 */ /* pixel 1 */
y = camera->buffer[i + 2]; _refresh_convert_yuv(camera->buffer[i + 2],
r = amp * (0.004565 * y + 0.007935 * u - 1.088); camera->buffer[i + 1],
g = amp * (0.004565 * y - 0.001542 * u camera->buffer[i + 3],
- 0.003183 * v + 0.531); &buf[j + 5], &buf[j + 4],
b = amp * (0.004565 * y + 0.000001 * u &buf[j + 3]);
+ 0.006250 * v - 0.872);
r = (r < 0) ? 0 : ((r > 255) ? 255 : r);
g = (g < 0) ? 0 : ((g > 255) ? 255 : g);
b = (b < 0) ? 0 : ((b > 255) ? 255 : b);
buf[j + 3] = b;
buf[j + 4] = g;
buf[j + 5] = r;
} }
break; break;
default: default:
@ -548,3 +527,19 @@ static void _refresh_convert(Camera * camera, unsigned char * buf)
break; break;
} }
} }
static void _refresh_convert_yuv(uint8_t y, uint8_t u, uint8_t v,
uint8_t * r, uint8_t * g, uint8_t * b)
{
const int amp = 255;
double dr;
double dg;
double db;
dr = amp * (0.004565 * y + 0.007935 * u - 1.088);
dg = amp * (0.004565 * y - 0.001542 * u - 0.003183 * v + 0.531);
db = amp * (0.004565 * y + 0.000001 * u + 0.006250 * v - 0.872);
*r = (dr < 0) ? 0 : ((dr > 255) ? 255 : dr);
*g = (dg < 0) ? 0 : ((dg > 255) ? 255 : dg);
*b = (db < 0) ? 0 : ((db > 255) ? 255 : db);
}