|
|
@@ -527,21 +527,9 @@ static int adpcm_decode_frame(AVCodecContext *avctx, |
|
|
|
*samples++ = c->status[1].predictor; |
|
|
|
} |
|
|
|
while (src < buf + buf_size) { |
|
|
|
|
|
|
|
/* take care of the top nibble (always left or mono channel) */ |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], |
|
|
|
src[0] >> 4, 3); |
|
|
|
|
|
|
|
/* take care of the bottom nibble, which is right sample for |
|
|
|
* stereo, or another mono sample */ |
|
|
|
if (st) |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[1], |
|
|
|
src[0] & 0x0F, 3); |
|
|
|
else |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], |
|
|
|
src[0] & 0x0F, 3); |
|
|
|
|
|
|
|
src++; |
|
|
|
uint8_t v = *src++; |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0 ], v >> 4 , 3); |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[st], v & 0x0F, 3); |
|
|
|
} |
|
|
|
break; |
|
|
|
case CODEC_ID_ADPCM_IMA_DK3: |
|
|
@@ -600,39 +588,25 @@ static int adpcm_decode_frame(AVCodecContext *avctx, |
|
|
|
} |
|
|
|
|
|
|
|
while (src < buf + buf_size) { |
|
|
|
|
|
|
|
uint8_t v1, v2; |
|
|
|
uint8_t v = *src++; |
|
|
|
/* nibbles are swapped for mono */ |
|
|
|
if (st) { |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], |
|
|
|
src[0] >> 4 , 3); |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[1], |
|
|
|
src[0] & 0x0F, 3); |
|
|
|
v1 = v >> 4; |
|
|
|
v2 = v & 0x0F; |
|
|
|
} else { |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], |
|
|
|
src[0] & 0x0F, 3); |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], |
|
|
|
src[0] >> 4 , 3); |
|
|
|
v2 = v >> 4; |
|
|
|
v1 = v & 0x0F; |
|
|
|
} |
|
|
|
|
|
|
|
src++; |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0 ], v1, 3); |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[st], v2, 3); |
|
|
|
} |
|
|
|
break; |
|
|
|
case CODEC_ID_ADPCM_IMA_WS: |
|
|
|
/* no per-block initialization; just start decoding the data */ |
|
|
|
while (src < buf + buf_size) { |
|
|
|
|
|
|
|
if (st) { |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], |
|
|
|
src[0] >> 4 , 3); |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[1], |
|
|
|
src[0] & 0x0F, 3); |
|
|
|
} else { |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], |
|
|
|
src[0] >> 4 , 3); |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], |
|
|
|
src[0] & 0x0F, 3); |
|
|
|
} |
|
|
|
|
|
|
|
src++; |
|
|
|
uint8_t v = *src++; |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[0], v >> 4 , 3); |
|
|
|
*samples++ = adpcm_ima_expand_nibble(&c->status[st], v & 0x0F, 3); |
|
|
|
} |
|
|
|
break; |
|
|
|
case CODEC_ID_ADPCM_XA: |
|
|
@@ -886,18 +860,9 @@ static int adpcm_decode_frame(AVCodecContext *avctx, |
|
|
|
break; |
|
|
|
case CODEC_ID_ADPCM_CT: |
|
|
|
while (src < buf + buf_size) { |
|
|
|
if (st) { |
|
|
|
*samples++ = adpcm_ct_expand_nibble(&c->status[0], |
|
|
|
src[0] >> 4); |
|
|
|
*samples++ = adpcm_ct_expand_nibble(&c->status[1], |
|
|
|
src[0] & 0x0F); |
|
|
|
} else { |
|
|
|
*samples++ = adpcm_ct_expand_nibble(&c->status[0], |
|
|
|
src[0] >> 4); |
|
|
|
*samples++ = adpcm_ct_expand_nibble(&c->status[0], |
|
|
|
src[0] & 0x0F); |
|
|
|
} |
|
|
|
src++; |
|
|
|
uint8_t v = *src++; |
|
|
|
*samples++ = adpcm_ct_expand_nibble(&c->status[0 ], v >> 4 ); |
|
|
|
*samples++ = adpcm_ct_expand_nibble(&c->status[st], v & 0x0F); |
|
|
|
} |
|
|
|
break; |
|
|
|
case CODEC_ID_ADPCM_SBPRO_4: |
|
|
@@ -1005,18 +970,9 @@ static int adpcm_decode_frame(AVCodecContext *avctx, |
|
|
|
} |
|
|
|
case CODEC_ID_ADPCM_YAMAHA: |
|
|
|
while (src < buf + buf_size) { |
|
|
|
if (st) { |
|
|
|
*samples++ = adpcm_yamaha_expand_nibble(&c->status[0], |
|
|
|
src[0] & 0x0F); |
|
|
|
*samples++ = adpcm_yamaha_expand_nibble(&c->status[1], |
|
|
|
src[0] >> 4 ); |
|
|
|
} else { |
|
|
|
*samples++ = adpcm_yamaha_expand_nibble(&c->status[0], |
|
|
|
src[0] & 0x0F); |
|
|
|
*samples++ = adpcm_yamaha_expand_nibble(&c->status[0], |
|
|
|
src[0] >> 4 ); |
|
|
|
} |
|
|
|
src++; |
|
|
|
uint8_t v = *src++; |
|
|
|
*samples++ = adpcm_yamaha_expand_nibble(&c->status[0 ], v & 0x0F); |
|
|
|
*samples++ = adpcm_yamaha_expand_nibble(&c->status[st], v >> 4 ); |
|
|
|
} |
|
|
|
break; |
|
|
|
case CODEC_ID_ADPCM_THP: |
|
|
|