mirror of https://git.ffmpeg.org/ffmpeg.git
Fix parser not to clobber has_b_frames when extradata is set.
Because in contrast to the decoder, the parser does not setup low_delay. The code in parse_nal_units would always end up setting has_b_frames to "1", except when stream is explicitly marked as low delay. Since the parser itself would create 'extradata', simply reopening the parser would cause this. This happens for instance in estimate_timings_from_pts(), which causes the parser to be reopened on the same stream. This fixes Libav #22 and FFmpeg (trac) #360 CC: libav-stable@libav.org Based on a patch by Reimar Döffinger <Reimar.Doeffinger@gmx.de> (commit31ac0ac29b
) Comments and description adapted by Reinhard Tartler. Signed-off-by: Reinhard Tartler <siretart@tauware.de> (cherry picked from commit790a367d9e
) Signed-off-by: Reinhard Tartler <siretart@tauware.de>
This commit is contained in:
parent
abe3572878
commit
0f839cff6b
|
@ -251,6 +251,13 @@ static int h264_parse(AVCodecParserContext *s,
|
|||
h->got_first = 1;
|
||||
if (avctx->extradata_size) {
|
||||
h->s.avctx = avctx;
|
||||
// must be done like in the decoder.
|
||||
// otherwise opening the parser, creating extradata,
|
||||
// and then closing and opening again
|
||||
// will cause has_b_frames to be always set.
|
||||
// NB: estimate_timings_from_pts behaves exactly like this.
|
||||
if (!avctx->has_b_frames)
|
||||
h->s.low_delay = 1;
|
||||
ff_h264_decode_extradata(h);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue