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

Reply via email to