From patchwork Fri Sep 3 08:32:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adam Chelminski X-Patchwork-Id: 29974 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp1063337iov; Fri, 3 Sep 2021 01:33:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwdvtVwNVtzK3EJ9gLhYA/rL6HwX4bPhiOP7bi1mn2yqY5PzEugdxxhykNh5x11nX9UoEa1 X-Received: by 2002:aa7:c353:: with SMTP id j19mr2843198edr.48.1630657981104; Fri, 03 Sep 2021 01:33:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630657981; cv=none; d=google.com; s=arc-20160816; b=UG/6ZpOojTO+9gxvUzl47dNn+HfNbtC8XVNQTONnpHGdIk43p0io+H6vD8CUiN73nh MtnJ884XlNWFKxohLbks9pcoZI33dix/n9s8vIp8cTMEcP3NPWdo6dLYS9SmoFymlnr3 urDKHjNFLvZO0vcyKV849kW/LZVhxXWcc9dFObeX+l2s0GSDlZATZD4HM+KdRnD4nE+q VlU2YSGIp/CP6s11OH5LDpCdbiSyjGaZwWQq0/DMN53xsLAm+6eKvQoPuhysiVOBEd+5 aJ0nmt9wbElJDk4tSxU41hcPEhwzJcG5v6QB2cNGkT4m9m0ZfZ6vRKpOhMBC2y7zkS/O b/xQ== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=qZ71b6WCUO5wUyKmimTj0YzY1EWHOf4PU3OWzqKP4+I=; b=ifJLi2qqXmt9bZ9YdgqhNANMpfcfwsRKI5W1Zvl+8A45wrTodRHCh7V2PFha1apZ62 ezgIqYRjafemVIvU/VXBfqv2lqGkkOXrgwuXOq+v3MYnxAZVIxfbXI4lECsDr5lemxkC ehCFDHAJ9dL8iXld9rKnE01/eDwRUSVMcCzf17ucHqlTaJWRwTdmOWSfsySxSsgea9rH 8HJqdhieSdOLymk1Iomri72OWJYLye70TCeK3tZFE4AFWfYdl6LbvJCprLcuorJ6xDEx Pc6Fatqf85tgHYlt+qkrpp6OACgpV7yeUw5GM2fqqlUeuXZmoz/nxUfp9JgJvTpFx8sp p1XA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=LYu0H7fX; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id h15si5225626edw.3.2021.09.03.01.33.00; Fri, 03 Sep 2021 01:33:01 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=LYu0H7fX; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0D79568A0F1; Fri, 3 Sep 2021 11:32:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CA7EE68811D for ; Fri, 3 Sep 2021 11:32:50 +0300 (EEST) Received: by mail-ej1-f49.google.com with SMTP id a25so10500040ejv.6 for ; Fri, 03 Sep 2021 01:32:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2WbRBaXFuUllhG6cH33IY2X4MB+1wwmiNae2S/JwXBE=; b=LYu0H7fXrAQRijkX53DHkMkJh1JZK2tr4w4I+vTfNLCU2qzZj99Atx+UxAdju79DxK GZfLLIJMfMC568l+6hSfv2swPzIEbJYEVEWWqu1FErTa8JLmscQvnm1UaQpW9O8t7ERG uh43io/9ebbXFBDrg1wxhLvfnFBT5E4h+XwMDGRHvS3QEbwclE/oykh6/dNuHywlxnpL XtcOrVsB6SutQ0PBpprch5WSFxA2zYtpZkeqlgHJhtwuDiJWyORX7q3cg5zJHJYQql40 zyEf7brS3QxTLzB9cP1kRI+aLMh1ZI/0HL5e94GKnZU+Dkeunqqsohw7phcubDCSSKAr 9JvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2WbRBaXFuUllhG6cH33IY2X4MB+1wwmiNae2S/JwXBE=; b=JylssE2Pb0+DbMBlXhZmBTOBqpm+NrgpWboWybYwfmLhPbscsKtci/8H9aPdT/y/ob OMkgh1pBOmByEK6D1CSBQB89nhajCCpBtiDLQ81jvLFpaJ5PgImRhOg1wzn8JG1moSdF ixyh4Jdkt4KkqkZUDebjQOXxd7NkTgs7W8gTPAWRLiixbmH3HP+whRS8HSYc5r0eApE7 IuOfFn5yxw9ezO+E4SxfRSc1K9CJlK2xrL42mFuOxFffvDHKbJEOxZmhd+ONZwcGyka8 ysVcYmAvZ6KU9IUpraKDKV7TQaGZIxW3UPWHT9lOAgUMPoZbuvJUgJteCe7FSiniSnOh jI7g== X-Gm-Message-State: AOAM532BDlQEQ60to8ASCffRO3M5SlasMtQP1H7UjEhe3FvMEL5l2aQZ 6197IaWdlyrpdXuy60Fb6vVnQjHZUng= X-Received: by 2002:a17:906:d183:: with SMTP id c3mr2889769ejz.283.1630657969985; Fri, 03 Sep 2021 01:32:49 -0700 (PDT) Received: from localhost.localdomain ([194.62.217.85]) by smtp.gmail.com with ESMTPSA id lu4sm2291284ejb.103.2021.09.03.01.32.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Sep 2021 01:32:49 -0700 (PDT) From: Adam Chelminski To: ffmpeg-devel@ffmpeg.org Date: Fri, 3 Sep 2021 10:32:06 +0200 Message-Id: <20210903083206.1152088-1-chelminski.adam@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avcodec/libvpxenc: Apply codec options to alpha codec context 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: Adam Chelminski Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: xyz5TUvwjGa+ When encoding yuva420 (alpha) frames, the vpx encoder uses a second vpx_codec_ctx to encode the alpha stream. However, codec options were only being applied to the primary encoder. This patch updates codecctl_int and codecctl_intp to also apply codec options to the alpha codec context when encoding frames with alpha. This is necessary to take advantage of libvpx speed optimizations such as 'row-mt' and 'cpu-used' when encoding videos with alpha. Without this patch, the speed optimizations are only applied to the primary stream encoding, and the overall encoding is just as slow as it would be without the options specified. Signed-off-by: Adam Chelminski --- doc/APIchanges | 4 ++++ libavcodec/libvpxenc.c | 26 ++++++++++++++++++++++++-- libavcodec/version.h | 2 +- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index d58272ebd4..67603162a2 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,10 @@ libavutil: 2021-04-27 API changes, most recent first: +2021-09-03 - xxxxxxxxxx - lavc 59.7.101 - avcodec.h + The libvpx encoder now passes command-line encoder options to the + alpha stream encoder in addition to the primary stream encoder. + 2021-09-02 - xxxxxxxxxx - lavc 59.7.100 - avcodec.h Incremented the number of elements of AVCodecParser.codec_ids to seven. diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 0e50fbfd7c..f66345e998 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -385,9 +385,20 @@ static av_cold int codecctl_int(AVCodecContext *avctx, snprintf(buf, sizeof(buf), "Failed to set %s codec control", ctlidstr[id]); log_encoder_error(avctx, buf); + return AVERROR(EINVAL); } - return res == VPX_CODEC_OK ? 0 : AVERROR(EINVAL); + if (ctx->is_alpha) { + int res_alpha = vpx_codec_control(&ctx->encoder_alpha, id, val); + if (res_alpha != VPX_CODEC_OK) { + snprintf(buf, sizeof(buf), "Failed to set %s alpha codec control", + ctlidstr[id]); + log_encoder_error(avctx, buf); + return AVERROR(EINVAL); + } + } + + return 0; } #if VPX_ENCODER_ABI_VERSION >= 12 @@ -407,9 +418,20 @@ static av_cold int codecctl_intp(AVCodecContext *avctx, snprintf(buf, sizeof(buf), "Failed to set %s codec control", ctlidstr[id]); log_encoder_error(avctx, buf); + return AVERROR(EINVAL); } - return res == VPX_CODEC_OK ? 0 : AVERROR(EINVAL); + if (ctx->is_alpha) { + int res_alpha = vpx_codec_control(&ctx->encoder_alpha, id, val); + if (res_alpha != VPX_CODEC_OK) { + snprintf(buf, sizeof(buf), "Failed to set %s alpha codec control", + ctlidstr[id]); + log_encoder_error(avctx, buf); + return AVERROR(EINVAL); + } + } + + return 0; } #endif diff --git a/libavcodec/version.h b/libavcodec/version.h index 7faf18a497..7839bf945d 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #define LIBAVCODEC_VERSION_MAJOR 59 #define LIBAVCODEC_VERSION_MINOR 7 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \