From aa24e964a6c6f7849ba843a37df1387c0894d725 Mon Sep 17 00:00:00 2001 From: Jack Yoo Date: Mon, 26 Sep 2016 13:21:57 -0700 Subject: SnapdragonCamera: SelfieMirror Camera2 SelfieMirror filter for camera2. Change-Id: Id5fda369a56421199a8c2537491608b8667fb77e CRs-Fixed: 1071798 --- jni/image_util_jni.cpp | 58 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 18 deletions(-) (limited to 'jni') diff --git a/jni/image_util_jni.cpp b/jni/image_util_jni.cpp index a4779b3d7..16f4469c3 100644 --- a/jni/image_util_jni.cpp +++ b/jni/image_util_jni.cpp @@ -44,8 +44,8 @@ JNIEXPORT jint JNICALL Java_com_android_camera_imageprocessor_FrameProcessor_nat jint imageWidth, jint imageHeight, jint degree, jobjectArray outBuf); JNIEXPORT jint JNICALL Java_com_android_camera_imageprocessor_FrameProcessor_nativeNV21toRgb( JNIEnv *env, jobject thiz, jobjectArray yvuBuf, jobjectArray rgbBuf, jint width, jint height); -JNIEXPORT jint JNICALL Java_com_android_camera_imageprocessor_PostProcessor_nativeFlipVerticalNV21( - JNIEnv* env, jobject thiz, jbyteArray yvuBytes, jint width, jint height); +JNIEXPORT jint JNICALL Java_com_android_camera_imageprocessor_PostProcessor_nativeFlipNV21( + JNIEnv* env, jobject thiz, jbyteArray yvuBytes, jint width, jint height, jboolean isVertical); #ifdef __cplusplus } #endif @@ -154,30 +154,52 @@ jint JNICALL Java_com_android_camera_imageprocessor_FrameProcessor_nativeNV21toR return 0; } -jint JNICALL Java_com_android_camera_imageprocessor_PostProcessor_nativeFlipVerticalNV21( - JNIEnv* env, jobject thiz, jbyteArray yvuBytes, jint width, jint height) +jint JNICALL Java_com_android_camera_imageprocessor_PostProcessor_nativeFlipNV21( + JNIEnv* env, jobject thiz, jbyteArray yvuBytes, jint width, jint height, jboolean isVertical) { jbyte* imageDataNV21Array = env->GetByteArrayElements(yvuBytes, NULL); uint8_t *buf = (uint8_t *)imageDataNV21Array; int ysize = width * height; uint8_t temp1, temp2; - for(int x=0; x < width; x++) { - for(int y=0; y < height/2; y++) { - temp1 = buf[y*width + x]; - buf[y*width + x] = buf[(height-1-y)*width + x]; - buf[(height-1-y)*width + x] = temp1; + + if(isVertical) { + for (int x = 0; x < width; x++) { + for (int y = 0; y < height / 2; y++) { + temp1 = buf[y * width + x]; + buf[y * width + x] = buf[(height - 1 - y) * width + x]; + buf[(height - 1 - y) * width + x] = temp1; + } } - } - for(int x=0; x < width; x+=2) { - for(int y=0; y < height/4; y++) { - temp1 = buf[ysize + y*width + x]; - temp2 = buf[ysize + y*width + x + 1]; - buf[ysize + y*width + x] = buf[ysize + (height/2-1-y)*width + x]; - buf[ysize + y*width + x + 1] = buf[ysize + (height/2-1-y)*width + x + 1]; - buf[ysize + (height/2-1-y)*width + x] = temp1; - buf[ysize + (height/2-1-y)*width + x + 1] = temp2; + for (int x = 0; x < width; x += 2) { + for (int y = 0; y < height / 4; y++) { + temp1 = buf[ysize + y * width + x]; + temp2 = buf[ysize + y * width + x + 1]; + buf[ysize + y * width + x] = buf[ysize + (height / 2 - 1 - y) * width + x]; + buf[ysize + y * width + x + 1] = buf[ysize + (height / 2 - 1 - y) * width + x + 1]; + buf[ysize + (height / 2 - 1 - y) * width + x] = temp1; + buf[ysize + (height / 2 - 1 - y) * width + x + 1] = temp2; + } + } + } else { + for (int x = 0; x < width/2; x++) { + for (int y = 0; y < height; y++) { + temp1 = buf[y * width + x]; + buf[y * width + x] = buf[y * width + (width -1 - x)]; + buf[y * width + (width - 1 - x)] = temp1; + } + } + for (int x = 0; x < width/2; x += 2) { + for (int y = 0; y < height / 2; y++) { + temp1 = buf[ysize + y * width + x]; + temp2 = buf[ysize + y * width + x + 1]; + buf[ysize + y * width + x] = buf[ysize + y * width + (width - 1 - x - 1)]; + buf[ysize + y * width + x + 1] = buf[ysize + y * width + (width - 1 - x)]; + buf[ysize + y * width + (width - 1 - x - 1)] = temp1; + buf[ysize + y * width + (width - 1 - x)] = temp2; + } } } + env->ReleaseByteArrayElements(yvuBytes, imageDataNV21Array, JNI_ABORT); return 0; } \ No newline at end of file -- cgit v1.2.3