From patchwork Thu Dec 14 10:09:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 6769 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp6543540jah; Thu, 14 Dec 2017 02:16:49 -0800 (PST) X-Google-Smtp-Source: ACJfBosxhlqSIDN0ykNGu2VaLahi11S3xw6HTuGNKa0V7MI5sPmInbR6/tBXRB30jYUQq/gg1hzg X-Received: by 10.223.134.76 with SMTP id 12mr5683855wrw.137.1513246609038; Thu, 14 Dec 2017 02:16:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1513246609; cv=none; d=google.com; s=arc-20160816; b=KOD9ZZpRyzRYIAFW42u/B5AJ7FIcYbANnA6dDmI6z6hogpIi7zX6rC6KtQq5yECD49 nm73p06d5FrJ2LV3woC/zsrz3JQZGta23GJ1l68M9IN/Ib6xhQpI6p01oyy+596stZaw tjObs0OZhh1JnNKQdPNRL2yaLBHmQYmUwHfIMv/3CeisAfaMt0M3MkGoPhg+qfw6wz1y qgQwyDBu/YGC9fEfS/v+XJOPIYpCrHulWAnb+6//ZIV5kvJR7259Im0sEN3QXUN1vHxf M5vOLgsquJujOqKILXT3tq+JvdFQmvQMMVpG7m+KwvtS5jWC/JqaMTxNrYX4OCBtcCsY ZPEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=TkRcNx67Ke5xGqcpIiHF6OILMB10crPVYaYV610rvNc=; b=C2j/3G0+JKJA5Nk2LZK2i+Al15abHiUdNcGMpA8TCeieOqs6492WMVmdlHzAx+mV45 A4usy4kJ1e9023esZ/ds5HmAnRfj9HG8y79qKoHLV3NyvAFRc43C/k2WZsBCHB5ZQQWB Y6D81pPNlggOND/JWC/2LHG14cRiJ8OIYMMgW/tzryY7xMP4ZESYgzlAuGBBcpfdUdyV 5G3xdIp9xVslaLvD4qhwAIft1ZnOScF5hDL1t9UoQ01N9+Y/VZ5ukxFPQsCv8sKSFnnL LvzmJlHXeo2MfQ9KU5vrBObiT2tZ1cTFiUvd3go6g7OcbaCVCB9Vis0YLd5zI/8JWqpx dLZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ZQGkzIa1; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p95si2892324wrb.504.2017.12.14.02.16.48; Thu, 14 Dec 2017 02:16:48 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ZQGkzIa1; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CC87068A497; Thu, 14 Dec 2017 12:16:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B881568A488 for ; Thu, 14 Dec 2017 12:16:32 +0200 (EET) Received: by mail-wm0-f65.google.com with SMTP id t8so10214900wmc.3 for ; Thu, 14 Dec 2017 02:16:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=WLGAt4NxpL/LAxkvVQ5LcMPW+L1qRVY+7Zvbw/jWmhw=; b=ZQGkzIa1l+8kQTa44wtc6ho0JUDEdHfJ3pzdGLu78Fz3ka7Vq48AJXP5oIXS4x0bvt YIj5v5K9GN3AZlQjXsB9MLpC2W+BQk+kP1WP78ksMrt4YE71+jXyCV3ZxiX0/OfJw6sH C8e2oGIoAegjiaulO9qPRb0Rnh2oUVhX/ysjO1DA84GjCFhu0m+cc69xw88GJX4LV2h2 k5iLewrk4ZTObMLwJk/1GbRIu2LcqE9MpSibDegIcNnCXwc89qmSkm+YoXHaa+NzuF4G m5hxlQ1eSsgmKAaLnkj4sEDI82w+yfTr7AUppevx/F9c8uHs6p9xvUKMjxWECzf6hYv3 L7yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=WLGAt4NxpL/LAxkvVQ5LcMPW+L1qRVY+7Zvbw/jWmhw=; b=hfH6rXjoa2kD5WDCcyAzSn8yYjbHrcwmnPDTRR4XL2PSzTn+99I8+yuTl19eOo46l6 4ZEOTsyJqy3KkLxLYKX+JWsDWoXdUYI6ym04NWGRiLu/34Rwh7wct5xcsPppZ/nGDQFr 2+yN/I8mFQ7TqWIM6QtkMb9iaDbsx/9zgxt0EwfspqYZ04UjG0zZC3lloKO7vgz0DEM2 3JBMqfcGR2nOQHqnYZHEbtlLdIyLF1cdyH0voM2hNALNKPhp4BMpOWlTZZay+B6fSdgu E+tcCAZspDE71kFWfHHaTRgmo6CqbYJzKNpGlfjSn5hpFBwiPmoeUam1M/GLFCGLU9cJ lNTw== X-Gm-Message-State: AKGB3mIEyhm5JrX8iCgYG1+pjzf1LnhHpGWHhxK7EtdkRzYQUsG0Qhox mnYuuu4QNshtWN9TMa2V1f1HYg== X-Received: by 10.28.169.80 with SMTP id s77mr725319wme.141.1513246168032; Thu, 14 Dec 2017 02:09:28 -0800 (PST) Received: from kusa.lan (AMontsouris-653-1-284-55.w90-44.abo.wanadoo.fr. [90.44.35.55]) by smtp.gmail.com with ESMTPSA id f56sm5810018wra.75.2017.12.14.02.09.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Dec 2017 02:09:27 -0800 (PST) From: Matthieu Bouron To: ffmpeg-devel@ffmpeg.org Date: Thu, 14 Dec 2017 11:09:13 +0100 Message-Id: <20171214100914.10743-1-matthieu.bouron@gmail.com> X-Mailer: git-send-email 2.15.1 Subject: [FFmpeg-devel] [PATCH 1/2] lavc/mediacodec_wrapper: factorize MediaCodec creation functions X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Matthieu Bouron MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- 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: return ret; } -FFAMediaCodec* ff_AMediaCodec_createCodecByName(const char *name) -{ - int ret = -1; - JNIEnv *env = NULL; - FFAMediaCodec *codec = NULL; - jstring codec_name = 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; - } - - codec_name = ff_jni_utf_chars_to_jstring(env, name, codec); - if (!codec_name) { - goto fail; - } - - 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->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 (codec_name) { - (*env)->DeleteLocalRef(env, codec_name); - } - - 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; +#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; \ } -FFAMediaCodec* ff_AMediaCodec_createDecoderByType(const char *mime) -{ - int ret = -1; - JNIEnv *env = NULL; - FFAMediaCodec *codec = NULL; - jstring mime_type = 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; - } - - mime_type = ff_jni_utf_chars_to_jstring(env, mime, codec); - if (!mime_type) { - goto fail; - } - - object = (*env)->CallStaticObjectMethod(env, codec->jfields.mediacodec_class, codec->jfields.create_decoder_by_type_id, mime_type); - 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 (mime_type) { - (*env)->DeleteLocalRef(env, mime_type); - } - - 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; -} - -FFAMediaCodec* ff_AMediaCodec_createEncoderByType(const char *mime) -{ - int ret = -1; - JNIEnv *env = NULL; - FFAMediaCodec *codec = NULL; - jstring mime_type = 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; - } - - mime_type = ff_jni_utf_chars_to_jstring(env, mime, codec); - if (!mime_type) { - goto fail; - } - - object = (*env)->CallStaticObjectMethod(env, codec->jfields.mediacodec_class, codec->jfields.create_encoder_by_type_id, mime_type); - 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 (mime_type) { - (*env)->DeleteLocalRef(env, mime_type); - } - - 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; -} +DECLARE_FF_AMEDIACODEC_CREATE_FUNC(createCodecByName, create_by_codec_name_id) +DECLARE_FF_AMEDIACODEC_CREATE_FUNC(createDecoderByType, create_decoder_by_type_id) +DECLARE_FF_AMEDIACODEC_CREATE_FUNC(createEncoderByType, create_encoder_by_type_id) int ff_AMediaCodec_delete(FFAMediaCodec* codec) {