@@ -36,12 +36,23 @@ JNIEXPORT void JNICALL Java_jp_co_cyberagent_android_gpuimage_GPUImageNativeLibr
36
36
Cr = yuv [cOff + 1 ];
37
37
if (Cr < 0 ) Cr += 127 ; else Cr -= 128 ;
38
38
}
39
- R = Y + Cr + (Cr >> 3 ) + (Cr >> 6 );
40
- if (R < 0 ) R = 0 ; else if (R > 255 ) R = 255 ;
41
- G = Y - (Cb >> 1 ) + (Cb >> 4 ) + (Cb >> 5 ) - Cr + (Cr >> 2 ) + (Cr >> 3 ) + (Cr >> 5 ) + + (Cr >> 6 );
42
- if (G < 0 ) G = 0 ; else if (G > 255 ) G = 255 ;
43
- B = Y + (Cb << 1 ) + (Cb >> 5 );
44
- if (B < 0 ) B = 0 ; else if (B > 255 ) B = 255 ;
39
+ //==============================
40
+ //R = 1.164Y + 2.018Cr;
41
+ //G = 1.164Y - 0.813Cb - 0.391Cr;
42
+ //B = 1.164Y + 1.596Cb;
43
+ //==============================
44
+ //===== Approximation ==========
45
+ // R = 1.1640625Y + 2.015625Cr
46
+ // G = 1.1640625Y - 0.8125Cb - 0.375Cr
47
+ // B = 1.1640625Y + 1.59375Cb
48
+ //==============================
49
+ Y = Y + (Y >> 3 ) + (Y >> 5 ) + (Y >> 7 );
50
+ R = Y + (Cr << 1 ) + (Cr >> 6 );
51
+ if (R < 0 ) R = 0 ; else if (R > 255 ) R = 255 ;
52
+ G = Y - Cb + (Cb >> 3 ) + (Cb >> 4 ) - (Cr >> 1 ) + (Cr >> 3 );
53
+ if (G < 0 ) G = 0 ; else if (G > 255 ) G = 255 ;
54
+ B = Y + Cb + (Cb >> 1 ) + (Cb >> 4 ) + (Cb >> 5 );
55
+ if (B < 0 ) B = 0 ; else if (B > 255 ) B = 255 ;
45
56
rgbData [pixPtr ++ ] = 0xff000000 + (R << 16 ) + (G << 8 ) + B ;
46
57
}
47
58
}
@@ -84,12 +95,23 @@ JNIEXPORT void JNICALL Java_jp_co_cyberagent_android_gpuimage_GPUImageNativeLibr
84
95
Cr = yuv [cOff + 1 ];
85
96
if (Cr < 0 ) Cr += 127 ; else Cr -= 128 ;
86
97
}
87
- R = Y + Cr + (Cr >> 3 ) + (Cr >> 6 );
88
- if (R < 0 ) R = 0 ; else if (R > 255 ) R = 255 ;
89
- G = Y - (Cb >> 1 ) + (Cb >> 4 ) + (Cb >> 5 ) - Cr + (Cr >> 2 ) + (Cr >> 3 ) + (Cr >> 5 ) + + (Cr >> 6 );
90
- if (G < 0 ) G = 0 ; else if (G > 255 ) G = 255 ;
91
- B = Y + (Cb << 1 ) + (Cb >> 5 );
92
- if (B < 0 ) B = 0 ; else if (B > 255 ) B = 255 ;
98
+ //==============================
99
+ //R = 1.164Y + 2.018Cr;
100
+ //G = 1.164Y - 0.813Cb - 0.391Cr;
101
+ //B = 1.164Y + 1.596Cb;
102
+ //==============================
103
+ //===== Approximation ==========
104
+ // R = 1.1640625Y + 2.015625Cr
105
+ // G = 1.1640625Y - 0.8125Cb - 0.375Cr
106
+ // B = 1.1640625Y + 1.59375Cb
107
+ //==============================
108
+ Y = Y + (Y >> 3 ) + (Y >> 5 ) + (Y >> 7 );
109
+ R = Y + (Cr << 1 ) + (Cr >> 6 );
110
+ if (R < 0 ) R = 0 ; else if (R > 255 ) R = 255 ;
111
+ G = Y - Cb + (Cb >> 3 ) + (Cb >> 4 ) - (Cr >> 1 ) + (Cr >> 3 );
112
+ if (G < 0 ) G = 0 ; else if (G > 255 ) G = 255 ;
113
+ B = Y + Cb + (Cb >> 1 ) + (Cb >> 4 ) + (Cb >> 5 );
114
+ if (B < 0 ) B = 0 ; else if (B > 255 ) B = 255 ;
93
115
rgbData [pixPtr ++ ] = 0xff000000 + (B << 16 ) + (G << 8 ) + R ;
94
116
}
95
117
}
0 commit comments