Skip to content

Commit

Permalink
hevc - fix split function of parser
Browse files Browse the repository at this point in the history
  • Loading branch information
FernetMenta committed Sep 1, 2015
1 parent 63a3d51 commit 84643cf
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions libavcodec/hevc_parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 84643cf

Please sign in to comment.