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