I fail to see how useful this is. Unless you plan to write encoder it is not useful.
On 3/10/20, Zane van Iperen <[email protected]> wrote: > Signed-off-by: Zane van Iperen <[email protected]> > --- > libavcodec/adpcm.c | 67 +++++++++++------------------------------ > libavcodec/adpcm_data.c | 29 ++++++++++++++++++ > libavcodec/adpcm_data.h | 4 +++ > 3 files changed, 51 insertions(+), 49 deletions(-) > > diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c > index c69cac3379..c27d7103f2 100644 > --- a/libavcodec/adpcm.c > +++ b/libavcodec/adpcm.c > @@ -60,37 +60,6 @@ > * readstr http://www.geocities.co.jp/Playtown/2004/ > */ > > -/* These are for CD-ROM XA ADPCM */ > -static const int8_t xa_adpcm_table[5][2] = { > - { 0, 0 }, > - { 60, 0 }, > - { 115, -52 }, > - { 98, -55 }, > - { 122, -60 } > -}; > - > -static const int16_t ea_adpcm_table[] = { > - 0, 240, 460, 392, > - 0, 0, -208, -220, > - 0, 1, 3, 4, > - 7, 8, 10, 11, > - 0, -1, -3, -4 > -}; > - > -// padded to zero where table size is less then 16 > -static const int8_t swf_index_tables[4][16] = { > - /*2*/ { -1, 2 }, > - /*3*/ { -1, -1, 2, 4 }, > - /*4*/ { -1, -1, -1, -1, 2, 4, 6, 8 }, > - /*5*/ { -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16 } > -}; > - > -static const int8_t zork_index_table[8] = { > - -1, -1, -1, 1, 4, 7, 10, 12, > -}; > - > -/* end of tables */ > - > typedef struct ADPCMDecodeContext { > ADPCMChannelStatus status[14]; > int vqa_version; /**< VQA version. Used for ADPCM_IMA_WS > */ > @@ -483,7 +452,7 @@ static inline int16_t > adpcm_zork_expand_nibble(ADPCMChannelStatus *c, uint8_t ni > sample += c->predictor; > sample = av_clip_int16(sample); > > - index += zork_index_table[(nibble >> 4) & 7]; > + index += ff_adpcm_zork_index_table[(nibble >> 4) & 7]; > index = av_clip(index, 0, 88); > > c->predictor = sample; > @@ -510,12 +479,12 @@ static int xa_decode(AVCodecContext *avctx, int16_t > *out0, int16_t *out1, > for(i=0;i<4;i++) { > shift = 12 - (in[4+i*2] & 15); > filter = in[4+i*2] >> 4; > - if (filter >= FF_ARRAY_ELEMS(xa_adpcm_table)) { > + if (filter >= FF_ARRAY_ELEMS(ff_adpcm_xa_table)) { > avpriv_request_sample(avctx, "unknown XA-ADPCM filter %d", > filter); > filter=0; > } > - f0 = xa_adpcm_table[filter][0]; > - f1 = xa_adpcm_table[filter][1]; > + f0 = ff_adpcm_xa_table[filter][0]; > + f1 = ff_adpcm_xa_table[filter][1]; > > s_1 = left->sample1; > s_2 = left->sample2; > @@ -539,13 +508,13 @@ static int xa_decode(AVCodecContext *avctx, int16_t > *out0, int16_t *out1, > > shift = 12 - (in[5+i*2] & 15); > filter = in[5+i*2] >> 4; > - if (filter >= FF_ARRAY_ELEMS(xa_adpcm_table)) { > + if (filter >= FF_ARRAY_ELEMS(ff_adpcm_xa_table)) { > avpriv_request_sample(avctx, "unknown XA-ADPCM filter %d", > filter); > filter=0; > } > > - f0 = xa_adpcm_table[filter][0]; > - f1 = xa_adpcm_table[filter][1]; > + f0 = ff_adpcm_xa_table[filter][0]; > + f1 = ff_adpcm_xa_table[filter][1]; > > for(j=0;j<28;j++) { > d = in[16+i+j*4]; > @@ -585,7 +554,7 @@ static void adpcm_swf_decode(AVCodecContext *avctx, > const uint8_t *buf, int buf_ > > //read bits & initial values > nb_bits = get_bits(&gb, 2)+2; > - table = swf_index_tables[nb_bits-2]; > + table = ff_adpcm_swf_index_tables[nb_bits-2]; > k0 = 1 << (nb_bits-2); > signmask = 1 << (nb_bits-1); > > @@ -1409,10 +1378,10 @@ static int adpcm_decode_frame(AVCodecContext *avctx, > void *data, > > for (count1 = 0; count1 < nb_samples / 28; count1++) { > int byte = bytestream2_get_byteu(&gb); > - coeff1l = ea_adpcm_table[ byte >> 4 ]; > - coeff2l = ea_adpcm_table[(byte >> 4 ) + 4]; > - coeff1r = ea_adpcm_table[ byte & 0x0F]; > - coeff2r = ea_adpcm_table[(byte & 0x0F) + 4]; > + coeff1l = ff_adpcm_ea_table[ byte >> 4 ]; > + coeff2l = ff_adpcm_ea_table[(byte >> 4 ) + 4]; > + coeff1r = ff_adpcm_ea_table[ byte & 0x0F]; > + coeff2r = ff_adpcm_ea_table[(byte & 0x0F) + 4]; > > byte = bytestream2_get_byteu(&gb); > shift_left = 20 - (byte >> 4); > @@ -1450,7 +1419,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, > void *data, > for(channel = 0; channel < avctx->channels; channel++) { > int byte = bytestream2_get_byteu(&gb); > for (i=0; i<2; i++) > - coeff[channel][i] = ea_adpcm_table[(byte >> 4) + 4*i]; > + coeff[channel][i] = ff_adpcm_ea_table[(byte >> 4) + 4*i]; > shift[channel] = 20 - (byte & 0x0F); > } > for (count1 = 0; count1 < nb_samples / 2; count1++) { > @@ -1515,8 +1484,8 @@ static int adpcm_decode_frame(AVCodecContext *avctx, > void *data, > for (count2=0; count2<28; count2++) > *samplesC++ = > sign_extend(bytestream2_get_be16(&gb), 16); > } else { > - coeff1 = ea_adpcm_table[ byte >> 4 ]; > - coeff2 = ea_adpcm_table[(byte >> 4) + 4]; > + coeff1 = ff_adpcm_ea_table[ byte >> 4 ]; > + coeff2 = ff_adpcm_ea_table[(byte >> 4) + 4]; > shift = 20 - (byte & 0x0F); > > for (count2=0; count2<28; count2++) { > @@ -1561,7 +1530,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, > void *data, > for (n = 0; n < 4; n++, s += 32) { > int val = sign_extend(bytestream2_get_le16u(&gb), 16); > for (i=0; i<2; i++) > - coeff[i][n] = ea_adpcm_table[(val&0x0F)+4*i]; > + coeff[i][n] = ff_adpcm_ea_table[(val&0x0F)+4*i]; > s[0] = val & ~0x0F; > > val = sign_extend(bytestream2_get_le16u(&gb), 16); > @@ -1882,7 +1851,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, > void *data, > filter = bytestream2_get_byteu(&gb); > shift = filter & 0xf; > filter = filter >> 4; > - if (filter >= FF_ARRAY_ELEMS(xa_adpcm_table)) > + if (filter >= FF_ARRAY_ELEMS(ff_adpcm_xa_table)) > return AVERROR_INVALIDDATA; > flag = bytestream2_get_byteu(&gb); > > @@ -1899,7 +1868,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, > void *data, > } > > scale = scale << 12; > - sample = (int)((scale >> shift) + > (c->status[channel].sample1 * xa_adpcm_table[filter][0] + > c->status[channel].sample2 * xa_adpcm_table[filter][1]) / 64); > + sample = (int)((scale >> shift) + > (c->status[channel].sample1 * ff_adpcm_xa_table[filter][0] + > c->status[channel].sample2 * ff_adpcm_xa_table[filter][1]) / 64); > } > *samples++ = av_clip_int16(sample); > c->status[channel].sample2 = > c->status[channel].sample1; > diff --git a/libavcodec/adpcm_data.c b/libavcodec/adpcm_data.c > index 4cce0a5857..d8b488197e 100644 > --- a/libavcodec/adpcm_data.c > +++ b/libavcodec/adpcm_data.c > @@ -177,3 +177,32 @@ const int16_t ff_adpcm_mtaf_stepsize[32][16] = { > { 424, 1273, 2121, 2970, 3819, 4668, 5516, 6365, > -424, -1273, -2121, -2970, -3819, -4668, -5516, -6365, }, > }; > + > +/* These are for CD-ROM XA ADPCM */ > +const int8_t ff_adpcm_xa_table[5][2] = { > + { 0, 0 }, > + { 60, 0 }, > + { 115, -52 }, > + { 98, -55 }, > + { 122, -60 } > +}; > + > +const int16_t ff_adpcm_ea_table[20] = { > + 0, 240, 460, 392, > + 0, 0, -208, -220, > + 0, 1, 3, 4, > + 7, 8, 10, 11, > + 0, -1, -3, -4 > +}; > + > +// padded to zero where table size is less then 16 > +const int8_t ff_adpcm_swf_index_tables[4][16] = { > + /*2*/ { -1, 2 }, > + /*3*/ { -1, -1, 2, 4 }, > + /*4*/ { -1, -1, -1, -1, 2, 4, 6, 8 }, > + /*5*/ { -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16 } > +}; > + > +const int8_t ff_adpcm_zork_index_table[8] = { > + -1, -1, -1, 1, 4, 7, 10, 12, > +}; > diff --git a/libavcodec/adpcm_data.h b/libavcodec/adpcm_data.h > index 5a687131d8..601271e48a 100644 > --- a/libavcodec/adpcm_data.h > +++ b/libavcodec/adpcm_data.h > @@ -42,5 +42,9 @@ extern const int16_t ff_adpcm_yamaha_indexscale[]; > extern const int8_t ff_adpcm_yamaha_difflookup[]; > extern const int16_t ff_adpcm_afc_coeffs[2][16]; > extern const int16_t ff_adpcm_mtaf_stepsize[32][16]; > +extern const int8_t ff_adpcm_xa_table[5][2]; > +extern const int16_t ff_adpcm_ea_table[20]; > +extern const int8_t ff_adpcm_swf_index_tables[4][16]; > +extern const int8_t ff_adpcm_zork_index_table[8]; > > #endif /* AVCODEC_ADPCM_DATA_H */ > -- > 2.17.1 > > > _______________________________________________ > ffmpeg-devel mailing list > [email protected] > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > [email protected] with subject "unsubscribe". _______________________________________________ ffmpeg-devel mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
