gpt4 book ai didi

java - 在Android中播放yuv帧

转载 作者:行者123 更新时间:2023-11-29 21:49:50 30 4
gpt4 key购买 nike

您好,我的任务是在 android 中显示一组解码帧。在我的 native 代码中,我有一个字符 (char) 指针,它保存解码帧的地址。我想在我的设备上显示这个框架,所以我得到了提示: Displaying YUV Image in Android因此在我的 Activity 课上我写了以下函数:

public void displayFrame(byte[] data, int fwidth,int fheight){

ImageView frameImgView=(ImageView) findViewById(R.id.imageView2);

ByteArrayOutputStream out=new ByteArrayOutputStream();
YuvImage yuvimg=new YuvImage(data, ImageFormat.NV21, fwidth, fheight, null);
yuvimg.compressToJpeg(new Rect(0, 0, fwidth, fheight), 100, out);
byte[] imageBytes = out.toByteArray();
Bitmap image = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
frameImgView.setImageBitmap(image);
return;
}

因此,根据我的 native 代码,我需要在 Java 中调用此函数。从链接: http://www.altdevblogaday.com/2011/12/09/running-native-code-on-android-part-1/我开始知道如何从 native c 调用 java 函数。但是,要调用 java 函数,我们需要一个环境变量来执行此操作。我是我的 Java 类,我已将主函数声明为 native 函数并为该主函数生成了一个 header :

JNIEXPORT jint JNICALL Java_com_example_decoder_Decoder_mainFunction(JNIEnv *env, jclass jobj, jint argc, jstring argv1, jstring argv2);

但是我的 mainFunction 调用了一个函数“fwriter(some pointer, some pointer)”,它有一个指针作为参数。我如何获得相同的环境变量。我知道在 java 类中我需要将“fwriter”函数声明为 native 函数,但我将指针表示为什么??

例如:我的 c 函数是:

void fwriter(int *ptr, char *ptr)
{
....
}

在我的 java 类中,如何将此函数声明为 native 函数?请帮忙。在 java/Android 中显示 YUV 的任何其他方法也将受到赞赏。谢谢。

最佳答案

虽然 JPEG 编码和解码在大多数手机上可能是硬件加速的,但我希望您自己编写的简单 RGB->YUV 转换 for-loop 会很多更快(即使在没有 Java 的情况下也足够快)使用 native 库)和更简单。

Here是公式。如果您使用 OpenGLES 进行显示,请考虑使用 fragment shader即时进行转换。

最后,这是您可以在 CPU 上使用的纯整数代码:

Ytmp =      4768 * (Y - 16);
R = (Ytmp + 6537 * (V - 128)) >> 12;
G = (Ytmp - 3330 * (V - 128) - 1602 * (U - 128)) >> 12;
B = (Ytmp + 8266 * (U - 128)) >> 12;

关于java - 在Android中播放yuv帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14702032/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com