You've already forked FFmpeg
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:
@ -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) {
|
||||
|
Reference in New Issue
Block a user