Message ID | 20200310131008.29859-1-zane@zanevaniperen.com |
---|---|
State | Withdrawn |
Headers | show |
Series | [FFmpeg-devel] avcodec/adpcm: consolidate tables into adpcm_data.c | expand |
Context | Check | Description |
---|---|---|
andriy/ffmpeg-patchwork | success | Make fate finished |
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 <zane@zanevaniperen.com> wrote: > Signed-off-by: Zane van Iperen <zane@zanevaniperen.com> > --- > 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 > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
On Tue, 10 Mar 2020 14:52:25 +0100 "Paul B Mahol" <onemda@gmail.com> wrote: > I fail to see how useful this is. > Unless you plan to write encoder it is not useful. > It was just to clean things up a bit by keeping them together. Otherwise, 'tis no matter. Zane
On Tue, Mar 10, 2020 at 14:15:26 +0000, Zane van Iperen wrote: > It was just to clean things up a bit by keeping them together. > Otherwise, 'tis no matter. Does it actually build? Nothing seems to depend on adpcm_data.o. Moritz
On Tue, 10 Mar 2020 15:47:08 +0100 "Moritz Barsnick" <barsnick@gmx.net> wrote: > On Tue, Mar 10, 2020 at 14:15:26 +0000, Zane van Iperen wrote: > > It was just to clean things up a bit by keeping them together. > > Otherwise, 'tis no matter. > > Does it actually build? Nothing seems to depend on adpcm_data.o. > > Moritz Yep, builds and tests fine on my machine. As for dependencies, seems there's 48 references to adpcm_data.o, all in libavcodec/Makefile: $ git grep adpcm_data\\.o libavcodec/ | wc -l 48 $ git grep adpcm_data\\.o libavcodec/ | cut -d':' -f1 | sort -u libavcodec/Makefile Zane
On Tue, Mar 10, 2020 at 15:10:39 +0000, Zane van Iperen wrote: > "Moritz Barsnick" <barsnick@gmx.net> wrote: > > Does it actually build? Nothing seems to depend on adpcm_data.o. > As for dependencies, seems there's 48 references to adpcm_data.o, all in > libavcodec/Makefile: Sorry, I actually missed that you didn't create that file, but just added to it. :-/ D'uh! Thanks, Moritz
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 */
Signed-off-by: Zane van Iperen <zane@zanevaniperen.com> --- libavcodec/adpcm.c | 67 +++++++++++------------------------------ libavcodec/adpcm_data.c | 29 ++++++++++++++++++ libavcodec/adpcm_data.h | 4 +++ 3 files changed, 51 insertions(+), 49 deletions(-)