From patchwork Sun Nov 20 06:49:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39355 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp1406850pzb; Sat, 19 Nov 2022 22:52:07 -0800 (PST) X-Google-Smtp-Source: AA0mqf7i3SuPt74LlkQ4XsxkSfIrK9z2lpHJw/r0JwsOpY09dVa6O2P5aVNuqbO1c5EF+cGBnCaL X-Received: by 2002:a17:907:c24a:b0:7ac:2e16:bc31 with SMTP id tj10-20020a170907c24a00b007ac2e16bc31mr11255843ejc.242.1668927126870; Sat, 19 Nov 2022 22:52:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668927126; cv=none; d=google.com; s=arc-20160816; b=B5CSZnlNaEy2JZ5gluOnB0SLd1d0jiVBukaBTyGElO2BUuNRi5uBH4qJFCBlYqRRJX EfNsjHe5iht8pJvDsyDvw49yXPQRpr8nrSZdThJSIeLErCvkD+q4UHY/wuch4PwVLr1Z U+fOWmjDqDs5/vosNKKtq431G/OFYemFR/uXLnEaDuTEX/skGWpFGf4QlNqTvu3n9LB6 HkoWZ71rMsD2bTt9qt0EefufuTjl1oIm+U0VBRgr4IeHzxHFXFzSdXmU0D6MfQ99FQDr oD4O0oDjxQYGlVBzyM58wvi24DC5tbFG0ATBm6ZTDYeZsb/sVvXGNYHZ9I+neihlXkDG Wzrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=GU28Hxbpi4f+zmymUfFYyN1Df+1kRxee1ISsK0y7doQ=; b=Dbyls1E6YyDmUbdN/ufKRzQPvdnl1TlpgNSFVkTXg67o4AzrZJ4bQniPvuW8MKeYmc Xs5NemyjSTXfuQa1lhVBLbk+uxq8eOYltLmUogcc7+PdYCpWaf4hsmLjygl3Sn9KjuOg gehhR79HuSqXdv5CVsRqzTtejKPsbW77aTdi/3lydw/+ysRnScg3vrm3Ne1hbPyfqGx+ /5POBduisinJYPPd889+vycLGSTH57QV+B7AXOXP4l7sg59C3taI6GTjyZs9VS0WXlFk AnIOELhLiM8Jym0jNNQf3QJFmgoUXPq0cTZ1bxOGD+zMHcmVeSM/a3Temu1+ItR3qFcO S/9g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=cUpXQ5w3; 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=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id h9-20020a056402280900b0046189831142si7568243ede.7.2022.11.19.22.52.06; Sat, 19 Nov 2022 22:52:06 -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=@foxmail.com header.s=s201512 header.b=cUpXQ5w3; 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=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E6B5E68BC64; Sun, 20 Nov 2022 08:50:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: vWlZgDqZ7RCd 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, \ From patchwork Sun Nov 20 06:49:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39356 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp1406887pzb; Sat, 19 Nov 2022 22:52:14 -0800 (PST) X-Google-Smtp-Source: AA0mqf7PSM/A5JcyHX3gHPBmVPZQ7KyHGJh+mY9qdRLpddWsBlb9jZ08ocOTsuGrWGVYhI3ZrtYa X-Received: by 2002:a17:906:8c4:b0:7ae:fbe6:e7ca with SMTP id o4-20020a17090608c400b007aefbe6e7camr11491750eje.408.1668927134795; Sat, 19 Nov 2022 22:52:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668927134; cv=none; d=google.com; s=arc-20160816; b=ZpVjILxChR08neeISGbx3pe5CwMCaBj311v3luxDvIKC1cDgP8fOTTUBRkgcGvyUDR P0LwdmRwqbGFZ9Jou6ktVqhLY3ZipA6+V3uuGmjUxK/m7y4j6ob9qJHiV7mL47buKpVQ bgKgaT18uVI4v6Vq8IvEESd+PdyoIVs806RrRTY/MSEOJABG9KaNs7vM4s1jmfxMuc3h IJQKUnKUY5XOW2F+geMWqfXqqnHRtkBZe/07RmC9cvQANvCD14gFjRGiXdhL8v+F4Tfn gfJgXonKLZJqTsaosMZXRYTG7+4O7BiLF51yYBVfclxZjfyeKfIELocxR3ovm1eAELER gWvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=oX0qEIxxo18FGAsTtgg5TjNumd1ndlJtvNUbjycQBo4=; b=DbxHX0zocLo3ebLHLQM5FNQCPh5d3dEX8dZSc3HNQ8faYy1hvDK5Qxp03BawlntCDU i0w4uEgX8DTCEiASrXr+h8lOlXZoPOM7f8D9SoBbGakbQsCxlg1Qv6bCN65M6u44mUZb YjKJp/6rwtPYtz4bsLJOVS6eVDjBubvNcQO+fEHxe0A5LsYE6K5MfiFnQqHnKb/70jow OJLThJaIRR6yMG6f8u4CjHY/hQU5WDXZEOrzaDCo3xoTH0bxdF9KldFnp5GiwdTBWFZS RVTW6rwavoARhaBtnanOYYaVqIDg/vr/B20u2Z775DiLxoMwPAdcKDtwxIf277K1Dty7 lStA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="xP/aHfLF"; 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=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id em5-20020a056402364500b0045d292ef641si3602689edb.493.2022.11.19.22.52.14; Sat, 19 Nov 2022 22:52:14 -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=@foxmail.com header.s=s201512 header.b="xP/aHfLF"; 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=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EA6E768BC70; Sun, 20 Nov 2022 08:50:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A65AB68BBB0 for ; Sun, 20 Nov 2022 08:50:41 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1668927039; bh=5Ri5rc1eAkHl+juMSGZx4mt+uhR3FLzwZsKSSEiozzM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=xP/aHfLF55vUZmbhXC7lf2TceFfzwTk8Mj6M9gDge0jUoXYl7wv/7KrmV6Pkt5Rk7 ZjZKmKxs2lcVjHjOKzEBbsf3g6gO3Uq8LzVc/mfgDnFtQXgzaJ5U6NGVhFWFQgMivj T7va2UlgTU7V5KLiFaMG63sJtyCEL4Dv6QJB10WM= 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: xmsmtpt1668927038tq7ll02b6 Message-ID: X-QQ-XMAILINFO: Nfm/+M6ONQ57+w/TWXDBVmaXymjLZs8BbOZQy5IxqTFT8qx7BQr4Pcbew1H8lS IVbMOUUAgapHTN70qjPKQahZ7XN004K66VOQT1BZpbGfuBVJary6A01/SlHMFgdnQ8jMCQ3MS+qU whFtJ7QpJz73HG/37PD4mn3bPYBvQcjN5YZgavfFyrpQMcfbeots8BCq9OuSj+Pp+z0WiryqdKDI kKMTsEA8Op47d3Fgf9Xf3c+DbTIpgOx5+vnk2zOzkyS9901ZfH+xi97H6H7IvAscNBmCnbB1lrqG frBnpHmumHbnBBSn2iscd4pYR8oXD/729T5Z4MweFJlPBLiXCqc1JvZm+HiGbMbOOTX0Ni9uAzmY CD1W1NARYlB9OSaedXhMTlDKdL+vfFTCv8EFdsyidMtWNcH/ZMHV061pvT+UjWsPyWwtQc6HQmfO szCtzVWWh3ZBzFNa69LkiDDiLdL3KD7XbD+WgOmLMIyLUXcmYADJ384XXyQ+qhHHFO9cIpcOE+ts Qrgwu2Lg05vPsyX0j4UMmTS/FRWaAPPlPnFHOPzdFbNhdp+72BJl1Ig9pBCrdV9EK1JcWCWPurwM aTpVaL9hCBj/mxGzspAHcEFIX2dcexKsvcVefjNsT+zb+fxU3HBDMqro6D0D2KeFO7EYxgWp2oQ7 /nG+Kc9mNPIgFKLN0GBEdTuXzvZb+PKZY6/ooZmW7XltC+xeEbYJycGBkeUT6ww9xP6ID1Zelj8K OqIlXVMgA3BC3RMQrtnRjSH79LUIXzzTcj34f9pT05FDPs+GCRcshg2zabSU44WmQoupFQZg0RCv fRHBfiiFsefqWLCnA9i0p3ZCbUTZhcGePhtjgxjU1j0iWhUxUScIKg+OBJnwm0GUDTwk980GE/r9 VsSRFtYLWvrRDntZpKrisuP/gGbGcCVLFNAxsf1/NRjC4ODEdaO7+3dwouoYgUXiV6/8hs03sBiE Rc0Mvpx8uyRovGXVyESuIV7yYUu0y9WLa+Rgt00iqOKAlz+HSXhg== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 20 Nov 2022 14:49:43 +0800 X-OQ-MSGID: <20221120064947.94540-9-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 08/12] avutil/hwcontext_mediacodec: add ANativeWindow support 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ALUf3fRWULRu From: Zhao Zhili Signed-off-by: Zhao Zhili --- libavutil/hwcontext_mediacodec.c | 56 +++++++++++++++++++++++++++++++- libavutil/hwcontext_mediacodec.h | 11 +++++++ libavutil/version.h | 2 +- 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/libavutil/hwcontext_mediacodec.c b/libavutil/hwcontext_mediacodec.c index b0d8993e15..bb1779d34d 100644 --- a/libavutil/hwcontext_mediacodec.c +++ b/libavutil/hwcontext_mediacodec.c @@ -18,12 +18,24 @@ #include "config.h" +#include +#include +#include + #include "buffer.h" #include "common.h" #include "hwcontext.h" #include "hwcontext_internal.h" #include "hwcontext_mediacodec.h" +typedef struct MediaCodecDeviceContext { + AVMediaCodecDeviceContext ctx; + + void *libmedia; + media_status_t (*create_surface)(ANativeWindow **surface); +} MediaCodecDeviceContext; + + static int mc_device_create(AVHWDeviceContext *ctx, const char *device, AVDictionary *opts, int flags) { @@ -35,13 +47,55 @@ static int mc_device_create(AVHWDeviceContext *ctx, const char *device, return 0; } +static int mc_device_init(AVHWDeviceContext *ctx) +{ + MediaCodecDeviceContext *s = ctx->hwctx; + AVMediaCodecDeviceContext *dev = (AVMediaCodecDeviceContext *)s; + ANativeWindow *native_window = NULL; + + if (dev->surface) + return 0; + + if (dev->native_window) + return 0; + + s->libmedia = dlopen("libmediandk.so", RTLD_NOW); + if (!s->libmedia) + return AVERROR_UNKNOWN; + + s->create_surface = dlsym(s->libmedia, "AMediaCodec_createPersistentInputSurface"); + if (!s->create_surface) + return AVERROR_UNKNOWN; + + s->create_surface(&native_window); + dev->native_window = native_window; + return 0; +} + +static void mc_device_uninit(AVHWDeviceContext *ctx) +{ + MediaCodecDeviceContext *s = ctx->hwctx; + AVMediaCodecDeviceContext *dev = ctx->hwctx; + if (!s->libmedia) + return; + + if (dev->native_window) { + ANativeWindow_release(dev->native_window); + dev->native_window = NULL; + } + dlclose(s->libmedia); + s->libmedia = NULL; +} + const HWContextType ff_hwcontext_type_mediacodec = { .type = AV_HWDEVICE_TYPE_MEDIACODEC, .name = "mediacodec", - .device_hwctx_size = sizeof(AVMediaCodecDeviceContext), + .device_hwctx_size = sizeof(MediaCodecDeviceContext), .device_create = mc_device_create, + .device_init = mc_device_init, + .device_uninit = mc_device_uninit, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_MEDIACODEC, diff --git a/libavutil/hwcontext_mediacodec.h b/libavutil/hwcontext_mediacodec.h index 101a9806d5..920e17764f 100644 --- a/libavutil/hwcontext_mediacodec.h +++ b/libavutil/hwcontext_mediacodec.h @@ -31,6 +31,17 @@ typedef struct AVMediaCodecDeviceContext { * This is the default surface used by decoders on this device. */ void *surface; + + /** + * Pointer to ANativeWindow. + * + * It both surface and native_window is NULL, try to create it + * automatically if OS support. + * + * It can be used as output surface for decoder and input surface for + * encoder. + */ + void *native_window; } AVMediaCodecDeviceContext; #endif /* AVUTIL_HWCONTEXT_MEDIACODEC_H */ diff --git a/libavutil/version.h b/libavutil/version.h index 9b9eea2946..3b616ea489 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 42 +#define LIBAVUTIL_VERSION_MINOR 43 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Sun Nov 20 06:49:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39357 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp1406913pzb; Sat, 19 Nov 2022 22:52:23 -0800 (PST) X-Google-Smtp-Source: AA0mqf5+l+/4yECZKmuTb/DPa/raSueeoofDce+Rur23y4aB8UMBoQAO02PjveE/ZE6SST4F6bY/ X-Received: by 2002:a05:6402:3893:b0:461:b033:90ac with SMTP id fd19-20020a056402389300b00461b03390acmr9972797edb.257.1668927143252; Sat, 19 Nov 2022 22:52:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668927143; cv=none; d=google.com; s=arc-20160816; b=asXtVylZrYp7zEHjjv2u2yxFzOyDCDqbvL8L//sksXZPbxu5SjRliF9kBuifgy8yvG k6xFU2/TEbM7I4YefnlMDPXHkThFsKdl2hu8ZWcEYUPq6MhUk4sH+Sc6inZWy0DmLYJQ EPeHgat1X/fO/kW1yu4MiQwn4HvcdurnywE2+xTqw9BxIE21QYcCcLI5uhWAmVcclLFy yBvhQCX3MDLkYtoYPckkW9MU163XFbmReZxMqx4tfcELVf1N66eulbcTUmQqekasWEun xQYZrnrzVBr/nB0UnPNLq5VS9x4wCCdSnY0a6mG4SWhrzu+KTp0Xym1t9MV8lkcqv4dH sNYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=FHyWQQgaIslgJ5AgkEOKh8JCBScWHiZ5ciMYe4D+31E=; b=DEprn5RUeSHlroDBBF6afCWCUg4FnFPBMnIWMuGzJKWo4YTAnyY33gFMaTZ3b836/C gaMIJmc5Ipqn39FtNge49dqyjRTt9+65V82ly+Nmmppn4SBSNFxD0fGFHGZM0Hlpjd5N ZWtU9orX9ybN4Lj5B7DDUgHRjHypx0W68GcmRgdVZZ0P56nN5sB/3tvFbllnlwtIECZ5 dNrZ0aDnDm8/ERg/h33XNnlIZQsIiGcBPsQOy6adEmpbcnOxBMfQLGIi6mE6WFU2Ot+D XitNceH8McolkvsBwusYKv++f4DfoZG5o1JkL74QF6jpVfBhfY/9bE+yajK9POrUQEpu E+BA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=iy9VAu1w; 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=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d5-20020a056402400500b00456b734ceebsi6871442eda.436.2022.11.19.22.52.23; Sat, 19 Nov 2022 22:52:23 -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=@foxmail.com header.s=s201512 header.b=iy9VAu1w; 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=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E64FC68BC82; Sun, 20 Nov 2022 08:50:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5F06C68BA72 for ; Sun, 20 Nov 2022 08:50:42 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1668927040; bh=dnNzz9q6YqLn9b3O4NcQ4oHCejaoBxJeWn/2F+epSIg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=iy9VAu1wndQgo3b0UJSHcfAyJS2ZB8A6epiJyfkdNMC+ZNVcK4OZff8Pp3b9gLIJ1 vCPQ0o77lQOrYMplAtpOvyJqFM7JKiCIRfNIEzlO2saEGTlPWETBlpXptRpC/GI81f YQJEyEShVXu3dRTyWINZaiJ3kxI02MQJNap8iXL8= 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: xmsmtpt1668927039t32w5mggb Message-ID: X-QQ-XMAILINFO: NDgMZBR9sMma/4cFPIyQeoX2C+ERwwISY4oUXrkVyuOcWMk3uTG0Ara1TeCkPt BxUGMk6q5d4bpiP0ajnuXf092fwB/hRHE2dqmaW82rqVpi8QgIYjnRHzL0Jeq0Izbf7DIsXoU7qk 07VioJjAqYMfL/OBdY3SaAScxoxXtQdn+IOoIxzts/5Vi0mx8kNvGiq3hQVhUIh045igdQN/jDVu uWYEq+3lG+/YLrwiCFRXYR2X3+GyrUFCqVD/8DChy0GIZGCMCkwrw4p/MG9OBqvDjYooaOKWcn6c XPD+mPxLA1FfYW3bc3y5LLZr+vJucDVdBYPtE4zMAG5bq7tLvXS/0iabQetEEwBmFLcGLuG7TnKk eOeYjDzR71xbvfOkvKO/VJVhtap2SskUnZGdk64FyLUkGaT/Zqjp/LIRmsYRwT+IJ70+D7jEtv4m 0zewisXlOrZaHrziegWghpIZDBzyik+1qnJyLqsvRwRFQrxAHzqUy/XTBQ/SZEwBwQ40FqulWK5d yCHsRnSx/R9bZQL1G7VDeDyAf18UVOUIMKORWzPgy1tdJosDG10zkcR59tofPkM8/VqJ5lMP7Lkk YWIZL3sNPfzwU0yD2b9tjX9kt5hK/vS+KIdjrDKVyBkLwnRyjrkeNt7RFqPqcHQaxbDw7qQXtOGq nATnkJXdwg9sb8prRe1I28opdimV9dPDASzzujWiHyy87di1mV48il05cTA+2Kv+KpTSeThh6WQz /xJTeA1wY9PCuYijeGnv4PlGPRdqE1sQK/hEQj9+dzlvEKQDJUZyoMyskQhWUTUE2h3G3pclT0c4 5UtzwQZGfzg1lCLHe0jGO1Ce3bgflJNn4tvr8Cm73jNXMJvIEdYwqKoC+7iLJO86YSEpXxHlog/c OFcjtSMqqn3oX2QsHXFms8t7NJlhvZHOXz3sZdaPsTVVfpg7MOdj/AHP6BDZXssmcMPSj+9ijj+f ljPh4ewWxtR6vP3BAQBYNViYtYw8XrnBpS+OswaVXzM+ARbScry4jLUVrobll/UKNfTJxo1j0= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 20 Nov 2022 14:49:44 +0800 X-OQ-MSGID: <20221120064947.94540-10-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 09/12] avcodec/mediacodec: add ANativeWindow support 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 3NQxDeU+C2sl From: Zhao Zhili ANativeWindow can be used without JVM. --- libavcodec/mediacodec_surface.c | 46 ++++++++++++++++++++++++------- libavcodec/mediacodec_surface.h | 8 ++++-- libavcodec/mediacodec_wrapper.c | 30 +++++++++++++++----- libavcodec/mediacodec_wrapper.h | 8 ++++-- libavcodec/mediacodecdec_common.c | 4 +-- 5 files changed, 72 insertions(+), 24 deletions(-) diff --git a/libavcodec/mediacodec_surface.c b/libavcodec/mediacodec_surface.c index 09a42295d2..ef41cdafa7 100644 --- a/libavcodec/mediacodec_surface.c +++ b/libavcodec/mediacodec_surface.c @@ -20,33 +20,59 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include +#include "libavutil/mem.h" #include "ffjni.h" #include "mediacodec_surface.h" -FFANativeWindow *ff_mediacodec_surface_ref(void *surface, void *log_ctx) +FFANativeWindow *ff_mediacodec_surface_ref(void *surface, void *native_window, void *log_ctx) { - JNIEnv *env = NULL; + FFANativeWindow *ret; - env = ff_jni_get_env(log_ctx); - if (!env) { + ret = av_mallocz(sizeof(*ret)); + if (!ret) return NULL; + + if (surface) { + JNIEnv *env = NULL; + + env = ff_jni_get_env(log_ctx); + if (env) + ret->surface = (*env)->NewGlobalRef(env, surface); + } + + if (native_window) { + ANativeWindow_acquire(native_window); + ret->native_window = native_window; } - return (*env)->NewGlobalRef(env, surface); + if (!ret->surface && !ret->native_window) { + av_log(log_ctx, AV_LOG_ERROR, "Both surface and native_window are NULL\n"); + av_freep(&ret); + } + + return ret; } int ff_mediacodec_surface_unref(FFANativeWindow *window, void *log_ctx) { - JNIEnv *env = NULL; + if (!window) + return 0; - env = ff_jni_get_env(log_ctx); - if (!env) { - return AVERROR_EXTERNAL; + if (window->surface) { + JNIEnv *env = NULL; + + env = ff_jni_get_env(log_ctx); + if (env) + (*env)->DeleteGlobalRef(env, window->surface); } - (*env)->DeleteGlobalRef(env, window); + if (window->native_window) + ANativeWindow_release(window->native_window); + + av_free(window); return 0; } diff --git a/libavcodec/mediacodec_surface.h b/libavcodec/mediacodec_surface.h index 933dc2bf51..e2ac1c9057 100644 --- a/libavcodec/mediacodec_surface.h +++ b/libavcodec/mediacodec_surface.h @@ -25,10 +25,12 @@ #include "libavcodec/avcodec.h" -struct FFANativeWindow; -typedef struct FFANativeWindow FFANativeWindow; +typedef struct FFANativeWindow { + void *surface; + void *native_window; +} FFANativeWindow; -FFANativeWindow *ff_mediacodec_surface_ref(void *surface, void *log_ctx); +FFANativeWindow *ff_mediacodec_surface_ref(void *surface, void *native_window, void *log_ctx); int ff_mediacodec_surface_unref(FFANativeWindow *window, void *log_ctx); #endif /* AVCODEC_MEDIACODEC_SURFACE_H */ diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c index b12aced711..284d615980 100644 --- a/libavcodec/mediacodec_wrapper.c +++ b/libavcodec/mediacodec_wrapper.c @@ -1371,12 +1371,17 @@ fail: return ret; } -static int mediacodec_jni_configure(FFAMediaCodec* ctx, const FFAMediaFormat* format_ctx, void* surface, void *crypto, uint32_t flags) +static int mediacodec_jni_configure(FFAMediaCodec *ctx, + const FFAMediaFormat* format_ctx, + FFANativeWindow* window, + void *crypto, + uint32_t flags) { int ret = 0; JNIEnv *env = NULL; FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx; const FFAMediaFormatJni *format = (FFAMediaFormatJni *)format_ctx; + jobject *surface = window ? window->surface : NULL; JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL); @@ -2151,16 +2156,27 @@ static int mediacodec_ndk_delete(FFAMediaCodec* ctx) return ret; } -static int mediacodec_ndk_configure(FFAMediaCodec* ctx, const FFAMediaFormat* format_ctx, void* surface, void *crypto, uint32_t flags) +static int mediacodec_ndk_configure(FFAMediaCodec* ctx, + const FFAMediaFormat* format_ctx, + FFANativeWindow* window, + void *crypto, + uint32_t flags) { FFAMediaCodecNdk *codec = (FFAMediaCodecNdk *)ctx; FFAMediaFormatNdk *format = (FFAMediaFormatNdk *)format_ctx; media_status_t status; + ANativeWindow *native_window = NULL; - if (surface) { - JNIEnv *env = NULL; - JNI_GET_ENV_OR_RETURN(env, ctx, -1); - codec->window = ANativeWindow_fromSurface(env, surface); + if (window) { + if (window->surface) { + JNIEnv *env = NULL; + JNI_GET_ENV_OR_RETURN(env, ctx, -1); + native_window = ANativeWindow_fromSurface(env, window->surface); + // Save for release + codec->window = native_window; + } else if (window->native_window) { + native_window = window->native_window; + } } if (format_ctx->class != &amediaformat_ndk_class) { @@ -2168,7 +2184,7 @@ static int mediacodec_ndk_configure(FFAMediaCodec* ctx, const FFAMediaFormat* fo return AVERROR(EINVAL); } - status = codec->configure(codec->impl, format->impl, codec->window, NULL, flags); + status = codec->configure(codec->impl, format->impl, native_window, NULL, flags); if (status != AMEDIA_OK) { av_log(codec, AV_LOG_ERROR, "configure failed, %d\n", status); return AVERROR_EXTERNAL; diff --git a/libavcodec/mediacodec_wrapper.h b/libavcodec/mediacodec_wrapper.h index b9b882f243..7cf3f4aecd 100644 --- a/libavcodec/mediacodec_wrapper.h +++ b/libavcodec/mediacodec_wrapper.h @@ -27,6 +27,7 @@ #include #include "avcodec.h" +#include "mediacodec_surface.h" /** * The following API around MediaCodec and MediaFormat is based on the @@ -163,7 +164,7 @@ struct FFAMediaCodec { FFAMediaCodec* (*createEncoderByType)(const char *mime_type); int (*delete)(FFAMediaCodec* codec); - int (*configure)(FFAMediaCodec* codec, const FFAMediaFormat* format, void* surface, void *crypto, uint32_t flags); + int (*configure)(FFAMediaCodec* codec, const FFAMediaFormat* format, FFANativeWindow* surface, void *crypto, uint32_t flags); int (*start)(FFAMediaCodec* codec); int (*stop)(FFAMediaCodec* codec); int (*flush)(FFAMediaCodec* codec); @@ -202,7 +203,10 @@ FFAMediaCodec* ff_AMediaCodec_createCodecByName(const char *name, int ndk); FFAMediaCodec* ff_AMediaCodec_createDecoderByType(const char *mime_type, int ndk); FFAMediaCodec* ff_AMediaCodec_createEncoderByType(const char *mime_type, int ndk); -static inline int ff_AMediaCodec_configure(FFAMediaCodec* codec, const FFAMediaFormat* format, void* surface, void *crypto, uint32_t flags) +static inline int ff_AMediaCodec_configure(FFAMediaCodec *codec, + const FFAMediaFormat *format, + FFANativeWindow *surface, + void *crypto, uint32_t flags) { return codec->configure(codec, format, surface, crypto, flags); } diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c index ae82efaa0a..80089439ea 100644 --- a/libavcodec/mediacodecdec_common.c +++ b/libavcodec/mediacodecdec_common.c @@ -589,14 +589,14 @@ int ff_mediacodec_dec_init(AVCodecContext *avctx, MediaCodecDecContext *s, if (device_ctx->type == AV_HWDEVICE_TYPE_MEDIACODEC) { if (device_ctx->hwctx) { AVMediaCodecDeviceContext *mediacodec_ctx = (AVMediaCodecDeviceContext *)device_ctx->hwctx; - s->surface = ff_mediacodec_surface_ref(mediacodec_ctx->surface, avctx); + s->surface = ff_mediacodec_surface_ref(mediacodec_ctx->surface, mediacodec_ctx->native_window, avctx); av_log(avctx, AV_LOG_INFO, "Using surface %p\n", s->surface); } } } if (!s->surface && user_ctx && user_ctx->surface) { - s->surface = ff_mediacodec_surface_ref(user_ctx->surface, avctx); + s->surface = ff_mediacodec_surface_ref(user_ctx->surface, NULL, avctx); av_log(avctx, AV_LOG_INFO, "Using surface %p\n", s->surface); } } From patchwork Sun Nov 20 06:49:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39354 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp1406820pzb; Sat, 19 Nov 2022 22:51:58 -0800 (PST) X-Google-Smtp-Source: AA0mqf7+zRrpLO2VMyv1BWm9SESmky7pDDY0U3QWi1TdOylmEswnM/6XeZKZVcC2lx1J3PIyHjMK X-Received: by 2002:a05:6402:2070:b0:467:5e4f:591 with SMTP id bd16-20020a056402207000b004675e4f0591mr11603666edb.414.1668927118373; Sat, 19 Nov 2022 22:51:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668927118; cv=none; d=google.com; s=arc-20160816; b=sVwzyUUJDfcf5VIs0BNlh1yCSKqWRxSZOvqz42V3T+ISqeRI9n4rx7iGarhzrgaQqU yV9I8xG3rK1PlPb0RaoM2ovqPMiFzmicV4Aqi1HQU54upfdBqxzyOUHTxx9oXAlYTJ/+ c8nHinTxT2iUB9W9ccRT+yil1HeGeppMt/ZnGbt4eHnM040e3k7g6R4lRanAueFu1e20 sZhKWI0BdLjRAfSr2YhAwOSTj89+S7mW8KXBLUJTjqEVi/y8rBNMKs/l0GarjjPlnyhf sl6+GfgKYoruQGqVzJVZg96ORCC6S6d3SPTWzVT07yihqPR5t4DwjS2c5Q/ZFKlEKkE6 ZW+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=261BrOTgxJ/0eNVJUFpkAMTNNeq/QgZfl69LcJkVwGY=; b=XQRqBHIMwJ2LkjsA92uTAWTKXsiXHwUti4YuFlk5PvWT2vN0P80MJ5dtY/FvMoFVyo vf6AgcCO07a+DXOTjGcvp3Axb5M8FtjLsDqyF2bvd1C5phcGlDNDmaAptUWv8YbNx864 aFKjY3zmYk4VC0IPwG98kBixrHZ6cj6t3S3Pz+tlW0cH2zm0UIv1OiBBV+7Mli+pXb8n C2lyksulOB7IM6qa4zMR/MRzkjBWpy9jaxO7LqgPJNpLmQU+TmTmJRlfYxCtW+AG7Bgp megVkXSA2QY9j9Ysb2VV4xKEhnhUM+DTmJZZfB6Djrqv4ZgwKKR9T1lL0wbQ6i+98NWc bFpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=gk+9MRuE; 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=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id he39-20020a1709073da700b00780636887fesi8181595ejc.797.2022.11.19.22.51.58; Sat, 19 Nov 2022 22:51:58 -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=@foxmail.com header.s=s201512 header.b=gk+9MRuE; 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=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B382768BC28; Sun, 20 Nov 2022 08:50:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E045D68BA06 for ; Sun, 20 Nov 2022 08:50:44 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1668927042; bh=RvlXlG3JvaftXRL9tXCc7hlO4tEzDAecXcy1qiogfAc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=gk+9MRuEXyyofPsxyhR5d4t8pvs8SVuAQtnJN/1PvwSL1IEbAdZfk9Z+IalIrX49P OwLNkQOedIK/MwUMu/hDD9kS+UnIbvSMAbP+wbq3kjIYS0aTn+g0GdWvhCr2F5yW2D uGOPwcVPWW9qtrR5NdrZNs0lZKBbLx2cubjZuvyE= 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: xmsmtpt1668927041t73z75o7m Message-ID: X-QQ-XMAILINFO: N5sfBKY/oC4k+ApRJ/Ihh/0sWJmonz+KuHRCH0Bh3cd1oZWDNAAgcP5Wl+zoOo bMkFiNerTrFwW0nG91NimLVbpvQkT4sfjH1PG4IqBNNoxOr8EzleRZZRzo5e5LN/3sL++6G1uDKP KN6509mCLHjOGtte0m0YEgI2hBO/tKmprbj+tTMojuCj2NB5DGil9c6Iu2vewel++Al18g9nMqiu 1ZXTAqp+onwlaTs3tg6DbIakO4BxBpXDgL3ntPBMjWqha3etTJ5Id6ycoxWaSqRLsc2pkRhg3suO fMA5CBijv75s44ekQ6odCwUOlq81sSJVNPtDCmg9y+aXE27KCaTpRY+bipbikgiOFsRhXxtii7EH vwxVakcKJUIp539lOxuJFChl67lioxeaqSEsovrJLYNF58yXnJquka7JOYf0bp1zkDkBNbiEce50 xnqG1HIfHg/eC4ifVVwIz0Zh6O3ycS9QfZ+U0QIKdbmJk9VrDiPfVu8yKUncy3D1L8rAO5ZADVnB It7iWKXvTPcDShrlSEcWWWpSU01xI3ARJ74/d9DB88UAuuLFs9f7WGptNeZiPip0hEt+6fU1hx6J HLR6kUFy0JPoz3zFPmLgJjYbmnFVDUeruOhQSp/Aq68Pb+vRVJIuPmvZ9LVBlsXgsjlDGvBkAo98 +Em2xNJxGldJgp0Xq0YJgeTjGvlYhTpHjw6MYfiZIdNWmo4btMDOK6+UWbk+rr57fqWphBhcH5z/ mSww4O6GEQdKXKIe7jURHflNj/ye2XmWh2VP83W7lb0bNAQ36x1gNNUIkTxMHh+CM4G/x47u+xHN zMGonITgYvTK5/svEoX+5b9Dv0picrr/aCb62wQHBvsP7vxIDACvWOrtEq2P3tERuRQHmg72U1F+ hFr9ZFdEkO6aHEzM6YVT7uilJljxiHIAIxNInRv/y4/kh0uU9Kn7oAEfHz4cUPzwuoto0xZiqaRK HylVJUiVFd5BiwFnLvpLDLLIhKYQLAtR4SlLVuANQh8grODNTNF1U9nl2QVcJ2FFtyUU4IGFo= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sun, 20 Nov 2022 14:49:47 +0800 X-OQ-MSGID: <20221120064947.94540-13-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 12/12] fftools/ffmpeg_opt: set default hwaccel_output_format for 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ygrEyHl4UFBt From: Zhao Zhili --- fftools/ffmpeg_demux.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 76778d774d..d2a6d39703 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -625,6 +625,10 @@ static void add_input_streams(const OptionsContext *o, AVFormatContext *ic) "with old commandlines. This behaviour is DEPRECATED and will be removed " "in the future. Please explicitly set \"-hwaccel_output_format qsv\".\n"); ist->hwaccel_output_format = AV_PIX_FMT_QSV; + } else if (!hwaccel_output_format && hwaccel && !strcmp(hwaccel, "mediacodec")) { + // There is no real AVHWFrameContext implementation. Set + // hwaccel_output_format to avoid av_hwframe_transfer_data error. + ist->hwaccel_output_format = AV_PIX_FMT_MEDIACODEC; } else if (hwaccel_output_format) { ist->hwaccel_output_format = av_get_pix_fmt(hwaccel_output_format); if (ist->hwaccel_output_format == AV_PIX_FMT_NONE) {