From patchwork Fri Apr 28 11:07:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Samuel Raposo Vieira Mira X-Patchwork-Id: 41400 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp1232975pzb; Fri, 28 Apr 2023 04:07:57 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5+RqTRp+6F1KYUcfkVylWvWrBNjRmOoOgqXbstdnJHbpaGSmGdGKHLpuGNo52vLW6ItxBT X-Received: by 2002:a05:6402:164c:b0:506:8dba:bd71 with SMTP id s12-20020a056402164c00b005068dbabd71mr4375715edx.27.1682680076774; Fri, 28 Apr 2023 04:07:56 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q16-20020a056402033000b004fbbd7bee7csi12250920edw.58.2023.04.28.04.07.55; Fri, 28 Apr 2023 04:07:56 -0700 (PDT) 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=@qt.io header.s=selector2 header.b=qzOHoRl8; arc=fail (body hash mismatch); 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qt.io Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E507A68BF99; Fri, 28 Apr 2023 14:07:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2135.outbound.protection.outlook.com [40.107.20.135]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3F74A68BEF5 for ; Fri, 28 Apr 2023 14:07:44 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mdb+uzdCrxKr9NN2PaZ+RmOmve5gLmW6lqiNDIFlWNmIMk1N/OLJQw+8fw/E6Zrs/50DT/k9zjExxIh7QuuRRxDH3U7Kz/au7IQAHGTI0tiK9+oPGYmTLeBC6Ja/gbEeZDIirGig2nQlxR90xhGaFtxI8273aTfD6Ph71pmMH8DbwLF8SAlyXTKU7gsInqVEAnOXCCMuU+ASz3itodcLfNzVPKUJM5IpIb4mGI9tzl05PamUwx16PCIlzGMvLO5cxqFvjLvri0RAEsi6A9ZRimEJW09Lpo3koViHkO2F/ZxDpjqUBiu9xZK2xWo3bYED4uNan24U4SPHYt61+zKbiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nulf2S5GtZOytlIRk/jaUS5T8MGsZLuEFTp3efFN4Qs=; b=OaTEpKEBg9E2Q2VeOmlWF/Tdwlj99R4HiLcW1DeMSTwPuqKZs57DmYFY0oZiolkpVlIH8oH2RmX0uIBZ9vQgkYkML6GDRGlkzZ90pMvh16JSuhypgyn1N7wQiqi0KyONCA9Z1BifxGrtzkJDZYx9AS3+RwNQHTLYuhT3kkDClehh28kiHsq3sncZz4r3iiFbr4MZvAJEVC7c2OG8MDLbNwZ9A6Qwe6rbNZ42ojXRtKD2JakgB7qn0Z670EScBRleI1RetwcQfjzhVsBr9uqN0fMLknC0eBPWdDinGWt0CXl++Lig3IF2UmHchm/M8Q0PakYcynUXVsKHLqY+YQ09nw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=qt.io; dmarc=pass action=none header.from=qt.io; dkim=pass header.d=qt.io; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qt.io; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nulf2S5GtZOytlIRk/jaUS5T8MGsZLuEFTp3efFN4Qs=; b=qzOHoRl8oBstgZgcnWX7t/Ii7MjJkJq+yx8F92CvFuGqxVSFs7bcXsEe/0CftODdJHcIRTLm2lcYe3Xv/uHI5p7ZMo3vebfA9W3yih5/PUdT0UDN1QQiqEynHruoqNPtK1Fspnyk6QtyaVVU0LKyGY1YgDfpgxebpqy1t+grprA= Received: from DBAPR02MB6165.eurprd02.prod.outlook.com (2603:10a6:10:18e::8) by DB9PR02MB9994.eurprd02.prod.outlook.com (2603:10a6:10:462::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.22; Fri, 28 Apr 2023 11:07:42 +0000 Received: from DBAPR02MB6165.eurprd02.prod.outlook.com ([fe80::fcdd:550f:463b:bd2d]) by DBAPR02MB6165.eurprd02.prod.outlook.com ([fe80::fcdd:550f:463b:bd2d%6]) with mapi id 15.20.6340.023; Fri, 28 Apr 2023 11:07:42 +0000 From: Samuel Raposo Vieira Mira To: FFmpeg development discussions and patches Thread-Topic: [PATCH] avcodec/mediacodec: Add VP8 encoder Thread-Index: AQHZecC7mtn72az3sUCDICIeYANlhg== Date: Fri, 28 Apr 2023 11:07:41 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=qt.io; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DBAPR02MB6165:EE_|DB9PR02MB9994:EE_ x-ms-office365-filtering-correlation-id: 2d93a3a1-44bd-45d6-7550-08db47d8c95d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: GTC9zNeo+7Hgy7QKQKNfSQkX7xLIt+ie1TGM+7EQSevN6VpE1TokmB/0hOtXblXryFkHE+8PKArzhi/PZFosBedqKRRJFAi1vTsUVmL52eC25lucDjnRxCiBKubQLhAYZ7B9nzqmSJ0jFz5nTiz9ocTxm3FGDbbuuCW3ieKDkYWTtIjwZ1QScKIhMEd1g+l/D9HrW329P8do7e0o445ZFXVZaVX+rP35Dqx0NliWXl/ZUeE92b7tXFf4admDVHZD6vDYBwPOpMlDKxKUr+Mol+lzEaTPP9Dd6dI+HPwq3dSsvxWl8++cKoAZHMEuDUGNZim6vz9gS15vT4/x5JV5eFzGT8RKPlhTWBP3c7NXTs4lwiqHWQ0d7O7B6ozxGKBANbWpgIh5YJfHfOONF0x33Yd7mMERVWRL9ZlvCtp9VNeOkmKdCwsbA791caqBv1Maco4W4xDqw1CUFV+U1bBAwtmQAH0lw8pJIqYIO2Romeg4NkjiAYiCNYz+rt2so2xpy76yaS0nfDOHhTR3aNUrrywJ5mskH7627Up25NK2uN8IfBAK7MGPblR/9A426HejG3+xBpUcaahRJEfZT2h5rOLJVeX8XazMJ4MMqytPPsCUdyk8aZTo6N1MuS4NRFcG x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBAPR02MB6165.eurprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(396003)(136003)(346002)(366004)(376002)(39850400004)(451199021)(83380400001)(38100700002)(38070700005)(55016003)(122000001)(86362001)(99936003)(33656002)(19627235002)(76116006)(66946007)(316002)(91956017)(52536014)(66446008)(7696005)(71200400001)(478600001)(66556008)(8936002)(5660300002)(66476007)(8676002)(2906002)(64756008)(41300700001)(6916009)(9686003)(6506007)(186003)(26005); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: wKfbw55H/BcxHH03J69NzW6zJSum13qdLmxoZl9VuBSs2wplfrbL8QPfpGKWvj0G6J2u3WiLok0cUtAw9XKg5vH/Rgv3EzQS+nMt4U3rVHndAV9E3kCJH/qe/261npAcadfIm2PD22+L2Xt0r0GgJBfWp02GeNlcmnQ8lWpZZEZWuGYxmhQcGTkpmKEBBSNt1/FALMwz0OAOFQpDDIR6Xz0MKyyRfN5kz3jjhOTIWQYbD1eoPHKDXpxrJdOEV0dEyRgr4vtpYV2SbzGuRIH8KkaLh8tFoWDjPCjPtEvPr0cwc/pWrlr/MrGj0vF7x+MxXxywU9gAS9HLEMR3k+MYcQiHW2SeB4pK+c5tFoLbQZRx14UIaq5Lme7o+gz+4fN+yJp3S8ENnzhKaoAhgvvM3aXma+icZVitC6tXC7yR/+Vt+J/S0Gc/TQjzX8lbiY+qB7asT2WZCH31Vzb9poDPnhBhNS2O+udvT5MAQc8k6TGklj23ePUUrrubqEMmvvxjyStvXZ9sKaXOGzQyWlBFU/80TAGBnyXV8NNBgPIX2dafI6y7hHaoVxIHpNDjXKG2MGkjtzGdfuFAxATVjIPU3nM/puj9iAeuQcRlB1rgvb5sG170GkeYkSzsfty2xi7tY8EiaPCx/yTeV9u+Ym9Gl3gGqScizsDd4jf23l9L3FJCXDRv+bTUoInbgZ4L3/42ppCvK8r0ZtlwfrEkCy53dZb+tCCVmuMVaQgqeEQJ3PL4QuYu/jWCUkgOOgqUwbphV3N7K+9t0m8D23RFKE0rDGFBTtedSM73w2HyYfMnxb5LNBe32MBaAhf4JAherFC6Z/ogSHs7kYrnF5UI+cU9hcU+GFIqsrprSGq0Iq9lytOua8Qq/yPGFwc/sAvdP06eBQ08dPCvcO7yID2kyzkIxDLUMB0IyWvoh0TEe2WQwLMdVqYXUgtBlPaSp/LjlEPO3GRqYj6lUqvibAxBx4pV5k14iAK7MNSbL2oHgJAZoTV4DE7A5zdz+u0HPMeUXvt6RgP3lyMFA+VlclDm/nflOcpOoPG0hFXq31rSP0a6n6StIVRDQKN5mQQj/Uq8nGdDPUZHerM6EIFsS2s0qO7fyH9HkZLaflnYVSn7ffSaMkz47WHQ3q/+oU6h4IQxt7cTLx165JTN9QpopgCYk4SbJFJUUZTA3JQXLUmG8w3yEipQanXzL4muKU8JOhBSBKfVh9sYmrPEBz9q6eXz47XsEYrMKI3Spip01rOu1c8O5caDIuoSkRV9krCbm7rstZLU4dEhYf9NGtK6GeeY4P/QxMeXM845ENF5pgk74nBISKbkOjhiRwSOMFx6X5tMmtctuRxOpfZ1q6raPMIZ4jgBDGLaXiTYP14Aj+DtACc/EAq3LXUqEcOTuY99jaWAhbY2nC6kZxgEPrxFqdbMhnW6L61Un95h/HcEwYycs3Orkyc4lc8VJM0IAojY7AmNzxA/Jtaocn63QGgcZAfEYbpVV2by2OUn3gzYS7SpBMyHRW35Sb7rM77N7ZvEN9EycoUzXdaFpjIPU6GR/S4Ou6ypUjGCmZA083iM9GQAURuBO5pX0zXORE6WSWh0J8/icENUnIjNM3y7+ncT2tq9HoGlTg== MIME-Version: 1.0 X-OriginatorOrg: qt.io X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DBAPR02MB6165.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d93a3a1-44bd-45d6-7550-08db47d8c95d X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Apr 2023 11:07:41.9825 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 20d0b167-794d-448a-9d01-aaeccc1124ac X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: CT4FSppgZyaFfwaVbIuiuIWIHKVKRPSkP/L5ewRE9FCXashPiYMKyCvbmprkdgTxhVkdnZBuzpUDPUePXVX0Bw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR02MB9994 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] avcodec/mediacodec: Add VP8 encoder 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: QgHwAkvKB6qn Connected FFmpeg to Mediacodec VP8 encoder. Minor Version bump. --- configure | 1 + libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 1 + libavcodec/mediacodec_wrapper.c | 4 ++++ libavcodec/mediacodecenc.c | 29 +++++++++++++++++++++++++++++ libavcodec/version.h | 2 +- 6 files changed, 37 insertions(+), 1 deletion(-) -- 2.35.2 diff --git a/configure b/configure index bb7be67676..1aef227cd4 100755 --- a/configure +++ b/configure @@ -3239,6 +3239,7 @@ vc1_qsv_decoder_select="qsvdec" vc1_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m" vp8_cuvid_decoder_deps="cuvid" vp8_mediacodec_decoder_deps="mediacodec" +vp8_mediacodec_encoder_deps="mediacodec" vp8_qsv_decoder_select="qsvdec" vp8_rkmpp_decoder_deps="rkmpp" vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8" diff --git a/libavcodec/Makefile b/libavcodec/Makefile index b0971ce833..512d5bd1b0 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -766,6 +766,7 @@ OBJS-$(CONFIG_VP7_DECODER) += vp8.o vpx_rac.o OBJS-$(CONFIG_VP8_DECODER) += vp8.o vpx_rac.o OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuviddec.o OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o +OBJS-$(CONFIG_VP8_MEDIACODEC_ENCODER) += mediacodecenc.o OBJS-$(CONFIG_VP8_QSV_DECODER) += qsvdec.o OBJS-$(CONFIG_VP8_RKMPP_DECODER) += rkmppdec.o OBJS-$(CONFIG_VP8_VAAPI_ENCODER) += vaapi_encode_vp8.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 8eeed34e57..2e37db69fa 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -880,6 +880,7 @@ extern const FFCodec ff_prores_videotoolbox_encoder; extern const FFCodec ff_vc1_cuvid_decoder; extern const FFCodec ff_vp8_cuvid_decoder; extern const FFCodec ff_vp8_mediacodec_decoder; +extern const FFCodec ff_vp8_mediacodec_encoder; extern const FFCodec ff_vp8_qsv_decoder; extern const FFCodec ff_vp8_v4l2m2m_encoder; extern const FFCodec ff_vp8_vaapi_encoder; diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c index 1c29bb7406..8619735bfc 100644 --- a/libavcodec/mediacodec_wrapper.c +++ b/libavcodec/mediacodec_wrapper.c @@ -319,6 +319,8 @@ int ff_AMediaCodecProfile_getProfileFromAVCodecContext(AVCodecContext *avctx) static const int HEVCProfileMain10HDR10 = 0x1000; static const int HEVCProfileMain10HDR10Plus = 0x2000; + static const int VP8ProfileMain = 0x01; + static const int VP9Profile0 = 0x01; static const int VP9Profile1 = 0x02; static const int VP9Profile2 = 0x04; @@ -387,6 +389,8 @@ int ff_AMediaCodecProfile_getProfileFromAVCodecContext(AVCodecContext *avctx) case FF_PROFILE_HEVC_MAIN_10: return HEVCProfileMain10; } + } else if (avctx->codec_id == AV_CODEC_ID_VP8) { + return VP8ProfileMain; } else if (avctx->codec_id == AV_CODEC_ID_VP9) { switch (avctx->profile) { case FF_PROFILE_VP9_0: diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index e4b583a542..6f80dbb4a5 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -164,6 +164,9 @@ static av_cold int mediacodec_init(AVCodecContext *avctx) case AV_CODEC_ID_HEVC: codec_mime = "video/hevc"; break; + case AV_CODEC_ID_VP8: + codec_mime = "video/x-vnd.on2.vp8"; + break; case AV_CODEC_ID_VP9: codec_mime = "video/x-vnd.on2.vp9"; break; @@ -775,6 +778,32 @@ DECLARE_MEDIACODEC_ENCODER(hevc, "H.265", AV_CODEC_ID_HEVC) #endif // CONFIG_HEVC_MEDIACODEC_ENCODER +#if CONFIG_VP8_MEDIACODEC_ENCODER + +enum MediaCodecVP8Level { + VP8Level_Version0 = 0x01, + VP8Level_Version1 = 0x02, + VP8Level_Version2 = 0x04, + VP8Level_Version3 = 0x08, +}; + +static const AVOption vp8_options[] = { + COMMON_OPTION + { "level", "Specify tier and level", + OFFSET(level), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, VE, "level" }, + { "V0", "Level Version 0", + 0, AV_OPT_TYPE_CONST, { .i64 = VP8Level_Version0 }, 0, 0, VE, "level" }, + { "V1", "Level Version 1", + 0, AV_OPT_TYPE_CONST, { .i64 = VP8Level_Version1 }, 0, 0, VE, "level" }, + { "V2", "Level Version 2", + 0, AV_OPT_TYPE_CONST, { .i64 = VP8Level_Version2 }, 0, 0, VE, "level" }, + { "V3", "Level Version 3", + 0, AV_OPT_TYPE_CONST, { .i64 = VP8Level_Version3 }, 0, 0, VE, "level" }, + { NULL, } +}; + +#endif // CONFIG_VP8_MEDIACODEC_ENCODER + #if CONFIG_VP9_MEDIACODEC_ENCODER enum MediaCodecVP9Level { diff --git a/libavcodec/version.h b/libavcodec/version.h index 80e2ae630d..8b53586be1 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 10 +#define LIBAVCODEC_VERSION_MINOR 11 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \