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".