mirror of
https://github.com/mpv-player/mpv
synced 2025-03-07 22:57:42 +00:00
Simplify and clamp coefficient index for MS ADPCM
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27270 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
c83dca172f
commit
422c92e314
@ -91,10 +91,21 @@ static int control(sh_audio_t *sh_audio,int cmd,void* arg, ...)
|
|||||||
return CONTROL_UNKNOWN;
|
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,
|
static int ms_adpcm_decode_block(unsigned short *output, unsigned char *input,
|
||||||
int channels, int block_size)
|
int channels, int block_size)
|
||||||
{
|
{
|
||||||
int current_channel = 0;
|
int current_channel = 0;
|
||||||
|
int coeff_idx;
|
||||||
int idelta[2];
|
int idelta[2];
|
||||||
int sample1[2];
|
int sample1[2];
|
||||||
int sample2[2];
|
int sample2[2];
|
||||||
@ -112,21 +123,15 @@ static int ms_adpcm_decode_block(unsigned short *output, unsigned char *input,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// fetch the header information, in stereo if both channels are present
|
// fetch the header information, in stereo if both channels are present
|
||||||
if (input[stream_ptr] > 6)
|
coeff_idx = check_coeff(input[stream_ptr]);
|
||||||
mp_msg(MSGT_DECAUDIO, MSGL_WARN,
|
coeff1[0] = ms_adapt_coeff1[coeff_idx];
|
||||||
"MS ADPCM: coefficient (%d) out of range (should be [0..6])\n",
|
coeff2[0] = ms_adapt_coeff2[coeff_idx];
|
||||||
input[stream_ptr]);
|
|
||||||
coeff1[0] = ms_adapt_coeff1[input[stream_ptr]];
|
|
||||||
coeff2[0] = ms_adapt_coeff2[input[stream_ptr]];
|
|
||||||
stream_ptr++;
|
stream_ptr++;
|
||||||
if (channels == 2)
|
if (channels == 2)
|
||||||
{
|
{
|
||||||
if (input[stream_ptr] > 6)
|
coeff_idx = check_coeff(input[stream_ptr]);
|
||||||
mp_msg(MSGT_DECAUDIO, MSGL_WARN,
|
coeff1[1] = ms_adapt_coeff1[coeff_idx];
|
||||||
"MS ADPCM: coefficient (%d) out of range (should be [0..6])\n",
|
coeff2[1] = ms_adapt_coeff2[coeff_idx];
|
||||||
input[stream_ptr]);
|
|
||||||
coeff1[1] = ms_adapt_coeff1[input[stream_ptr]];
|
|
||||||
coeff2[1] = ms_adapt_coeff2[input[stream_ptr]];
|
|
||||||
stream_ptr++;
|
stream_ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user