From patchwork Tue Nov 21 01:36:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Zern X-Patchwork-Id: 6240 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp4647964jah; Mon, 20 Nov 2017 17:42:10 -0800 (PST) X-Google-Smtp-Source: AGs4zMaucHQzKdjUcbzUYfY51wN+UBLzdCmz96QMj/+W0KRNJDvu3DLSsa6e+ZyoidqhMiypuE2t X-Received: by 10.28.55.71 with SMTP id e68mr12129848wma.139.1511228530761; Mon, 20 Nov 2017 17:42:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511228530; cv=none; d=google.com; s=arc-20160816; b=c3MeAc4k/CpVecVWonkdTZ6cqjvIUIGivJXYmUo8BKVWJfL2l6KgbKs73yL+RyLKj6 lFJq0TIiG+WljxP4ZEUo7PVSyuV3a9WuAlbaULSRNiNOKNCEQ0LTdI3Z6GK8UTbX/a/j H4vixIJZhXMhM1BuqCRLGd7FE6Yhf2ruxHWcnY6NTjaztRP8MkwIlu29dFOmBu0trTRk sMSuEElcnuZRP1yjVZkr+tiaxbLECk3BeoYuEdnK+oCyelxUr910WLP784pvXPUE/2OD Nx3l3Qb5VlTly1+Ohfpq/2Kgoy7OG2RWEU5aCNd3/HFMYRcvQTQtHx4FpkiftCJCEC36 rcXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=6WQKAPAZanAcOk/47Xyez+GsCxRszlcp95J8eMsSRCY=; b=VYZ+SBpTCbxNCFlFZ9iR2Y49ckRX0RclkYy1iEvEoabgVn6wi32ullREn9+ptva6yj oO115S8a83Nq9Wf7tBbxhtTq7RKWDq7FMo1/p4p90WvyxNij7LZeoxVYQ+fvvHNKCF+R P9IBHqLV0W9JyXgtnGZaDiVgKmGtKUH13WtD0fkrgGog9mW+1sXh64kkLOEH54rLQJJG 4wl/XPUyilcPl7kblsOuQIOECBHGEZDTQzR6yhSObQvilxiDGiDX4kmeyn8x4xei6tsM Qr+Mnu1RaaOJwaltomYKVxGJG2P6kZ+mOLN6eynNuUqRcEaS18hNDvk+pSNCNlf8ie4d NbZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@google.com header.s=20161025 header.b=T8CpnxoN; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e23si8998331wrc.68.2017.11.20.17.42.10; Mon, 20 Nov 2017 17:42:10 -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=@google.com header.s=20161025 header.b=T8CpnxoN; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C0BE9689DE7; Tue, 21 Nov 2017 03:41:51 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it0-f65.google.com (mail-it0-f65.google.com [209.85.214.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E3E09689C92 for ; Tue, 21 Nov 2017 03:41:45 +0200 (EET) Received: by mail-it0-f65.google.com with SMTP id x13so106795iti.4 for ; Mon, 20 Nov 2017 17:42:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:subject:date:message-id; bh=f39ESra4rVug76ZmV5m1tWc28TeesahYMqrXiX+Wo/M=; b=T8CpnxoNF2M2UYUPkMGHyfBjOzot59wZJC7DYJViuMBiAFplGUTMVsrX4mvWfX/ZtO faeHz9I4ddnM+phaUXQ7Pcm6MelgPN/X6cu3bMB9gUyrFZ/32cmRbHhQ+oPAEW3V73sS MhW5Yp8VPQn+I+1iePn7N2nrrVm9rxrAllT7qMYifTEC43hn9g5X7I990nFXW2N5OeQc z7QucYydtbbR4T1c1ialw61czPI2V0PapjguWUyHzqDNrvfGVld5j0QC2Xzv/dS+etOJ Pvb1yVvJxVt5Cj5KKNesIK4U1OPb49IuFkkxHAk3weM2rBCitoJF5V8gXjsgCfEDHMcJ gSpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=f39ESra4rVug76ZmV5m1tWc28TeesahYMqrXiX+Wo/M=; b=a0dtVBuptWFnZ6ZLWMOH22NPOwSPT6LivyQ/okX8Ef0rWFooxotlKON05SYu8hGLAV 3Bdyvq3I7Kw+XqcT3TjcuTqZYhxU2OhqwXqCpuIL6tO4E5fA1rsjiVNUj0eey7pohHsp y6ZlJ+wgW9MF+EKQ4ySum9+uDw3HpylYd9OC5bEzJdB7RS6UQa8riSQLq0cLT6VAax7c q4/I6uJjZSx3tavzVT0ttLYinNO7NiFm3dBEVUa5SHegBoZVwUDyov8vL55AcUD1lyBp FmUkqXls8h+iQ067HQg3I/qE96riVrZK2cYLb9sQyDHUvCltkA+4n98bK0sp56MBacw3 1cAg== X-Gm-Message-State: AJaThX4Itlsu8uJQPnaBxW/E+pNKH4jTlS1dgSm3U10yRvsBwJTr2PUj aeqptwvT1rvMst9qNJbZn4w4TBdmmho= X-Received: by 10.36.225.136 with SMTP id n130mr20761969ith.146.1511228190328; Mon, 20 Nov 2017 17:36:30 -0800 (PST) Received: from jzern.mtv.corp.google.com ([172.18.84.226]) by smtp.gmail.com with ESMTPSA id o190sm5061877ioe.71.2017.11.20.17.36.29 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Nov 2017 17:36:29 -0800 (PST) Received: by jzern.mtv.corp.google.com (Postfix, from userid 105886) id ACDCC806F6; Mon, 20 Nov 2017 17:36:28 -0800 (PST) From: James Zern To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 Nov 2017 17:36:28 -0800 Message-Id: <20171121013628.153992-1-jzern@google.com> X-Mailer: git-send-email 2.15.0.448.gf294e3d99a-goog Subject: [FFmpeg-devel] [PATCH] libvpxenc, vp9: add corpus-complexity option X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Corpus VBR mode is a variant of standard VBR where the complexity distribution midpoint is passed in rather than calculated for a specific clip or chunk. The valid range is [0, 10000]. 0 (default) uses standard VBR. Signed-off-by: James Zern --- doc/encoders.texi | 5 +++++ libavcodec/libvpxenc.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index 23451b7b92..88ef8f9b23 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -1683,6 +1683,11 @@ colorspaces: Enable row based multi-threading. @item tune-content Set content type: default (0), screen (1), film (2). +@item corpus-complexity +Corpus VBR mode is a variant of standard VBR where the complexity distribution +midpoint is passed in rather than calculated for a specific clip or chunk. + +The valid range is [0, 10000]. 0 (default) uses standard VBR. @end table @end table diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 0258396d08..9861e9d5ae 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -110,6 +110,7 @@ typedef struct VPxEncoderContext { float level; int row_mt; int tune_content; + int corpus_complexity; } VPxContext; /** String mappings for enum vp8e_enc_control_id */ @@ -213,6 +214,10 @@ static av_cold void dump_enc_cfg(AVCodecContext *avctx, width, "rc_2pass_vbr_bias_pct:", cfg->rc_2pass_vbr_bias_pct, width, "rc_2pass_vbr_minsection_pct:", cfg->rc_2pass_vbr_minsection_pct, width, "rc_2pass_vbr_maxsection_pct:", cfg->rc_2pass_vbr_maxsection_pct); +#if VPX_ENCODER_ABI_VERSION >= 14 + av_log(avctx, level, " %*s%u\n", + width, "rc_2pass_vbr_corpus_complexity:", cfg->rc_2pass_vbr_corpus_complexity); +#endif av_log(avctx, level, "keyframing settings\n" " %*s%d\n %*s%u\n %*s%u\n", width, "kf_mode:", cfg->kf_mode, @@ -565,6 +570,14 @@ FF_ENABLE_DEPRECATION_WARNINGS if (avctx->rc_max_rate) enccfg.rc_2pass_vbr_maxsection_pct = avctx->rc_max_rate * 100LL / avctx->bit_rate; +#if CONFIG_LIBVPX_VP9_ENCODER + if (avctx->codec_id == AV_CODEC_ID_VP9) { +#if VPX_ENCODER_ABI_VERSION >= 14 + if (ctx->corpus_complexity >= 0) + enccfg.rc_2pass_vbr_corpus_complexity = ctx->corpus_complexity; +#endif + } +#endif if (avctx->rc_buffer_size) enccfg.rc_buf_sz = @@ -1140,6 +1153,9 @@ static const AVOption vp9_options[] = { #if VPX_ENCODER_ABI_VERSION >= 14 { "film", "Film content; improves grain retention", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, "tune_content" }, #endif +#endif +#if VPX_ENCODER_ABI_VERSION >= 14 + { "corpus-complexity", "corpus vbr complexity midpoint", OFFSET(corpus_complexity), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 10000, VE }, #endif LEGACY_OPTIONS { NULL }