Jar
Jar

Reputation: 185

How to copy decoded frame from C to Android

I used ffmpeg library to decode the video and got a frame buffer data.

I want to copy the frame buffer into Android byte array (format is RGB565).

How to copy the frame buffer data from C into Android byte array?

Have any one can give me some example or advice?

Upvotes: 1

Views: 439

Answers (1)

Michael
Michael

Reputation: 58467

You could use java.nio.ByteBuffer for that:

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

And the native code could be something like:

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);
}

To copy the data from the ByteBuffer to a byte[] you'd then use something like:

theVideoFrame.get(byteArray);

Upvotes: 1

Related Questions