From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 8267244637 for ; Sun, 20 Nov 2022 06:52:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B9B0668BC3B; Sun, 20 Nov 2022 08:50:54 +0200 (EET) Received: from out162-62-57-49.mail.qq.com (out162-62-57-49.mail.qq.com [162.62.57.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1A45F68BBA0 for ; Sun, 20 Nov 2022 08:50:40 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1668927038; bh=XeRbgW+n0OnOAIY6s1NU9qBVQGTmD9BSYhW4lwMLJJM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cUpXQ5w3mva1wTtXWxoUhQRokD8pfAVncGQjln7wNjQ01nt/PBXbbK0mArqJNVwGR T5Hg2oCTb5dZ7UB7YwKW0NVhz5EVBo4DdA35Ri2oZABW1gRTh2/NXmFBqfUBy1RNUB gY343eLO9q3uDmpsvWsLBEvUYn2mlQ/hisMsjHqU= Received: from localhost.localdomain ([14.153.77.200]) by newxmesmtplogicsvrszc2-1.qq.com (NewEsmtp) with SMTP id C8F0626E; Sun, 20 Nov 2022 14:50:15 +0800 X-QQ-mid: xmsmtpt1668927037tg8qaw80a Message-ID: X-QQ-XMAILINFO: MyIXMys/8kCtF3u4C86if76S3kJaefhly9SgFc4I717WJLZP0FGA9kDpiD6Hhx uj/tYUBa79RtN413p9TUHyz+eMOZC8RvAvWWHXW8QdWeRCXsyatEWDdQQr7eP37sm+NiDrXjGKY4 kDJxLFYalfUrj4fAaQsraWXtf1Fb0hwcwC7TnPdlSAmCxThw9UW8nPCyPSwIykU0mjHp9sPi2uNU OjHiofyI8QZe7J8FHnn+utpPKmNa4poYQGaviB+9faKA7HltAiJ6YPU3VjlTraLkU93rFCmwKEpw PeB1rf7amjruz/EXMy/sk8FaR1QdifgX6iX/M4DNfvCmdbPGqWV0yTnL6X+DUZU74NcAlNKExTvg YOYhSDD/nATd7FtiYVmCusdNHyma/LEei2uPwDZvAWgMdHQyMqMxzAsDEqiLaGFjPkbr+qgSbU68 tWxX84d9bmU5H9//UkqFUUCxIEvfGmn9Myhdp+n1HNatx60q9FmxHBy+Xjslt6sDvPuvTKu95ezO qtmQsIE+0cY+4rT2sxI+UPLCTCoRPHUYiedMosx1nQ8N2ne7g8zZb3x1bVXqA44tgmcgSAkMG0Dv e6ZyaEkDRZC2GERImO7h3nA/4LDb/Ib2FNex+zDxyDHbydhdl3N3eE+xpc1w2UjGod4Tf0sZ1lcz uwen3E5DmW0PjXIRBao89LdoWBTRGx7VR4AxfuBYMllwAjgBLBKFdAz5ZkptT7PgKeQvj066kB34 s42rdFiSfbmLPHk1LAv6fLu/A3wYpPiZhgs7qNdEIjw29sIa9GVm29x1HIEFYehM0Rjp7PA8ExHw O78Zag1nraw8CG/cjsl/BJEVLSJHq2jIzBjvNIDy8AfMJmixDRPUpDz1G1uBC00OSXSKBmIxQLP6 cyyLV/eszbYdPnZcIgEyuKJ8E5xptIGsYk8gp3b+bYyX3dB8xd5MVR3wOGCrRtaU6/M/aNJdtfCF g+y2DN5PAezFmQz4ZbTV81rXCPl3huakTVXALiT9tPMNHgCrDiKGFNgMPcsDa9+WRdvpmh2bg= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 20 Nov 2022 14:49:42 +0800 X-OQ-MSGID: <20221120064947.94540-8-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221120064947.94540-1-quinkblack@foxmail.com> References: <20221120064947.94540-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 07/12] avcodec/mediacodecdec: enable NDK mediacodec X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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@stupeflix.com, Zhao Zhili , aman@tmm1.net Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Zhao Zhili Signed-off-by: Zhao Zhili --- Changelog | 1 + libavcodec/mediacodecdec.c | 10 +++++++++- libavcodec/mediacodecdec_common.c | 23 +++++++++++++++++++---- libavcodec/mediacodecdec_common.h | 1 + libavcodec/version.h | 4 ++-- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/Changelog b/Changelog index 166aa8b5e7..eb8eb72127 100644 --- a/Changelog +++ b/Changelog @@ -20,6 +20,7 @@ version : - ViewQuest VQC decoder - backgroundkey filter - nvenc AV1 encoding support +- MediaCodec decoder via NDKMediaCodec version 5.1: diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index 2e07548b77..2c231d1a34 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -40,6 +40,7 @@ #include "hevc_parse.h" #include "hwconfig.h" #include "internal.h" +#include "jni.h" #include "mediacodec_wrapper.h" #include "mediacodecdec_common.h" @@ -54,6 +55,7 @@ typedef struct MediaCodecH264DecContext { int delay_flush; int amlogic_mpeg2_api23_workaround; + int use_ndk_codec; } MediaCodecH264DecContext; static av_cold int mediacodec_decode_close(AVCodecContext *avctx) @@ -310,7 +312,10 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) FFAMediaFormat *format = NULL; MediaCodecH264DecContext *s = avctx->priv_data; - format = ff_AMediaFormat_new(0); + if (s->use_ndk_codec < 0) + s->use_ndk_codec = !av_jni_get_java_vm(avctx); + + format = ff_AMediaFormat_new(s->use_ndk_codec); if (!format) { av_log(avctx, AV_LOG_ERROR, "Failed to create media format\n"); ret = AVERROR_EXTERNAL; @@ -388,6 +393,7 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) } s->ctx->delay_flush = s->delay_flush; + s->ctx->use_ndk_codec = s->use_ndk_codec; if ((ret = ff_mediacodec_dec_init(avctx, s->ctx, codec_mime, format)) < 0) { s->ctx = NULL; @@ -528,6 +534,8 @@ static const AVCodecHWConfigInternal *const mediacodec_hw_configs[] = { static const AVOption ff_mediacodec_vdec_options[] = { { "delay_flush", "Delay flush until hw output buffers are returned to the decoder", OFFSET(delay_flush), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, VD }, + { "ndk_codec", "Use MediaCodec from NDK", + OFFSET(use_ndk_codec), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VD }, { NULL } }; diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index 4a9e50b0df..ae82efaa0a 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -608,12 +608,27 @@ int ff_mediacodec_dec_init(AVCodecContext *avctx, MediaCodecDecContext *s, s->codec_name = ff_AMediaCodecList_getCodecNameByType(mime, profile, 0, avctx); if (!s->codec_name) { - ret = AVERROR_EXTERNAL; - goto fail; + // getCodecNameByType() can fail due to missing JVM, while NDK + // mediacodec can be used without JVM. + if (!s->use_ndk_codec) { + ret = AVERROR_EXTERNAL; + goto fail; + } + av_log(avctx, AV_LOG_INFO, "Failed to getCodecNameByType\n"); + } else { + av_log(avctx, AV_LOG_DEBUG, "Found decoder %s\n", s->codec_name); } - av_log(avctx, AV_LOG_DEBUG, "Found decoder %s\n", s->codec_name); - s->codec = ff_AMediaCodec_createCodecByName(s->codec_name, 0); + if (s->codec_name) + s->codec = ff_AMediaCodec_createCodecByName(s->codec_name, s->use_ndk_codec); + else { + s->codec = ff_AMediaCodec_createDecoderByType(mime, s->use_ndk_codec); + if (s->codec) { + s->codec_name = ff_AMediaCodec_getName(s->codec); + if (!s->codec_name) + s->codec_name = av_strdup(mime); + } + } if (!s->codec) { av_log(avctx, AV_LOG_ERROR, "Failed to create media decoder for type %s and name %s\n", mime, s->codec_name); ret = AVERROR_EXTERNAL; diff --git a/libavcodec/mediacodecdec_common.h b/libavcodec/mediacodecdec_common.h index 0b21129fee..0ab29036bd 100644 --- a/libavcodec/mediacodecdec_common.h +++ b/libavcodec/mediacodecdec_common.h @@ -70,6 +70,7 @@ typedef struct MediaCodecDecContext { bool delay_flush; atomic_int serial; + bool use_ndk_codec; } MediaCodecDecContext; int ff_mediacodec_dec_init(AVCodecContext *avctx, diff --git a/libavcodec/version.h b/libavcodec/version.h index 480dbd3b67..fcf589f61f 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,8 +29,8 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 52 -#define LIBAVCODEC_VERSION_MICRO 102 +#define LIBAVCODEC_VERSION_MINOR 53 +#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ -- 2.25.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".