Commit 0f673519 authored by Rodger Combs's avatar Rodger Combs Committed by Paul B Mahol

lavc/adpcm: THP: don't use the ADPC/SEEK table when not seeking

This is almost certainly closer to how the actual Nintendo players work,
and fixes some output pops in files with blank ADPC/SEEK tables (like
those from brawlcustommusic).
parent d2ce1009
......@@ -86,6 +86,7 @@ static const int swf_index_tables[4][16] = {
typedef struct ADPCMDecodeContext {
ADPCMChannelStatus status[10];
int vqa_version; /**< VQA version. Used for ADPCM_IMA_WS */
int has_status;
} ADPCMDecodeContext;
static av_cold int adpcm_decode_init(AVCodecContext * avctx)
......@@ -1455,10 +1456,15 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
for (n = 0; n < 16; n++)
table[i][n] = THP_GET16(gb);
/* Initialize the previous sample. */
for (i = 0; i < avctx->channels; i++) {
c->status[i].sample1 = THP_GET16(gb);
c->status[i].sample2 = THP_GET16(gb);
if (!c->has_status) {
/* Initialize the previous sample. */
for (i = 0; i < avctx->channels; i++) {
c->status[i].sample1 = THP_GET16(gb);
c->status[i].sample2 = THP_GET16(gb);
}
c->has_status = 1;
} else {
bytestream2_skip(&gb, avctx->channels * 4);
}
}
......@@ -1562,6 +1568,12 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data,
return bytestream2_tell(&gb);
}
static void adpcm_flush(AVCodecContext *avctx)
{
ADPCMDecodeContext *c = avctx->priv_data;
c->has_status = 0;
}
static const enum AVSampleFormat sample_fmts_s16[] = { AV_SAMPLE_FMT_S16,
AV_SAMPLE_FMT_NONE };
......@@ -1580,6 +1592,7 @@ AVCodec ff_ ## name_ ## _decoder = { \
.priv_data_size = sizeof(ADPCMDecodeContext), \
.init = adpcm_decode_init, \
.decode = adpcm_decode_frame, \
.flush = adpcm_flush, \
.capabilities = CODEC_CAP_DR1, \
.sample_fmts = sample_fmts_, \
}
......
#tb 0: 1/32000
0, 0, 0, 1078, 4312, 0x469714f6
0, 1078, 1078, 1064, 4256, 0xe03dd882
0, 2142, 2142, 1078, 4312, 0x46b901f7
0, 3220, 3220, 1064, 4256, 0x8d4a54e4
0, 4284, 4284, 1064, 4256, 0xfd616b67
0, 5348, 5348, 1078, 4312, 0xefe62302
0, 6426, 6426, 1064, 4256, 0xab11684e
0, 7490, 7490, 1064, 4256, 0xb4b3feb8
0, 8554, 8554, 1078, 4312, 0x71db6461
0, 9632, 9632, 1064, 4256, 0x090e5efa
0, 10696, 10696, 1064, 4256, 0x36f49c28
0, 11760, 11760, 1078, 4312, 0x0fe3d262
0, 12838, 12838, 1064, 4256, 0x199ce269
0, 13902, 13902, 1064, 4256, 0x98342d05
0, 14966, 14966, 1078, 4312, 0xb6fb7ebe
0, 16044, 16044, 1064, 4256, 0x033dd562
0, 17108, 17108, 1064, 4256, 0xc2cc17e0
0, 18172, 18172, 1078, 4312, 0x4bb3ff50
0, 19250, 19250, 1064, 4256, 0x6f2671ef
0, 20314, 20314, 1064, 4256, 0x5a337bf4
0, 21378, 21378, 1078, 4312, 0xa71f6967
0, 22456, 22456, 1064, 4256, 0x48084aa9
0, 23520, 23520, 1064, 4256, 0x3cce4218
0, 24584, 24584, 1078, 4312, 0xcbb8f73d
0, 25662, 25662, 1064, 4256, 0x36825021
0, 26726, 26726, 1064, 4256, 0xeae036c6
0, 27790, 27790, 1078, 4312, 0x0d650ac6
0, 28868, 28868, 1064, 4256, 0xfba4f58c
0, 29932, 29932, 1064, 4256, 0x54311f9b
0, 30996, 30996, 1078, 4312, 0x286386b3
0, 32074, 32074, 1064, 4256, 0x871896de
0, 33138, 33138, 1064, 4256, 0x9ef9f970
0, 34202, 34202, 1078, 4312, 0xf9ae97f1
0, 35280, 35280, 1064, 4256, 0x0ad0d765
0, 36344, 36344, 1064, 4256, 0x8e6aa9b5
0, 37408, 37408, 1078, 4312, 0x8362787b
0, 38486, 38486, 1064, 4256, 0x9b6a5d9c
0, 39550, 39550, 1064, 4256, 0xfb715d8f
0, 40614, 40614, 1078, 4312, 0x02bd8075
0, 41692, 41692, 1064, 4256, 0x428eb932
0, 42756, 42756, 1064, 4256, 0x17ea8c94
0, 43820, 43820, 1078, 4312, 0xb3e761d7
0, 44898, 44898, 1064, 4256, 0x0919755a
0, 45962, 45962, 1064, 4256, 0x5e520edd
0, 47026, 47026, 1078, 4312, 0x69aa070e
0, 48104, 48104, 1064, 4256, 0xf8192f7d
0, 49168, 49168, 1064, 4256, 0xaad4475c
0, 50232, 50232, 1078, 4312, 0x0cabcfcb
0, 51310, 51310, 1064, 4256, 0x952f0f96
0, 52374, 52374, 1064, 4256, 0x1b805a0c
0, 53438, 53438, 1078, 4312, 0x93043d2a
0, 54516, 54516, 1064, 4256, 0x38b99e44
0, 55580, 55580, 1064, 4256, 0x60cc52ff
0, 56644, 56644, 1078, 4312, 0x6a875849
0, 57722, 57722, 1064, 4256, 0xd08d6d0e
0, 58786, 58786, 1064, 4256, 0x36bfe48e
0, 59850, 59850, 1078, 4312, 0x795c6134
0, 60928, 60928, 1064, 4256, 0x4fd79583
0, 61992, 61992, 1064, 4256, 0x65e2ab9f
0, 63056, 63056, 1078, 4312, 0xedeede4a
0, 64134, 64134, 1064, 4256, 0x097e0d09
0, 65198, 65198, 1064, 4256, 0x58afa133
0, 66262, 66262, 1078, 4312, 0x442525b5
0, 67340, 67340, 1064, 4256, 0x6645c591
0, 68404, 68404, 1064, 4256, 0xb0dd948a
0, 69468, 69468, 1078, 4312, 0x12684e69
0, 70546, 70546, 1064, 4256, 0xb45098e3
0, 71610, 71610, 1064, 4256, 0xb6d3c61c
0, 72674, 72674, 1078, 4312, 0xb46b5b22
0, 73752, 73752, 1064, 4256, 0x9a556830
0, 74816, 74816, 1064, 4256, 0x67ca2b35
0, 1078, 1078, 1064, 4256, 0x6ca28f25
0, 2142, 2142, 1078, 4312, 0xd466f806
0, 3220, 3220, 1064, 4256, 0x59d69463
0, 4284, 4284, 1064, 4256, 0xf4805f42
0, 5348, 5348, 1078, 4312, 0x579f22aa
0, 6426, 6426, 1064, 4256, 0xbdc88f45
0, 7490, 7490, 1064, 4256, 0xc71ebf04
0, 8554, 8554, 1078, 4312, 0xc1c86e49
0, 9632, 9632, 1064, 4256, 0x96365506
0, 10696, 10696, 1064, 4256, 0xaf59bfe5
0, 11760, 11760, 1078, 4312, 0x4f00811d
0, 12838, 12838, 1064, 4256, 0x0d8a243a
0, 13902, 13902, 1064, 4256, 0x98fc3477
0, 14966, 14966, 1078, 4312, 0xbf327cc1
0, 16044, 16044, 1064, 4256, 0xdc52d5bd
0, 17108, 17108, 1064, 4256, 0x29eb1ca6
0, 18172, 18172, 1078, 4312, 0xf647067f
0, 19250, 19250, 1064, 4256, 0x4f4b70db
0, 20314, 20314, 1064, 4256, 0xa73b7e5d
0, 21378, 21378, 1078, 4312, 0x1f5464ff
0, 22456, 22456, 1064, 4256, 0xcd7a46f2
0, 23520, 23520, 1064, 4256, 0x7e203f8e
0, 24584, 24584, 1078, 4312, 0x82e5f5ee
0, 25662, 25662, 1064, 4256, 0xfbb65050
0, 26726, 26726, 1064, 4256, 0x474d33ff
0, 27790, 27790, 1078, 4312, 0x737a0586
0, 28868, 28868, 1064, 4256, 0xf677f86a
0, 29932, 29932, 1064, 4256, 0xe35919f9
0, 30996, 30996, 1078, 4312, 0x74f382b2
0, 32074, 32074, 1064, 4256, 0xe10095c1
0, 33138, 33138, 1064, 4256, 0x5af2f855
0, 34202, 34202, 1078, 4312, 0x55239722
0, 35280, 35280, 1064, 4256, 0xf904da45
0, 36344, 36344, 1064, 4256, 0xdd8ca94f
0, 37408, 37408, 1078, 4312, 0xcc7a76f6
0, 38486, 38486, 1064, 4256, 0x67aa5b74
0, 39550, 39550, 1064, 4256, 0x6559608f
0, 40614, 40614, 1078, 4312, 0x7d297e71
0, 41692, 41692, 1064, 4256, 0x15c2b2e3
0, 42756, 42756, 1064, 4256, 0x0bf2896c
0, 43820, 43820, 1078, 4312, 0x17f75da7
0, 44898, 44898, 1064, 4256, 0x90b27489
0, 45962, 45962, 1064, 4256, 0xcc7d0de4
0, 47026, 47026, 1078, 4312, 0x0c8a0586
0, 48104, 48104, 1064, 4256, 0x184a2e34
0, 49168, 49168, 1064, 4256, 0xfe354354
0, 50232, 50232, 1078, 4312, 0x4e3bd1c1
0, 51310, 51310, 1064, 4256, 0x37a50e20
0, 52374, 52374, 1064, 4256, 0x2556584a
0, 53438, 53438, 1078, 4312, 0x380f3466
0, 54516, 54516, 1064, 4256, 0x25b4a1db
0, 55580, 55580, 1064, 4256, 0x77f15645
0, 56644, 56644, 1078, 4312, 0x278b5864
0, 57722, 57722, 1064, 4256, 0xcf2e701d
0, 58786, 58786, 1064, 4256, 0x8924e60f
0, 59850, 59850, 1078, 4312, 0x54db60f9
0, 60928, 60928, 1064, 4256, 0x365993ef
0, 61992, 61992, 1064, 4256, 0x37e4a996
0, 63056, 63056, 1078, 4312, 0x0b9bda87
0, 64134, 64134, 1064, 4256, 0x2eed0d61
0, 65198, 65198, 1064, 4256, 0xa826a02f
0, 66262, 66262, 1078, 4312, 0x9620255e
0, 67340, 67340, 1064, 4256, 0x0f3cc6f2
0, 68404, 68404, 1064, 4256, 0x14d89149
0, 69468, 69468, 1078, 4312, 0x87c74a3d
0, 70546, 70546, 1064, 4256, 0x73ca9dd9
0, 71610, 71610, 1064, 4256, 0x8419cab6
0, 72674, 72674, 1078, 4312, 0x7d1c59ec
0, 73752, 73752, 1064, 4256, 0xbf927052
0, 74816, 74816, 1064, 4256, 0x4a422bc3
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment