mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-10 00:30:14 +00:00
avcodec/h264_parser: Reduce needed history for parsing mb index
This fixes a bug/regression with very small packets
Fixes: output_file
Regression since: 0782fb6bcb
Reported-by: Thierry Foucu <tfoucu@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
7719b8ccc7
commit
d25c945247
@ -121,20 +121,23 @@ static int h264_find_frame_end(H264ParseContext *p, const uint8_t *buf,
|
|||||||
}
|
}
|
||||||
state = 7;
|
state = 7;
|
||||||
} else {
|
} else {
|
||||||
p->parse_history[p->parse_history_count++] = buf[i];
|
|
||||||
if (p->parse_history_count > 5) {
|
|
||||||
unsigned int mb, last_mb = p->parse_last_mb;
|
unsigned int mb, last_mb = p->parse_last_mb;
|
||||||
GetBitContext gb;
|
GetBitContext gb;
|
||||||
|
p->parse_history[p->parse_history_count++] = buf[i];
|
||||||
|
|
||||||
init_get_bits(&gb, p->parse_history, 8*p->parse_history_count);
|
init_get_bits(&gb, p->parse_history, 8*p->parse_history_count);
|
||||||
p->parse_history_count = 0;
|
|
||||||
mb= get_ue_golomb_long(&gb);
|
mb= get_ue_golomb_long(&gb);
|
||||||
|
if (get_bits_left(&gb) > 0 || p->parse_history_count > 5) {
|
||||||
p->parse_last_mb = mb;
|
p->parse_last_mb = mb;
|
||||||
if (pc->frame_start_found) {
|
if (pc->frame_start_found) {
|
||||||
if (mb <= last_mb)
|
if (mb <= last_mb) {
|
||||||
|
i -= p->parse_history_count - 1;
|
||||||
|
p->parse_history_count = 0;
|
||||||
goto found;
|
goto found;
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
pc->frame_start_found = 1;
|
pc->frame_start_found = 1;
|
||||||
|
p->parse_history_count = 0;
|
||||||
state = 7;
|
state = 7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -149,7 +152,7 @@ found:
|
|||||||
pc->frame_start_found = 0;
|
pc->frame_start_found = 0;
|
||||||
if (p->is_avc)
|
if (p->is_avc)
|
||||||
return next_avc;
|
return next_avc;
|
||||||
return i - (state & 5) - 5 * (state > 7);
|
return i - (state & 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb,
|
static int scan_mmco_reset(AVCodecParserContext *s, GetBitContext *gb,
|
||||||
|
Loading…
Reference in New Issue
Block a user