static const AVClass amediaformat_class = {
.class_name = "amediaformat",
.item_name = av_default_item_name,
- .version = LIBAVCODEC_VERSION_INT,
+ .version = LIBAVUTIL_VERSION_INT,
};
struct FFAMediaFormat {
static const AVClass amediacodec_class = {
.class_name = "amediacodec",
.item_name = av_default_item_name,
- .version = LIBAVCODEC_VERSION_INT,
+ .version = LIBAVUTIL_VERSION_INT,
};
struct FFAMediaCodec {
struct JNIAMediaCodecListFields jfields = { 0 };
struct JNIAMediaFormatFields mediaformat_jfields = { 0 };
- jobject format = NULL;
- jobject codec = NULL;
jobject codec_name = NULL;
jobject info = NULL;
goto done;
}
+ if (codec_name) {
+ (*env)->DeleteLocalRef(env, codec_name);
+ codec_name = NULL;
+ }
+
/* Skip software decoders */
if (
strstr(name, "OMX.google") ||
strstr(name, "OMX.ffmpeg") ||
- strstr(name, "OMX.SEC") ||
+ (strstr(name, "OMX.SEC") && strstr(name, ".sw.")) ||
!strcmp(name, "OMX.qcom.video.decoder.hevcswvdec")) {
av_freep(&name);
goto done_with_type;
}
done:
- if (format) {
- (*env)->DeleteLocalRef(env, format);
- }
-
- if (codec) {
- (*env)->DeleteLocalRef(env, codec);
- }
-
if (codec_name) {
(*env)->DeleteLocalRef(env, codec_name);
}
ret = AVERROR_EXTERNAL;
}
+ (*env)->DeleteGlobalRef(env, codec->input_buffers);
+ codec->input_buffers = NULL;
+
+ (*env)->DeleteGlobalRef(env, codec->output_buffers);
+ codec->output_buffers = NULL;
+
(*env)->DeleteGlobalRef(env, codec->object);
codec->object = NULL;
ret = ff_jni_jstring_to_utf_chars(env, name, codec);
fail:
+ if (name) {
+ (*env)->DeleteLocalRef(env, name);
+ }
+
return ret;
}
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
- (*env)->CallVoidMethod(env, codec->object, codec->jfields.release_output_buffer_at_time_id, (jint)idx, timestampNs);
+ (*env)->CallVoidMethod(env, codec->object, codec->jfields.release_output_buffer_at_time_id, (jint)idx, (jlong)timestampNs);
if (ff_jni_exception_check(env, 1, codec) < 0) {
ret = AVERROR_EXTERNAL;
goto fail;
fail:
return ret;
}
+
+int ff_Build_SDK_INT(AVCodecContext *avctx)
+{
+ int ret = -1;
+ JNIEnv *env = NULL;
+ jclass versionClass;
+ jfieldID sdkIntFieldID;
+ JNI_GET_ENV_OR_RETURN(env, avctx, -1);
+
+ versionClass = (*env)->FindClass(env, "android/os/Build$VERSION");
+ sdkIntFieldID = (*env)->GetStaticFieldID(env, versionClass, "SDK_INT", "I");
+ ret = (*env)->GetStaticIntField(env, versionClass, sdkIntFieldID);
+ (*env)->DeleteLocalRef(env, versionClass);
+ return ret;
+}