From patchwork Wed Apr 26 14:02:31 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: 41331 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dca6:b0:f3:34fa:f187 with SMTP id ky38csp518507pzb; Wed, 26 Apr 2023 07:03:07 -0700 (PDT) X-Google-Smtp-Source: AKy350bVp8TcjCo/2t5Su1wFZwLl8dN1GDQbexxpG9AYyrQm7U2rwYY2Urtq+OrHPJpCR5ibmkO1 X-Received: by 2002:a17:906:488b:b0:94e:56c4:59f2 with SMTP id v11-20020a170906488b00b0094e56c459f2mr15698718ejq.26.1682517766046; Wed, 26 Apr 2023 07:02:46 -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 se17-20020a170907a39100b0095854842b3fsi7493439ejc.614.2023.04.26.07.02.43; Wed, 26 Apr 2023 07:02:46 -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=c2ecwrFE; 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 E41A768BEFE; Wed, 26 Apr 2023 17:02:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on2119.outbound.protection.outlook.com [40.107.14.119]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4E10768838B for ; Wed, 26 Apr 2023 17:02:33 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JJtmfLljc9S7sx/U0FkCym8KhvCBjHXMeiY7LGWMgWxrXDjjdpkrkI0CzADu13QqV9QOCxhjMIPSESaffRXuizhbnPFMkXKE+H+J0FxK6icOLmHOnC1uJAixT53P8VEPXMPy4BUv8MmGqHJPXusKIvkiltdj0ldO6HoqC/YwxvlqogJ2tKPBaEOBUx/WbksL0FW9xr1cQBRvA0brFbUKNmkn8SBUbl6lbT53IXhK31RiNIHYo8OJuxRtK9g+EsEyLHeb9SOfg8mrc5RqW3tns58lLHhiILtHp2KsBl7AnnWRkFmrcGtHKCET4mjZm0PXU6HbxiYROxOJtL4JXoPQQg== 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=pt2eZJvxhRPYXfQe+JaGPssCm1cNr6GjwapxRNgFqq4=; b=QK9zbtLK4RHacn7p5eLlqiewMTaCa9vFhxECliF5kzxaB9c/FFtiNFhQPmLa/y7ra/sdV1m0ZyAN/FitzjICcTCYdcDas3ljSKUKEukuSxdqGIVYAkYNCHYamaBpVOc8Z7ytdFGvF1vu1vmOuZDUa2+OTcZtk7yYFMx4zlsVvXfPNDw0m1sa/qG5KSIw/T5rjiodou6sk/SovGdQqFXj5MfrqvW+GlERrvarISHjGSHYYzaExS6e3ISjTdeeXDSwIuhmM0WJNEO8YNcRtwotCsWEAFh5wGpcR15wWgaBGey2iqPoIUnUfncXL+VUHaBhl+EMNhvnAj7oXGH08eo5yg== 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=pt2eZJvxhRPYXfQe+JaGPssCm1cNr6GjwapxRNgFqq4=; b=c2ecwrFEE8MSbE+lWRWd8PeGHUx7jCBj1n+JlvIVmQshkXYrQShLSdhEL8+FQekblHdNstOYrMQaVaz1NCc1cBRdYSprdkfieOaqc/ApsBpHgaJURbY7I1ZZYsYAzmERwmE5S+saoPK6VhIy6d68M6umWPKNSmGV8ZNci9WMx60= Received: from PR3PR02MB6169.eurprd02.prod.outlook.com (2603:10a6:102:62::20) by AS8PR02MB7190.eurprd02.prod.outlook.com (2603:10a6:20b:3f4::12) 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:02:31 +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:02:31 +0000 From: Samuel Raposo Vieira Mira To: FFmpeg development discussions and patches Thread-Topic: [PATCH] avcodec/mediacodec: Add AV1 encoder Thread-Index: AQHZeEePUEnIy4ZLf0+Y0J85g0xglw== Date: Wed, 26 Apr 2023 14:02:31 +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_|AS8PR02MB7190:EE_ x-ms-office365-filtering-correlation-id: d45b6d5f-4bac-4b7e-82b2-08db465ee092 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jzeE7fUM/DEv2dTACl+cq06//ASlgP2w1K+aAihz+0bAhC8VYDBfk9TomQC2IDHg5za8HfDtjZe2BS9wUnQqYx/a9qVQlOqXNoUTEGl1tQ53mF0TmBNGuzuXyWF0i5KpAKHwn2+AXp75haUMQ9jGvXLMPGxsM7dJCQU3Nu5jrk+DnS3qoyU+UXA5n1dyQF/cPiY6ZWq2CCggS2zV9MKIUskeDwWgKdS5Zjc7jz8zBwHYQ6kFELpK9/T4okBAP8yZpA06VffBEDiWYMdJyhNeuBWeMYwauXleto4reGwUiGb+GTvV5EEZ1KL+/fNfeENHvbhUriarFebkDlJ+yGbtrIa927QvJ4Uogd930GYoo7V8trXdA1ayPF/J0kTx+u4nlycnTi1TnHwvffxPeIE3CUz+llrZZ0l2WlAcEe2euiTOw3zErAzb//BJYYfdNFKxMwfJo7FrW4JdtkPRO3wKbDWRJJutDfReNzKKvuiFwMiOJ4VUDgoLxh3doDGrgBkrisrOPVroYsYyAgIUkbtXBBeiI+uaGE7Ij2L8CAd4XJRps/8L8I80ElUVspx0x45BD+5pXUZD/LHbiw2vV8rK3Cs5UpkxyaH6pNEyIxEFHzhXwW85+yy03mKXLFyZ5Hv8 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)(396003)(346002)(136003)(366004)(376002)(39850400004)(451199021)(83380400001)(76116006)(91956017)(7696005)(71200400001)(478600001)(6916009)(19627235002)(26005)(6506007)(9686003)(186003)(64756008)(5660300002)(52536014)(33656002)(122000001)(38100700002)(66556008)(66446008)(99936003)(66476007)(86362001)(41300700001)(66946007)(8936002)(38070700005)(55016003)(316002)(8676002)(2906002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: VX5s7DsI1Mibrr9cfs+i+rzmlOVKvU50+rJmAbn9v1JN9RrcpNPcc8GTPjIqE1kxegrm2l7VTQ+DJe29H8T3RG7Q9xiU/l3IBvrHnOgd4cCwlTw2BxDzCSZrNiPzKhocdPWxFrEUXgdgqyju2O606lYjBI/FL4Cs+U6Ojp5U+HvzIEO/+LkhWv2SeO89KyE35CJxwQWTixBRUzjfj4tgG0q5ffnriBlAztbyneg9UWwRirMd6byucIcsGlfhhMUziIn6+26OAlKGVkZ+1ymDW63Ki0UqyVWlY0Nnwy6+H9K5E7IFlnGZHzyMFLR0xXGYr1nSSj0ka/fP72D01GIsGa2vCqElxuLA3htLUpAHVjFPvrXQGtuORXrPnNTQJfVwRsfqZldZAiyEhhhQGm/65SchoBdDdMZegGibbiZtHhHFTB19rpru0mFB4m17SSI/ph7yK2T9vtH2kjsUlN6Fj9Ya9urvJlb6KFjafsQb7VZN0d0dM6Kn1O0H/gZarWgubabPEcOyvF7/QngnCyLi5kFgnSAsUXo6Y3s4Y3uzHXbFZCGlL9nXic8gm0aqY4cD+Pam9HuNGceSn0NAFJf9AGidfTdVrE2fqmRubOJRpKxbr8g8yTZdlJ6VAK/yydm76MzPrAtTx8ET7SXE6XZIdvyGhIuF0hA0E3s9+2KPkZHztT1tNorycuxA3q+iq+48dJJclrsghk0HLSlKlyFhP9hR1Y6zSC2RMfuQHsGERRvu358tNF/bS2pHCW3yb9wZzkcIhpJSd4sN4dpBulUqXHCqqK7PWnbjJpkVRxP8aSuej6nIse9TY4JhdYsiLL3pR6R84hoYO3HZ35WTaKamZuE/uHR8iVnwko/CEHZ6y1RCXbyi1EvjIboVeuyBRteE5cSIZfSoD0e5th1S2uvCKlk4XtJNmE+H0j7dGhoog8VQqXXEJcA3/sT3SoTcHNfMmnd/8Kutv4u3pY2x51GRujBJWzQOsIMVQnfnXQdGoin+XyS8Doh14FjQHePivT2p5xW2CgU0s7C80AbhhLASjX2lewXoR3LBlOPzwuy4x0pY+jrjO4148S+T4pYRJk0QguIMQlcCpx77IU5dDCkcFwEXwWSoPAX0Tx+6ncY48mqDE6G7CGbeUQieQwx31ztxq7kNc78Wicyzd9s2BsCp71dC6rcgW7Gho7T+wVJOZD7btJC3xIU4VrPrTyRsRd1Y7+ppERIhVsvUa4ICbVH/Rv9HRibU/TGRdUBVand0srys+vBAcJAIW8J+PEeX4lQ2ClPam7RmJsx741cZJ9igLQCgp+HOl8TRo5mYfuT1x/q/SCnr6m6q2jxBL+nTzNWuolhZqpUDWaQpq6tz2j9J5tdsxj9fNFGLz0HSSv+RJdrAO1uy+kU/p8owHoOwyk530npbeMjZdqhd+dT7bOPQJPvsLdrtXE+iM02WEMr8EuoJUD0QJZ9WYaA7JQxYaMG8jXaNzi8zBEaqWsbW84DmUK29IHAk/1x2Cu8RjQzU3FZXY1lBnGoPT/28KldQcFSS66SpOP2MMQXSJQ745Tda4sN/JDA/P8gjcDaM4cKc+q0BCQlmM2uIWP1RI40xwHMVt97Iou6vA7MuLKpRhy6Now== 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: d45b6d5f-4bac-4b7e-82b2-08db465ee092 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Apr 2023 14:02:31.1420 (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: L7jT6nDYYYJMHqBc4Jy5bjwL21X8kzKRz17/ASAb1BaurHObyEOsXXD1VouDou+ct3B4LxQWVX6iZrbZy6RBCw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR02MB7190 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [FFmpeg-devel] [PATCH] avcodec/mediacodec: Add AV1 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: rFEhoPM+Sy80 Connected FFmpeg to Mediacodec AV1 encoder --- configure | 1 + libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 1 + libavcodec/mediacodec_wrapper.c | 12 ++++ libavcodec/mediacodecenc.c | 115 ++++++++++++++++++++++++++++---- 5 files changed, 118 insertions(+), 12 deletions(-) enum MediaCodecMpeg4Level { MPEG4Level0 = 0x01, - MPEG4Level0b = 0x02, - MPEG4Level1 = 0x04, + MPEG4Level0b = 0x02, + MPEG4Level1 = 0x04, MPEG4Level2 = 0x08, - MPEG4Level3 = 0x10, + MPEG4Level3 = 0x10, MPEG4Level3b = 0x18, - MPEG4Level4 = 0x20, - MPEG4Level4a = 0x40, + MPEG4Level4 = 0x20, + MPEG4Level4a = 0x40, MPEG4Level5 = 0x80, - MPEG4Level6 = 0x100, + MPEG4Level6 = 0x100, }; static const AVOption mpeg4_options[] = { @@ -878,3 +881,91 @@ static const AVOption mpeg4_options[] = { DECLARE_MEDIACODEC_ENCODER(mpeg4, "MPEG-4", AV_CODEC_ID_MPEG4) #endif // CONFIG_MPEG4_MEDIACODEC_ENCODER + +#if CONFIG_AV1_MEDIACODEC_ENCODER + +enum MediaCodecAV1Level { + AV1Level2 = 0x1, + AV1Level21 = 0x2, + AV1Level22 = 0x4, + AV1Level23 = 0x8, + AV1Level3 = 0x10, + AV1Level31 = 0x20, + AV1Level32 = 0x40, + AV1Level33 = 0x80, + AV1Level4 = 0x100, + AV1Level41 = 0x200, + AV1Level42 = 0x400, + AV1Level43 = 0x800, + AV1Level5 = 0x1000, + AV1Level51 = 0x2000, + AV1Level52 = 0x4000, + AV1Level53 = 0x8000, + AV1Level6 = 0x10000, + AV1Level61 = 0x20000, + AV1Level62 = 0x40000, + AV1Level63 = 0x80000, + AV1Level7 = 0x100000, + AV1Level71 = 0x200000, + AV1Level72 = 0x400000, + AV1Level73 = 0x800000, +}; + +static const AVOption av1_options[] = { + COMMON_OPTION + { "level", "Specify tier and level", + OFFSET(level), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, VE, "level" }, + { "2", "Level 2", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level2 }, 0, 0, VE, "level" }, + { "2.1", "Level 2.1", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level21 }, 0, 0, VE, "level" }, + { "2.2", "Level 2.2", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level22 }, 0, 0, VE, "level" }, + { "2.3", "Level 2.3", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level23 }, 0, 0, VE, "level" }, + { "3", "Level 3", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level3 }, 0, 0, VE, "level" }, + { "3.1", "Level 3.1", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level31 }, 0, 0, VE, "level" }, + { "3.2", "Level 3.2", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level32 }, 0, 0, VE, "level" }, + { "3.3", "Level 3.3", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level33 }, 0, 0, VE, "level" }, + { "4", "Level 4", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level4 }, 0, 0, VE, "level" }, + { "4.1", "Level 4.1", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level41 }, 0, 0, VE, "level" }, + { "4.2", "Level 4.2", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level42 }, 0, 0, VE, "level" }, + { "4.3", "Level 4.3", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level43 }, 0, 0, VE, "level" }, + { "5", "Level 5", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level5 }, 0, 0, VE, "level" }, + { "5.1", "Level 5.1", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level51 }, 0, 0, VE, "level" }, + { "5.2", "Level 5.2", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level52 }, 0, 0, VE, "level" }, + { "5.3", "Level 5.3", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level53 }, 0, 0, VE, "level" }, + { "6", "Level 6", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level6 }, 0, 0, VE, "level" }, + { "6.1", "Level 6.1", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level61 }, 0, 0, VE, "level" }, + { "6.2", "Level 6.2", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level62 }, 0, 0, VE, "level" }, + { "6.3", "Level 6.3", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level63 }, 0, 0, VE, "level" }, + { "7", "Level 7", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level7 }, 0, 0, VE, "level" }, + { "7.1", "Level 7.1", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level71 }, 0, 0, VE, "level" }, + { "7.2", "Level 7.2", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level72 }, 0, 0, VE, "level" }, + { "7.3", "Level 7.3", + 0, AV_OPT_TYPE_CONST, { .i64 = AV1Level73 }, 0, 0, VE, "level" }, + { NULL, } +}; + +DECLARE_MEDIACODEC_ENCODER(av1, "AV1", AV_CODEC_ID_AV1) + +#endif // CONFIG_AV1_MEDIACODEC_ENCODER -- diff --git a/configure b/configure index bb7be67676..0a60deac65 100755 --- a/configure +++ b/configure @@ -3162,6 +3162,7 @@ aac_mf_encoder_deps="mediafoundation" ac3_mf_encoder_deps="mediafoundation" av1_cuvid_decoder_deps="cuvid CUVIDAV1PICPARAMS" av1_mediacodec_decoder_deps="mediacodec" +av1_mediacodec_encoder_deps="mediacodec" av1_nvenc_encoder_deps="nvenc NV_ENC_PIC_PARAMS_AV1" av1_nvenc_encoder_select="atsc_a53" h263_v4l2m2m_decoder_deps="v4l2_m2m h263_v4l2_m2m" diff --git a/libavcodec/Makefile b/libavcodec/Makefile index b0971ce833..166f77f12a 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -253,6 +253,7 @@ OBJS-$(CONFIG_AURA2_DECODER) += aura.o OBJS-$(CONFIG_AV1_DECODER) += av1dec.o OBJS-$(CONFIG_AV1_CUVID_DECODER) += cuviddec.o OBJS-$(CONFIG_AV1_MEDIACODEC_DECODER) += mediacodecdec.o +OBJS-$(CONFIG_AV1_MEDIACODEC_ENCODER) += mediacodecenc.o OBJS-$(CONFIG_AV1_NVENC_ENCODER) += nvenc_av1.o nvenc.o OBJS-$(CONFIG_AV1_QSV_ENCODER) += qsvenc_av1.o OBJS-$(CONFIG_AVRN_DECODER) += avrndec.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 8eeed34e57..f583aad860 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -836,6 +836,7 @@ extern const FFCodec ff_libaom_av1_decoder; extern const FFCodec ff_av1_decoder; extern const FFCodec ff_av1_cuvid_decoder; extern const FFCodec ff_av1_mediacodec_decoder; +extern const FFCodec ff_av1_mediacodec_encoder; extern const FFCodec ff_av1_nvenc_encoder; extern const FFCodec ff_av1_qsv_decoder; extern const FFCodec ff_av1_qsv_encoder; diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c index 1c29bb7406..015f275a0f 100644 --- a/libavcodec/mediacodec_wrapper.c +++ b/libavcodec/mediacodec_wrapper.c @@ -35,6 +35,8 @@ #include "ffjni.h" #include "mediacodec_wrapper.h" +#include "libavutil/pixdesc.h" + struct JNIAMediaCodecListFields { jclass mediacodec_list_class; @@ -345,6 +347,11 @@ int ff_AMediaCodecProfile_getProfileFromAVCodecContext(AVCodecContext *avctx) static const int MPEG4ProfileAdvancedScalable = 0x4000; static const int MPEG4ProfileAdvancedSimple = 0x8000; + static const int AV1ProfileMain8 = 0x1; + static const int AV1ProfileMain10 = 0x2; + static const int AV1ProfileMain10HDR10 = 0x1000; + static const int AV1ProfileMain10HDR10Plus = 0x2000; + // Unused yet. (void)AVCProfileConstrainedHigh; (void)HEVCProfileMain10HDR10; @@ -353,6 +360,8 @@ int ff_AMediaCodecProfile_getProfileFromAVCodecContext(AVCodecContext *avctx) (void)VP9Profile3HDR; (void)VP9Profile2HDR10Plus; (void)VP9Profile3HDR10Plus; + (void)AV1ProfileMain10HDR10; + (void)AV1ProfileMain10HDR10Plus; if (avctx->codec_id == AV_CODEC_ID_H264) { switch(avctx->profile) { @@ -436,6 +445,9 @@ int ff_AMediaCodecProfile_getProfileFromAVCodecContext(AVCodecContext *avctx) default: break; } + } else if(avctx->codec_id == AV_CODEC_ID_AV1) { + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt); + return desc != NULL && desc->comp[0].depth == 8? AV1ProfileMain8 : AV1ProfileMain10; } return -1; diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index e4b583a542..10da43c3e7 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -170,6 +170,9 @@ static av_cold int mediacodec_init(AVCodecContext *avctx) case AV_CODEC_ID_MPEG4: codec_mime = "video/mp4v-es"; break; + case AV_CODEC_ID_AV1: + codec_mime = "video/av01"; + break; default: av_assert0(0); } @@ -779,16 +782,16 @@ DECLARE_MEDIACODEC_ENCODER(hevc, "H.265", AV_CODEC_ID_HEVC) enum MediaCodecVP9Level { VP9Level1 = 0x1, - VP9Level11 = 0x2, + VP9Level11 = 0x2, VP9Level2 = 0x4, - VP9Level21 = 0x8, - VP9Level3 = 0x10, + VP9Level21 = 0x8, + VP9Level3 = 0x10, VP9Level31 = 0x20, VP9Level4 = 0x40, - VP9Level41 = 0x80, - VP9Level5 = 0x100, + VP9Level41 = 0x80, + VP9Level5 = 0x100, VP9Level51 = 0x200, - VP9Level52 = 0x400, + VP9Level52 = 0x400, VP9Level6 = 0x800, VP9Level61 = 0x1000, VP9Level62 = 0x2000, @@ -837,15 +840,15 @@ DECLARE_MEDIACODEC_ENCODER(vp9, "VP9", AV_CODEC_ID_VP9)