From patchwork Sun Dec 4 17:12:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39584 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2708539pzb; Sun, 4 Dec 2022 09:13:50 -0800 (PST) X-Google-Smtp-Source: AA0mqf7Y5pDriGI4q4bw5ENPVdWAFm6fb5IYg5mjxpAWcNmPjdBTTgtgBwjFWpUQ+vYUlqtM4v64 X-Received: by 2002:a17:906:6d88:b0:7ad:b86b:3ff with SMTP id h8-20020a1709066d8800b007adb86b03ffmr69896279ejt.448.1670174030638; Sun, 04 Dec 2022 09:13:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670174030; cv=none; d=google.com; s=arc-20160816; b=t5OCxCtPj6VWXc+IBxrZwnnGvmeTww0SQitCh6fJVLPnwmWdYTlmX4TNe8tsgp/K5X Hzm84VffMcHt1QQwBEaZXgccZWa/SDe73bn5VoQXdH5/KmFULP2DZg2abz0paCTVjjJ5 yISwElbM3cn1nWp+t6k1WNvDDoDW6yhBje6M8Q3IJE6zGxfFK3dPkUKu+CI/+/x76dzx f1Hbwiz8wwG32jQBhDzLs8mBBGAviI1VYh/knKZLQrlmbVFskmyH++bV79VgINS1SjZ4 UfuG1yYJR3ieDiv6lJiAKoo400b8YgUKE6X3YCMJ2BCjhnSm8PUJlCEcvBR69uOmia/U j91w== 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:date:to:from:message-id :dkim-signature:delivered-to; bh=M/8qUP2nQN0FYisWK/pVqsZcqQqB5IrOeAcqO1X7Bxs=; b=H7Y+VldoF9yQKC6hfSmWpr/XhY1YY+eaTRMD//wq9bWt+l1RW4g+B5A/fRDwsT9vMB ZQvpIEnP7YeGZeys2Q3hY7Ib41huRjLYXKQ+E6EtWcd6KMHKbhrKDf0G/xKpuWVk5iNr AXYV7pHpIIVs9zjjgx+rV+gQbH+5nEoO6egsMPagfQfj37vP669ppbxcgOYL9t8KQGi/ WwnB8ssF8OouVTRXU4euK2UsIej1nA7K+9lhsMQt0BUeHDGrmcJS1OxjIpaIfXNTYzhH q2pNQ1Nfx+/dnqIuuHWUimHgGbJLhw7UROf9eERUakX0i5c8YCtEcj/xafAt1+4wC7YE 0JcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=dgRxYnPU; 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 di7-20020a170906730700b007ad8bd5b636si11280782ejc.377.2022.12.04.09.13.50; Sun, 04 Dec 2022 09:13:50 -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=dgRxYnPU; 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 1B6FA68BBAF; Sun, 4 Dec 2022 19:13:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-239.mail.qq.com (out203-205-221-239.mail.qq.com [203.205.221.239]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 56AC968B96D for ; Sun, 4 Dec 2022 19:12:59 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670173974; bh=pZLLyovrZKTSzC5/NhBLG5/6RV3uw9aXF/7tysZViE4=; h=From:To:Cc:Subject:Date; b=dgRxYnPUh7J9XP8KNpzs0xo3n8HmEw6jo9IWXyipvJgmrHG3AmJns56mCcusggdK7 Rc3zRGD2eEospI23i5SMDLXeAu7OKMZ5Glg2nWZVV1QiDoMn8q2A+s+WUSxLvCdCM/ SJyvW546Fjs33My5bt1CMFQVOD88ATd5WbGBczaY= Received: from localhost.localdomain ([14.153.79.182]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 334B3853; Mon, 05 Dec 2022 01:12:52 +0800 X-QQ-mid: xmsmtpt1670173972tbfvau6wr Message-ID: X-QQ-XMAILINFO: NJ/+omVLhVgaNoo3uyuXlWoHq+ZfocH3ujyMHKYov3Wc1PSJyF2opwCvG0zYdF 4eU3QNXxDLwI2Lj46NnHi2ywb+sKIB7WiTACNJFIabOnqHxMPpo3H9ok1VQcMumU0WkHspaHSolj y5u6Im32Y69mrBz6Qj0t2USmX1WdbAk0sWuAH20KEY9MK8pV8w6nXSZTkhrHXcpZQRlMtg5j6AEx 0umEJmb70VkmNrJonC09V6DmM4D7AKdLwMn3qOSc9+G5ijCJmUPbAt9kLvecl7gkgo8ry1Q081Dw acnThwHRtbPfqvM2iJiexjB6EHk7aicPISxOv4V/W8dWSWTA6ggjFInS/MhgqKwXKxUjeE6C0OF5 Xd8+1mO4guRPG4xxC5nyfkt1KecOMzwmCkHIjcUjrQdeoAj63FsduHegbdms1/3FGma2fyfPuFCn 2TT/DraMjCLULTJUlyQR+xiJm4xknKmr4A3YQD1OTulgMvLJk71GSq6GGZHOfjuEr1nhMjqhPrQP 8JHj9pXecmPsrm0qEW5Y3oxk0t4tSz4i/DeMuEp7Jkf8urqtPMASg3XSV42Y3tFl/LLQEEVa3Fms tKUyf7ltCaEOpimrrgf0Y0XrHTJGZAVEnMrQmPfeavgG8NV71d92bWP50xjUAJmyUWPIHiw+eBrx ge4hR4/+u6zzGR24not3fs8vmBiFomDelJN297Y3xVXRXO+Qee1P8g/mIx0zevX3HWi22J6Vcflg TO139QlAvO7xnAAlsZN2Z3K9vCuu4wPZYuxx8tAjw7EIi/ThP3MNxwavW/KuFiLvp0aCaJqyirYM 2SEmP7PTjcavspP9h4W393I0HA2wwtwlgdHSSeWXEdahquEfjc9SIpjlWYm3TllT0Hhcg7OAeejO kpeushURSDfs5BB4REUV3u4PGJhIncYogLlScFUwRfuQLWRKOu6mPxECEGObt1tOfsCtr25gxc7e tlmUKVPBZ5R2LUlMMOkw== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Dec 2022 01:12:22 +0800 X-OQ-MSGID: <20221204171228.50160-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/7] avcodec/mediacodecenc: add bitrate_mode option 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: OWR1+Csw/lbj From: Zhao Zhili --- libavcodec/mediacodecenc.c | 25 +++++++++++++++++++++++++ libavcodec/version.h | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index 69246ad693..c8d8f84e46 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -39,6 +39,17 @@ #define INPUT_DEQUEUE_TIMEOUT_US 8000 #define OUTPUT_DEQUEUE_TIMEOUT_US 8000 +enum BitrateMode { + /* Constant quality mode */ + BITRATE_MODE_CQ = 0, + /* Variable bitrate mode */ + BITRATE_MODE_VBR = 1, + /* Constant bitrate mode */ + BITRATE_MODE_CBR = 2, + /* Constant bitrate mode with frame drops */ + BITRATE_MODE_CBR_FD = 3, +}; + typedef struct MediaCodecEncContext { AVClass *avclass; FFAMediaCodec *codec; @@ -67,6 +78,8 @@ typedef struct MediaCodecEncContext { int eof_sent; AVFrame *frame; + + int bitrate_mode; } MediaCodecEncContext; enum { @@ -193,6 +206,8 @@ static av_cold int mediacodec_init(AVCodecContext *avctx) if (avctx->bit_rate) ff_AMediaFormat_setInt32(format, "bitrate", avctx->bit_rate); + if (s->bitrate_mode >= 0) + ff_AMediaFormat_setInt32(format, "bitrate-mode", s->bitrate_mode); // frame-rate and i-frame-interval are required to configure codec if (avctx->framerate.num >= avctx->framerate.den && avctx->framerate.den > 0) { s->fps = avctx->framerate.num / avctx->framerate.den; @@ -485,6 +500,16 @@ static const AVOption common_options[] = { OFFSET(use_ndk_codec), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE }, { "codec_name", "Select codec by name", OFFSET(name), AV_OPT_TYPE_STRING, {0}, 0, 0, VE }, + { "bitrate_mode", "Bitrate control method", + OFFSET(bitrate_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE, "bitrate_mode" }, + { "cq", "Constant quality mode", + 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CQ}, 0, 0, VE, "bitrate_mode" }, + { "vbr", "Variable bitrate mode", + 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_VBR}, 0, 0, VE, "bitrate_mode" }, + { "cbr", "Constant bitrate mode", + 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CBR}, 0, 0, VE, "bitrate_mode" }, + { "cbr_fd", "Constant bitrate mode with frame drops", + 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CBR_FD}, 0, 0, VE, "bitrate_mode" }, { NULL }, }; diff --git a/libavcodec/version.h b/libavcodec/version.h index 9e66920593..527b4dbd0b 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -30,7 +30,7 @@ #include "version_major.h" #define LIBAVCODEC_VERSION_MINOR 54 -#define LIBAVCODEC_VERSION_MICRO 101 +#define LIBAVCODEC_VERSION_MICRO 102 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ From patchwork Sun Dec 4 17:12:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39585 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2708615pzb; Sun, 4 Dec 2022 09:13:59 -0800 (PST) X-Google-Smtp-Source: AA0mqf4GQz24+a6bsaVi+5MuOhmlBDrOVCeSpQezpfnRcwiSBJ0zwRMv+MWvc1mresqhQZ/800v8 X-Received: by 2002:a17:907:3c12:b0:7c0:cd7d:fb39 with SMTP id gh18-20020a1709073c1200b007c0cd7dfb39mr7660356ejc.288.1670174039343; Sun, 04 Dec 2022 09:13:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670174039; cv=none; d=google.com; s=arc-20160816; b=PBVc6IRdRuGVjjM3VU/pw/C6Vd/wmVecuKST9c9981XJAXCzBBBMXjVwTnX+O+ukhB R9WMFpXTSNatbVEJpC5kYkY1wVy8ukcJgGFpjNj2bisamyBVsvBWrqRhJHSe+v5VXAEE tgYuytwjVp/ZN0Kyafrtl8s1htwXT54UFF77kYloYRuXhRWT946MV4IkqnnSg6MCC9WL Cf16eLIZ+//os1uGicjwN7NRJxMo21NfO1MTzPsazDygajRs9WanWapciJtIgFpiMa7g iwLOoLutOPJuhZW/nEE7VxsZTlIUQpyXa8O+H1yEc65/2tNQORzICC/qfbsquV71HP0/ aK2Q== 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=fCSzklXxkgywY6DCPzs3YOmFjChO+04xdypYxlbleJs=; b=mGtkPR+AAzepSHPTUX8a7S8r0S14m84FmRULdsMknTq5mOSgesE4nJbbfH9cOpRTNc glupqwNIGWXY0JRggnoPlR/ip8nMcU01wKaUa0c0CziwuHP4aB7eL279TjfInETR5B+h oGW3wSDSg8Pp9XYIGoS7v+y2ktIFx20+oY/ObltJv6143vEN8DiVCSvWFe220ZXmANjh cQTwp2qpFLAfVZRsPZcKO0Z++0EURmHBtapEBqWOAy14nOqQBUb9mBrVDdnRo3Dt7DGu 3inOy6TKGdAQo4OWuYPMZvhbV4tw4LdxiUFkqmNyhNbvojsIrcXFybcVs9DPU7/k3y/d v6FA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=n1e5o37l; 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-20020a05640250c900b0046c6e69565dsi3509649edb.259.2022.12.04.09.13.59; Sun, 04 Dec 2022 09:13:59 -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=n1e5o37l; 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 2840E68B96D; Sun, 4 Dec 2022 19:13:11 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-205.mail.qq.com (out203-205-221-205.mail.qq.com [203.205.221.205]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0C9E168B8BE for ; Sun, 4 Dec 2022 19:12:59 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670173974; bh=swf6Q3VBEnypt7A9SS/5nVSp8JUJBM8VvLufylVVmtA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=n1e5o37lyd/Z50WNr/86DTzJ/slDLtDGdphUo/bpRFAadOffm1pYq20fSpyXkkRPL hLRfEPKzKM/2PhpapVYoTVL91AE9qL33Fy/UeuYmC2dFf+lYfxNShtEOHFuXavj4Ym F4SfUkerw5vQn2NvIx2WK0sWlZT1hcOFH4xULDds= Received: from localhost.localdomain ([14.153.79.182]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 334B3853; Mon, 05 Dec 2022 01:12:52 +0800 X-QQ-mid: xmsmtpt1670173973td1adlvy9 Message-ID: X-QQ-XMAILINFO: NvKyM24IHTKSUfXBQoTSN+iIBiGCvkgQm/pXSWxuznvOYUIVeHi4MSrZVkN7zQ +xs488FJ6eou78NjPDo5eLthyGkYmUy0hFiVVe9gTAnCHzAMYDyhQ/Y+HZ4tXrw6r4wEjr1aXtDW QLEOCdZXqVUDbRx9vXCpJskmQVsweIiHWEn9oeE7Ox/snYMeQWaAsJq+YPq+6vdIexPcqiTuMAP/ 6xzzn275SfQL7fKVqWF4vUeRVhi/DxEwznrbzrTguf7NNAIGsluASTU0sFr1sMylSc7nv3XDBSPj ukvfhgrNEZW1U9nXhavAWfctNsX7UKY39toxLNO0tFbYS9i9Oi3BoeAwp4+kMm34MjjbqzGYWPgB +tRdLNOqMnwaldIl4/gSdz0ght2i4NCLIkG5yg+R4mEd3hCHANKbPSMSWJX498oQ/dLsCVKhJ/1q ncc9JHKVbMGjR7tTMbhJJImnWdmQuXuzixC8RUAfnGhvJhE7Eq4uLRLIcMrTI9muifLXHhwLfKvk RpgoUpf2mEdigak4/qBImGjcz6OADFzZH8GZMI8H3mOhuz9nYlhb2xU5uLx4Ux/RVVaPp25zmbIl VCnCYGUDTSdY8WfLVdCVpRXNPH8p5HwYKTw8wqaONmGuX6mCTD6VhlVbBcEvB7Lftn9KPcSWoYhT Tfaa9X8odZPtOlM104q9IlebBxTg6xC/6lKsJTp0LvMJ/yymV5DypkWvR4ebnqyldwzPF1W3dnWK 2BwuQmaFlRiwCI4ZsI3GjTCG6FDlDZ/MH6/x4vB93rflagOCqv0shEu3kv2ErXjTochd2VII5x8p jnkyOOra13n1Rselm3Cm2XafQL54YCsIBIfYy8tB5O+EtHKq05R9tkOz74hDChd047HjxKJ+dzVr eWwEdpXKP69QagfbFGF0Gi5Nc04DSReDlJrN4E0Mpphj2VKJMm0Ma6A+VGbrra9gC0sS+7xoDyhy gBeQ8lKo0IpwT+61ImjC9MPsgMdxhF From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Dec 2022 01:12:23 +0800 X-OQ-MSGID: <20221204171228.50160-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221204171228.50160-1-quinkblack@foxmail.com> References: <20221204171228.50160-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] avcodec/mediacodecenc: make each encoder has its own option 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qPCYAwBqWFps From: Zhao Zhili --- libavcodec/mediacodecenc.c | 42 ++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index c8d8f84e46..c28cce56c6 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -495,29 +495,27 @@ static const AVCodecHWConfigInternal *const mediacodec_hw_configs[] = { #define OFFSET(x) offsetof(MediaCodecEncContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM -static const AVOption common_options[] = { - { "ndk_codec", "Use MediaCodec from NDK", - OFFSET(use_ndk_codec), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE }, - { "codec_name", "Select codec by name", - OFFSET(name), AV_OPT_TYPE_STRING, {0}, 0, 0, VE }, - { "bitrate_mode", "Bitrate control method", - OFFSET(bitrate_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE, "bitrate_mode" }, - { "cq", "Constant quality mode", - 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CQ}, 0, 0, VE, "bitrate_mode" }, - { "vbr", "Variable bitrate mode", - 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_VBR}, 0, 0, VE, "bitrate_mode" }, - { "cbr", "Constant bitrate mode", - 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CBR}, 0, 0, VE, "bitrate_mode" }, - { "cbr_fd", "Constant bitrate mode with frame drops", - 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CBR_FD}, 0, 0, VE, "bitrate_mode" }, - { NULL }, -}; +#define COMMON_OPTION \ + { "ndk_codec", "Use MediaCodec from NDK", \ + OFFSET(use_ndk_codec), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE }, \ + { "codec_name", "Select codec by name", \ + OFFSET(name), AV_OPT_TYPE_STRING, {0}, 0, 0, VE }, \ + { "bitrate_mode", "Bitrate control method", \ + OFFSET(bitrate_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE, "bitrate_mode" }, \ + { "cq", "Constant quality mode", \ + 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CQ}, 0, 0, VE, "bitrate_mode" }, \ + { "vbr", "Variable bitrate mode", \ + 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_VBR}, 0, 0, VE, "bitrate_mode" }, \ + { "cbr", "Constant bitrate mode", \ + 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CBR}, 0, 0, VE, "bitrate_mode" }, \ + { "cbr_fd", "Constant bitrate mode with frame drops", \ + 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CBR_FD}, 0, 0, VE, "bitrate_mode" }, \ #define MEDIACODEC_ENCODER_CLASS(name) \ static const AVClass name ## _mediacodec_class = { \ .class_name = #name "_mediacodec", \ .item_name = av_default_item_name, \ - .option = common_options, \ + .option = name ## _options, \ .version = LIBAVUTIL_VERSION_INT, \ }; \ @@ -542,9 +540,17 @@ const FFCodec ff_ ## short_name ## _mediacodec_encoder = { \ }; \ #if CONFIG_H264_MEDIACODEC_ENCODER +static const AVOption h264_options[] = { + COMMON_OPTION + { NULL, } +}; DECLARE_MEDIACODEC_ENCODER(h264, "H.264", AV_CODEC_ID_H264) #endif #if CONFIG_HEVC_MEDIACODEC_ENCODER +static const AVOption hevc_options[] = { + COMMON_OPTION + { NULL, } +}; DECLARE_MEDIACODEC_ENCODER(hevc, "H.265", AV_CODEC_ID_HEVC) #endif From patchwork Sun Dec 4 17:12:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39583 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2708457pzb; Sun, 4 Dec 2022 09:13:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf7JQsmhrKhrotczp3qPQ/wy+d4vyuLa0ZBS1qN6oMuw+c2ryHfaG8nnWY5/rsfctH3i83/V X-Received: by 2002:a05:6402:2993:b0:462:845:ba98 with SMTP id eq19-20020a056402299300b004620845ba98mr1209512edb.12.1670174021575; Sun, 04 Dec 2022 09:13:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670174021; cv=none; d=google.com; s=arc-20160816; b=iNnn1B++IM+YFis7p6oZYCWvbpNjjl5FNaFew+99jb2N8hF+/DwhDyoQ3A8LhWz+ge dj0FvFPTDjECT03Xccpsrh0IkDdTDjdNRxvIod+YG0zx7LzZ4ajT/CsO0q/TaRKFBSlX y1wFR2WDw8xf/9yBNC2IyBtbtGSGS+NdMFHddLcfGVQCImflLL2h0aHqrLzZtx2apa4W gjQ5Hi3LNu2Fn/itCGs+mJ3sSu37wZFXiFqUhhQDPZh/kiGnFiSioTSc5Q9QfeIpGcUZ ZotXfZ95HBTIBxXA/30/MENL4W70GD24X0qKO2U/WfR4x5+Ymk+ZPgli3rizpBo7ya0R pIbQ== 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=vDXYdQOIZFUH8jyUzFP9rF8E/VnNiA6V5uwf2LG7Omc=; b=tXHdNDDRfd6FTKzfdmL/XPu14o8Fj5PoMKD/sBv2SNPcfSUFekgQpeWkMpW21hc9w5 2+PWkb6cwZ1dms9W49PslyInJXvuB3xICS890t8g2M8tRBbAbV5hoE5tLuQnSDdgz2ER MZScJoxjo0cg/qHdg5SM44TYsdFoTsfaJ5sFOxhrodQiPWQ5IwMHKPe/PDe7w3bDeLEl NMIqIwgKOpWFaQhB/kd+wZFaaMUNKs4FGtKz1GqLvjVOT13ucZRxsVro32TFIRl8BLwg EnIHznlKxjm785pAHgVgjMj9zh3Iv0L2hauFxSTLBhTSx9czcz2dkJ54bhzh9y3TTYGW OeLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=Ws9QHtCo; 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 qo14-20020a170907874e00b007a92b00c094si8907986ejc.421.2022.12.04.09.13.41; Sun, 04 Dec 2022 09:13:41 -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=Ws9QHtCo; 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 1694968BB94; Sun, 4 Dec 2022 19:13:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-205.mail.qq.com (out203-205-221-205.mail.qq.com [203.205.221.205]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CC1BF68B8BE for ; Sun, 4 Dec 2022 19:12:58 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670173975; bh=/Jq+jWRoBNqhAJgtRRX2Dmf+D6tGdOXhOsDQTzj5vNM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Ws9QHtCoOEE9GNrx5QoRjtiQAE6iVwTjPPGXmKDK30yGDfB81JDJpaec0462lUHwU jqEAcCZYwPPjRy5EjxNdQbN9q5dwvEJWLUvddpM/5KSi65GdQXZgC2wiQEDWhl8kOz C3vSFUK0mGXaNwnH1eSwcdHrdEARsUREMqn7h2mw= Received: from localhost.localdomain ([14.153.79.182]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 334B3853; Mon, 05 Dec 2022 01:12:52 +0800 X-QQ-mid: xmsmtpt1670173974twmv9rf6z Message-ID: X-QQ-XMAILINFO: NrEcP6Y4Tjd7F2NSb5OS0k3uoyquotMyLYUZ/9DThWsYBlh4y17epFM4Fc3+IQ Q3gm/hrxW9JLJ17iFYvxxhoYF5PND/+3muzmrvquRhZHDzllT5ft6Y48gpxC8Tf9UO1ngpM//pwJ s3T/AY3T0S6NTQ2vTzhp6pLSFP0hJzS21fhyFH6eyzchyYKsz9w4xLdotPy91uu5Mu8iqj1nOlbD Gmy2ec5Lz9nf3mGrIywaEv96y0LUbGPNI9U3ZrqjODYXtojGh/qQIDet0wiZNUmgqNFirkfG2yOH Lr1knxQ8lYro9+8vn4dWYMWz52jslRXa5NnbdAS3s9hw8nSkiBrcMrFEn+S6ggf5QwJm+lkuV3rT pFV9oLbFMvNCb3/ib6rHwHfDqFEB+SIbIC8owAPbdl6Z5cUNwQCZDeTXRAksGCBRuWR3EVi0Nufl QWa80dT3xj0pVT/7dUm+IiAoBahQWoY2lRkE/ml667LlavWmTZxV+302aLaRHa2qIGJ8kd3dGmaV nPkpWrpOUqGITIwL7s0cP4ZQ5lr0C1dDRNOswWRVyaK4M/iu2ErvdRXWsN/2tyiu7JzgPDfdJyvd +FuEmgU33fR/wMnvTKER3SWdh3Tt2GOUGpa1F2W3ybt+B/zGpP/Kebans6PbZxiUZRPO+p2jYqFL uqq6Q5m6ukj0uMz/NkNmsxvVqd1pC19ThBOpMwrDbl1jfOXStuQjDUWGTPj8xvk0sO716mDqo4kn PWKA20Hm8IB76/USd9feOv4yH0RKLNQgIF5FWy05uREOlaNxBmPAb62Lhagn6L5W2U8ppsSwsKts 9W1lVPQb0uvdoBJv+A0JPWQGYKYkoTJdK9yg6xtUJRwAGq5QSXdhd82ZzkNeQ/5pymxoJyGYvCIy GZyktwkNjVxPOGrjS9erCU2QVgyuSkmc6a8r+PAzf9bmKGS9oVr3htZtpfg5TouedbDI/YZ2+7se EYeP+hT7cPGiBK4FwgIF0PPXiN2hbhqQnA5RwTy8pG8POPBSaqRDa0LI5HFeg7qwVGngBycSk= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Dec 2022 01:12:24 +0800 X-OQ-MSGID: <20221204171228.50160-3-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221204171228.50160-1-quinkblack@foxmail.com> References: <20221204171228.50160-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] avcodec/mediacodecenc: add level option 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: As1RRd3+7uKM From: Zhao Zhili --- libavcodec/mediacodecenc.c | 143 ++++++++++++++++++++++++++++++++++++- libavcodec/version.h | 2 +- 2 files changed, 142 insertions(+), 3 deletions(-) diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index c28cce56c6..d098880941 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -80,6 +80,7 @@ typedef struct MediaCodecEncContext { AVFrame *frame; int bitrate_mode; + int level; } MediaCodecEncContext; enum { @@ -233,6 +234,10 @@ static av_cold int mediacodec_init(AVCodecContext *avctx) av_log(avctx, AV_LOG_DEBUG, "set profile to 0x%x\n", ret); ff_AMediaFormat_setInt32(format, "profile", ret); } + if (s->level > 0) { + av_log(avctx, AV_LOG_DEBUG, "set level to 0x%x\n", s->level); + ff_AMediaFormat_setInt32(format, "level", s->level); + } ret = ff_AMediaCodec_getConfigureFlagEncode(s->codec); ret = ff_AMediaCodec_configure(s->codec, format, s->window, NULL, ret); @@ -540,17 +545,151 @@ const FFCodec ff_ ## short_name ## _mediacodec_encoder = { \ }; \ #if CONFIG_H264_MEDIACODEC_ENCODER + +enum MediaCodecAvcLevel { + AVCLevel1 = 0x01, + AVCLevel1b = 0x02, + AVCLevel11 = 0x04, + AVCLevel12 = 0x08, + AVCLevel13 = 0x10, + AVCLevel2 = 0x20, + AVCLevel21 = 0x40, + AVCLevel22 = 0x80, + AVCLevel3 = 0x100, + AVCLevel31 = 0x200, + AVCLevel32 = 0x400, + AVCLevel4 = 0x800, + AVCLevel41 = 0x1000, + AVCLevel42 = 0x2000, + AVCLevel5 = 0x4000, + AVCLevel51 = 0x8000, + AVCLevel52 = 0x10000, + AVCLevel6 = 0x20000, + AVCLevel61 = 0x40000, + AVCLevel62 = 0x80000, +}; + static const AVOption h264_options[] = { COMMON_OPTION + { "level", "Specify level", + OFFSET(level), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, VE, "level" }, + { "1", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel1 }, 0, 0, VE, "level" }, + { "1b", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel1b }, 0, 0, VE, "level" }, + { "1.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel11 }, 0, 0, VE, "level" }, + { "1.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel12 }, 0, 0, VE, "level" }, + { "1.3", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel13 }, 0, 0, VE, "level" }, + { "2", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel2 }, 0, 0, VE, "level" }, + { "2.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel21 }, 0, 0, VE, "level" }, + { "2.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel22 }, 0, 0, VE, "level" }, + { "3", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel3 }, 0, 0, VE, "level" }, + { "3.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel31 }, 0, 0, VE, "level" }, + { "3.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel32 }, 0, 0, VE, "level" }, + { "4", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel4 }, 0, 0, VE, "level" }, + { "4.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel41 }, 0, 0, VE, "level" }, + { "4.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel42 }, 0, 0, VE, "level" }, + { "5", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel5 }, 0, 0, VE, "level" }, + { "5.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel51 }, 0, 0, VE, "level" }, + { "5.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel52 }, 0, 0, VE, "level" }, + { "6.0", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel6 }, 0, 0, VE, "level" }, + { "6.1", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel61 }, 0, 0, VE, "level" }, + { "6.2", "", 0, AV_OPT_TYPE_CONST, { .i64 = AVCLevel62 }, 0, 0, VE, "level" }, { NULL, } }; + DECLARE_MEDIACODEC_ENCODER(h264, "H.264", AV_CODEC_ID_H264) -#endif + +#endif // CONFIG_H264_MEDIACODEC_ENCODER #if CONFIG_HEVC_MEDIACODEC_ENCODER + +enum MediaCodecHevcLevel { + HEVCMainTierLevel1 = 0x1, + HEVCHighTierLevel1 = 0x2, + HEVCMainTierLevel2 = 0x4, + HEVCHighTierLevel2 = 0x8, + HEVCMainTierLevel21 = 0x10, + HEVCHighTierLevel21 = 0x20, + HEVCMainTierLevel3 = 0x40, + HEVCHighTierLevel3 = 0x80, + HEVCMainTierLevel31 = 0x100, + HEVCHighTierLevel31 = 0x200, + HEVCMainTierLevel4 = 0x400, + HEVCHighTierLevel4 = 0x800, + HEVCMainTierLevel41 = 0x1000, + HEVCHighTierLevel41 = 0x2000, + HEVCMainTierLevel5 = 0x4000, + HEVCHighTierLevel5 = 0x8000, + HEVCMainTierLevel51 = 0x10000, + HEVCHighTierLevel51 = 0x20000, + HEVCMainTierLevel52 = 0x40000, + HEVCHighTierLevel52 = 0x80000, + HEVCMainTierLevel6 = 0x100000, + HEVCHighTierLevel6 = 0x200000, + HEVCMainTierLevel61 = 0x400000, + HEVCHighTierLevel61 = 0x800000, + HEVCMainTierLevel62 = 0x1000000, + HEVCHighTierLevel62 = 0x2000000, +}; + static const AVOption hevc_options[] = { COMMON_OPTION + { "level", "Specify tier and level", + OFFSET(level), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, VE, "level" }, + { "m1", "Main tier level 1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel1 }, 0, 0, VE, "level" }, + { "h1", "High tier level 1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel1 }, 0, 0, VE, "level" }, + { "m2", "Main tier level 2", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel2 }, 0, 0, VE, "level" }, + { "h2", "High tier level 2", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel2 }, 0, 0, VE, "level" }, + { "m2.1", "Main tier level 2.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel21 }, 0, 0, VE, "level" }, + { "h2.1", "High tier level 2.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel21 }, 0, 0, VE, "level" }, + { "m3", "Main tier level 3", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel3 }, 0, 0, VE, "level" }, + { "h3", "High tier level 3", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel3 }, 0, 0, VE, "level" }, + { "m3.1", "Main tier level 3.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel31 }, 0, 0, VE, "level" }, + { "h3.1", "High tier level 3.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel31 }, 0, 0, VE, "level" }, + { "m4", "Main tier level 4", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel4 }, 0, 0, VE, "level" }, + { "h4", "High tier level 4", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel4 }, 0, 0, VE, "level" }, + { "m4.1", "Main tier level 4.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel41 }, 0, 0, VE, "level" }, + { "h4.1", "High tier level 4.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel41 }, 0, 0, VE, "level" }, + { "m5", "Main tier level 5", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel5 }, 0, 0, VE, "level" }, + { "h5", "High tier level 5", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel5 }, 0, 0, VE, "level" }, + { "m5.1", "Main tier level 5.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel51 }, 0, 0, VE, "level" }, + { "h5.1", "High tier level 5.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel51 }, 0, 0, VE, "level" }, + { "m5.2", "Main tier level 5.2", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel52 }, 0, 0, VE, "level" }, + { "h5.2", "High tier level 5.2", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel52 }, 0, 0, VE, "level" }, + { "m6", "Main tier level 6", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel6 }, 0, 0, VE, "level" }, + { "h6", "High tier level 6", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel6 }, 0, 0, VE, "level" }, + { "m6.1", "Main tier level 6.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel61 }, 0, 0, VE, "level" }, + { "h6.1", "High tier level 6.1", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel61 }, 0, 0, VE, "level" }, + { "m6.2", "Main tier level 6.2", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCMainTierLevel62 }, 0, 0, VE, "level" }, + { "h6.2", "High tier level 6.2", + 0, AV_OPT_TYPE_CONST, { .i64 = HEVCHighTierLevel62 }, 0, 0, VE, "level" }, { NULL, } }; + DECLARE_MEDIACODEC_ENCODER(hevc, "H.265", AV_CODEC_ID_HEVC) -#endif + +#endif // CONFIG_HEVC_MEDIACODEC_ENCODER diff --git a/libavcodec/version.h b/libavcodec/version.h index 527b4dbd0b..61bdf5806b 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -30,7 +30,7 @@ #include "version_major.h" #define LIBAVCODEC_VERSION_MINOR 54 -#define LIBAVCODEC_VERSION_MICRO 102 +#define LIBAVCODEC_VERSION_MICRO 103 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ From patchwork Sun Dec 4 17:12:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39580 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2708165pzb; Sun, 4 Dec 2022 09:13:12 -0800 (PST) X-Google-Smtp-Source: AA0mqf69bOYgqAD0U8RUxzSeQA3ccXzjDnJZHTuVgi54NAzH5PTyoRuT7fsAQzaIxMno2Tyr9ASc X-Received: by 2002:a17:906:1713:b0:7a3:fc74:7fb4 with SMTP id c19-20020a170906171300b007a3fc747fb4mr69720556eje.17.1670173991821; Sun, 04 Dec 2022 09:13:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670173991; cv=none; d=google.com; s=arc-20160816; b=DzjQflSg+OuA6VbIq2HJUk1YEU+tjQr800bD3O7BrmbMl/qojZtRmD0SLT//Zw5oQA j5XiIehbKNz26bFUJv8f1jS6NZZ+0V+Q8I7Vl+0bGrXWkHNh0HfUhZ9j/sc7va0YumbN Z4geHBwaR2n6n0O1zOq9UrN6waMRlXwmkaeXtrTH5CbS3GwI0FU9BMwLPmWWaUXUYNSR jD52ZZOOK7CELrZQvT3mhpeWkOqz5IujSr95/bxUiuK5zsd8OeYKkRBxCc1BbbeLAXhA SxTSq6PqbL1qRhbxc+Udpy784zPsmQHxtmp+aflagW9mDzirpGfdGV4yON2m9kJdYkYN 8/KQ== 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=QpbxMgqsWcALSv3Ph4jyTWQVF1cIe23ePCX5wt0zUas=; b=qx4uMGDJU9zvpZGl/ENGR4oP2yaD0kPAIcEHk/S+ivYKhUKlaV25qAChNQ7VUX8nay NypCpZUSC6mxE2MlSsik49oRyMO9X42t6xfsAjLnzIRTSPEWIftfBh8N1m7x8JLtRoDa NaZ+lpAqns3PlmRSnXI+F6kdfIE/WchQVCFkWdSKyZ2YisMUh0+1yO3/ZsHnW2LYwXPu HTtmdYy9IbH3n0bu2NBnhUhnFGaVjHh1TgXWNLze3rlCcnRrwJ5j4ObpVb1WIzu0wlut 2e8Bb3yqNlRWpN0hl3K5FHjzX09mqp6+h3+zxvl2NBOmM27z1VGFtBRw1Yl0YgxuFV0h v8Mw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=vopNq+FK; 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 by12-20020a0564021b0c00b0046afbd6c84fsi9652435edb.553.2022.12.04.09.13.11; Sun, 04 Dec 2022 09:13:11 -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=vopNq+FK; 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 4985F68BAD5; Sun, 4 Dec 2022 19:13:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-64.mail.qq.com (out162-62-57-64.mail.qq.com [162.62.57.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C9C7C68B7F1 for ; Sun, 4 Dec 2022 19:12:58 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670173975; bh=YTkZWSN08bD6dP+TlULdk4sHjLww5DBTMrBlvYIwCrk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=vopNq+FK/cRM0VzHArDvqgU0FHUAPmDNyxc9NqXnsKzzOFzF1Tog1hG67mtI0PIrT NHorDTuKKlaeNqAn2Q+Wggb1DGFA2qcDsWst1Xa4UvTVPR3/KzulmgLaynmWJ3Q7wp L1sfi0P2iAcpZ7XX7sk5cEnmNDBykxkYVgloEk4I= Received: from localhost.localdomain ([14.153.79.182]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 334B3853; Mon, 05 Dec 2022 01:12:52 +0800 X-QQ-mid: xmsmtpt1670173974t0hppu7r0 Message-ID: X-QQ-XMAILINFO: N7/wgsuYk0VxHowYHQX2utWXj5rLcjOb1qZO9GldaMHn6FOGwawmvbkospwlrr lMJcR0ZFYuoLO+Fku6sG7rMYgOqAu5OrxrwwlC4nCHktV+7YMUWhNODuZ6uRNX1jkJx0CkNWTSrj V9NU0Kq8zBoDsMDwC3ds/RjNhJ3g24fyS6mjgLmqsJhmlWno3Nd3rOmLD7/K4afqg/nGn9/Gemc6 fAvF00unlQlGHkJroKYKJtknQ6rH6RxxiDPDvZ0Ubg/aEF8BoEFwKRKpVlvkauln97mfUqN2aeVh yD8EiqC7oJ7PQLbFnw2Yvjl/doxusc/SWZQMDPH1Xk0luXI0nb2JM57OgEFeLXR7WQQacO+VImr+ 3bvvI9Lr5bIHjiglpgnAEPf8LM1prsUo9H0Sn4kRI49/cdettErJf7bDQyzZrtgxG4szHM3HhGsG vjza0ZQ4520id6zgLN9M0ABvlm4qE5NVC+7PvvyQGqiRY/5eZ/u2NDHcwWo5oCNFOOI/n2IRHtr4 flPTXLYYBkzpoOxW2Ob5cUFrwlnEBTu6pX2IK9D5MmkOR+VdpijF0XZjvY/Txe49LtVsZkTR+6wc M+hHD4EEHoi0tOIag17yhj+p+jwMkFYSFTfZxbBm35gCLFggIZBb11ew2S0OGZlNpEnURvIdBSlr 7xzUeXXhqqGOxrGvjt9JO7e46yfJkCbt/1miqL7avC95F8YMo1d4tOOir2ITNFFWtnaOv1qPkW1J Ve2BSBWYbGs90scXJFinIngu2D7Wu+tdcbxfz9XWvRyue0dCQTrWIhv8YU1WMjBTurhm86GSYJ8z YVpxiRZT3flkU6VkexSmFN9R+jqOEH+Ecv2dJ3qHWL+ZG0T6/odpYik57hT9Znyd/yvWvfogOaJV Dn0bMxx0PRcKj7pTAkLAd+ue/QUbu0AjnrE/4aDku1/6HTDlWKPQA3UEYC7X25PmGe/68SUR6TSg 4uT0bfeqYg9GS6kahoVhme+wVSPU/utAP4o5xCbpKEkmjbAkYluuyi3TaZxqa1 From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Dec 2022 01:12:25 +0800 X-OQ-MSGID: <20221204171228.50160-4-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221204171228.50160-1-quinkblack@foxmail.com> References: <20221204171228.50160-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] avcodec/mediacodecenc: use bsf to handle crop 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 5wZJSxYwSQwh From: Zhao Zhili It's well known that mediacodec encoder requires 16x16 alignment. Use our bsf to fix the crop info. --- configure | 2 ++ libavcodec/mediacodecenc.c | 65 +++++++++++++++++++++++++++++++++++--- 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 0d754e7ae9..3bb0a091d4 100755 --- a/configure +++ b/configure @@ -3169,6 +3169,7 @@ h264_mediacodec_decoder_extralibs="-landroid" h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser" h264_mediacodec_encoder_deps="mediacodec" h264_mediacodec_encoder_extralibs="-landroid" +h264_mediacodec_encoder_select="h264_metadata" h264_mf_encoder_deps="mediafoundation" h264_mmal_decoder_deps="mmal" h264_nvenc_encoder_deps="nvenc" @@ -3190,6 +3191,7 @@ hevc_mediacodec_decoder_extralibs="-landroid" hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser" hevc_mediacodec_encoder_deps="mediacodec" hevc_mediacodec_encoder_extralibs="-landroid" +hevc_mediacodec_encoder_select="hevc_metadata" hevc_mf_encoder_deps="mediafoundation" hevc_nvenc_encoder_deps="nvenc" hevc_nvenc_encoder_select="atsc_a53" diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index d098880941..dce4a96d1f 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -28,6 +28,7 @@ #include "libavutil/opt.h" #include "avcodec.h" +#include "bsf.h" #include "codec_internal.h" #include "encode.h" #include "hwconfig.h" @@ -78,6 +79,7 @@ typedef struct MediaCodecEncContext { int eof_sent; AVFrame *frame; + AVBSFContext *bsf; int bitrate_mode; int level; @@ -119,6 +121,42 @@ static void mediacodec_output_format(AVCodecContext *avctx) ff_AMediaFormat_delete(out_format); } +static int mediacodec_init_bsf(AVCodecContext *avctx) +{ + MediaCodecEncContext *s = avctx->priv_data; + char str[128]; + int ret; + int crop_right = s->width - avctx->width; + int crop_bottom = s->height - avctx->height; + + if (!crop_right && !crop_bottom) + return 0; + + if (avctx->codec_id == AV_CODEC_ID_H264) + ret = snprintf(str, sizeof(str), "h264_metadata=crop_right=%d:crop_bottom=%d", + crop_right, crop_bottom); + else if (avctx->codec_id == AV_CODEC_ID_HEVC) + ret = snprintf(str, sizeof(str), "hevc_metadata=crop_right=%d:crop_bottom=%d", + crop_right, crop_bottom); + else + return 0; + + if (ret >= sizeof(str)) + return AVERROR_BUFFER_TOO_SMALL; + + ret = av_bsf_list_parse_str(str, &s->bsf); + if (ret < 0) + return ret; + + ret = avcodec_parameters_from_context(s->bsf->par_in, avctx); + if (ret < 0) + return ret; + s->bsf->time_base_in = avctx->time_base; + ret = av_bsf_init(s->bsf); + + return ret; +} + static av_cold int mediacodec_init(AVCodecContext *avctx) { const char *codec_mime = NULL; @@ -159,7 +197,7 @@ static av_cold int mediacodec_init(AVCodecContext *avctx) ff_AMediaFormat_setString(format, "mime", codec_mime); s->width = FFALIGN(avctx->width, 16); - s->height = avctx->height; + s->height = FFALIGN(avctx->height, 16); ff_AMediaFormat_setInt32(format, "width", s->width); ff_AMediaFormat_setInt32(format, "height", s->height); @@ -252,6 +290,10 @@ static av_cold int mediacodec_init(AVCodecContext *avctx) goto bailout; } + ret = mediacodec_init_bsf(avctx); + if (ret) + goto bailout; + mediacodec_output_format(avctx); s->frame = av_frame_alloc(); @@ -444,10 +486,24 @@ static int mediacodec_encode(AVCodecContext *avctx, AVPacket *pkt) // 2. Got a packet success // 3. No AVFrame is available yet (don't return if get_frame return EOF) while (1) { + if (s->bsf) { + ret = av_bsf_receive_packet(s->bsf, pkt); + if (!ret) + return 0; + if (ret != AVERROR(EAGAIN)) + return ret; + } + ret = mediacodec_receive(avctx, pkt, &got_packet); - if (!ret) - return 0; - else if (ret != AVERROR(EAGAIN)) + if (s->bsf) { + if (!ret || ret == AVERROR_EOF) + ret = av_bsf_send_packet(s->bsf, pkt); + } else { + if (!ret) + return 0; + } + + if (ret != AVERROR(EAGAIN)) return ret; if (!s->frame->buf[0]) { @@ -480,6 +536,7 @@ static av_cold int mediacodec_close(AVCodecContext *avctx) s->window = NULL; } + av_bsf_free(&s->bsf); av_frame_free(&s->frame); return 0; From patchwork Sun Dec 4 17:12:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39581 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2708264pzb; Sun, 4 Dec 2022 09:13:22 -0800 (PST) X-Google-Smtp-Source: AA0mqf5ZfXJVuFV5IQh93sOmKN3X8Y1RML8uUwMiApR6lcvQesOykg2xgqFS4SL8wuPaOJmDHDwl X-Received: by 2002:a17:907:a688:b0:7ba:ba67:f2f with SMTP id vv8-20020a170907a68800b007baba670f2fmr42156654ejc.199.1670174002706; Sun, 04 Dec 2022 09:13:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670174002; cv=none; d=google.com; s=arc-20160816; b=BAbNtkwbh1lKssvBD2Dypq5fS+AOQquVdv306YRLk6w30+jpt1Mxk/azPkeI7rga2r jeEgx9Dl51GLhVvIzBc/uNGgtD1076oXu+Wg0K5ebR3WeMddoeFoNMf22ULRywdF3ae6 QowTn2B5FgxFcoEs2/PjMX8qLsJorTJLEMVS0Sw/9Zw+cFFoh3Bjz4Up0WIxHyspvLgO /Ks5CnTk1cqrnwuZZmadf5qPPiPT2Rk2xeGQsne2Q7vz/P7npQjt0nHyv3AuZRiUfN/r 8WYowrK5sYfqTy4dvAyJEYMCMOSvuBv6//d9MAYGAL+sRRRsauSLBXX7WfdHOfSiTE2D XD7A== 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=AxeanIbXaN7rh3zr7wxBO5hZjpNcmlJtuKC06mORrHM=; b=gzYcXcS5JP2e64FGTnRjaA1TT54zSp3u23uIMflnRx1QAk+laSLUdAIIN7vgUqXJmA XjbH757CMC0nXB5zIolcjQn4MvUcC0CS+MXG9g2UftoFSROv2mB/dHjY30Zy5YlTywLU 8utb3f1TkVMqosHvTEMsjT6KTESyrEbUSzOWM8Bx/WGhJwFGCN1fKarTzY2TqOD1JUlf bvqtx1pI4O3SQvKH99T0EPC/L2P+O/JCAkpeKb7b8zjuzSU+JEkZ/RXRT90BJiupF49t GTzyHyklzmOuwArhB+0+4LUMhhSW7ETyJITtaR3m6gkV4kgcw2NOd1YiaZ6rscOUkzD7 NZxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=cQnKUDV8; 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 vk9-20020a170907cbc900b007aeab6a1174si8840344ejc.633.2022.12.04.09.13.22; Sun, 04 Dec 2022 09:13:22 -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=cQnKUDV8; 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 41EB56801B0; Sun, 4 Dec 2022 19:13:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-64.mail.qq.com (out162-62-57-64.mail.qq.com [162.62.57.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C6BF068B7BA for ; Sun, 4 Dec 2022 19:12:58 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670173976; bh=8zq9GMBEMvQyQI4kY+SwJU2IG9ONVPQ8b9w7Bc67v8U=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cQnKUDV8owRAwW3Q62RzYJgTksJNmij//tYEN73GrbjKVstw2f5/RzETSywzuZAjO 8/BC+dHUSgiixRbA/8VILoZ8+1CCfD/C1bXmKCkgIyb8Qli/URX4R2sUd/2bcQcyUQ jq1YON/WEILETeydkmb23i+a3Y+GA6M8jMDAlAtg= Received: from localhost.localdomain ([14.153.79.182]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 334B3853; Mon, 05 Dec 2022 01:12:52 +0800 X-QQ-mid: xmsmtpt1670173975tivkjaish Message-ID: X-QQ-XMAILINFO: MFWpArBVhhGTKcLgicnQJFhp4AMLCYLFI008rvaHy1+fuvZMHOi0ogBkLs1eF3 uWKzCAp0Cf0HXXTXcyYgf5XN3YggCevHl1o7+BBOjIkFy8q9dKZ1wISX4WV1IyVbRvUsaTKE0Mzl LPaN5s3Ym6v9s0vFUGfSJhuEVD9JoN/eSmz1r7j5izXTPpioI0iLX16/ej9XaqtGiX636nm2l7v6 zFut+DhI2bOGUeV8V9E9mwgDjtAVR1MxT2pbA1UvfZus9VmkCwpH4DuhOjF1qJWhMutnanlQSTJL BlZ7FpKaKr87oghCk/o8fW1j8cMcpgimse0UW5Ww1dAopKlCDs1JYUZbFaDQJfvP/Tk+FD54m3Pd ZDKo05JmbMctksgIKlUNjdlzWGMGM3kQF9Wiol6RA75YCzlZoTZ3boq5EZIisf5Bc4rUTLCOTbF2 d3Z+2sRbYez59di9tpdYDORqzHFWJTxIHWjxpeILM9G/m23alOkKlJCiGFlkokjJj4TIRPXWUv48 +lTGJmqIhFobTJHDqvX8C/G0qGCkPitbppSR/wkWEzJBap/j5a0OSiE2WLCbBn+23N4ZZTRJKqbr y2dRmpS3fLMHd3W25oEn3MwXKeUlOGuE87k/pISZ1ZN3yGlfzlhT95g13rsVsf5zVSqDM/3UYomE UG+2vrwgq9xEAFMvmJnCQpr58OZEL0Km8skMM8WMt12TA/OjwkP/vYCUpRG7H+O3L7FFH3eW4hCm VPsRMemM4lX0XHvOiiGWjAcfIlpy8ul5ylPIQMYBhyP7vdCyJhji9NWfeInV60KSFICDuwDWYfu3 pVhmprVb2NDpqdtkXyZHTPl0h9IodWM3rc+Lr/uU/dshkMgq2L/ZjUcKiGoZ9vNIIVM2t7XQURQ/ rtm64nr2KGdlE/wlsr59860ll8krV6xoBbECCvmsHYcTqCmOcc7Qy5/Riz9yAABa6mwak3rblvl9 0IN0bkJOe7Zvj9Yt+hDV7jKc0uzSyTmKQ+xL95y7s= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Dec 2022 01:12:26 +0800 X-OQ-MSGID: <20221204171228.50160-5-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221204171228.50160-1-quinkblack@foxmail.com> References: <20221204171228.50160-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] avcodec/mediacodecenc: remove the strategy to create DTS 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Tdjb+YXaAVti From: Zhao Zhili Use input PTS as DTS has multiple problems: 1. If there is no reordering, it's better to just use the output PTS as DTS, since encoder may change the timestamp value (do it on purpose or rounding error). 2. If there is reordering, input PTS should be shift a few frames as DTS to satisfy the requirement of PTS >= DTS. I can't find a reliable way to determine how many frames to be shift. For example, we don't known if the encoder use hierarchical B frames. The max_num_reorder_frames can be get from VUI, but VUI is optional. 3. Encoder dropping frames makes the case worse. Android has an BITRATE_MODE_CBR_FD option to allow it explicitly. --- libavcodec/mediacodecenc.c | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index dce4a96d1f..4b0397d1ea 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -64,18 +64,6 @@ typedef struct MediaCodecEncContext { uint8_t *extradata; int extradata_size; - - // Since MediaCodec doesn't output DTS, use a timestamp queue to save pts - // of AVFrame and generate DTS for AVPacket. - // - // This doesn't work when use Surface as input, in that case frames can be - // sent to encoder without our notice. One exception is frames come from - // our MediaCodec decoder wrapper, since we can control it's render by - // av_mediacodec_release_buffer. - int64_t timestamps[32]; - int ts_head; - int ts_tail; - int eof_sent; AVFrame *frame; @@ -368,11 +356,6 @@ static int mediacodec_receive(AVCodecContext *avctx, } memcpy(pkt->data + extradata_size, out_buf + out_info.offset, out_info.size); pkt->pts = av_rescale_q(out_info.presentationTimeUs, AV_TIME_BASE_Q, avctx->time_base); - if (s->ts_tail != s->ts_head) { - pkt->dts = s->timestamps[s->ts_tail]; - s->ts_tail = (s->ts_tail + 1) % FF_ARRAY_ELEMS(s->timestamps); - } - if (out_info.flags & ff_AMediaCodec_getBufferFlagKeyFrame(codec)) pkt->flags |= AV_PKT_FLAG_KEY; ret = 0; @@ -437,14 +420,8 @@ static int mediacodec_send(AVCodecContext *avctx, return ff_AMediaCodec_signalEndOfInputStream(codec); } - - if (frame->data[3]) { - pts = av_rescale_q(frame->pts, avctx->time_base, AV_TIME_BASE_Q); - s->timestamps[s->ts_head] = frame->pts; - s->ts_head = (s->ts_head + 1) % FF_ARRAY_ELEMS(s->timestamps); - + if (frame->data[3]) av_mediacodec_release_buffer((AVMediaCodecBuffer *)frame->data[3], 1); - } return 0; } @@ -463,9 +440,6 @@ static int mediacodec_send(AVCodecContext *avctx, copy_frame_to_buffer(avctx, frame, input_buf, input_size); pts = av_rescale_q(frame->pts, avctx->time_base, AV_TIME_BASE_Q); - - s->timestamps[s->ts_head] = frame->pts; - s->ts_head = (s->ts_head + 1) % FF_ARRAY_ELEMS(s->timestamps); } else { flags |= ff_AMediaCodec_getBufferFlagEndOfStream(codec); s->eof_sent = 1; From patchwork Sun Dec 4 17:12:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39582 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2708361pzb; Sun, 4 Dec 2022 09:13:32 -0800 (PST) X-Google-Smtp-Source: AA0mqf7hxwwmCJp9NC2HuvwfqL6vqNEVNYWbPhKlA82oaLu+MdfTEGay3M5Aa17tmrlaY7iC4zmP X-Received: by 2002:a05:6402:2404:b0:467:67e1:ca61 with SMTP id t4-20020a056402240400b0046767e1ca61mr20127691eda.27.1670174012134; Sun, 04 Dec 2022 09:13:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670174012; cv=none; d=google.com; s=arc-20160816; b=GE7wHGgO+xRN1O0XJnJrbIzBJMv6IQH8ASuqCzKajhVENvtK4KfhTHLZxUxF0OTLLE YT0GbnS7nrwsAkURgKKdvNx/05gHgjyFL0Tz/zArnxqFobmH2sPl8uIMweOTW+FJPv9Q dZo7lThFV+cUCBI5sznKTDBQ03PEZcvxs+mosvpqZ+qFALL2P8FIR4VbfuWf/zYDjLMc 4OWhZks/h7bACAfKLyB+hDR2Z6ORi6iaxa+qicfRQOnimpVFZJfgYRswQ8NDZkx9RjAO sSqaCubFoyzyhu+9p4N2KbcBWmncVWeiGfdqn6Prd1lub9kw/h7USCC53AETQ82kWVwx dFlg== 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=Qq5VxwHjLZyIFWtnvL8Hk3J2Zg4o8YfUNB5e2l3N8UM=; b=iHvkzB0aQhNgm1ROPa3WmwXmu4nVbPX/ljW5HFR+abgcpp58ygiC+V2JrwbcLxwqtW 3fUnAqVk7Z0HkH8cLqmvAbo/tqZwpylaVPCDcqO9LWOMeW2YFs3+jb700bMXsrxYw+TF yS3g85hdg5Q8VXdbhGpnZYcb816B6p1Z4rB36fQ2l4A5c+Gn3f9YPs0znxivsxTdIBRX YBko0P1PLyXfmUiFmG+L91+BJ6Vfze2NAD3Ozw5LfzyUs7tpHIK+CeyaO2s99zVXViH3 ndzvhEdeUchcgbA1QRZHZWtpNDKCUxnBzJh0ru1lZwTtWStSGldXw4X99uqa6CeeBcsW UmLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=gJDLrs3E; 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 hc18-20020a170907169200b007c0dcc41dbasi3193907ejc.879.2022.12.04.09.13.31; Sun, 04 Dec 2022 09:13:32 -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=gJDLrs3E; 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 32F1468B912; Sun, 4 Dec 2022 19:13:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-137.mail.qq.com (out162-62-57-137.mail.qq.com [162.62.57.137]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 233DC68B912 for ; Sun, 4 Dec 2022 19:12:58 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670173976; bh=eiPko370vQAFqO1I524+IsuEYjQeDYIuJa3JHhyk+cQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=gJDLrs3EMXJ2o9/1Hzc8Z9dzs8PpS307j/q/KQjCBjo3LBAnGYc0qQC9GyIrbKUpS otV337fltMSxvlCXObuhBzdzyuREdE+XwXkc1boxCjZ8TiYhc6rgeaPazvIkCQgP+R qROY1mO34v9tp7HKVKVCL0QeAnstfIpLpiprGUrQ= Received: from localhost.localdomain ([14.153.79.182]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 334B3853; Mon, 05 Dec 2022 01:12:52 +0800 X-QQ-mid: xmsmtpt1670173976tjsukrwp0 Message-ID: X-QQ-XMAILINFO: NwIPvWX4YDagW6C2V7wAL/Rnh5XrQcWAFgUvCi+ExoEo9YjyyQbRi2LNbgU6Lg 9vy23hEAmUe85u1Mhcg74iyIb7LG94aizOnyx7qmzH7tujp7NSK/+F24x+EGBF1OVVjv7ie2WJnr 0g+hmsiQQuDA6+8LN4zs1FoVTZrDfuugC1U1/WTRr4t8cdIKrkvMGgEnVJB90h2O+6kVy2u9zBFN RbIfC+vR/EaZnGAvoYNiSA1/HPhPy3kiOA3Ztv0IpeVY5tgrSrS36/Q9UwXJmhAFq2CSrObz/Ugr EaKP4r16fbnmpFJwbilUN6s7MQP1p26olyfXyz1Amc9fr8x3mwVsmFd7xsWX2zKjuqy5FSixcEK/ LDo/w+mml/IyPnFHw4n/cqJcugTEWlBMDoDtJGLw1oozo8PHdyW4kiARUttouEQRGaY8bisybI9/ NTwto9qMJrL0RwXhB04LjhNorhIN/i1X+PW8bqvRFzTe6fWOu9OvYQ6HN4bQBUDI7FlmTBCYXrUk E4T43uF7HvnwGJGgozZVzDQtEwSBqeGq2ori78N8OGsbi0IfrmB4OpsVPVKMKG793mAZw6Co1tm2 hmvzg/1q18vex0xN0rTgdDOpD67rbw6IearKAsASpzZUUq0YMrRrxvS+gzEoA3MAlB+d3sg96i2E hvI/G7uD8odk9AlEHP9xQqsq+cxHc7nMjqW99c2Iz8EsAWUQDwi38YHz/AjGQAwjf14GD2G99tiT 8v0+M24LUgMDAaEL2YKx40K7LhSI1sZ9HyBGBSUOIUv7Vh/SddGm7NIveI01s8eGIY6eX1ni6d6f jSNMnnzb2nsBPzoQCOOmggSB5mnxRIdftbs+TkSACNAqZlVG4sAEUvaHxJfMQ+kUhh4naRZ3UQby rPb5cJ9omfv0jd8p6jJbQzxDrtmVfwKCZm804IYNUEENTjSmxh6Xx+J3tFygGrKdIZDc1HejSF2a 8v+a5Zb6yHNlArbc7wNHRJBI7kb+TSYc2UcH98anmR5DTIq6xjnw== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Dec 2022 01:12:27 +0800 X-OQ-MSGID: <20221204171228.50160-6-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221204171228.50160-1-quinkblack@foxmail.com> References: <20221204171228.50160-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] avcodec/mediacodecenc: add max-bframes 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: jMNT1FMzqMxD From: Zhao Zhili --- libavcodec/mediacodecenc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index 4b0397d1ea..9378563fac 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -264,6 +264,8 @@ static av_cold int mediacodec_init(AVCodecContext *avctx) av_log(avctx, AV_LOG_DEBUG, "set level to 0x%x\n", s->level); ff_AMediaFormat_setInt32(format, "level", s->level); } + if (avctx->max_b_frames > 0) + ff_AMediaFormat_setInt32(format, "max-bframes", avctx->max_b_frames); ret = ff_AMediaCodec_getConfigureFlagEncode(s->codec); ret = ff_AMediaCodec_configure(s->codec, format, s->window, NULL, ret); From patchwork Sun Dec 4 17:12:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39586 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp2708760pzb; Sun, 4 Dec 2022 09:14:14 -0800 (PST) X-Google-Smtp-Source: AA0mqf5CbJFxhKKLuDhidUYQdkiVT1ZyaclefI/5MErxM7K4EJ1SsBysuoSWjeTuV+KEcl4MMnfw X-Received: by 2002:a17:906:2312:b0:7c0:bb4c:e792 with SMTP id l18-20020a170906231200b007c0bb4ce792mr10932877eja.618.1670174054177; Sun, 04 Dec 2022 09:14:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670174054; cv=none; d=google.com; s=arc-20160816; b=iiFVTUFM9WlY8tK26/kUAYcPxalknXtr4gIZoX+p3mVls9nNus3L4PWsUhuSp4WzE0 /Nd1FxVIzDy4GQeQMewjGw/CtzJSmH1UtdzW98T7ZKz33hp4jTRJjslBJ+4wjeswhRDj RHbcCDIeCIf3sjMiJSo9TGlHfNQmU+H58O4ru3m2oXxozCK+B6+uZFhzNOvV42+UoEdh StfMW3J2E2EQTD+/ct5g4OBIN1eRh2s2kOGZQ9R5YR8hdTEPYYsgsy3tgZnsNgqkffWi BCJLbwDMBjzfBIewJgdLRXlz2Qz6QSdij+W62uwEmHvMaYFyh0GW0bnw2qUJCK9SAlgk USaQ== 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=tRUwpVrReHZ84OAJWyZhLuFt3Gy1KhQL8YyAHB7E9Qk=; b=blMRB0xl/W9vEspKqUnz4tYpo1H9MMJ1KjpXfB/GNiXdF9mFK2pbNCoPqJfyQRCqt+ mMWJkEpk5Tdn9ibFwWruv6bcqQ0yHUvcYuiutnWwsmldpAd70moqLZkH9wljBPsU5Hh3 JmKYlUROz+27l5JKna5dTigYYnm9d7hxrT5WwMa4ZUq5IXYWHJCw/5YcDrAPmnr5B6pC 8A8Y+23AgKDTwVVzV+D6qVmUhVrZUpa8mmRplBazDtM+HchW8OGkxAvNa3QljtODiGJ4 jrQZ1GyI9r2xQVZHXAm4inKHtHpXD3/hMrmtlTRlr0Os72RpqUaZx6BKE7O+mK2pfBTS 33Bg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=DvVE0FPT; 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 sd39-20020a1709076e2700b0078db6f488cesi10815904ejc.112.2022.12.04.09.14.13; Sun, 04 Dec 2022 09:14: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=DvVE0FPT; 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 57FF868BBE7; Sun, 4 Dec 2022 19:14:11 +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 404B868BB07 for ; Sun, 4 Dec 2022 19:14:08 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670174046; bh=LZ5kMA+86Jk6M3TCKGDTwD/Kmicz2IKywjcoe5bRFDw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=DvVE0FPTGWJKC3trchmEoZQr/tUpPSYTxbW7OE46byRPS7npqyRbHaVUMkey8hxuD cqt2Ne356SWt/fZlVdALBosCO4RNetZZPngT/VMGX2n+hyYCB2fq62qwUMb4BMdVfc UMWJhmgTN0RxCWgqhu0dzcHA5kcbeN1Saf8kll8k= Received: from localhost.localdomain ([14.153.79.182]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 334B3853; Mon, 05 Dec 2022 01:12:52 +0800 X-QQ-mid: xmsmtpt1670173976tsr74yko4 Message-ID: X-QQ-XMAILINFO: M310wetdPxmXkqF5YA1pwS/lTgObsfDQy0CUFpQ644M4CUbJ1zX2qowKXWTHdv 88UsJdbq4kmZqsVBnoIQmGeTLxLSzNMI6bDCk5ayz8HBx3I3W8M1kWgHgXHHDEwp8ujeE4r+H2M4 y7gbLGbCqmTioSYSKOo8EESN4L/Hdljm998MZYFFQ8WkwkqAarMV88jypCdIaszvJ1KWztlZjATe AXxzTKohX8viKJEodyZvBhJ6yYvEygYP/DSYKEHPQx3J9Iyji7133Tji4QsuZsztbeJVAGnoP2Ll 947ysAjjx3exeNHVu3k7ma1dZEpa1jXtYEyRYee84Wyr+zIBVU9qxZq9bihJdbS2Dzc0EchomFIM H4O/6vTxFQu5u7/ZZ3XvHpv1xgpacKiuuAs0NBmuwoMbSPdT7jgMO1j9lUKJzFrha8xSXYGeWFS4 SojPm3pXCcKLbilpFUZ6W+n6Puas3vGthGKBMSwlA0JEB3+FSFgR8gO6mA3/76ucw6X0T821bo4s FvoqiID/abxTQT1wt8ucYaWyW/LEyAxDYo7QNtIn8+jg5SG1b6OfpZxQhWTfDhf20LDFjfzTVZMX WTSVeXzv45829uDzPtbRUA+FbqSfAxscF5WUmPBWdy9I38lLXeO6Zp4mqALyTYUckgi6VtRFrTlt 7nq4zx3VT4cSrOeVE31bk/xmmwmyvramnFKXH7q3CPnY7iYX/qM3jMwG9hPzNqPt197hgRb0sRU+ 3tH3g8lC5NinTJMI3xjUopjMQmgkXUix0DH6gyFi1vkZZd3rpyykfxDysVzmelcazEP25D/N2pij VEwXZXONVHE4avFSo/3+OkHaS/RovkaZ3JKHmUxTpYB66gt2kWB2+9RTFhEktj9iFP6g8tHA9kUD WbgQiOuNcLPQoQ+jmNaZDoQbtk6fJk3wGy5iAgVUhzL5uqnsjf7F+jMqtVvjW3MljZJckW6dHAMG pOVvrgUdJkad2hjD+12KSDxw4U2BCetbaqeFzT1vuYlfCZy2NCmA8bn0qXbiDj From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Dec 2022 01:12:28 +0800 X-OQ-MSGID: <20221204171228.50160-7-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221204171228.50160-1-quinkblack@foxmail.com> References: <20221204171228.50160-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] avcodec/mediacodecenc: add pts_as_dts option 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: LonI5oOrpHQU From: Zhao Zhili It works since most of Android devices don't output B frames by default. The behavior is documented by Android now, although there is some exception in history, which should have been fixed now. --- libavcodec/mediacodecenc.c | 8 ++++++++ libavcodec/version.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index 9378563fac..3893ca8dee 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -71,6 +71,7 @@ typedef struct MediaCodecEncContext { int bitrate_mode; int level; + int pts_as_dts; } MediaCodecEncContext; enum { @@ -266,6 +267,8 @@ static av_cold int mediacodec_init(AVCodecContext *avctx) } if (avctx->max_b_frames > 0) ff_AMediaFormat_setInt32(format, "max-bframes", avctx->max_b_frames); + if (s->pts_as_dts == -1) + s->pts_as_dts = avctx->max_b_frames <= 0; ret = ff_AMediaCodec_getConfigureFlagEncode(s->codec); ret = ff_AMediaCodec_configure(s->codec, format, s->window, NULL, ret); @@ -358,6 +361,8 @@ static int mediacodec_receive(AVCodecContext *avctx, } memcpy(pkt->data + extradata_size, out_buf + out_info.offset, out_info.size); pkt->pts = av_rescale_q(out_info.presentationTimeUs, AV_TIME_BASE_Q, avctx->time_base); + if (s->pts_as_dts) + pkt->dts = pkt->pts; if (out_info.flags & ff_AMediaCodec_getBufferFlagKeyFrame(codec)) pkt->flags |= AV_PKT_FLAG_KEY; ret = 0; @@ -548,6 +553,9 @@ static const AVCodecHWConfigInternal *const mediacodec_hw_configs[] = { 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CBR}, 0, 0, VE, "bitrate_mode" }, \ { "cbr_fd", "Constant bitrate mode with frame drops", \ 0, AV_OPT_TYPE_CONST, {.i64 = BITRATE_MODE_CBR_FD}, 0, 0, VE, "bitrate_mode" }, \ + { "pts_as_dts", "Use PTS as DTS. It is enabled automatically if avctx max_b_frames <= 0, " \ + "since most of Android devices don't output B frames by default.", \ + OFFSET(pts_as_dts), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE }, \ #define MEDIACODEC_ENCODER_CLASS(name) \ static const AVClass name ## _mediacodec_class = { \ diff --git a/libavcodec/version.h b/libavcodec/version.h index 61bdf5806b..dd90cd1335 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -30,7 +30,7 @@ #include "version_major.h" #define LIBAVCODEC_VERSION_MINOR 54 -#define LIBAVCODEC_VERSION_MICRO 103 +#define LIBAVCODEC_VERSION_MICRO 104 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \