BOOL setFrame()

in src/JNI/com/amazonaws/kinesis/video/producer/jni/Parameters.cpp [720:809]


BOOL setFrame(JNIEnv* env, jobject kinesisVideoFrame, PFrame pFrame)
{
    STATUS retStatus = STATUS_SUCCESS;
    jmethodID methodId = NULL;
    CHECK(env != NULL && kinesisVideoFrame != NULL && pFrame != NULL);

    // Load KinesisVideoFrame
    jclass cls = env->GetObjectClass(kinesisVideoFrame);
    if (cls == NULL) {
        DLOGE("Failed to create KinesisVideoFrame class.");
        CHK(FALSE, STATUS_INVALID_OPERATION);
    }

    // Retrieve the methods and call it
    methodId = env->GetMethodID(cls, "getVersion", "()I");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getVersion");
    } else {
        pFrame->version = env->CallIntMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getIndex", "()I");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getIndex");
    } else {
        pFrame->index = env->CallIntMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getTrackId", "()J");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getTrackId");
    } else {
        pFrame->trackId = env->CallLongMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getFlags", "()I");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getFlags");
    } else {
        pFrame->flags = (FRAME_FLAGS) env->CallIntMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getDecodingTs", "()J");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getDecodingTs");
    } else {
        pFrame->decodingTs = env->CallLongMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getPresentationTs", "()J");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getPresentationTs");
    } else {
        pFrame->presentationTs = env->CallLongMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getDuration", "()J");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getDuration");
    } else {
        pFrame->duration = env->CallLongMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getSize", "()I");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getSize");
    } else {
        pFrame->size = (FRAME_FLAGS) env->CallIntMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
    }

    methodId = env->GetMethodID(cls, "getData", "()Ljava/nio/ByteBuffer;");
    if (methodId == NULL) {
        DLOGW("Couldn't find method id getData");
    } else {
        jobject byteBuffer = (jstring) env->CallObjectMethod(kinesisVideoFrame, methodId);
        CHK_JVM_EXCEPTION(env);
        pFrame->frameData = (PBYTE) env->GetDirectBufferAddress(byteBuffer);
    }

CleanUp:
    return STATUS_FAILED(retStatus) ? FALSE : TRUE;
}