From patchwork Mon Feb 3 18:02:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wonkap Jang X-Patchwork-Id: 17676 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 C967A448A8D for ; Mon, 3 Feb 2020 20:02:15 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AD52E6898D0; Mon, 3 Feb 2020 20:02:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ua1-f74.google.com (mail-ua1-f74.google.com [209.85.222.74]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1B31B687F98 for ; Mon, 3 Feb 2020 20:02:09 +0200 (EET) Received: by mail-ua1-f74.google.com with SMTP id n10so3911144ual.19 for ; Mon, 03 Feb 2020 10:02:09 -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=vL7FiOFAll60QgfdD8LAwhCIzaLJqUP3OkBuu1eGibU=; b=GygLGvi/jqg4twZCT0dIjwmqerKE7v6k++QuIizY2g3jJ9L/cYhO0Y9K8vB5pGMDhN TQ1RdvhAYq+PtDbkQM63pfJvlmqQ6RzWDVgeo2H87bCor4bBnPEPdTBEiZOZASWP3P2U MHgiwYJyXGz1SVuGBewZV1fXhva3UGPmwseUhGLVaiUuCCJMQCHknQFyl0YhzcljGan+ lefOHwVPisdL6cg0v+tMjExH21wEIqGgIqOGN+APDoCQehfIxD6FFJr8p9+EwiWPuvNr pVXWKJ6o0UPd10cWvhXar0Q4VxgeV9lvRVLUzrJnNEihxlthTD0FiPy2McrpDZvxBkxV 0Xng== 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=vL7FiOFAll60QgfdD8LAwhCIzaLJqUP3OkBuu1eGibU=; b=uRnfReFONsH1i/XfKdfZvEf2XY1nkA9B54MfXzFYSlftSLifuly+vvkZecKiGzL37o Pds1bywZRMT/WDPcIAGi64aGOEeOsse7FWLL07jXzUOzumPc6cKSd4Y2aV2dXW3QehJl sJ2CQy43wTGW371C5jvU5ZHUAQVi+CneASqLl1XRGsc1B4eNnEBfKIQQxxR+G0lUWLSn /KiYe3IGEw9zcY5pAvuh1e7KYwY4e4ITbV1vOQ5GPTv10o4smNK7pI9zm0Y4rrQRT9P7 X1ztx1moee404q342VJJ1xeGgWvHkHba440ZuK4CvOfKhq5zIdK8oMUzp4Yi3//Fk1Km +YMA== X-Gm-Message-State: APjAAAUGRFhzn4aPEIc642YCMDxoaqbZXcsWL009IhAbOxdq+fuzsSSG j2L639gIGui7KqoFBz1XmKh7+Q3GZqNtr12eSlJ4F7MbisjXwrZvLrZmbE1dpA5PCTLKNKHWsrL a52QebjEmMgGBisrp0FJYTnaQwpaua3lbRhADAGA+rGiC+OmVTXlwELYdwo+e3so= X-Google-Smtp-Source: APXvYqxlEt/zuk6duBFDsCTFojghZUZysGCQ4ofMvk+SyCjqCJjYq+tTjFCy6oCdZCEF6Ydv+Qx0wPnO+y8= X-Received: by 2002:a1f:3fc1:: with SMTP id m184mr14490253vka.63.1580752927345; Mon, 03 Feb 2020 10:02:07 -0800 (PST) Date: Mon, 3 Feb 2020 10:02:02 -0800 In-Reply-To: <20200203180202.19669-1-wonkap@google.com> Message-Id: <20200203180202.19669-2-wonkap@google.com> Mime-Version: 1.0 References: <20200203180202.19669-1-wonkap@google.com> X-Mailer: git-send-email 2.25.0.341.g760bfbb309-goog From: Wonkap Jang To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v5 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 6fca05e6b1..2093aa8bca 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -1519,11 +1519,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) {