diff mbox

[FFmpeg-devel] avcodec/libvpxenc: add a way to explicitly set temporal layer id.

Message ID 20191216222326.71646-1-wonkap@google.com
State New
Headers show

Commit Message

Wonkap Jang Dec. 16, 2019, 10:23 p.m. UTC
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(-)

Comments

Michael Niedermayer Dec. 17, 2019, 8:07 p.m. UTC | #1
On Mon, Dec 16, 2019 at 02:23:26PM -0800, Wonkap Jang wrote:
> 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(-)

breaks build
CC	libavcodec/libvpxenc.o
libavcodec/libvpxenc.c: In function ‘vpx_encode’:
libavcodec/libvpxenc.c:1368:21: error: ‘layer_id’ undeclared (first use in this function)
             memset(&layer_id, 0, sizeof(vpx_svc_layer_id_t));
                     ^
libavcodec/libvpxenc.c:1368:21: note: each undeclared identifier is reported only once for each function it appears in
libavcodec/libvpxenc.c:1374:17: error: ‘layer_id_valid’ undeclared (first use in this function)
                 layer_id_valid = 1;
                 ^
make: *** [libavcodec/libvpxenc.o] Error 1

[...]
Wonkap Jang Dec. 17, 2019, 10:31 p.m. UTC | #2
Thank you Michael,

There is a dependency between this patch and the one before it.

I will send out a new patch with both on the same branch as PATCH 1/2 and
2/2.

Thank you~

Wonkap


On Tue, Dec 17, 2019 at 12:08 PM Michael Niedermayer <michael@niedermayer.cc>
wrote:

> On Mon, Dec 16, 2019 at 02:23:26PM -0800, Wonkap Jang wrote:
> > 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(-)
>
> breaks build
> CC      libavcodec/libvpxenc.o
> libavcodec/libvpxenc.c: In function ‘vpx_encode’:
> libavcodec/libvpxenc.c:1368:21: error: ‘layer_id’ undeclared (first use in
> this function)
>              memset(&layer_id, 0, sizeof(vpx_svc_layer_id_t));
>                      ^
> libavcodec/libvpxenc.c:1368:21: note: each undeclared identifier is
> reported only once for each function it appears in
> libavcodec/libvpxenc.c:1374:17: error: ‘layer_id_valid’ undeclared (first
> use in this function)
>                  layer_id_valid = 1;
>                  ^
> make: *** [libavcodec/libvpxenc.o] Error 1
>
> [...]
>
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> It is what and why we do it that matters, not just one of them.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox

Patch

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) {