On 9/12/2020 7:33 PM, Paul B Mahol wrote:
> +static int aax_read_packet(AVFormatContext *s, AVPacket *pkt)
> +{
> +    AAXContext *a = s->priv_data;
> +    AVCodecParameters *par = s->streams[0]->codecpar;
> +    AVIOContext *pb = s->pb;
> +    const int size = 18 * par->channels;
> +    int ret, extradata_size = 0;
> +    uint8_t *dst = NULL;
> +
> +    if (avio_feof(pb))
> +        return AVERROR_EOF;
> +
> +    if (avio_tell(pb) >= a->segments[a->current_segment].offset +
> +                         a->segments[a->current_segment].size) {
> +        if (a->current_segment + 1 == a->nb_segments)
> +            return AVERROR_EOF;
> +        a->last_segment_pts = a->prev_pts;
> +        a->current_segment++;
> +        avio_seek(pb, a->segments[a->current_segment].offset, SEEK_SET);
> +        if (avio_rb16(pb) != 0x8000)
> +            return AVERROR_INVALIDDATA;
> +        extradata_size = avio_rb16(pb) + 4;
> +        avio_seek(pb, -4, SEEK_CUR);
> +        if (extradata_size < 12)
> +            return AVERROR_INVALIDDATA;
> +        dst = av_packet_new_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, 
> extradata_size);
> +        if (!dst)
> +            return AVERROR(ENOMEM);
> +        avio_read(pb, dst, extradata_size);
> +    }
> +
> +    pkt->pos = avio_tell(pb);
> +    ret = av_get_packet(pb, pkt, size);

This will call av_init_packet() internally, meaning the side data you
allocated above will be lost...

> +    pkt->duration = 1;
> +    pkt->stream_index = 0;
> +    pkt->pts = a->last_segment_pts + ((pkt->pos - 
> a->segments[a->current_segment].offset) / size);
> +    a->prev_pts = pkt->pts;
> +
> +    if (dst) {
> +        ret = av_packet_add_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, dst, 
> extradata_size);

...and then readded by this.

Just replace the av_packet_new_side_data() call above with an
av_mallocz() one.

> +        if (ret < 0)
> +            return ret;
> +    }
> +
> +    return ret;
> +}
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to