1

我使用 ffmpeg 库来解码视频并获得帧缓冲区数据。

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

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

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

4

1 回答 1

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到 a byte[],您可以使用以下内容:

theVideoFrame.get(byteArray);
于 2013-08-23T08:23:52.367 回答