Mercurial > mplayer.hg
changeset 27238:7aa646bb7589
Simplify and clamp coefficient index for MS ADPCM
author | reimar |
---|---|
date | Sat, 12 Jul 2008 10:08:40 +0000 |
parents | 6a283385441b |
children | 999b3eb48e78 |
files | libmpcodecs/ad_msadpcm.c |
diffstat | 1 files changed, 17 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpcodecs/ad_msadpcm.c Sat Jul 12 09:23:14 2008 +0000 +++ b/libmpcodecs/ad_msadpcm.c Sat Jul 12 10:08:40 2008 +0000 @@ -91,10 +91,21 @@ return CONTROL_UNKNOWN; } +static inline int check_coeff(uint8_t c) { + if (c > 6) { + mp_msg(MSGT_DECAUDIO, MSGL_WARN, + "MS ADPCM: coefficient (%d) out of range (should be [0..6])\n", + c); + c = 6; + } + return c; +} + static int ms_adpcm_decode_block(unsigned short *output, unsigned char *input, int channels, int block_size) { int current_channel = 0; + int coeff_idx; int idelta[2]; int sample1[2]; int sample2[2]; @@ -112,21 +123,15 @@ return -1; // fetch the header information, in stereo if both channels are present - if (input[stream_ptr] > 6) - mp_msg(MSGT_DECAUDIO, MSGL_WARN, - "MS ADPCM: coefficient (%d) out of range (should be [0..6])\n", - input[stream_ptr]); - coeff1[0] = ms_adapt_coeff1[input[stream_ptr]]; - coeff2[0] = ms_adapt_coeff2[input[stream_ptr]]; + coeff_idx = check_coeff(input[stream_ptr]); + coeff1[0] = ms_adapt_coeff1[coeff_idx]; + coeff2[0] = ms_adapt_coeff2[coeff_idx]; stream_ptr++; if (channels == 2) { - if (input[stream_ptr] > 6) - mp_msg(MSGT_DECAUDIO, MSGL_WARN, - "MS ADPCM: coefficient (%d) out of range (should be [0..6])\n", - input[stream_ptr]); - coeff1[1] = ms_adapt_coeff1[input[stream_ptr]]; - coeff2[1] = ms_adapt_coeff2[input[stream_ptr]]; + coeff_idx = check_coeff(input[stream_ptr]); + coeff1[1] = ms_adapt_coeff1[coeff_idx]; + coeff2[1] = ms_adapt_coeff2[coeff_idx]; stream_ptr++; }