From patchwork Wed Dec 7 09:31:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39639 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp415703pzb; Wed, 7 Dec 2022 01:32:59 -0800 (PST) X-Google-Smtp-Source: AA0mqf6tNgG9Js0G3tk2RD1JBubXGtaqJraxog1EG+4OYsmfjdsTFFJ3U1i0p0Cgg980jS3/XKFM X-Received: by 2002:a17:906:2d49:b0:7ae:16a9:e4d7 with SMTP id e9-20020a1709062d4900b007ae16a9e4d7mr74765394eji.574.1670405578835; Wed, 07 Dec 2022 01:32:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670405578; cv=none; d=google.com; s=arc-20160816; b=AxWBQ+SNy3rsRr+5M7Ej0fk2s6tkEfHRWIYrlmUh3Q4k630CYG3yuN66cPRfitg5rT 8SFpFF1OS/zAtDtHvYKw6xuTtkCKaXWwydCTuMmgOZSeSoDxGFPAPsOq+I85DsNOEk1q uzF1AVlg9RLlcFWYrXpijc9LxHB9WawDSP2ayzCrz7cvAvaIm4JgwHa5iQ8lA+2Coll2 0Kol3zrSAgbvYQ3t8mMAJMlJ/fLn2RF6j9Q9oZtNAgcnrHGENreFjc6zUDVN5m9R3owT J9ebdzLWpWExH1OHpTZ51bxrdDdgIuOe5m0O00cYkwfrxTcrv567nrlysV5ouWwpKa4Y N+MQ== 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=SUbThL9FQsNZuGhjJ+77uNSWd593XkVo4hhA6tAFR8Y=; b=MKPaay3sbsp73IrRvwkNGdXlim3FBU/WnypTczk6PTWYfTPoR11PlzJtEkyOrxqf/z N7moaDNG+HULJXOULxymN57T6b92oTIdNVWPBcwKAmppt7qrT5GZ0iLTt8CF5A227m8T OOFphUNv6LJ+tnO0zOPjufjh3OCIguk5mO83/K4qU2IxxPb7LavujEpIejf+KeFM2PMm QwR8u2P6DxG6Qn+iILWARa2iMSXBuhgpAr09VrkKYubcM01+WTJbd1CuMIhXPCLyQCc/ T9Q6Uemxy/RThe4YIKJ/ykIcVY/YgHK33k09gC3iacveh0d1BBtua7afOZw4wUSthrNk tjDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=CFRx5ZjQ; 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 e10-20020a17090658ca00b007be4dd9ef7csi17462883ejs.402.2022.12.07.01.32.58; Wed, 07 Dec 2022 01:32:58 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=CFRx5ZjQ; 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 33EE268BDCD; Wed, 7 Dec 2022 11:32:17 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-242.mail.qq.com (out203-205-221-242.mail.qq.com [203.205.221.242]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 601FD68BD61 for ; Wed, 7 Dec 2022 11:32:03 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670405519; bh=W2cFUbZRsfe8w/hGv3QQ3EllW/TOgM9RHQOLOz+M9Ek=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=CFRx5ZjQH3kYytbCDs2jI217wFOhqCe9VUjv7EeguhCPVXycDl91a+0ZgN9c5mcjh 3an5QE//ogw8GpPJh3UwAGphkgciuLRSut6J7+RDAIeQZ7OtLlqA6gERVIJb9wmCqY Eaw+VsODyq7BIJ8JfH9BURg6Qnagzr0P5RMJzXvU= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7F9B046E; Wed, 07 Dec 2022 17:31:57 +0800 X-QQ-mid: xmsmtpt1670405519tauip5412 Message-ID: X-QQ-XMAILINFO: My/elTziho8N0fTqy75RBrtE0zaoM+AedY2byF7KuwJy/rqu5GQEsqlUZhVm5m 6uzgkTXRUAtj9Q6wpZehwjQduyxxjWXRruMo0za3+iCKQX/hOqEBOUno1UogTjipDkGQKHLHZWYs L2t6xc6jFZcArnVIKxgvrm+15pnY93+w7lG4huBb5vn3reBmVmD02wWCd6iRijFdUtsagec0i4Z7 Lsz1162uzlT1k5lK2vEhp9VrcxkKEDmUORPMcJYjBTSHGVTwjcaWmSgevGyz6x0sokjosyTYMB3i 4Bee9tpRnGXTTSAAqnRzKP//uCvDGvkr2U6dzav+jan0vimkncVe1o5ztZLKaAJjfSNxrlXJVN1j DQLUErs1BWXrMEfIlciKiBNwuwHlOGHtylhqmafIVVSpt8kCZ4/CGjxkuS7oNZ6o8AOcTSt8tq84 V2zCAYgQpkGxLRRYAjphJpNyK+gM/+hpN8UtQ6wULMV3LQsAFOrOvDyhg76aQYosVRqbtg+dSR0M O6dsto8CBdfKt0PUwMrT+6cud4e7n45yhWPcinbxn7G5c/f3DHps67D7Z4nrSNxocmLq2hOKKFgW K/NVrEl/VyfBlFYn/9w6kuGT7oFRKaJbJyL52tOMljKeV3L2TRr6ffOOov4ERnZ3JY+Vd8cjiCTp CHSM/RXYnOKH7E1DqlfNTdFsrTRUpM2jNj0i0Qr+QVO2UHGcUaBKIivwjglvIkerVhYCJpeM6H0/ 67gioQRHKGWTV0EZ5xY9CyhSof3zFpGOrM6Fbr9uNzzaBNk6rJgHhqpKd8dBLq6bWEYTTM8fWZDB JR8CgJwhatgWdbABAlqHAY3b7kYlwAjFwUHQYxsIFqThIK6XS97O+m7tun1S3SQ7L3RszCQVKQ0F fHgNEz97C9j5liu1I0KKnaoYBVi1CypZHrTmdCk5uRbFxdnJ7258l7CKcmRJz0HEu8Wq63vyrtIK z5z04v7clw9pxb2REBJ3ux50S1sJMj From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Dec 2022 17:31:16 +0800 X-OQ-MSGID: <20221207093122.553668-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221207093122.553668-1-quinkblack@foxmail.com> References: <20221207093122.553668-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/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: 72hfGAXfzFAS From: Zhao Zhili --- libavcodec/mediacodecenc.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index 69246ad693..4f9185342f 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -480,19 +480,18 @@ 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 }, - { 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 }, \ + #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, \ }; \ @@ -517,9 +516,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 Wed Dec 7 09:31:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39637 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp415367pzb; Wed, 7 Dec 2022 01:32:29 -0800 (PST) X-Google-Smtp-Source: AA0mqf5Zki5C6iM8pADnnWN15lA9XyRsH+8NM4mEJMi5pbTQU5f7myIcCTkchlPdkg2CArXjl/Rq X-Received: by 2002:a17:907:1185:b0:7c0:d543:7bd6 with SMTP id uz5-20020a170907118500b007c0d5437bd6mr15174658ejb.237.1670405549480; Wed, 07 Dec 2022 01:32:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670405549; cv=none; d=google.com; s=arc-20160816; b=bcxqSlDGD70b+Uk9BYk1q0WchiUBVkKmBxZCL8Iteuec7yMFqVDMxFpb0UwU9zwODH Iq1J0+0AGB59+GjxjlJrXwz3YQpFeMz0c+8b6Q+vXPGuFAE1suAH1EP4AgcJKewgG1QD 1kTf9dxpXAERgkv0X7nqfsNvAPr5qgwP4tBzaeThTN3NHXcF110QEd+EuSTCsW9NKxyG nMk+3v34Ip0Iy3XcGHb7zbWrHXbB+bjeh6RmQJcNeNsoxb+kSzdq1/M27wUsN3OZnXm9 Wioq55WVbLfW7kDMr+mN88TpHJjOm6QmP01K0uOO5ajcBmpd/Mq4pQx2DWWJ0UlWqIMq 7DDw== 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=Cpuwi+ZtEA4yp6rXtdwngWJo+WjWiElX8/gzEh4dkIM=; b=vgva9dAXUb2knk+g3zo5Q7P2k25LFH8boaCBvB0eRnDv+S/zXlDSQVjsaSOnrn02rL FpJs9kvsjOKPnKWmUHAxXi8fJXRgN5ANAiS4TuLsTB+RqhsXubVxqBPCSaoTErjqMC48 XDJJooBuQpA9GEdfxaLlfAHqk29kCkzvjyUlKPPjvqntzv3Gcud+C5GVY6Gw4F4tIMDh yN3AWlfaY73ThTLbqCggS++l56Ma8sCC9whGjHp0o7VHasdlFju4vnnQEnUKSidaFxvg bGydxbqT73cavjiRWGBWAhNrILyHB9D7FpnHLhwMfPUFmZJfqqmW1PllalIaoIrR5w7P TC7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=H9Yx6W9H; 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 f20-20020a0564021e9400b0045d4b7ad162si4705359edf.546.2022.12.07.01.32.29; Wed, 07 Dec 2022 01:32:29 -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=H9Yx6W9H; 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 1192368BD6C; Wed, 7 Dec 2022 11:32:14 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-210.mail.qq.com (out203-205-221-210.mail.qq.com [203.205.221.210]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 569FD68B3E9 for ; Wed, 7 Dec 2022 11:32:03 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670405520; bh=1UFBbt0qhAxWzaY0EhFfiRuQOJ/BUaRiz0o3VTP7/Yc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=H9Yx6W9HQJ05AbXvGuVtJMVl0oTn7/Nsqy9eS9DSNjlzjl6sni5uWvKUunXKeXZD1 f49tJ3o+/GE4B6hIS5fgNAXSKnhD65ZmcU0lagLvk99qvw/OnbgLm64oddwup/YqQl Su1c16ODetPIdx9JxwPU959RlxUzD2yyDtKBk3aA= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7F9B046E; Wed, 07 Dec 2022 17:31:57 +0800 X-QQ-mid: xmsmtpt1670405519tpg6akzz3 Message-ID: X-QQ-XMAILINFO: Nfm/+M6ONQ57SUuEoeCPExiIQWoYfhE1YFXE/qozO5rKimDmsRHgyq2Odb4YAv 3pOikLFGNC3FvOK6uQKPUoKgPg2QgdC2wZ/J7bbd5nzHJYKfjsFf7hUM3SEu0HjNizVsKFqDWZ68 iq94ExF/l5xr81SYqeyS9tf/37BM0gkRYIWjBqvchGFx3VIZizB0MVIiBZsSFrd2kI1kAhoB44Uz QG/TUKHq89J8ls19c6Xbm82yBxKBh3tLoSdxbO27jQqpgIKAPln7/3qVI+BNU/T12R6Df9SDt5Mx sKtEqTMWI2eX2/SP0FUhXzHpxWdhw7UyrBwXYR2wlxnpYcPB5EmRi85pLJ7PWxM+g1fzU863Vwrz pCt9U/yxDoZqGD37M8snH6b2rS13FiXXXV4kwHG2u6wVPSvAQ5OjS4SOrAoIewpO8Z3KHtRzD583 AJN3zcd1fHQcEcB1UWxUIL9LIrE1RvFQX/ElFx9fYAZHilY5OHh4oCX9scApVMQr9E4xaHYE4jVE 6ggVoihTRxdsrCONXaogly6GCGCj+volHb+LfKtwTSEz4f7jdbNzeCUUk50cReZ2kXGox9Lv1lsP /iTxiXPfjwugrur5sCIJFo5kRQSFx3DsIXtXHvPxaq8uT6TYg9jWQZa8W0e6/nEzuc0hwzQMomcj Q4CWacr5bPxl78RnXgkpE7FgyIxONgzUNTXrvy8QkHk9vnVEGj9pNueDHOUwstaV9tntDBebEOB9 uX5uQKu90iKDIRapQZEeo/YnKxL2RYL/HAwkL5Z4oEGPUWrLsE5IhdQf2XuF3zofs4yL1vcHF4Zt 9VuR2T1m0RZZixJ2UpU54MZDDeR7CmQ8TxxbmMbwj6ymXbunx2Z1xxbze26h7/BVS9sLa//GJE62 sVtPeE1oyf0QejGZVZjoTmGRsWCmJcuj4EoepVYg54Xu0kDMToitvIr7xRHP9498SEHXYhVlNk98 l1p3pilUjH3jBDtp2nzJCNvpD/LlrLWNLZSA+2PTFBJ6SmMu8PNQ== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Dec 2022 17:31:17 +0800 X-OQ-MSGID: <20221207093122.553668-3-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221207093122.553668-1-quinkblack@foxmail.com> References: <20221207093122.553668-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/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: AutqjzQ0+cKB 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 4f9185342f..ec0e0b3a86 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 AVCodecHWConfigInternal *const mediacodec_hw_configs[] = { 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) \ 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 Wed Dec 7 09:31:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39638 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp415470pzb; Wed, 7 Dec 2022 01:32:39 -0800 (PST) X-Google-Smtp-Source: AA0mqf5Chl0FCTWQ35Se6sS6qDqdMekFS5xUVBfDnqtE+YDW6ScVyZagh9xp/RmAnaN6XWehiJKr X-Received: by 2002:a17:906:c1d0:b0:7b4:64d3:e6f4 with SMTP id bw16-20020a170906c1d000b007b464d3e6f4mr28949587ejb.594.1670405558891; Wed, 07 Dec 2022 01:32:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670405558; cv=none; d=google.com; s=arc-20160816; b=lEGOW7uifWeFmFN1XQU5P/NI7GpD0KK7WPwdAHtzRCJFStmZxu4n/RhvPGcilEOAQM 8u4ffn1kFEEbeRBVs8GDm7PzrQ5rU5ETe4FkYiNkcPDB1vxDmpjlI2gTVjjrRKFYtyTq nPKb/GXeuMpeSGlnH8dTGOmDFBbUXcdu/EjiJH8MlLv9ElRgqLVoH3dpz3zm5zSmyYTP pdOjtpnB+spYPKK9yCVww8ofVjCvSY3UaA2dc998izJdvkB4C24xf5rESWfbU/dvT5o+ FhevFFxeERdFNqpppRmM64+zUg56Rv3u4g5wNF1SeArJoperknZhAgiZhEg5iHBZJGxB o+cg== 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=kWg/sUF0kU0FfabDQ9HQBDauj1hDHeNj+381gUhXrpc=; b=l1Y61Bh6s/bGkpqT4+pQufAbQLCUG3h9rm/bPoYN2f82wsoaCxWvd5grS21ehYji84 W8QnfZ8Bk9/60nEJyeZ240B8JQo25suk0clPQqv9BPLMxHZNcYoAWlrRHBAGJ3AcZfaP gppoF/SfifAWGhRSSmlQlIKK/wdYzd9c8H/Qduf0IBC4rmx9nXuR0LZ1Ei9ks4N+dtm9 pzrCv91b9woqF+rA7KMudvm3INQrlmCxB7QAeX89HeKRHylMy23wegw5NPWMPfQl/06N yNUQJcg9uF25WwwX2vZZbRPqS0dT45v5y2uB7EdFJ+XXiFBCFR4mTQzRkHX2LIymdP9g Pgrg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=K86NwpBl; 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 nd27-20020a170907629b00b0078a19032c70si17727196ejc.334.2022.12.07.01.32.38; Wed, 07 Dec 2022 01:32:38 -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=K86NwpBl; 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 23E1D68BD55; Wed, 7 Dec 2022 11:32:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-155.mail.qq.com (out203-205-221-155.mail.qq.com [203.205.221.155]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5B5A968BD38 for ; Wed, 7 Dec 2022 11:32:04 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670405520; bh=w2lltVFjK8AJLqciCftvj3M75KTn9UYnbA3OKDg5Wf0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=K86NwpBl3KTzh3ryEBQq5xN5CURKxJkcGAWQvWUtSggpuw2rE0iw4k7RA3vUgzmpi ruaR1W9gStqurJe6OS0+WTmFOBa20EtnrZy4gA3+l57C3SWIvYTO3N3alAvQ2NQaqS oR03sDJ6v3kRIgyx+sAAyKHAlDAbpfyn/7sLrODU= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7F9B046E; Wed, 07 Dec 2022 17:31:57 +0800 X-QQ-mid: xmsmtpt1670405520tys0ufr9f Message-ID: X-QQ-XMAILINFO: Mg/0DM1Zd+nHItQktWwJQNLgSEXfSt50pyuBMVIGVNCcrmF4FpKB+QCMjBwg5p mCpIOGsz700XIBbiGwoRQHsJL4Rqyibw7pY5klGIixUkSR8hrDJFF6fqwVTzPBTLochS6/UykFsB m70rt3c0bEBfs627i7f6fiuQiOlMlBIQh1jaejvn00faoXmHM8MNmOgbQkfDRU/ZIr4fNBQFFZNy gPqqFyUZ9tYcAQ87BGKnU9WKckbK3CUGBGSgponDV9yYd8PQGh0EIEIMtCqcmIUEohy4KkKPfHUU zE0IAagoRL5q8GK6Ze2K7QA2N5FKJEcyr74/FOX8+4tL2KT5ROSnyJ2V+pTFCN8MEmdVgLVO/vca OCuHyS4RK9wXkxZ41Tol73j1/i6/rFcoC31nTBUBlfEK+Oc90v0I97qfNvya/sRVw3+bwwE5/fMN 6SR4w3Bk2VwxEq4ZBB7ppc6K6Ck7vNeGjZMLHmJqp6yOEIHRe+gkGCYzVmTK2tlqlC43t3+C+t9P Mh7YJnFgcvFpPLNCy0qIkawTimvjQYgvti1t4kCcaof25L+eRxYHQym7ejfsqCkKcBhwr3WHhTBs iAoEqqBNOq5oFOeiRozFpyugp3sAiO6TVf+w9fz3FcvZ0ooN0bAwEAAAaSV0xSINNDxnPfRcp7RH 6p9ij10WtMGioZY36CQyclryXb90NbMPv5v5djO6K541tFSbW/WzORpro3Y5wLkdv8yWNwOwpXwf CVJ20RQgk/dTv1HTEfJsiXw62umeAos9cW/KcdFYXTk/N6Ba2fHALDvC1ngqb1LEsrcYRAyF+xlq CkrHGfZ/Wvgj7nY+WazMXWqDejKmOYTusMprZeMqBGdksXgXKUc+r4L3SrmtsF5theR6RSFIHpb2 cJwPI14oTk8YEX3HT5G+j5wjhPu6t66uLE044LYqGCkSNgyG6OIc4Eao23CcvU95T5XurYO66gnT NDk7a9oAtch69XS8FY82gqSEwTt022zxtozJGLC64= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Dec 2022 17:31:18 +0800 X-OQ-MSGID: <20221207093122.553668-4-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221207093122.553668-1-quinkblack@foxmail.com> References: <20221207093122.553668-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: xfPqDdT1k6lh 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 ec0e0b3a86..2f78567451 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); @@ -541,17 +546,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 Wed Dec 7 09:31:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39642 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp415994pzb; Wed, 7 Dec 2022 01:33:25 -0800 (PST) X-Google-Smtp-Source: AA0mqf7vdplckc37zvTS0ykGQlxUPri2WZz3NwS4gRN2SU6OmrliBokPmvgM+EG4BO1L1dm+b6El X-Received: by 2002:a17:906:179b:b0:7c0:ae1c:3eb7 with SMTP id t27-20020a170906179b00b007c0ae1c3eb7mr22638214eje.510.1670405605685; Wed, 07 Dec 2022 01:33:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670405605; cv=none; d=google.com; s=arc-20160816; b=bWS8XfOUOaP7QKRwHeKcwOcEh7HH1s2RryCxjaqYxXwMyHrzE39oJ+/y5nHn5kXcjy 1VrFQ2CVYwl28YpZdmj9CT2hweIKMrSfTB4nR392nQIou+KB9wht+9J24BU6OsszZVcl ell2TRXBpuMFxnFNizcddTy+qDzgp3riyDmTGpqzu1eiCr3kxOH1gllYrgGcz/j7olHe fRDz4+OpPIMYghlVkqICgzWn6cAEKk94LE2RBwroSkB/nmBSAyl879vZ61Ku+8+r2gq3 r+lStg+0Mz5ZXbrlNxEfiZnqK4R6Hfvd3wCBN9OJeZMvJJ9hXTjStIhAzY17h/yjDtF5 7RJg== 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=DyMOB2aXBDEql0IJ2gpdyvt5DuRmR3P3K6EOZpcYD5A=; b=va5TuYz/lwIN1Vi5htZq2PXb7mKtNiVFu3ysbmaexWaBq7pZCAK7akTxrGMznjj84K JH8Ydm6G1Frk8dLUEi0IUTXTV95EJPEOpcqTup3A+jzhMZFMSNAvC0EoXykf4MtB08DK +xoYI4I33nuq6L8KeKgK6OkoVoLUdWfro6DzS83xbnQPdHD3tcikOPQ93y4AxlL5+qVF kSwU3P4lpiiGaqV72GlQM3MzZZk6EdvPU77eGSdRAVpmi98Nmq9DwLLohf5+m6o6CBxu SLKRuIlFDelP8g8aRcVWKnDKhMTaolDvNngAFZaAUyR04VII9YkfBZQEN0slPn83fBLz q/oQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=Wu7huhGC; 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 dm5-20020a170907948500b0078d1dc1b64csi5248612ejc.170.2022.12.07.01.33.25; Wed, 07 Dec 2022 01:33:25 -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=Wu7huhGC; 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 2712368BDEB; Wed, 7 Dec 2022 11:32:20 +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 351C068BD8E for ; Wed, 7 Dec 2022 11:32:09 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670405521; bh=ItDNF5q32h5/n3XtMsUKEfCo6/TAozQpggdXOkdNSl8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Wu7huhGCQfSOdssHz4iYxWrJ5sGAa43fRzgS6qOWQd66WxxW7kwIOEpo7q3Oovjqa zIANnDFJEzPWY9FUvU0JhLx52kzkNYXUwph+7c6fRXfhJu9QSp6vA6ekgnD4CsVVII uTAG246/Q9+luzqCWurcpAi4bCw11uARZxXqpBEY= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7F9B046E; Wed, 07 Dec 2022 17:31:57 +0800 X-QQ-mid: xmsmtpt1670405520tvdy3f1vg Message-ID: X-QQ-XMAILINFO: M0PjjqbLT90w5K6yXZBuviyeH2cZ7DPt/NC2/A8r4oNx7vbMcykRhWU3oAb69l fcbdoTHww32gRc7QB9JGSwRbbjALdLvJE/pabty1hvp42X+X4h5VvvjW4VIoeAmU6JfJiqBqFV2w gn89pTm2Xm478jVReIIBfswDckv0wASqnyLStYdwvI/U7Ub8ncRaQkF8aFe17J8wbraJuISZWq1B QlZAgwT2/gNLveG5CC6gOQVnuz8WewHAcujFYYBqxqbscq6oMqxqmv6Mb7EbzVNGeA800Ldiajin RR9PYB7KW2GGT65OfRKyVYHRU2oR2TKYSDuWzdrrBRg4YU6JBh6108NH/VhTnvLMflCBObtzCoRj Jc2TXjUvU7jfKYXDipB+pydfSfn9ZhXYFbIkKbedbytIf8AcwPxbYY71SjP1v7HQsoljPvTu+eiq VluCC5KfVZiZ3mIAL8XsTRhohUQ4p0fDY+vdOvdVuGC+b02m2bnWbIIASi/zsm89YTZJF76rEiWt hRt9eYdQM0psj0b+UUqA2BWIeo2uOb50azCaGJXdHEKWnnu7JhJLz+KEJ0fBP8VYY/MthnhyD/mo fYmpoORifi9h2hdW6eqx4Uv7QaRfMQqPJ8F2fkjXcMZKUOzeJO0Wfl4OCsxTtoLnZVOM+oWZgSok GHXe3gN6vC7R9bIpTwvmGK6EDEyfWwN2fvpWqNz8ORGaqKnz2/8qnrHkKe7dI9yeoljHvEHZgdXM qPAWxqObDaeiA3KbgK0fDWlNHHpQlGS8kNRNvN5zQTsXJcnUtkYaX2QlCDLi4USV4CsUhW5ZKu1E lpnwxQflBby5A+q2CH8EluDiZ82S6HJGcpgswsBmk6IELOYZAIeegn2ZoAxwdzvyhI92Sr0ZO8uU MNMzhq5sH4PjLoiuhKf19xhi43GfP0ZUYG9wxJ0XcV9aGmMXnWt2Q/RNd2VnyRl0XuzEJsnCj3ud Zpai934JcVLbRWojxxlxIbr3tucBlq1Rd9S1OGttQzXqhM1G83ifNxqDQleGuE From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Dec 2022 17:31:19 +0800 X-OQ-MSGID: <20221207093122.553668-5-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221207093122.553668-1-quinkblack@foxmail.com> References: <20221207093122.553668-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: iYkQlrkUwYUt 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 f4eedfc207..2180ebb4f1 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 2f78567451..7f2ae88285 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 Wed Dec 7 09:31:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39636 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp415257pzb; Wed, 7 Dec 2022 01:32:20 -0800 (PST) X-Google-Smtp-Source: AA0mqf7ztDOl32MJ/Ys4AgrLJZsY9bzULVQ0DQz1SwyriKC+JOVSODfsuCYmThqf1Nt4551pyqwF X-Received: by 2002:aa7:c1d0:0:b0:46b:431f:f2d4 with SMTP id d16-20020aa7c1d0000000b0046b431ff2d4mr13669041edp.198.1670405540033; Wed, 07 Dec 2022 01:32:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670405540; cv=none; d=google.com; s=arc-20160816; b=ivDQURnlQRskSxNqLRhxsywqctPQA2LhVBh/a0tQc6P7P8xMlf74iwEB6h4ibvMY1x FjML0BPs+Hlksqd8RanqkPjwemMAemDfMjqhbSzIqbNOBlBF3Weux8PeJfJkaXuO2ri6 m+774c/sIXIKauZtkY2OAb9ObkKUrfG222n3mkYzxaO5/qSxEdU/m1ydsvFFlIQK8aMM BOSCH6648v7wr7W4xC5PA7+RVKntMxMTpyk5RhEScX/tOGTjFQMhrGkeEXmCiozGkJUg j6TSM15FRB45wjKWnXd7pL8mK0RZGTksDcncjHEJqRi2Rtd4Jrs9vx31/BpQmBrB+bKX YE5g== 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=30UtV/9PhXtePmjvQrgJkZLvFt0/SGGtSzF1i4JDwo0=; b=w+Ga7EoU1qyGU1jPy2nU9HpeDwdbLVIYsYt9exRQxk3XxvWaqh5UMponxsNKwrET5h jzxwti4NFfGXRN2JqsORo7T1fQZ7EK5itz2Bn8YLdh1wCQBIE34GGYpwreQZCAGhh9D5 +ZxE3N0vQB735vACQUHy0gKFlKQsGISInhCfGHawM5AHQNnSu1vpF+VpK2eU4dQc46Q3 ByWeUaAQEZiM8WdNGxn7WoAUO9dbPGpzMdjlVXMgcINS6ZSc/iMY1COw37GKggry7b2N dQ0/r8uJfXYhiU/KpVhijpjo3o00XH6iIrRXGXdPTRGEUL+K9rUh277z4u56k/PcZnK/ AAog== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="UfHM/+xV"; 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 c23-20020a056402159700b004537a3c4982si3509549edv.601.2022.12.07.01.32.17; Wed, 07 Dec 2022 01:32:20 -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="UfHM/+xV"; 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 F20B568A99E; Wed, 7 Dec 2022 11:32:12 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-210.mail.qq.com (out162-62-57-210.mail.qq.com [162.62.57.210]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5857768BA90 for ; Wed, 7 Dec 2022 11:32:04 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670405522; bh=yOSJ4SXhktbN/yhgiGcvH0W/tBvUUpRObQ8woZHHHII=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=UfHM/+xVGeAC0Xu8YDcja/mUukZmuf0UOFM+azmCFpPNEtUcXWUQjJwHPjkPqmDEl 8KMn66pe5tVwXBnbI3rWN63SWXiwJo2be8oMdzyOROWEiHhFwWNj184ezfYWeY5kMI gOGhG84Ooi2/bmaE27E8An9G1D3bBEKfMZui2aTk= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7F9B046E; Wed, 07 Dec 2022 17:31:57 +0800 X-QQ-mid: xmsmtpt1670405521tc2srdryf Message-ID: X-QQ-XMAILINFO: MFWpArBVhhGTkxJPFv/wd4dFsUKacApK1k8n/LIbElBZNZPKurJbcEi4yyYn+f u6y4n/Dk+P02Zm6KDonKP541d8IAno624MfdWi6/ITKp4ILiXgozizBnM3tLULOq3Bct/dBO8N5j Rco1akbdHm/127Tz9nM8sxlk/qUABQvyIoEWr6FtrbDG2Bs9NuQ0IeEv+PAxb6sFY+ZlXoFMMIHI 3+GKT1Lm4TJ4ROtchVPNiFi1W4w/9PQd9AlRqVI+fQawWczt65o5M+KCZysL9/9h+9B0ouaHziOM gzzG3nV49H12Q4yMvka5jX963yQvOdiInQUoUqoZaBUgNcWSQUXxTroa4/2jsDQr9q/0udqEHrIX 09PO0pFu+veZ3CSTrlGiStwqZ/RraJG9luWh9bkGzqh9zJFDM9blwd3cA9t04ioWD/SA6JXYWMtO ELBcb1ZJtvZAin8IGPwwDnpdnfSNXU085er71Nn1PcL3IervhWTxTscRqiCAOcxvB7xfOUeLHW5y +LA9VCyA2ZqtOqbzIxXtfa2a+C47TinnYnCdv43nKyec6NgZN8ylhdbUEu0keaWC+YMi0P8Ha9Ot roEc0B922da7zAQIqL9DMJodr+KUIEBp57GImjM37PaugLHuLhBKeCKb9doTsWszh/4HQvA7z/jp zt4KVTIEch6/PE24JLjhlm0DeS1ExWHuSXJqxHPKip07W4/Lhbsuo1rT0umOkjTVTxetIdYKKOo4 ZiVnrySWyuHPs3gKrfR3aCrXuYQ7SM5T1N5fkpk4xaedq78qzDIhJHyrFCTIKwEWqkwf2IWzokr6 FUpQPUV7X7ti6fWsqNGCHK1hmWQbrSbIreZKbxb1nuFy+sg5/BEuD5GMxvCVhRMo0FVD8ukhXHju wOQrgar2ladQLvISK8J6PpdrMqHB24SRwuP9SvPFjj6pRgqKyiD2ZIMeEXXgPOZovRqjyRRuiicU JXfT3biWAMcjE8EOHN6PyzLXiqPrnz From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Dec 2022 17:31:20 +0800 X-OQ-MSGID: <20221207093122.553668-6-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221207093122.553668-1-quinkblack@foxmail.com> References: <20221207093122.553668-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: mHRoyLRcZ0Oc 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 7f2ae88285..8e28a50e0d 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 Wed Dec 7 09:31:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 39640 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp415819pzb; Wed, 7 Dec 2022 01:33:08 -0800 (PST) X-Google-Smtp-Source: AA0mqf6iZUm2CJ5zkoTcWrwaw0mJT68Ji8bsh6lF2cP2PDtYrOmVjj68hrfgvPZdiUR2pA9XEKlT X-Received: by 2002:a05:6402:d78:b0:46b:a177:9d84 with SMTP id ec56-20020a0564020d7800b0046ba1779d84mr30267133edb.134.1670405588079; Wed, 07 Dec 2022 01:33:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670405588; cv=none; d=google.com; s=arc-20160816; b=spUp3YC1vUqd940pHuKbxa5kSsNtL8thkONqmsVM4etycZstpTu7bRZ98ylyi0pfRU 7FcsVy0dg1pmzwXU7Wd6F3xNKhrpnazuRYhHaC+/CS2QcL23srNc1nIWjTLq9anq52IO wWbr98SC4ium3B7GOxG7x8DaGqPecGmciDZyeu/w55EnpILNMzVkhY7P6D/LE6llo/yI QSU9d3971cr3P1al2Kl96TUPxu4sDNHiQYtRcJ7bwLCBzbcpTOPXGcNH69Xe/fsNEob6 UMLMpW+kuEIFZs6xEerT80/ho7avlSF6nrvUwqhDppm2CUAEV/fKZE1KGAl7t7DZuWVx mPpw== 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=2iTorpol6MU/eJ0YxdPJb5/J1UVVV2beV3wfIdNd5i0=; b=iD/C8Vid6qM1z9LvQGpuPTcN5+Os5z0sUDmoOOeSah0OPY38HTrxJalTx5qsJSrUkM o/ec2RyqE+a7xx4hPKf3selhALrvvjs2gZlgP9RmGpBlfN90sDWuEwxKHm4oxJVLx8gD Tg4U9QJPXcQRPrgmYM8/3onMbBQts2lCI5kWfwmMFqpsPfBrDebt4n9S/7emEp/zjAQ/ IZsp+4NeI27/jvw7JGThWKuygGd8J3Ji1xDLwDy4YfFMYIShXlzrg4ju1EWj07jzpShm xB9IQmzdYwdnSd+mT0HMly8pI1SFj4qmipHGWBrIUDOuWxZY/K8rsc0wn4ZDLA7UltpX w7sg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=IP35Hf2Z; 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 xh2-20020a170906da8200b007c0bc4924cbsi12328883ejb.963.2022.12.07.01.33.07; Wed, 07 Dec 2022 01:33:08 -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=IP35Hf2Z; 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 4588C68BDD8; Wed, 7 Dec 2022 11:32:18 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-87.mail.qq.com (out162-62-57-87.mail.qq.com [162.62.57.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D926A68BD6C for ; Wed, 7 Dec 2022 11:32:05 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670405522; bh=SPAuGSkqhaxT1M6BYbG9/4R5rmE6v+YS0w7PGolz0ho=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=IP35Hf2ZJLkZhUvpMV8FWhn/crK8rsNKr3yY4yv3KdjSimdg0pAH6LxvX+qqxCpsV izykZcvzcx4RoY2inHW6LCvIeTRE2EVrqlGPM7tDyxmIZCth2YOxvfc9kvnt8TNffs PcHOnNEXzqUHvTmC/xuYl3Nbjn7yv8wZU1u+1xqk= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7F9B046E; Wed, 07 Dec 2022 17:31:57 +0800 X-QQ-mid: xmsmtpt1670405522tcp2gdync Message-ID: X-QQ-XMAILINFO: OOWntbL6xj16B+ZUDVNxnfRs/G8cQkyMUvhUiFqVjo+tnEKbPpMEPjPAG5cwMT N0PB/KM18bgZWMQJJyM0sL14MkNBMLY376VxBGoPi/dlIt606Fvqhhv55ttp0xlt1C3IZiYmYu86 573/G1iUBc/5fx84q3CxzGi3+nmi7SDHdAbmIdBs00Z5gxqNeU9XlRoLjHHBGG4gbpC8nATagLw0 5rNwrWTeg2X4xZkKRPJMwi2NYxIYFrLBP7pdWPwxbmMUZ/M4N9qAQAyQuRHAI6WwbTDjn1YoVbqb kKFijuntkb9X6Xjpmw6bgrd3rk/amLQhZF5fKw15766hauGEYpyCNlR6IzEOVSFewxnfruDCKK5F 76YiuAcwjMHA9ubI6DAX9KyGReG9KG+atTCWkofb+NQWH0emiDN8TpFFNFy+45DOiOm4qv8mwsHo DdvQnvwUh5Q8acs2zbv9E0xud2q+aNZ8BmeQod23jx/+FY1Ei1eHm/NTbF/1NLm/RpnFo3hZSWoE gIxnd/UOE0oREq5VtNthfDQOjXXBbBNWMJxXptiK5hJHsQ0nvVKSAcsEFpgZGDstKiX+DvLsfz7t dR13n1h5SMvrZkf2OH4dsAKdOGoNgYTczbh1+MGxg4hBqIuNJjgxA/+0H7vOmB3J10kdhBcTvU8F 8XeQbMaeA3P81haZSc6LQZ2nal+S0DISD9/g53ns9kLCtjdREabGW8SYvQoRJwHSUJglWPvikBP1 Kum/Ox0byvXj5mfAJ6cueBgCkvTbXgnvLMtwwG4kDrqDcdbKUq9SPrTaNvDPorH7OhDvS89zMpZ4 5lVqbY3rubZfTh4vSWj2Ztxkm4tMc6RKPsZfr7of1Ni6DE/bpBx1lgp1ijUsNkfruHSxyyBVc4oy ECtl7FRAJHnNnqhVcZ6vIqxOqErW6ypP4HYcWHJEaBnJDvsTf1E1gBdrJJ8f9D03F6cOSRWeu/KN 2XELuiN0EDJiRS56CTj00JbR+qcx+Osc2HJfAQlNk= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Dec 2022 17:31:21 +0800 X-OQ-MSGID: <20221207093122.553668-7-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221207093122.553668-1-quinkblack@foxmail.com> References: <20221207093122.553668-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: iwzoYLoS3jiW From: Zhao Zhili --- libavcodec/mediacodecenc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index 8e28a50e0d..e9cff8167a 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 Wed Dec 7 09:31: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: 39641 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp415891pzb; Wed, 7 Dec 2022 01:33:16 -0800 (PST) X-Google-Smtp-Source: AA0mqf47qnDERW/87YfxYAYSp4sNB3Aq292e1hx7nM2JcPAH7Y3sroo+7ou1n+5RDLbtCrnz7M3j X-Received: by 2002:a05:6402:401a:b0:46c:b463:da06 with SMTP id d26-20020a056402401a00b0046cb463da06mr11686775eda.104.1670405596741; Wed, 07 Dec 2022 01:33:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670405596; cv=none; d=google.com; s=arc-20160816; b=wS61Lp9oihtCzWjuF0Y32L/TLOSIdWF72kFQfalGBgH7pfHLV+Fp3NPFqWc6dO27ab DHskMVITcX4235PoUO0C5Fg5EYaVFeUTSW4PeNSs82Hobo+eAYxu9WBYfWMSeX5Lpdn0 655e9s0/T6peL0rzAl12wO5Sqwe1SxpUe5LISMOm1iZ23OCGwZ1p/Juda0gjIEMW5upI olnxuMRfn/6bn8eimxh4FVAXYIFCrPSY482YuipNP5tIah0ED9mXWMdrQqdL8UImJjhG JyiH3rxOYx2DymGKrZFhvBWgVvfVVZOQqTeBxecpK0CTSC3c4PpTGi7ljvAWO6wvFfkZ QPuQ== 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=jrNjwN172pzJ+Cz9iCCcdELjgI7vPxMOF9hrll2+ZRU=; b=N4afwanwjwNcFSie0eogUwJdZEfDWcTMUo4s11+vKwR9cPoOJakAej2k+Bxl/PZvg1 5DvjE9cEg9e8G+KWRQLT1TA9bshm0zzKYQCzCUpkY7M2i9l3rrb+vTQTrRO4ozF+RtBX d6xXngDs7dmJqaulJtqbk1D1br8JJ1tKpLkTHOotb1CkNh9y3z62rORu7OUxomco05fw PCpd/VMwogDwCRw9L6hLT1HjAQeIOu0OBRPj9zQUly06iffrDC5whTQ+is/6w58tfAl5 ykR7frlBu0ODm4bfgEYEChu7YPjISUUURf63nOMrOZP46aVH76RfW92RA4Y7+R1C/JJ4 mQ2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=WPl3KVl9; 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 hb12-20020a170907160c00b007c10a0c590dsi4321173ejc.25.2022.12.07.01.33.16; Wed, 07 Dec 2022 01:33:16 -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=WPl3KVl9; 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 2739F68BDE5; Wed, 7 Dec 2022 11:32:19 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-216.mail.qq.com (out162-62-58-216.mail.qq.com [162.62.58.216]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 321CE68BD6C for ; Wed, 7 Dec 2022 11:32:07 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1670405524; bh=UvBKYU1qnWl6tP4/4+Qh+TnghxhTPhPqYHU4eVKNECY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=WPl3KVl9mGJwxtpkyaBJ2Wam4CMbaMlTC3jTTwwSkcQ7BpgA+4b/kK3fzl+nnT48I P+zJSa6DuHM7X7vA1ilXx7wUKE03gHX9W3fQBjbqrqRM3P420ijRhnw9AHqvdv3cSG ryvwPVzVFWyE4hjoBpOA4N4ZymV3CIVBW6nsbgD4= Received: from localhost.localdomain ([59.37.125.102]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7F9B046E; Wed, 07 Dec 2022 17:31:57 +0800 X-QQ-mid: xmsmtpt1670405522t5do606kq Message-ID: X-QQ-XMAILINFO: MC9b57iUs2xBjbKtSlR7oJxk17C0UnOuSLrGsDyMDUjZjFE5SHQLrYw74398xz 5ljShGljRENtLzior/V1u25zt/C7gzHybHle4E8hzyKgWnNjL5Rgb1j7xkjcMDxgpYuvpfYPhCu4 FNptfJkw45FlPgWEEhd0XT+a6Q2SoLTuGFWg+NVihHO9ZU3NPBqBKb0rLlA6nJ1zFQ7Ttko4zGXH I6HcMOYsLm0NMu7bfREIw8RKoW0/ED+/eeo7FV28h+uOkhfGK9YPhjxLar3tI5mcwNG4NyUxQQwZ YPUCakjPrqINJI7DZo/sUnwmd/WF/iaONd8Uoz1xB0LfLWLEqzJbcw4XL0tWA2yKy+um+j1o0emG ZNAEBkBiBVXz1qcxsrbwYeyNm4T4GksSZ+tgC8l+1dVNCcnEHBXQE5zNae1eIRrTO+KiCnXn31n5 CHV2Y0VcD4bLrUqoN15LPMT18SqM+wwXSa59u5lcNlNmGjqL76xPliELOoJc4a7uwvn6UN6uF+uB R47KG/t3W30iPclScGhU7DecE2X2/sztR6C8FVuDCOzeqtqnTEbjznPqZeenklcZx74QdD33vxXK 4W9rgMSV8zgtM7+i5ovaScA58PQZ1WY04qapEmzlxK8aO91yVr68XaSvZuwhFyynbqmeLn4Lychq nqq16dVuIPhl7KVKO8GsUGs0ZKGc5Tq6iuiLcu6WzlNjD4LF42G4eEpIMmSe6lMiJQ8UbFEpeoUV 5q/Y5b4fSIGbVEwfsEey0L90t/Tcnq3GQiR7qJ596y7qNXh0DtvPr2lMXE1Nn+G8fw5K2aBAwUC9 pmx/hXy+QhG4KRWCHeaSW1UZF8U89MwFdJp1CuLhXMoPj4przTzCEkUNGrg+EUC0mP1eEIIVpLEf 3kHJI2KiTX83UBltEW7w/U/hJ5f8jd8WZRdgoJc5qDhlolZJ4jM8y/cnPxE+R/yfWk2ACFFZBkDo JRtfyp881Zi0RVfh4Fy7pZcHl4trjBA5hKb5tOHth+BPkgTiX/SUMPTt6TwLBb From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Wed, 7 Dec 2022 17:31:22 +0800 X-OQ-MSGID: <20221207093122.553668-8-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221207093122.553668-1-quinkblack@foxmail.com> References: <20221207093122.553668-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: vZU/rcDdyvtG 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 e9cff8167a..41b7afe23d 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) \ 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, \