From patchwork Wed Jan 8 23:00:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wonkap Jang X-Patchwork-Id: 17263 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 4505044BB68 for ; Thu, 9 Jan 2020 01:00:19 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2EC7768AB72; Thu, 9 Jan 2020 01:00:19 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vk1-f201.google.com (mail-vk1-f201.google.com [209.85.221.201]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 51B7568A97C for ; Thu, 9 Jan 2020 01:00:12 +0200 (EET) Received: by mail-vk1-f201.google.com with SMTP id x74so1727541vke.3 for ; Wed, 08 Jan 2020 15:00:12 -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=d2eqUA63nBKC9jCXbpp4sJXbk3u7JStdsoIeFOR/XNdRphpjB6IoaP4/NTD8WJxaKc +d2B4BvT+P1zoQRChJG54ag1amJHla/1Viw0DqwKdUQb6mGmNR2Q5qCRarpoV6o7rYvH L/Mh/HbFCjtxRgi2PXeemAUs7nTn5xb94X5Fie4ZNNNymfUwF5RfWpMSzhxiYsVSUmFU fGC7xeljSKy4tO+YqW5KB/zg4bpgIG/5MHZNpsl4em1a+HczLLjjC7LQvBYAzAanEutj OAY9DHO0sFvR+ICZOL15ZdKVf5EjqhdRgqk1B0VKfED5LEAOFya2i5b/JNHo1pKAmafy PDZw== 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=XumUMVjIF/L0R4yKrnUDBTK3tLLtSE3fHilLk7iddqTA0OJpYqqQ4Zdysl+mgUeKGH 2oSa08Rm1G/hNI8kb/tNRfYL8x8IasuNvbucFmJ72ni/tqWqE1JE6/lzP+0fCYxQB9Mz V3G53TZPaTw0cjegmOeWgRGDmhYErgLoPR3rBVL4+wlzUZ8LsMInerhRa28f22OjY+Aq Ze8O66YJxuOytcu75Ibrwc1NZVEn/JK+B4GxSsVp/uMn4Cujm0KH3cxW64klWdIRFdAz mCh4rbq+RazJGJALKCkOnSk1L7IrwyHEQaC1kHrw+iuEI0BxIJTNqG/AiKtdJj9rt624 6JGQ== X-Gm-Message-State: APjAAAW00FIWoCBJN3KZdyolMEJ6E1RJOtBvwTgLK2ayhznO3Nxg44Gz pyXpcgN/kGYXbGYxrpZYZmDD6AIomIP5fvG32tErkCJ9SLK8mFbumZaxEA2V2Ji09jk9xslBAyS VBZLXqnNa/l2bBQqRpXlkhYtSIX0tKSaq91h+VK6qT63AWnKyBgTOUymWupBKOGc= X-Google-Smtp-Source: APXvYqxSXJy2aFW9ZFdvqW+0UvfzAkLuD4sK00CtKKuHErtUZWrTgG04KYZMw5eE7/UTIfP8XJdAFizSKJM= X-Received: by 2002:ab0:6954:: with SMTP id c20mr4711698uas.82.1578524410921; Wed, 08 Jan 2020 15:00:10 -0800 (PST) Date: Wed, 8 Jan 2020 15:00:05 -0800 In-Reply-To: <20200108230006.169044-1-wonkap@google.com> Message-Id: <20200108230006.169044-2-wonkap@google.com> Mime-Version: 1.0 References: <20200108230006.169044-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 v3 2/3] 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) {