X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fpcm.c;h=1effc0b6f8d60c80d15ec4ebfc6e0461fdc9395b;hb=257a83b969157eb76c18158a4e503e908d8b1125;hp=806f91b6b135e167637c90143a110cfdceb082de;hpb=d168ff70ea41234b01c21e2d19151e9db3a21f90;p=ffmpeg diff --git a/libavformat/pcm.c b/libavformat/pcm.c index 806f91b6b13..1effc0b6f8d 100644 --- a/libavformat/pcm.c +++ b/libavformat/pcm.c @@ -28,13 +28,24 @@ int ff_pcm_read_packet(AVFormatContext *s, AVPacket *pkt) { + AVCodecParameters *par = s->streams[0]->codecpar; int ret, size; - size= RAW_SAMPLES*s->streams[0]->codecpar->block_align; - if (size <= 0) + if (par->block_align <= 0) return AVERROR(EINVAL); - ret= av_get_packet(s->pb, pkt, size); + /* + * Compute read size to complete a read every 62ms. + * Clamp to RAW_SAMPLES if larger. + */ + size = FFMAX(par->sample_rate/25, 1); + if (par->block_align <= INT_MAX / RAW_SAMPLES) { + size = FFMIN(size, RAW_SAMPLES) * par->block_align; + } else { + size = par->block_align; + } + + ret = av_get_packet(s->pb, pkt, size); pkt->flags &= ~AV_PKT_FLAG_CORRUPT; pkt->stream_index = 0;