On Thu, 14 Dec 2017 11:09:13 +0100 Matthieu Bouron <[email protected]> wrote:
> ---
> libavcodec/mediacodec_wrapper.c | 262
> +++++++++++-----------------------------
> 1 file changed, 70 insertions(+), 192 deletions(-)
>
> diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c
> index f34450a6d8..4660e895ca 100644
> --- a/libavcodec/mediacodec_wrapper.c
> +++ b/libavcodec/mediacodec_wrapper.c
> @@ -1132,200 +1132,78 @@ fail:
> +#define DECLARE_FF_AMEDIACODEC_CREATE_FUNC(func, jfunc)
> \
> +FFAMediaCodec* ff_AMediaCodec_##func(const char *arg)
> \
> +{
> \
> + int ret = -1;
> \
> + JNIEnv *env = NULL;
> \
> + FFAMediaCodec *codec = NULL;
> \
> + jstring jarg = NULL;
> \
> + jobject object = NULL;
> \
> +
> \
> + codec = av_mallocz(sizeof(FFAMediaCodec));
> \
> + if (!codec) {
> \
> + return NULL;
> \
> + }
> \
> + codec->class = &amediacodec_class;
> \
> +
> \
> + env = ff_jni_get_env(codec);
> \
> + if (!env) {
> \
> + av_freep(&codec);
> \
> + return NULL;
> \
> + }
> \
> +
> \
> + if (ff_jni_init_jfields(env, &codec->jfields, jni_amediacodec_mapping,
> 1, codec) < 0) { \
> + goto fail;
> \
> + }
> \
> +
> \
> + jarg = ff_jni_utf_chars_to_jstring(env, arg, codec);
> \
> + if (!jarg) {
> \
> + goto fail;
> \
> + }
> \
> +
> \
> + object = (*env)->CallStaticObjectMethod(env,
> \
> + codec->jfields.mediacodec_class,
> \
> + codec->jfields.jfunc,
> \
> + jarg);
> \
> + if (ff_jni_exception_check(env, 1, codec) < 0) {
> \
> + goto fail;
> \
> + }
> \
> +
> \
> + codec->object = (*env)->NewGlobalRef(env, object);
> \
> + if (!codec->object) {
> \
> + goto fail;
> \
> + }
> \
> +
> \
> + if (codec_init_static_fields(codec) < 0) {
> \
> + goto fail;
> \
> + }
> \
> +
> \
> + if (codec->jfields.get_input_buffer_id &&
> codec->jfields.get_output_buffer_id) { \
> + codec->has_get_i_o_buffer = 1;
> \
> + }
> \
> +
> \
> + ret = 0;
> \
> +fail:
> \
> + if (jarg) {
> \
> + (*env)->DeleteLocalRef(env, jarg);
> \
> + }
> \
> +
> \
> + if (object) {
> \
> + (*env)->DeleteLocalRef(env, object);
> \
> + }
> \
> +
> \
> + if (ret < 0) {
> \
> + ff_jni_reset_jfields(env, &codec->jfields, jni_amediacodec_mapping,
> 1, codec); \
> + av_freep(&codec);
> \
> + }
> \
> +
> \
> + return codec;
> \
> }
>
Such long macros are very ugly. And the only macro argument that is
used in the body is jfunc. Would it be possible to move most of the
macro into a proper function, with jfunc as pointer argument or so?
_______________________________________________
ffmpeg-devel mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
