On 16/03/16 23:41, Hendrik Leppkes wrote: > On Wed, Mar 16, 2016 at 9:37 PM, Mark Thompson <s...@jkqxz.net> wrote: >> --- >> libavcodec/hevc_parse.c | 14 ++++++++++++++ >> 1 file changed, 14 insertions(+) >> >> diff --git a/libavcodec/hevc_parse.c b/libavcodec/hevc_parse.c >> index 63ed84a..8c629ff 100644 >> --- a/libavcodec/hevc_parse.c >> +++ b/libavcodec/hevc_parse.c >> @@ -227,6 +227,20 @@ int ff_hevc_split_packet(HEVCContext *s, HEVCPacket >> *pkt, const uint8_t *buf, in >> return AVERROR_INVALIDDATA; >> } >> } else { >> + if (pkt->nals > 0) { >> + // Discard arbtrarily many trailing_zero_8bits before the >> + // start code of the next NAL unit. >> + while (buf[0] == 0 && buf[1] == 0 && buf[2] == 0) { >> + ++buf; >> + --length; >> + if (length < 4) >> + break; >> + } >> + if (length < 4) { >> + // There are only zeroes left, so no more NAL units >> here. >> + break; >> + } >> + } >> /* search start code */ >> while (buf[0] != 0 || buf[1] != 0 || buf[2] != 1) { >> ++buf; > > I'm slightly confused, wouldn't the loop right after skip over the > zeroes until it finds a valid start code? > It essentially does the same on a cursory look.
Yes - it doesn't change the scanning process, but it does change the return value because in the current code we return failure (and give up on the packet entirely) if there aren't any more NAL units to be found. We actually want to return success if we already have at least one NAL unit and then there are zeroes to the end of the packet. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel