Skip to content

Commit e728e29

Browse files
committed
Merge pull request cats-oss#149 from hoozh/fix_jni_yuvdecoder_color
fix jni yuvdecoder color
2 parents bf0bfde + 49e50f5 commit e728e29

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

library/jni/yuv-decoder.c

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,19 @@ JNIEXPORT void JNICALL Java_jp_co_cyberagent_android_gpuimage_GPUImageNativeLibr
3636
Cr = yuv[cOff + 1];
3737
if(Cr < 0) Cr += 127; else Cr -= 128;
3838
}
39-
R = Y + Cr + (Cr >> 3) + (Cr >> 6);
39+
40+
//ITU-R BT.601 conversion
41+
//
42+
//R = 1.164*(Y-16) + 2.018*(Cr-128);
43+
//G = 1.164*(Y-16) - 0.813*(Cb-128) - 0.391*(Cr-128);
44+
//B = 1.164*(Y-16) + 1.596*(Cb-128);
45+
//
46+
Y = Y + (Y >> 3) + (Y >> 5) + (Y >> 7);
47+
R = Y + (Cr << 1) + (Cr >> 6);
4048
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);
49+
G = Y - Cb + (Cb >> 3) + (Cb >> 4) - (Cr >> 1) + (Cr >> 3);
4250
if(G < 0) G = 0; else if(G > 255) G = 255;
43-
B = Y + (Cb << 1) + (Cb >> 5);
51+
B = Y + Cb + (Cb >> 1) + (Cb >> 4) + (Cb >> 5);
4452
if(B < 0) B = 0; else if(B > 255) B = 255;
4553
rgbData[pixPtr++] = 0xff000000 + (R << 16) + (G << 8) + B;
4654
}
@@ -84,11 +92,19 @@ JNIEXPORT void JNICALL Java_jp_co_cyberagent_android_gpuimage_GPUImageNativeLibr
8492
Cr = yuv[cOff + 1];
8593
if(Cr < 0) Cr += 127; else Cr -= 128;
8694
}
87-
R = Y + Cr + (Cr >> 3) + (Cr >> 6);
95+
96+
//ITU-R BT.601 conversion
97+
//
98+
//R = 1.164*(Y-16) + 2.018*(Cr-128);
99+
//G = 1.164*(Y-16) - 0.813*(Cb-128) - 0.391*(Cr-128);
100+
//B = 1.164*(Y-16) + 1.596*(Cb-128);
101+
//
102+
Y = Y + (Y >> 3) + (Y >> 5) + (Y >> 7);
103+
R = Y + (Cr << 1) + (Cr >> 6);
88104
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);
105+
G = Y - Cb + (Cb >> 3) + (Cb >> 4) - (Cr >> 1) + (Cr >> 3);
90106
if(G < 0) G = 0; else if(G > 255) G = 255;
91-
B = Y + (Cb << 1) + (Cb >> 5);
107+
B = Y + Cb + (Cb >> 1) + (Cb >> 4) + (Cb >> 5);
92108
if(B < 0) B = 0; else if(B > 255) B = 255;
93109
rgbData[pixPtr++] = 0xff000000 + (B << 16) + (G << 8) + R;
94110
}

0 commit comments

Comments
 (0)