summaryrefslogtreecommitdiff
path: root/recordmydesktop/src/rmd_yuv_utils.c
blob: 5da501bddecfba0021ac70db44f969d8a08914fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/******************************************************************************
*                      recordMyDesktop - rmd_yuv_utils.c                      *
*******************************************************************************
*                                                                             *
*            Copyright (C) 2006,2007,2008 John Varouhakis                     *
*            Copyright (C) 2008 Luca Bonavita                                 * 
*                                                                             *
*   This program is free software; you can redistribute it and/or modify      *
*   it under the terms of the GNU General Public License as published by      *
*   the Free Software Foundation; either version 2 of the License, or         *
*   (at your option) any later version.                                       *
*                                                                             *
*   This program is distributed in the hope that it will be useful,           *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of            *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
*   GNU General Public License for more details.                              *
*                                                                             *
*   You should have received a copy of the GNU General Public License         *
*   along with this program; if not, write to the Free Software               *
*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  *
*                                                                             *
*                                                                             *
*                                                                             *
*   For further information contact me at johnvarouhakis@gmail.com            *
******************************************************************************/

#include "config.h"

#include "rmd_yuv_utils.h"

// Keep these global (for performance reasons I assume).
unsigned char Yr[256], Yg[256], Yb[256],
              Ur[256], Ug[256], UbVr[256],
              Vg[256], Vb[256];

void MakeMatrices (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) roundf( Yoffset + yr * i );
         Yg[i] = (unsigned char) roundf( yg * i );
         Yb[i] = (unsigned char) roundf( yb * i );

         Ur[i] = (unsigned char) roundf( Coffset + ur * i );
         Ug[i] = (unsigned char) roundf( ug * i );
         UbVr[i] = (unsigned char) roundf( ub * i );

         Vg[i] = (unsigned char) roundf( vg * i );
         Vb[i] = (unsigned char) roundf( Coffset + vb * i );

    }

}
© All Rights Reserved