summaryrefslogtreecommitdiff
path: root/libavcodec/mediacodec_wrapper.c
diff options
context:
space:
mode:
authorMatthieu Bouron <matthieu.bouron@stupeflix.com>2016-05-17 10:26:48 +0200
committerMatthieu Bouron <matthieu.bouron@stupeflix.com>2016-05-25 16:46:47 +0200
commitfbc9359d859fd45e9a2ed0a9259b54459c0820fd (patch)
tree332e7b5ec1eb6182e8ae22bef2ae50221d5dd19a /libavcodec/mediacodec_wrapper.c
parent493db04c4e4916c7eb0c7c4e212dd27d87f24acf (diff)
downloadffmpeg-fbc9359d859fd45e9a2ed0a9259b54459c0820fd.tar.gz
lavc/mediacodec: factorize static fields initialization
Diffstat (limited to 'libavcodec/mediacodec_wrapper.c')
-rw-r--r--libavcodec/mediacodec_wrapper.c167
1 files changed, 57 insertions, 110 deletions
diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c
index 6b3f905205..0f9dcbafa0 100644
--- a/libavcodec/mediacodec_wrapper.c
+++ b/libavcodec/mediacodec_wrapper.c
@@ -958,83 +958,101 @@ struct FFAMediaCodec {
int has_get_i_o_buffer;
};
-FFAMediaCodec* ff_AMediaCodec_createCodecByName(const char *name)
+static int codec_init_static_fields(FFAMediaCodec *codec)
{
+ int ret = 0;
int attached = 0;
JNIEnv *env = NULL;
- FFAMediaCodec *codec = NULL;
- jstring codec_name = NULL;
- codec = av_mallocz(sizeof(FFAMediaCodec));
- if (!codec) {
- return NULL;
- }
- codec->class = &amediacodec_class;
+ JNI_ATTACH_ENV_OR_RETURN(env, &attached, codec, AVERROR_EXTERNAL);
- env = ff_jni_attach_env(&attached, codec);
- if (!env) {
- av_freep(&codec);
- return NULL;
+ codec->INFO_TRY_AGAIN_LATER = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_try_again_later_id);
+ if ((ret = ff_jni_exception_check(env, 1, codec)) < 0) {
+ goto fail;
}
- if (ff_jni_init_jfields(env, &codec->jfields, jni_amediacodec_mapping, 1, codec) < 0) {
+ codec->BUFFER_FLAG_CODEC_CONFIG = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_codec_config_id);
+ if ((ret = ff_jni_exception_check(env, 1, codec)) < 0) {
goto fail;
}
- codec_name = ff_jni_utf_chars_to_jstring(env, name, codec);
- if (!codec_name) {
+ codec->BUFFER_FLAG_END_OF_STREAM = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_end_of_stream_id);
+ if ((ret = ff_jni_exception_check(env, 1, codec)) < 0) {
goto fail;
}
- codec->object = (*env)->CallStaticObjectMethod(env, codec->jfields.mediacodec_class, codec->jfields.create_by_codec_name_id, codec_name);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
+ if (codec->jfields.buffer_flag_key_frame_id) {
+ codec->BUFFER_FLAG_KEY_FRAME = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_key_frame_id);
+ if ((ret = ff_jni_exception_check(env, 1, codec)) < 0) {
+ goto fail;
+ }
}
- codec->object = (*env)->NewGlobalRef(env, codec->object);
- if (!codec->object) {
+ codec->CONFIGURE_FLAG_ENCODE = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.configure_flag_encode_id);
+ if ((ret = ff_jni_exception_check(env, 1, codec)) < 0) {
goto fail;
}
codec->INFO_TRY_AGAIN_LATER = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_try_again_later_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
+ if ((ret = ff_jni_exception_check(env, 1, codec)) < 0) {
goto fail;
}
- codec->BUFFER_FLAG_CODEC_CONFIG = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_codec_config_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
+ codec->INFO_OUTPUT_BUFFERS_CHANGED = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_output_buffers_changed_id);
+ if ((ret = ff_jni_exception_check(env, 1, codec)) < 0) {
goto fail;
}
- codec->BUFFER_FLAG_END_OF_STREAM = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_end_of_stream_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
+ codec->INFO_OUTPUT_FORMAT_CHANGED = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_output_format_changed_id);
+ if ((ret = ff_jni_exception_check(env, 1, codec)) < 0) {
goto fail;
}
- if (codec->jfields.buffer_flag_key_frame_id) {
- codec->BUFFER_FLAG_KEY_FRAME = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_key_frame_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
+fail:
+ JNI_DETACH_ENV(attached, NULL);
+
+ return ret;
+}
+
+FFAMediaCodec* ff_AMediaCodec_createCodecByName(const char *name)
+{
+ int attached = 0;
+ JNIEnv *env = NULL;
+ FFAMediaCodec *codec = NULL;
+ jstring codec_name = NULL;
+
+ codec = av_mallocz(sizeof(FFAMediaCodec));
+ if (!codec) {
+ return NULL;
}
+ codec->class = &amediacodec_class;
- codec->CONFIGURE_FLAG_ENCODE = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.configure_flag_encode_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
+ env = ff_jni_attach_env(&attached, codec);
+ if (!env) {
+ av_freep(&codec);
+ return NULL;
+ }
+
+ if (ff_jni_init_jfields(env, &codec->jfields, jni_amediacodec_mapping, 1, codec) < 0) {
goto fail;
}
- codec->INFO_TRY_AGAIN_LATER = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_try_again_later_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
+ codec_name = ff_jni_utf_chars_to_jstring(env, name, codec);
+ if (!codec_name) {
goto fail;
}
- codec->INFO_OUTPUT_BUFFERS_CHANGED = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_output_buffers_changed_id);
+ codec->object = (*env)->CallStaticObjectMethod(env, codec->jfields.mediacodec_class, codec->jfields.create_by_codec_name_id, codec_name);
if (ff_jni_exception_check(env, 1, codec) < 0) {
goto fail;
}
- codec->INFO_OUTPUT_FORMAT_CHANGED = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_output_format_changed_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
+ codec->object = (*env)->NewGlobalRef(env, codec->object);
+ if (!codec->object) {
+ goto fail;
+ }
+
+ if (codec_init_static_fields(codec) < 0) {
goto fail;
}
@@ -1093,40 +1111,7 @@ FFAMediaCodec* ff_AMediaCodec_createDecoderByType(const char *mime)
goto fail;
}
- codec->BUFFER_FLAG_CODEC_CONFIG = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_codec_config_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->BUFFER_FLAG_END_OF_STREAM = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_end_of_stream_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- if (codec->jfields.buffer_flag_key_frame_id) {
- codec->BUFFER_FLAG_KEY_FRAME = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_key_frame_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
- }
-
- codec->CONFIGURE_FLAG_ENCODE = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.configure_flag_encode_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->INFO_TRY_AGAIN_LATER = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_try_again_later_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->INFO_OUTPUT_BUFFERS_CHANGED = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_output_buffers_changed_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->INFO_OUTPUT_FORMAT_CHANGED = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_output_format_changed_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
+ if (codec_init_static_fields(codec) < 0) {
goto fail;
}
@@ -1189,45 +1174,7 @@ FFAMediaCodec* ff_AMediaCodec_createEncoderByType(const char *mime)
goto fail;
}
- codec->INFO_TRY_AGAIN_LATER = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_try_again_later_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->BUFFER_FLAG_CODEC_CONFIG = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_codec_config_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->BUFFER_FLAG_END_OF_STREAM = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_end_of_stream_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- if (codec->jfields.buffer_flag_key_frame_id) {
- codec->BUFFER_FLAG_KEY_FRAME = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.buffer_flag_key_frame_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
- }
-
- codec->CONFIGURE_FLAG_ENCODE = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.configure_flag_encode_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->INFO_TRY_AGAIN_LATER = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_try_again_later_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->INFO_OUTPUT_BUFFERS_CHANGED = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_output_buffers_changed_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
- goto fail;
- }
-
- codec->INFO_OUTPUT_FORMAT_CHANGED = (*env)->GetStaticIntField(env, codec->jfields.mediacodec_class, codec->jfields.info_output_format_changed_id);
- if (ff_jni_exception_check(env, 1, codec) < 0) {
+ if (codec_init_static_fields(codec) < 0) {
goto fail;
}