From patchwork Wed Apr 26 14:00:46 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: 41330 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp516263pzb; Wed, 26 Apr 2023 07:01:06 -0700 (PDT) X-Google-Smtp-Source: AKy350ZM2I/mWS9BT49BXB0l0Kqw/K44+Pr58BP6K9ebyq95ffohSI13L6hTQb6ss1tg4XhaquLU X-Received: by 2002:a17:907:c518:b0:959:c07b:84e0 with SMTP id tq24-20020a170907c51800b00959c07b84e0mr8668570ejc.50.1682517665475; Wed, 26 Apr 2023 07:01:05 -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 hx28-20020a170906847c00b0094f557aeae7si11457721ejc.283.2023.04.26.07.01.00; Wed, 26 Apr 2023 07:01:05 -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=px4PGMv5; 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 9158968B630; Wed, 26 Apr 2023 17:00:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2115.outbound.protection.outlook.com [40.107.8.115]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 34E6668B630 for ; Wed, 26 Apr 2023 17:00:50 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Nw3KN/8FsFKLkS/g7T6FhUD9Z172b5msvwMQ1MXYa2xNPDMcQtaonJuxE6vrj1ZOA2o/DMAommXZaYnbPY4qIZfj0jb3AO8mwJK24rxY2wL0291uqnwDrHjsDuEbk3lpIRbEQKfzY0EXkGL1IKkiUWhNK4GgjGJ14yxIf79i6Kj4vJbLnoJ6wAIoYD4vqeuoUYUGTWpA/nnZwfCgll4a3uBeoPuxcGcSwyaeH3Rl1GhgpnPhKEUxmk9a2LH1/0P+oGNFXwglK68ocKE+4USBK5bOYNdpsTFYOQ3fnhZ/UM9Qk33C6QsgOYHU3JVbwJrQnzAHzFr7KhI8iNBqapTNmw== 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=k+fpl1fWoIscOBT5Ztv7fMP+FUT95wysvnXKVZqr8Fc=; b=LHRMXMLNqVRQMzVoIhu8CCZtE8sItVAIqIk/FpK5vs4/A/ytoDIpH77J4qo3autEgSVVQu0kWBp6oq2oFirV4dI7PsqBG2I2KhOkXfQGIhDPBWW/bQaFhQvpN9yL4hRPcofd2vU8vser46mOL8tIlQV/Tnj8+3sAXq8l+NXBNsgpQED7/P5GfTwi+Yp4KqSr7An3IQ0TISYcIpTKVQG7IM0olFqGSrtZSZxplxqOjJu2r13ozNRFgUPMYfNG3CFkGUIRIwo8huFEr33tpheP5cL+00rsTkhTNtE9D+E8h0OiArLXXkonzEQFWNH2R7BNeSFap1UUDj5IaHp+9Upz+Q== 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=k+fpl1fWoIscOBT5Ztv7fMP+FUT95wysvnXKVZqr8Fc=; b=px4PGMv5rzzQC7UCW4BWO/oMOWAb/xmjX5w8xcKk6RHJlENG32OEBlAEa6XOlgD7QaOGfIkUNrdObLJC6CE+dxmvR8i1OAEcUNz/T9M/rzPMXw2oueUDJDT3x4hIsLOHVdNbJF7etTQdLXT1SgLr9eia5TfMtoT8YU4MNCXaRlk= Received: from PR3PR02MB6169.eurprd02.prod.outlook.com (2603:10a6:102:62::20) by DU0PR02MB9028.eurprd02.prod.outlook.com (2603:10a6:10:47b::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6340.21; Wed, 26 Apr 2023 14:00:46 +0000 Received: from PR3PR02MB6169.eurprd02.prod.outlook.com ([fe80::a1f4:9808:62b4:161d]) by PR3PR02MB6169.eurprd02.prod.outlook.com ([fe80::a1f4:9808:62b4:161d%6]) with mapi id 15.20.6340.021; Wed, 26 Apr 2023 14:00:46 +0000 From: Samuel Raposo Vieira Mira To: FFmpeg development discussions and patches Thread-Topic: [PATCH] avcodec/mediacodec: Add VP8 encoder Thread-Index: AQHZeEdI+kz8tWulaUWie4DjBxLBJA== Date: Wed, 26 Apr 2023 14:00:46 +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: PR3PR02MB6169:EE_|DU0PR02MB9028:EE_ x-ms-office365-filtering-correlation-id: fa6b7f46-8678-45e1-a1e0-08db465ea236 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: S4bmQOo32LdHLAI3dCx7oMxMvou60NpUJggJGFRdBm4xV1v3JwbGEUrJyosrXk6P5oDbMJVRFZekVvBUykUlnQ1+y2DwgyxR7isF3qtNlf+UHwUTJ96AAE6ICuHywaiyIuXy40x3Uau7iInHsjbCGfxgJzn/hCY1eIzxJe6n7bpyM0wnWTfO4MOxchBBWZggZdRfQVc/zWCyNE74CzbBwZ/xbAud1hYVO5HhKgtqE3imeLoG+VepT9NsOY4ZAyxZDrLQgX6kESQazoG+rd+6BXZa+Pj4nQfvFnh2zwrwihDKsrKRnhy2d4qB3vzNY+AFMzn+O1f3dejvaoW77dZJVh24km9yHMP5/LpxAp+l0rYcKHmI9+aPADw7rEsk44tWl8o/E5lOcrGWYXd27z8pzhZJe4wfNDu6VbpkbA68cZHmJwsFfcyXI8Kmwih4uJGiKDFy7XHuCwH+Wx+pg/+L/sexTQ6DJuUp3hhxUApwABBBTyO96VXXoWj5jF2xyOb8UEEEA2+/CQkvy5x6NclVlKapfTvmboUZtsbg7gtZvmUd4V2K2nB84wJuuG1nbUzcnRfO4kQOBlb+p2RrmriIbjBljBbpfppZrPgXRHKohTyznFnPurzs5Fcl0K6CWzY9 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PR3PR02MB6169.eurprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(346002)(376002)(136003)(366004)(396003)(39850400004)(451199021)(5660300002)(38100700002)(2906002)(52536014)(33656002)(7696005)(186003)(55016003)(41300700001)(38070700005)(86362001)(478600001)(8936002)(122000001)(71200400001)(8676002)(316002)(99936003)(91956017)(66946007)(76116006)(66446008)(66476007)(6916009)(66556008)(64756008)(9686003)(26005)(6506007)(19627235002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: pUr2z6gsYhwn9XarXZWo+be6cI4+jOmghjrhn0KTfzVfQJrvI0hByDk1yM3zlmr3utoo3CKyZ/Wf6KrVcKMyUfdkfhX6lPW+29dkaBB5DBkw93sW38KEKy7euIOOQA/4qBVlC7SARg715XSXwy5CvKjXC+6p0az41lKqr8ct9wfq34yWSWokbWSuhFJSl5o4Yk9Rz0TdEbTZK7sVr5kxd45MJs/o2qoIuL5Hgwv/UfhJ4ApxM+hDG8QbkKRAY6UlAogcKaNhUsGGCLigphCHZ30y11FszE9+/ExocjeflqOS0pMi0vQtesp0FeFV51dgkyTsaAkaE6zCf7GyU1XRuLT32WDdNG4gyZjnjuQ5Z3vbUMRmNM4hHMfsKNVrF08ibW22WgIFpaDVd6pskGEHz+s+4/cPQItTpSKEU92CB706zxkGPHzydgd8PJOCs8KnbtAEOYvDzaeQPCLCth9FnMGCmKM5KJZb//WVV4v53Tm92LW3d0zcbKwkQcBaugufFH/b/XW9EivrjXz+qsNyOYEACapkUnYDd2ZA7vLH2jj1Ja2pTcsWcUljwapyoQpnU/dvqKLhDRwvbATzTplv9cz6SL0+BCZu2M+kXfUSvaXbppksPe/hlfKphbLlHc2rvA4pOPnCXi52Z1zAalv4YMZyLuobM4WM3pygd3CRplYQZVwYm4kJ+aCQAfIkEZtLem6eHNdQv5hCOwZFUVvXmIaUjyfWpN4itAmx8CYnBwvVShvae1Z5u2azYdsp1DuyyiqaomK8Caz9A2l0mls18YWc0R1zJPAd7u9MAAvuxVgi66YleOk/UlwFbKFsTeEJAeSYE8FJrwLEDL5vZzSOj8GCf1gQIhy/HoCOpmYjsnHiBDwaCjsERWsL7Ha19vg8eVxOqgDEpVI8bWcHIR0ZECk/o1wUhOMiZApyrd6lDhSVzUrR9Ix4qArj6LWAqQoSlP9X8UjKKQY+RUf+lkEg0aKZK8rHO93kFNpzIhKVykcVVPa0GWh7Qh7mc2JMbLjMNfKEJRPthBok4GOb9QcIZDq/QfnQ+ntl20QrT0WUB6bj3/w4hzxUYP7oA7pekC7rbcST0EEwPpvbTLJC0QyKCtm2S+6iQzQo76zpiseCg1Q/Cfj+96Zss/dy/XlLPH7ofJHIQ/ioHfX34T/oJ36FuH5Kx8FXVzY3r/A1CtHTrSQXiJDFo5+nwViDFvlJ9nYihm1NGihxA3u6N7DAX2CNDpc+gM6H5MpiAXbN/BHRc4lh7C5b1fVvGzqQtLEC0h8asf6wyo/AyNJCuwtZpvMXKant+yc4HXng9SITCwP97ePlAawbib2AApdMxKQGF+31RNeBKuqFQ1WUbEqq4ViKigLxAlLOLYWpMVWoVdzj7TbRIlewdiWCuy6c536I9yrOnTi4JYAylPtnvkeH60G1ASXMP/l3D65a63WNqOFTI3ylsdUVOaB4hp7YSTG1pq4bnSwWySFTs79hjxnK2LzPetlkTYYlXXc6BbnlBD82/fV4fr2fBWhugdWo4LOiaKDyZ++oebQOw8nUBBWQDcad0z9iqfYs9LiQu32naZ4OvYcgrs4QBwBK6ZDQb06bD7Jt6tWuDDit8Qiymvk2SLF7pQ== MIME-Version: 1.0 X-OriginatorOrg: qt.io X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PR3PR02MB6169.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fa6b7f46-8678-45e1-a1e0-08db465ea236 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Apr 2023 14:00:46.5066 (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: HAnR1jcJPcz3cs21Zw2olN/my+czn47mev1CrcMy/4xqdJkBAA7MNJ41XtPHXOf8e8MKyCW7EoUCmR8TV93Klw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR02MB9028 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: sfypE95WUO0E Connected FFmpeg to Mediacodec VP8 encoder --- configure | 1 + libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 1 + libavcodec/mediacodec_wrapper.c | 4 ++++ libavcodec/mediacodecenc.c | 29 +++++++++++++++++++++++++++++ 5 files changed, 36 insertions(+) diff --git a/configure b/configure index 0a60deac65..a54398c57f 100755 --- a/configure +++ b/configure @@ -3240,6 +3240,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 166f77f12a..aacea4f4b6 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -767,6 +767,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 f583aad860..184bb8521f 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -881,6 +881,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 015f275a0f..b088cd2945 100644 --- a/libavcodec/mediacodec_wrapper.c +++ b/libavcodec/mediacodec_wrapper.c @@ -321,6 +321,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; @@ -396,6 +398,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 10da43c3e7..ff28d5f14a 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; @@ -778,6 +781,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 { --