JNIEXPORT jbyteArray JNICALL Java_com_uestc_smileteeth_view_recordvideo_RecordVideoLib_YUV420spToYUV420p(JNIEnv * env、 jclass type、 jbyteArray yuv420sp_、 jint width、 jint height){ jbyte * yuv420sp =(* env)-> GetByteArrayElements(env、yuv420sp) jbyteArray yuv420pRet =(* env)-> NewByteArray(env、(* env)-> GetArrayLength(env、yuv420sp_)); jbyte* yuv420p =(* env)-> GetByteArrayElements(env、yuv420pRet、NULL); int i、j; int y_size =幅* 高さ; unsigned char * y = yuv420sp; unsigned char * vu = yuv420sp + y_size; unsigned char * y_tmp = yuv420p; unsigned char * u_tmp = yuv420p + y_size; 符号なしのchar * v_tmp = YUV420P + Y_SIZE * 5 / 4 。 // y memcpy(y_tmp、y、y_size); // v、u for(j =0、i = 0 ; j <y_size / 2 ; j + = 2、i ++ ){ v_tmp [i] = vu [j]; u_tmp [i] = vu [j + 1 ]; } ( * env)-> ReleaseByteArrayElements(env、yuv420sp_、yuv420sp、0 ); ( * env)-> ReleaseByteArrayElements(env、yuv420pRet、yuv420p、0 ); yuv420pRetを返します。 }
yuv420pからyuv420sp
JNIEXPORT jbyteArray JNICALL Java_com_uestc_smileteeth_view_recordvideo_RecordVideoLib_YUV420pToYUV420sp(JNIEnv * env、 jclass type、 jbyteArray yuv420p_、 jint width、 jint height){ jbyte * yuv420p =(* env)-> GetByteArrayElements(env、yuv420p jbyteArray yuv420spRet =(* env)-> NewByteArray(env、(* env)-> GetArrayLength(env、yuv420p_)); jbyte* yuv420sp =(* env)-> GetByteArrayElements(env、yuv420spRet、NULL); int i、j; int y_size =幅* 高さ; unsigned char * y = yuv420sp; unsigned char * vu = yuv420sp + y_size; unsigned char * y_tmp = yuv420p; unsigned char * u_tmp = yuv420p + y_size; 符号なしのchar * v_tmp = YUV420P + Y_SIZE * 5 / 4 。 // y memcpy(y、y_tmp、y_size); // v、u for(j =0、i = 0 ; j <y_size / 2 ; j + = 2、i ++ ){ vu [j] = v_tmp [i]; vu [j + 1 ] = u_tmp [i]; } ( * env)-> ReleaseByteArrayElements(env、yuv420p_、yuv420p、0 ); ( * env)-> ReleaseByteArrayElements(env、yuv420spRet、yuv420sp、0 ); 返すyuv420spRetを。 }
元のリンク:https://blog.csdn.net/Emily2015/article/details/79271199