For incoming packets from WAV. Signed-off-by: Zane van Iperen <z...@zanevaniperen.com> --- libavcodec/adpcm.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index f7da3dcf89..fef1e6714c 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -880,7 +880,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, } case AV_CODEC_ID_ADPCM_SWF: { - int buf_bits = buf_size * 8 - 2; + int buf_bits = (avctx->block_align ? avctx->block_align : buf_size) * 8 - 2; int nbits = (bytestream2_get_byte(gb) >> 6) + 2; int block_hdr_size = 22 * ch; int block_size = block_hdr_size + nbits * ch * 4095; @@ -889,6 +889,9 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, nb_samples = nblocks * 4096; if (bits_left >= block_hdr_size) nb_samples += 1 + (bits_left - block_hdr_size) / (nbits * ch); + + if (avctx->block_align) + nb_samples *= buf_size / avctx->block_align; break; } case AV_CODEC_ID_ADPCM_THP: @@ -1767,9 +1770,17 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, } break; case AV_CODEC_ID_ADPCM_SWF: - adpcm_swf_decode(avctx, buf, buf_size, samples); + { + const int nb_blocks = avctx->block_align ? avpkt->size / avctx->block_align : 1; + const int block_size = avctx->block_align ? avctx->block_align : avpkt->size; + + for (int block = 0; block < nb_blocks; block++) { + adpcm_swf_decode(avctx, buf + block * block_size, block_size, samples); + samples += nb_samples / nb_blocks; + } bytestream2_seek(&gb, 0, SEEK_END); break; + } case AV_CODEC_ID_ADPCM_YAMAHA: for (n = nb_samples >> (1 - st); n > 0; n--) { int v = bytestream2_get_byteu(&gb); -- 2.25.4 _______________________________________________ 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".