[FFmpeg-devel] [PATCH] avcodec/gifdec: skip data lzw consumed

nihui shuizhuyuanluo at 126.com
Sat Nov 7 16:13:42 CET 2015


avcodec_decode_video2 should return the number of bytes used if frame decompressed correctly
the current gif decoder just returns the number of bytes of header part of one frame, not including the lzw compressed image data bytes, which should be included too

as one avpacket may contain multiple picture frame
the following usecase will fail on the second call of decode function (nused is smaller than expected for gif animation)

// pkt is a valid AVPacket from av_read_frame loop
while (pkt.size > 0)
{
    int nused = avcodec_decode_video2( ..... );
    if (nused < 0)
    {
        // deocde error
    }
    ...... // process here
    ......
    pkt.data += nused;
    pkt.size -= nused;
}


best wishes
nihui

At 2015-11-07 22:35:06, "Paul B Mahol" <onemda at gmail.com> wrote:
>On 11/7/15, Ni Hui <shuizhuyuanluo at 126.com> wrote:
>> fix the return code value of avcodec_decode_video2 for gif decoding, which
>> should be the consumed data length.
>>
>> ---
>>  libavcodec/gifdec.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c
>> index 9f2e6eb..5bcb176 100644
>> --- a/libavcodec/gifdec.c
>> +++ b/libavcodec/gifdec.c
>> @@ -295,6 +295,8 @@ static int gif_read_image(GifState *s, AVFrame *frame)
>>      /* read the garbage data until end marker is found */
>>      ff_lzw_decode_tail(s->lzw);
>>
>> +    bytestream2_skipu(&s->gb, bytestream2_get_bytes_left(&s->gb));
>> +
>>      /* Graphic Control Extension's scope is single frame.
>>       * Remove its influence. */
>>      s->transparent_color_index = -1;
>> --
>> 2.4.1
>>
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>
>Are there files this actually fixes?


More information about the ffmpeg-devel mailing list