|
|
|
@ -44,8 +44,8 @@ |
|
|
|
|
#define CONVERT_BIAS 384 |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static inline |
|
|
|
|
int16_t convert (int32_t i) |
|
|
|
|
static inline int16_t |
|
|
|
|
convert(int32_t i) |
|
|
|
|
{ |
|
|
|
|
#ifdef LIBDTS_FIXED |
|
|
|
|
i >>= 15; |
|
|
|
@ -61,8 +61,7 @@ convert2s16_2 (sample_t * _f, int16_t * s16) |
|
|
|
|
int i; |
|
|
|
|
int32_t *f = (int32_t *) _f; |
|
|
|
|
|
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[2 * i] = convert(f[i]); |
|
|
|
|
s16[2 * i + 1] = convert(f[i + 256]); |
|
|
|
|
} |
|
|
|
@ -74,8 +73,7 @@ convert2s16_4 (sample_t * _f, int16_t * s16) |
|
|
|
|
int i; |
|
|
|
|
int32_t *f = (int32_t *) _f; |
|
|
|
|
|
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[4 * i] = convert(f[i]); |
|
|
|
|
s16[4 * i + 1] = convert(f[i + 256]); |
|
|
|
|
s16[4 * i + 2] = convert(f[i + 512]); |
|
|
|
@ -89,8 +87,7 @@ convert2s16_5 (sample_t * _f, int16_t * s16) |
|
|
|
|
int i; |
|
|
|
|
int32_t *f = (int32_t *) _f; |
|
|
|
|
|
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[5 * i] = convert(f[i]); |
|
|
|
|
s16[5 * i + 1] = convert(f[i + 256]); |
|
|
|
|
s16[5 * i + 2] = convert(f[i + 512]); |
|
|
|
@ -105,12 +102,11 @@ convert2s16_multi (sample_t * _f, int16_t * s16, int flags) |
|
|
|
|
int i; |
|
|
|
|
int32_t *f = (int32_t *) _f; |
|
|
|
|
|
|
|
|
|
switch (flags) |
|
|
|
|
{ |
|
|
|
|
switch (flags) { |
|
|
|
|
case DTS_MONO: |
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
s16[5*i] = s16[5*i+1] = s16[5*i+2] = s16[5*i+3] = 0; |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[5 * i] = s16[5 * i + 1] = s16[5 * i + 2] = s16[5 * i + 3] = |
|
|
|
|
0; |
|
|
|
|
s16[5 * i + 4] = convert(f[i]); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
@ -120,8 +116,7 @@ convert2s16_multi (sample_t * _f, int16_t * s16, int flags) |
|
|
|
|
convert2s16_2(_f, s16); |
|
|
|
|
break; |
|
|
|
|
case DTS_3F: |
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[5 * i] = convert(f[i]); |
|
|
|
|
s16[5 * i + 1] = convert(f[i + 512]); |
|
|
|
|
s16[5 * i + 2] = s16[5 * i + 3] = 0; |
|
|
|
@ -135,9 +130,9 @@ convert2s16_multi (sample_t * _f, int16_t * s16, int flags) |
|
|
|
|
convert2s16_5(_f, s16); |
|
|
|
|
break; |
|
|
|
|
case DTS_MONO | DTS_LFE: |
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
s16[6*i] = s16[6*i+1] = s16[6*i+2] = s16[6*i+3] = 0; |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[6 * i] = s16[6 * i + 1] = s16[6 * i + 2] = s16[6 * i + 3] = |
|
|
|
|
0; |
|
|
|
|
s16[6 * i + 4] = convert(f[i + 256]); |
|
|
|
|
s16[6 * i + 5] = convert(f[i]); |
|
|
|
|
} |
|
|
|
@ -145,8 +140,7 @@ convert2s16_multi (sample_t * _f, int16_t * s16, int flags) |
|
|
|
|
case DTS_CHANNEL | DTS_LFE: |
|
|
|
|
case DTS_STEREO | DTS_LFE: |
|
|
|
|
case DTS_DOLBY | DTS_LFE: |
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[6 * i] = convert(f[i + 256]); |
|
|
|
|
s16[6 * i + 1] = convert(f[i + 512]); |
|
|
|
|
s16[6 * i + 2] = s16[6 * i + 3] = s16[6 * i + 4] = 0; |
|
|
|
@ -154,8 +148,7 @@ convert2s16_multi (sample_t * _f, int16_t * s16, int flags) |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case DTS_3F | DTS_LFE: |
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[6 * i] = convert(f[i + 256]); |
|
|
|
|
s16[6 * i + 1] = convert(f[i + 768]); |
|
|
|
|
s16[6 * i + 2] = s16[6 * i + 3] = 0; |
|
|
|
@ -164,8 +157,7 @@ convert2s16_multi (sample_t * _f, int16_t * s16, int flags) |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case DTS_2F2R | DTS_LFE: |
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[6 * i] = convert(f[i + 256]); |
|
|
|
|
s16[6 * i + 1] = convert(f[i + 512]); |
|
|
|
|
s16[6 * i + 2] = convert(f[i + 768]); |
|
|
|
@ -175,8 +167,7 @@ convert2s16_multi (sample_t * _f, int16_t * s16, int flags) |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case DTS_3F2R | DTS_LFE: |
|
|
|
|
for (i = 0; i < 256; i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < 256; i++) { |
|
|
|
|
s16[6 * i] = convert(f[i + 256]); |
|
|
|
|
s16[6 * i + 1] = convert(f[i + 768]); |
|
|
|
|
s16[6 * i + 2] = convert(f[i + 1024]); |
|
|
|
@ -220,8 +211,7 @@ dts_decode_frame (AVCodecContext *avctx, void *data, int *data_size, |
|
|
|
|
|
|
|
|
|
*data_size = 0; |
|
|
|
|
|
|
|
|
|
while (1) |
|
|
|
|
{ |
|
|
|
|
while(1) { |
|
|
|
|
len = end - start; |
|
|
|
|
if(!len) |
|
|
|
|
break; |
|
|
|
@ -238,10 +228,10 @@ dts_decode_frame (AVCodecContext *avctx, void *data, int *data_size, |
|
|
|
|
{ |
|
|
|
|
int length; |
|
|
|
|
|
|
|
|
|
length = dts_syncinfo (state, buf, &flags, &sample_rate, |
|
|
|
|
&bit_rate, &frame_length); |
|
|
|
|
if (!length) |
|
|
|
|
{ |
|
|
|
|
length = |
|
|
|
|
dts_syncinfo(state, buf, &flags, &sample_rate, &bit_rate, |
|
|
|
|
&frame_length); |
|
|
|
|
if(!length) { |
|
|
|
|
av_log(NULL, AV_LOG_INFO, "skip\n"); |
|
|
|
|
for(bufptr = buf; bufptr < buf + HEADER_SIZE - 1; bufptr++) |
|
|
|
|
bufptr[0] = bufptr[1]; |
|
|
|
@ -266,12 +256,12 @@ dts_decode_frame (AVCodecContext *avctx, void *data, int *data_size, |
|
|
|
|
avctx->sample_rate = sample_rate; |
|
|
|
|
avctx->channels = channels_multi(flags); |
|
|
|
|
avctx->bit_rate = bit_rate; |
|
|
|
|
for (i = 0; i < dts_blocks_num (state); i++) |
|
|
|
|
{ |
|
|
|
|
for(i = 0; i < dts_blocks_num(state); i++) { |
|
|
|
|
if(dts_block(state)) |
|
|
|
|
goto error; |
|
|
|
|
{ |
|
|
|
|
int chans; |
|
|
|
|
|
|
|
|
|
chans = channels_multi(flags); |
|
|
|
|
convert2s16_multi(dts_samples(state), out_samples, |
|
|
|
|
flags & (DTS_CHANNEL_MASK | DTS_LFE)); |
|
|
|
|