[FFmpeg-devel] [PATCH v2 2/2] avcodec/libvpxenc: add a way to explicitly set temporal layer id
Wonkap Jang
wonkap at google.com
Wed Dec 18 00:42:21 EET 2019
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 7612551a56..c225447515 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) {
--
2.24.1.735.g03f4e72817-goog
More information about the ffmpeg-devel
mailing list