From patchwork Fri Jan 10 17:59:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wonkap Jang X-Patchwork-Id: 17280 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 3017944ABC8 for ; Fri, 10 Jan 2020 19:59:55 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 19D2868AD48; Fri, 10 Jan 2020 19:59:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2BFA368ABC3 for ; Fri, 10 Jan 2020 19:59:48 +0200 (EET) Received: by mail-pj1-f74.google.com with SMTP id s19so1630231pjp.9 for ; Fri, 10 Jan 2020 09:59:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to; bh=bF2I3mayMMGXwWiujUfaXiDk14T4n6PZl25jsFsfJPk=; b=X8PcqDkAqCoXDtjajiePP29C889nNSCLJvP0zsc6olKfuqk3d3Rw08Z60sXTAiGGxF 72dirjbDQrPyvAK0Taqt1RJuZHB79fiORii3s8kJ4e3rrv/uQDHM6YxHA6VfV8ZEwAh8 yavBw7IMKA02P0o1D33m83Lyrid219kAsO5YYd5O2WpimC8KCrLDK3rpAY/SuXkGoRop i79SPPZtpc76PKW6WYQJuw0l65x4H61+QGZ8JDPNgAIEu1MGgY8JMfWVGLxtW0miO8iv c/UpBquJFOhWM+84jBea9zYpnKr4Z0gdhfoaJZBNgNrM1kzp4COztt6lh0fLerJ+hS9b dkig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to; bh=bF2I3mayMMGXwWiujUfaXiDk14T4n6PZl25jsFsfJPk=; b=OO+uC1UqgNXxvUX/zqOtN8t41SIkY4ealsU+HhKzjfCCtIvtZJ++3ygfOQob2ihJn+ 7mObAGi67mLHKNvtSz/7wmeDAyl1yMGbKQSsgTdGG46a8bNKIeulgll/teSXaVJlhyNl PyHUxopXuIHP7MIMJcYcXz64QNeGrIQVkyuCenZUeeQf3N9svye1BfKoACPw4f9G2dtH VbF8shrfgRXWyG45jIITlvxbR1QeemifF+TBtSbuytgnx3Z65AF3xgZEdFpWZw9gQTjS c6ZQDwbYHoSt7fuhOBhH+RDpXfbphSXXgn5MQujC3ixUsXjZkorsmtrOjlUechV5/b6j SuDw== X-Gm-Message-State: APjAAAWMtmAbs2DAmPQvI5CV6Xfe4GhMReZqJ8aPl1T8a2WyiNHDGLtE ExHXWi3aiUnKia2fUMZgOuykXiMjknGg7d+lOmJcuTR/eZUIzroMndmlNztGCdNTebdftnVz+xf 9DcMVKLfeyjutFwQaAnxVH5NUUMCsykhrvNwBSvUjerl+fGpKgRv6XPWMj0HGlno= X-Google-Smtp-Source: APXvYqxBK1DJhJozuD2O0IoW48bCgLHpmDSaJZJ4mfLOJyZefhfmhKk3INRvbgfNCP6/qS1k0TQPXiCF/yA= X-Received: by 2002:a63:3104:: with SMTP id x4mr5700381pgx.369.1578679186314; Fri, 10 Jan 2020 09:59:46 -0800 (PST) Date: Fri, 10 Jan 2020 09:59:42 -0800 In-Reply-To: <20200110175942.204938-1-wonkap@google.com> Message-Id: <20200110175942.204938-2-wonkap@google.com> Mime-Version: 1.0 References: <20200110175942.204938-1-wonkap@google.com> X-Mailer: git-send-email 2.25.0.rc1.283.g88dfdc4193-goog From: Wonkap Jang To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v4 2/2] avcodec/libvpxenc: add a way to explicitly set temporal layer id 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" In order for rate control to correctly allocate bitrate to each temporal layer, correct temporal layer id has to be set to each frame. This commit provides the ability to set correct temporal layer id for each frame. --- libavcodec/libvpxenc.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 14cc1e7158..8d24e96241 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -1520,11 +1520,22 @@ static int vpx_encode(AVCodecContext *avctx, AVPacket *pkt, #endif if (frame->pict_type == AV_PICTURE_TYPE_I) flags |= VPX_EFLAG_FORCE_KF; - if (CONFIG_LIBVPX_VP8_ENCODER && avctx->codec_id == AV_CODEC_ID_VP8 && frame->metadata) { + if (frame->metadata) { AVDictionaryEntry* en = av_dict_get(frame->metadata, "vp8-flags", NULL, 0); if (en) { flags |= strtoul(en->value, NULL, 10); } + + memset(&layer_id, 0, sizeof(layer_id)); + + en = av_dict_get(frame->metadata, "temporal_id", NULL, 0); + if (en) { + layer_id.temporal_layer_id = strtoul(en->value, NULL, 10); +#ifdef VPX_CTRL_VP9E_SET_MAX_INTER_BITRATE_PCT + layer_id.temporal_layer_id_per_spatial[0] = layer_id.temporal_layer_id; +#endif + layer_id_valid = 1; + } } if (sd) {