From patchwork Mon Dec 16 22:23:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wonkap Jang X-Patchwork-Id: 16836 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 ACB1B448FBD for ; Tue, 17 Dec 2019 00:23:36 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 94C0568AE3F; Tue, 17 Dec 2019 00:23:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2AA9468ADB7 for ; Tue, 17 Dec 2019 00:23:30 +0200 (EET) Received: by mail-pg1-f201.google.com with SMTP id f15so6049677pgk.2 for ; Mon, 16 Dec 2019 14:23:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to; bh=FOBW4hu20kDDSo5C6lyJJxJy1nv+36+qxCeDbQfC/v8=; b=AxPT0Go0D9UKdfSkIlItMStzTcDyOyt4IfTllIveCd7mbhEQrU27KXfhkrlwzwjscw Dyyg1v9Ev/Z8u6uCiZWTdYnKXykTbLxVCDVub8f2CiZEL0R1k6QyCdyILWpZdm9YgNWz 3GxbZLBb4rBKtIl8w5xINVsuCqUDwZnymbnq0mrTxEGdSTJVzROkf5zPE8CNlmYWaPfA c87eS3HWJoRropMc+2t5AdnxEowQsc5lUUETzAZeV2etxHr29F2XUDsOdQ+vUwQhltDs FlozQoxzFWD0dsrgeZilnWjiQLQO3sBhC+InnO6qgxJcUylm/eYba9EJ4b3tI/AMn00f PF9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to; bh=FOBW4hu20kDDSo5C6lyJJxJy1nv+36+qxCeDbQfC/v8=; b=U+/0kocLCZ6deAOh5XS744K+pAz9J1Vp+IH/JHf1DvCcITzfNaravAiJ0NX7ZDCXIZ bjRzwMDL++wVVyKWQ3cDohjUpKIwCmJAZJPVT2S8Ftfk1+0iB7t3UzGAsyj5BP7kx5BE VQmCdM94ZRSP9QkLlLGz/Fe3hXrocXSKboH72EOPgShOIfJu8FlfXmVdnWAPhZCv3sf3 dlenuOSIgU+fBriqXs7vTPc4DCaHvdV8o4QF62nU99Eht4Ehs9NDrgGCWiqIKcDqPHA7 Nht6yJv4Rn1Oz6Jh7eK5cEsqMcoK7aEg5s5vep5oh07kQPNKKklbyz8fX5CHg2ciepgl GE4w== X-Gm-Message-State: APjAAAVQ7UR966Ppwp7P6WrqKxGNT7U2Aihe5Oj2gic7/JgeeUMYmx1M Nn5nQp7DugHg1crwL9BnZtaK5OO2w8jT5gkP1ia+WtkAE4AUHj4w5uG7U2vozyRR9XFfMnJf6IT 8Zhm3f0aL+6XbsGgHDNuJtIqfrZUbMqY0DceAnUWr1UddBJbk32pgLRv9YLQNEns= X-Google-Smtp-Source: APXvYqxNl7sKaITxBsOFrStsv9NcLNjbOFffnyOh6Tlyij7a5TK2kQd4+Nb1PZHHQW6JQ0LtXLqFBOMOrDU= X-Received: by 2002:a65:50c6:: with SMTP id s6mr3919208pgp.365.1576535008460; Mon, 16 Dec 2019 14:23:28 -0800 (PST) Date: Mon, 16 Dec 2019 14:23:26 -0800 Message-Id: <20191216222326.71646-1-wonkap@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.24.1.735.g03f4e72817-goog From: Wonkap Jang To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH] 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 | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 94af783c4d..3dcf9258cd 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -1527,11 +1527,20 @@ 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(vpx_svc_layer_id_t)); + + en = av_dict_get(frame->metadata, "temporal_id", NULL, 0); + if (en) { + layer_id.temporal_layer_id = strtoul(en->value, NULL, 10); + layer_id.temporal_layer_id_per_spatial[0] = layer_id.temporal_layer_id; + layer_id_valid = 1; + } } if (sd) {