yes, I noticed, when I tried to figure out why
http://samples.ffmpeg.org/mplayer-bugs/bug821/bug821-2.asf  wasn't
working, the number was funnny indeed

On Thu, Jul 16, 2015 at 2:55 PM, Kostya Shishkov
<[email protected]> wrote:
> On Thu, Jul 16, 2015 at 01:55:47PM +0200, Luca Barbato wrote:
>> On 16/07/15 12:14, Alexandra Hájková wrote:
>> > ---
>> >  libavformat/asfdec.c | 24 +++++++++++++-----------
>> >  1 file changed, 13 insertions(+), 11 deletions(-)
>> >
>> > diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
>> > index 7458e19..7146dcc 100644
>> > --- a/libavformat/asfdec.c
>> > +++ b/libavformat/asfdec.c
>> > @@ -1123,17 +1123,19 @@ static int 
>> > asf_read_multiple_payload(AVFormatContext *s, AVPacket *pkt,
>> >          if ((ret = asf_read_subpayload(s, pkt, 1)) < 0)
>> >              return ret;
>> >      } else {
>> > -        if (!asf_pkt->data_size) {
>> > -            asf_pkt->data_size = asf_pkt->size_left = avio_rl32(pb); // 
>> > read media object size
>> > -            if (asf_pkt->data_size <= 0)
>> > -                return AVERROR_EOF;
>> > -            if ((ret = av_new_packet(&asf_pkt->avpkt, 
>> > asf_pkt->data_size)) < 0)
>> > -                return ret;
>> > -        } else
>> > -            avio_skip(pb, 4); // reading of media object size is already 
>> > done
>> > -        asf_pkt->dts = avio_rl32(pb); // read presentation time
>> > -        if ((asf->rep_data_len - 8) > 0)
>> > -            avio_skip(pb, asf->rep_data_len - 8); // skip replicated data
>> > +        if (asf->rep_data_len) {
>> > +            if (!asf_pkt->data_size) {
>> > +                asf_pkt->data_size = asf_pkt->size_left = avio_rl32(pb); 
>> > // read media object size
>> > +                if (asf_pkt->data_size <= 0)
>> > +                    return AVERROR_EOF;
>> > +                if ((ret = av_new_packet(&asf_pkt->avpkt, 
>> > asf_pkt->data_size)) < 0)
>> > +                    return ret;
>> > +            } else
>> > +                avio_skip(pb, 4); // reading of media object size is 
>> > already done
>> > +            asf_pkt->dts = avio_rl32(pb); // read presentation time
>> > +            if (asf->rep_data_len && ((asf->rep_data_len - 8) > 0))
>> > +                avio_skip(pb, asf->rep_data_len - 8); // skip replicated 
>> > data
>> > +        }
>> >          pay_len = avio_rl16(pb); // payload length should be WORD
>> >          if (pay_len > asf->packet_size) {
>> >              av_log(s, AV_LOG_ERROR,
>> >
>>
>> Would be probably a good idea spin that block in a stand alone function.
>
> Also has anyone noticed that rep_data_len is unsigned and thus
> (asf->rep_data_len - 8) > 0 might behave funny?
> _______________________________________________
> libav-devel mailing list
> [email protected]
> https://lists.libav.org/mailman/listinfo/libav-devel
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to