1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-07-16 22:42:38 +02:00

avcodec/libvpxenc: add a way to explicitly set temporal layer id

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.

Signed-off-by: James Zern <jzern@google.com>
This commit is contained in:
Wonkap Jang
2020-02-10 10:30:09 -08:00
committed by James Zern
parent cf92f42672
commit f3bb59209f
3 changed files with 24 additions and 3 deletions

View File

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