diff options
-rw-r--r-- | client/decoder.cc | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/client/decoder.cc b/client/decoder.cc index c1f3aab..c456e78 100644 --- a/client/decoder.cc +++ b/client/decoder.cc @@ -159,13 +159,26 @@ void Decoder::pframeRelease() pmutex.unlock(); } +/* + R = Y + 1.4075 * (V - 128) + G = Y - (0.3455 * (U - 128) - (0.7169 * (V - 128)) + B = Y + 1.7790 * (U - 128) +*/ +#define RED(y, u, v) (y + 1.4075 * (v - 128)) +#define GREEN(y, u, v) (y - (0.3455 * (u - 128)) - (0.7169 * (v - 128))) +#define BLUE(y, u, v) (y + 1.7790 * (u - 128)) + +/* + R = 1.164(Y - 16) + 1.596(V - 128) + G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) + B = 1.164(Y - 16) + 2.018(U - 128) +*/ +//#define RED(y, u, v) (1.164 * (y - 16) + 1.596 * (v - 128)) +//#define GREEN(y, u, v) (1.164 * (y - 16) - 0.813 * (v - 128) - 0.391 * (u - 128)) +//#define BLUE(y, u, v) (1.164 * (y - 16) + 2.018 * (u - 128)) + void Decoder::snapshot(unsigned char *rgb) { - /* - R = Y + 1.4075 * (V - 128) - G = Y - (0.3455 * (U - 128) - (0.7169 * (V - 128)) - B = Y + 1.7790 * (U - 128) - */ pmutex.lock(); @@ -185,15 +198,15 @@ void Decoder::snapshot(unsigned char *rgb) V = pframe[byte]; byte++; rgb[pos+3] = 0; // Alpha - rgb[pos+2] = (unsigned char)(Y0 + 1.4075 * (V - 128)); // Red - rgb[pos+1] = (unsigned char)(Y0 - (0.3455 * (U - 128) - (0.7169 * (V - 128)))); // Green - rgb[pos+0] = (unsigned char)(Y0 + 1.7790 * (U - 128)); // Blue + rgb[pos+2] = (unsigned char)RED(Y0, U, V); //(Y0 + 1.4075 * (V - 128)); // Red + rgb[pos+1] = (unsigned char)GREEN(Y0, U, V); //(Y0 - (0.3455 * (U - 128) - (0.7169 * (V - 128)))); // Green + rgb[pos+0] = (unsigned char)BLUE(Y0, U, V); //(Y0 + 1.7790 * (U - 128)); // Blue pos+=4; rgb[pos+3] = 0; // Alpha - rgb[pos+2] = (unsigned char)(Y1 + 1.4075 * (V - 128)); // Red - rgb[pos+1] = (unsigned char)(Y1 - (0.3455 * (U - 128) - (0.7169 * (V - 128)))); // Green - rgb[pos+0] = (unsigned char)(Y1 + 1.7790 * (U - 128)); // Blue + rgb[pos+2] = (unsigned char)RED(Y1, U, V); //(Y1 + 1.4075 * (V - 128)); // Red + rgb[pos+1] = (unsigned char)GREEN(Y1, U, V); //(Y1 - (0.3455 * (U - 128) - (0.7169 * (V - 128)))); // Green + rgb[pos+0] = (unsigned char)BLUE(Y1, U, V); //(Y1 + 1.7790 * (U - 128)); // Blue pos+=4; } pmutex.unlock(); |