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;
|
const uint8_t *ptr = buf, *end = buf + buf_size;
|
||||||
uint32_t state = -1;
|
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) {
|
while (ptr < end) {
|
||||||
ptr = avpriv_find_start_code(ptr, end, &state);
|
ptr = avpriv_find_start_code(ptr, end, &state);
|
||||||
if ((state >> 8) != START_CODE)
|
if ((state >> 8) != START_CODE)
|
||||||
break;
|
break;
|
||||||
nut = (state >> 1) & 0x3F;
|
nut = (state >> 1) & 0x3F;
|
||||||
if (nut >= NAL_VPS && nut <= NAL_PPS)
|
if (nut == NAL_VPS)
|
||||||
has_ps = 1;
|
has_vps = 1;
|
||||||
else if (has_ps)
|
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 ptr - 4 - buf;
|
||||||
else // no parameter set at the beginning of the stream
|
}
|
||||||
return 0;
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user