/* * Class: com_zhutieju_testservice_H264Android * Method: dalDecoder * Signature: ([BI[B)I */ JNIEXPORT jint JNICALL Java_com_zhutieju_testservice_H264Android_dalDecoder (JNIEnv* env, jobject thiz, jbyteArray in, jint nalLen, jbyteArray out) { int i; int imod; int got_picture=0; jbyte * Buf = (jbyte*)(*env)->GetByteArrayElements(env, in, 0); jbyte * Pixel= (jbyte*)(*env)->GetByteArrayElements(env, out, 0); int consumed_bytes = avcodec_decode_video(c, picture, &got_picture, Buf, nalLen); if(got_picture > 0) { DisplayYUV_16((int*)Pixel, picture->data[0], picture->data[1], picture->data[2], c->width, c->height, picture->linesize[0], picture->linesize[1], iWidth); /* for(i=0; i<c->height; i++) fwrite(picture->data[0] + i * picture->linesize[0], 1, c->width, outf); for(i=0; i<c->height/2; i++) fwrite(picture->data[1] + i * picture->linesize[1], 1, c->width/2, outf); for(i=0; i<c->height/2; i++) fwrite(picture->data[2] + i * picture->linesize[2], 1, c->width/2, outf); // */ } (*env)->ReleaseByteArrayElements(env, in, Buf, 0); (*env)->ReleaseByteArrayElements(env, out, Pixel, 0); return consumed_bytes; }
/* * Class: h264_com_VView * Method: DecoderNal * Signature: ([B[I)I */ jint Java_h264_com_VView_DecoderNal(JNIEnv* env, jobject thiz, jbyteArray in, jint nalLen, jbyteArray out) { int i; int imod; int got_picture; jbyte * Buf = (jbyte*)(*env)->GetByteArrayElements(env, in, 0); jbyte * Pixel= (jbyte*)(*env)->GetByteArrayElements(env, out, 0); int consumed_bytes = decode_frame(c, picture, &got_picture, Buf, nalLen); if(consumed_bytes > 0) { DisplayYUV_16((int*)Pixel, picture->data[0], picture->data[1], picture->data[2], c->width, c->height, picture->linesize[0], picture->linesize[1], iWidth); /* for(i=0; i<c->height; i++) fwrite(picture->data[0] + i * picture->linesize[0], 1, c->width, outf); for(i=0; i<c->height/2; i++) fwrite(picture->data[1] + i * picture->linesize[1], 1, c->width/2, outf); for(i=0; i<c->height/2; i++) fwrite(picture->data[2] + i * picture->linesize[2], 1, c->width/2, outf); // */ } (*env)->ReleaseByteArrayElements(env, in, Buf, 0); (*env)->ReleaseByteArrayElements(env, out, Pixel, 0); return consumed_bytes; }
/* * Class: h264_com_VView * Method: DecoderNal * Signature: ([B[I)I */ jint Java_h264_com_VView_DecoderNal(JNIEnv* env, jobject thiz,jlong pDecoder,jbyteArray in, jint nalLen, jbyteArray out) { int i; int imod; int got_picture; if (pDecoder) { Decoder * de=(Decoder * )pDecoder; jbyte * Buf = (jbyte*)(*env)->GetByteArrayElements(env, in, 0); jbyte * Pixel= (jbyte*)(*env)->GetByteArrayElements(env, out, 0); int consumed_bytes = decode_frame(de->c, de->picture, &got_picture, Buf, nalLen); if(consumed_bytes > 0) { DisplayYUV_16((int*)Pixel, de->picture->data[0], de->picture->data[1], de->picture->data[2], de->c->width, de->c->height, de->picture->linesize[0], de->picture->linesize[1], de->c->width); } (*env)->ReleaseByteArrayElements(env, in, Buf, 0); (*env)->ReleaseByteArrayElements(env, out, Pixel, 0); return consumed_bytes; } else return 0; }