[FFmpeg-cvslog] adpcm: consume remainder after consuming XA chunks

Misty De Meo git at videolan.org
Sat Jan 6 04:16:36 EET 2018


ffmpeg | branch: master | Misty De Meo <mistydemeo at gmail.com> | Fri Jan  5 20:06:48 2018 +1100| [94e6b5ac3914c391912b717e6aba2cb40cc717b7] | committer: Michael Niedermayer

adpcm: consume remainder after consuming XA chunks

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=94e6b5ac3914c391912b717e6aba2cb40cc717b7
---

 libavcodec/adpcm.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c
index be206c55ba..cd3bbd33c2 100644
--- a/libavcodec/adpcm.c
+++ b/libavcodec/adpcm.c
@@ -1115,6 +1115,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
         int16_t *out1 = samples_p[1];
         int samples_per_block = 28 * (3 - avctx->channels) * 4;
         int sample_offset = 0;
+        int bytes_remaining;
         while (bytestream2_get_bytes_left(&gb) >= 128) {
             if ((ret = xa_decode(avctx, out0, out1, buf + bytestream2_tell(&gb),
                                  &c->status[0], &c->status[1],
@@ -1123,6 +1124,12 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
             bytestream2_skipu(&gb, 128);
             sample_offset += samples_per_block;
         }
+        /* Less than a full block of data left, e.g. when reading from
+         * 2324 byte per sector XA; the remainder is padding */
+        bytes_remaining = bytestream2_get_bytes_left(&gb);
+        if (bytes_remaining > 0) {
+            bytestream2_skip(&gb, bytes_remaining);
+        }
         break;
     }
     case AV_CODEC_ID_ADPCM_IMA_EA_EACS:



More information about the ffmpeg-cvslog mailing list