adpcm_ima_wav: process channel-interleaved blocks sequentially rather than simultaneously.
Speeds up the ADPCM IMA WAV decoder by 15-20% overall.
This commit is contained in:
parent
7c287b18a0
commit
119974b164
@ -448,14 +448,18 @@ static int adpcm_decode_frame(AVCodecContext *avctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
while(src < buf + buf_size){
|
while(src < buf + buf_size){
|
||||||
|
for (i = 0; i < avctx->channels; i++) {
|
||||||
|
cs = &c->status[i];
|
||||||
for (m = 0; m < 4; m++) {
|
for (m = 0; m < 4; m++) {
|
||||||
for(i=0; i<=st; i++)
|
uint8_t v = *src++;
|
||||||
*samples++ = adpcm_ima_expand_nibble(&c->status[i], src[4*i] & 0x0F, 3);
|
*samples = adpcm_ima_expand_nibble(cs, v & 0x0F, 3);
|
||||||
for(i=0; i<=st; i++)
|
samples += avctx->channels;
|
||||||
*samples++ = adpcm_ima_expand_nibble(&c->status[i], src[4*i] >> 4 , 3);
|
*samples = adpcm_ima_expand_nibble(cs, v >> 4 , 3);
|
||||||
src++;
|
samples += avctx->channels;
|
||||||
}
|
}
|
||||||
src += 4*st;
|
samples -= 8 * avctx->channels - 1;
|
||||||
|
}
|
||||||
|
samples += 7 * avctx->channels;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CODEC_ID_ADPCM_4XM:
|
case CODEC_ID_ADPCM_4XM:
|
||||||
|
Loading…
Reference in New Issue
Block a user