[FFmpeg-devel] [PATCH] h264_parser: Fix behaviour when PARSER_FLAG_COMPLETE_FRAMES is set.
Philip Langdale
philipl at overt.org
Mon Mar 28 00:48:29 CEST 2011
Currently, the parser is buggy and only processes the stream extradata
when the flag is set. This fixes it to actually inspect the frames.
Signed-off-by: Philip Langdale <philipl at overt.org>
---
libavcodec/h264_parser.c | 27 ++++++++++++++-------------
1 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
index c5728e2..7ae5d5a 100644
--- a/libavcodec/h264_parser.c
+++ b/libavcodec/h264_parser.c
@@ -270,21 +270,22 @@ static int h264_parse(AVCodecParserContext *s,
assert(pc->last_index + next >= 0 );
ff_h264_find_frame_end(h, &pc->buffer[pc->last_index + next], -next); //update state
}
+ }
- parse_nal_units(s, avctx, buf, buf_size);
+ parse_nal_units(s, avctx, buf, buf_size);
- if (h->sei_cpb_removal_delay >= 0) {
- s->dts_sync_point = h->sei_buffering_period_present;
- s->dts_ref_dts_delta = h->sei_cpb_removal_delay;
- s->pts_dts_delta = h->sei_dpb_output_delay;
- } else {
- s->dts_sync_point = INT_MIN;
- s->dts_ref_dts_delta = INT_MIN;
- s->pts_dts_delta = INT_MIN;
- }
- if (s->flags & PARSER_FLAG_ONCE) {
- s->flags &= PARSER_FLAG_COMPLETE_FRAMES;
- }
+ if (h->sei_cpb_removal_delay >= 0) {
+ s->dts_sync_point = h->sei_buffering_period_present;
+ s->dts_ref_dts_delta = h->sei_cpb_removal_delay;
+ s->pts_dts_delta = h->sei_dpb_output_delay;
+ } else {
+ s->dts_sync_point = INT_MIN;
+ s->dts_ref_dts_delta = INT_MIN;
+ s->pts_dts_delta = INT_MIN;
+ }
+
+ if (s->flags & PARSER_FLAG_ONCE) {
+ s->flags &= PARSER_FLAG_COMPLETE_FRAMES;
}
*poutbuf = buf;
--
1.7.1
More information about the ffmpeg-devel
mailing list