YUV420spとYUV420p間の相互変換

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

おすすめ

転載: www.cnblogs.com/yanwei-wang/p/12749641.html