[Libav-user] h264 decoding delay higher than it could be in a real-time app
Camera Man
i.like.privacy.too at gmail.com
Mon Mar 12 09:36:05 CET 2012
On 03/11/2012 12:20 PM, Alex Cohn wrote:
> In some cases, simply ignoring B-frames on input can produce video
> frames that will not look terrible. You will see artifacts, but the
> overall visual experience will be better than simply stumbling until
> the next key frame. In some cases, the result of ignoring B-frames
> will be disastrous.
That's not an option for me then; Thanks for saving me countless hours
of debugging ...
>> 2. Is it safe to just force low_delay=1 in my case?
> Most likely, it is: if the decoder encounters a B-frame in low_delay
> mode, decode_postinit() will fix it for you (see h264.c):
>
> } else if (s->low_delay&&
> ((h->next_outputed_poc != INT_MIN&& out->poc>
> h->next_outputed_poc + 2) ||
> cur->f.pict_type == AV_PICTURE_TYPE_B)) {
> s->low_delay = 0;
> s->avctx->has_b_frames++;
>
Do I understand this correctly - if low_delay is set to 1, but a frame
arrives out of order - low_delay is simply set to 0, and the delay
buffer length is increased? (introducing a one-frame pause for each time
that happens?)
If so, then strategically setting s->low_delay=1, has_b_frames=0,
num_reorder_frames=0 or modifying the bitstream PPS to have
num_reorder_frames=0 would always introduce the minimum delay possible,
and increase that delay as needed -- which is fine for me.
Thanks again for your time and advice!
More information about the Libav-user
mailing list