如何将解码后的帧从C复制到Android

时间:2013-08-23 08:10:06

标签: android ffmpeg java-native-interface

我使用ffmpeg库对视频进行解码并获得帧缓冲数据。

我想将帧缓冲区复制到Android字节数组中(格式为RGB565)。

如何将帧缓冲区数据从C复制到Android字节数组?

有人可以给我一些例子或建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用java.nio.ByteBuffer

ByteBuffer theVideoFrame = ByteBuffer.allocateDirect(frameSize);
...
CopyFrame(theVideoFrame);

本机代码可能类似于:

JNIEXPORT void JNICALL Java_blah_blah_blah_CopyFrame(JNIEnv *ioEnv, jobject ioThis, jobject byteBuffer)
{
    char *buffer;   

    buffer = (char*)(ioEnv->GetDirectBufferAddress(byteBuffer));
    if (buffer == NULL) {
        __android_log_write(ANDROID_LOG_VERBOSE, "foo", "failed to get NIO buffer address");
        return;
    }

    memcpy(buffer, theNativeVideoFrame, frameSize);
}

要将数据从ByteBuffer复制到byte[],您可以使用以下内容:

theVideoFrame.get(byteArray);