On Fri, Sep 18, 2020 at 12:16:18PM +0200, Andreas Rheinhardt wrote: > Paul B Mahol: > > Improves decoding speed by 24x > > > > Signed-off-by: Paul B Mahol <one...@gmail.com> > > --- > > libavformat/adxdec.c | 23 +++++++++++++++-------- > > 1 file changed, 15 insertions(+), 8 deletions(-) > > > > diff --git a/libavformat/adxdec.c b/libavformat/adxdec.c > > index ccd5049acd..0e4c251cfc 100644 > > --- a/libavformat/adxdec.c > > +++ b/libavformat/adxdec.c > > @@ -53,6 +53,9 @@ static int adx_read_packet(AVFormatContext *s, AVPacket > > *pkt) > > AVCodecParameters *par = s->streams[0]->codecpar; > > int ret, size; > > > > + if (avio_feof(s->pb)) > > + return AVERROR_EOF; > > + > > if (par->channels <= 0) { > > av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", > > par->channels); > > return AVERROR_INVALIDDATA; > > @@ -63,16 +66,20 @@ static int adx_read_packet(AVFormatContext *s, AVPacket > > *pkt) > > pkt->pos = avio_tell(s->pb); > > pkt->stream_index = 0; > > > > - ret = av_get_packet(s->pb, pkt, size); > > - if (ret != size) { > > - return ret < 0 ? ret : AVERROR(EIO); > > - } > > - if (AV_RB16(pkt->data) & 0x8000) { > > - return AVERROR_EOF; > > + ret = av_get_packet(s->pb, pkt, size * 128); > > + if (ret < 0) > > + return ret; > > + if ((ret % size) && ret >= size) { > > So if ret < size you don't set the corrupt flag. Why?
Because data, that is not gonna be used at all, is discarded, instead of pointlessly being passed to decoder and there errored out. This happens at every single eof. > > > + size = ret - (ret % size); > > + av_shrink_packet(pkt, size); > > + pkt->flags &= ~AV_PKT_FLAG_CORRUPT; > > + } else { > > + size = ret; > > } > > + > > pkt->size = size; > > This line makes no sense any more: If the first branch above is taken, > av_shrink_packet() will already set the size; in the other branch, > av_get_packet() already did. Removed that line locally. > > > - pkt->duration = 1; > > - pkt->pts = (pkt->pos - c->header_size) / size; > > + pkt->duration = size / (BLOCK_SIZE * par->channels); > > + pkt->pts = (pkt->pos - c->header_size) / (BLOCK_SIZE * > > par->channels); > > > > return 0; > > } > > > > _______________________________________________ > 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". _______________________________________________ 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".