mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
avcodec/hevc_parser: fix split function of parser
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
b7baebb754
commit
62bd8deef9
@ -410,19 +410,30 @@ static int hevc_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
|
||||
{
|
||||
const uint8_t *ptr = buf, *end = buf + buf_size;
|
||||
uint32_t state = -1;
|
||||
int has_ps = 0, nut;
|
||||
int has_vps = 0;
|
||||
int has_sps = 0;
|
||||
int has_pps = 0;
|
||||
int nut;
|
||||
|
||||
while (ptr < end) {
|
||||
ptr = avpriv_find_start_code(ptr, end, &state);
|
||||
if ((state >> 8) != START_CODE)
|
||||
break;
|
||||
nut = (state >> 1) & 0x3F;
|
||||
if (nut >= NAL_VPS && nut <= NAL_PPS)
|
||||
has_ps = 1;
|
||||
else if (has_ps)
|
||||
return ptr - 4 - buf;
|
||||
else // no parameter set at the beginning of the stream
|
||||
return 0;
|
||||
if (nut == NAL_VPS)
|
||||
has_vps = 1;
|
||||
else if (nut == NAL_SPS)
|
||||
has_sps = 1;
|
||||
else if (nut == NAL_PPS)
|
||||
has_pps = 1;
|
||||
else if ((nut != NAL_SEI_PREFIX || has_pps) &&
|
||||
nut != NAL_AUD) {
|
||||
if (has_vps && has_sps) {
|
||||
while (ptr - 4 > buf && ptr[-5] == 0)
|
||||
ptr--;
|
||||
return ptr - 4 - buf;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user