Commit 31d89e11 authored by Sergey Vlasov's avatar Sergey Vlasov Committed by Diego Biurrun

DTS decoding was broken for every speaker configuration except 5.1.

patch by Sergey Vlasov, vsu altlinux org

Originally committed as revision 9036 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent f3ab6d91
...@@ -55,6 +55,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -55,6 +55,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[5*i] = s16[5*i+1] = s16[5*i+2] = s16[5*i+3] = 0; s16[5*i] = s16[5*i+1] = s16[5*i+2] = s16[5*i+3] = 0;
s16[5*i+4] = convert(f[i]); s16[5*i+4] = convert(f[i]);
} }
break;
case DTS_CHANNEL: case DTS_CHANNEL:
case DTS_STEREO: case DTS_STEREO:
case DTS_DOLBY: case DTS_DOLBY:
...@@ -62,6 +63,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -62,6 +63,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[2*i] = convert(f[i]); s16[2*i] = convert(f[i]);
s16[2*i+1] = convert(f[i+256]); s16[2*i+1] = convert(f[i+256]);
} }
break;
case DTS_3F: case DTS_3F:
for(i = 0; i < 256; i++){ for(i = 0; i < 256; i++){
s16[5*i] = convert(f[i+256]); s16[5*i] = convert(f[i+256]);
...@@ -69,6 +71,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -69,6 +71,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[5*i+2] = s16[5*i+3] = 0; s16[5*i+2] = s16[5*i+3] = 0;
s16[5*i+4] = convert(f[i]); s16[5*i+4] = convert(f[i]);
} }
break;
case DTS_2F2R: case DTS_2F2R:
for(i = 0; i < 256; i++){ for(i = 0; i < 256; i++){
s16[4*i] = convert(f[i]); s16[4*i] = convert(f[i]);
...@@ -76,6 +79,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -76,6 +79,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[4*i+2] = convert(f[i+512]); s16[4*i+2] = convert(f[i+512]);
s16[4*i+3] = convert(f[i+768]); s16[4*i+3] = convert(f[i+768]);
} }
break;
case DTS_3F2R: case DTS_3F2R:
for(i = 0; i < 256; i++){ for(i = 0; i < 256; i++){
s16[5*i] = convert(f[i+256]); s16[5*i] = convert(f[i+256]);
...@@ -84,12 +88,14 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -84,12 +88,14 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[5*i+3] = convert(f[i+1024]); s16[5*i+3] = convert(f[i+1024]);
s16[5*i+4] = convert(f[i]); s16[5*i+4] = convert(f[i]);
} }
break;
case DTS_MONO | DTS_LFE: case DTS_MONO | DTS_LFE:
for(i = 0; i < 256; i++){ 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] = s16[6*i+1] = s16[6*i+2] = s16[6*i+3] = 0;
s16[6*i+4] = convert(f[i]); s16[6*i+4] = convert(f[i]);
s16[6*i+5] = convert(f[i+256]); s16[6*i+5] = convert(f[i+256]);
} }
break;
case DTS_CHANNEL | DTS_LFE: case DTS_CHANNEL | DTS_LFE:
case DTS_STEREO | DTS_LFE: case DTS_STEREO | DTS_LFE:
case DTS_DOLBY | DTS_LFE: case DTS_DOLBY | DTS_LFE:
...@@ -99,6 +105,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -99,6 +105,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[6*i+2] = s16[6*i+3] = s16[6*i+4] = 0; s16[6*i+2] = s16[6*i+3] = s16[6*i+4] = 0;
s16[6*i+5] = convert(f[i+512]); s16[6*i+5] = convert(f[i+512]);
} }
break;
case DTS_3F | DTS_LFE: 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] = convert(f[i+256]);
...@@ -107,6 +114,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -107,6 +114,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[6*i+4] = convert(f[i]); s16[6*i+4] = convert(f[i]);
s16[6*i+5] = convert(f[i+768]); s16[6*i+5] = convert(f[i+768]);
} }
break;
case DTS_2F2R | DTS_LFE: case DTS_2F2R | DTS_LFE:
for(i = 0; i < 256; i++){ for(i = 0; i < 256; i++){
s16[6*i] = convert(f[i]); s16[6*i] = convert(f[i]);
...@@ -116,6 +124,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -116,6 +124,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[6*i+4] = 0; s16[6*i+4] = 0;
s16[6*i+5] = convert(f[i+1024]); s16[6*i+5] = convert(f[i+1024]);
} }
break;
case DTS_3F2R | DTS_LFE: 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] = convert(f[i+256]);
...@@ -125,6 +134,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags) ...@@ -125,6 +134,7 @@ convert2s16_multi(sample_t *f, int16_t *s16, int flags)
s16[6*i+4] = convert(f[i]); s16[6*i+4] = convert(f[i]);
s16[6*i+5] = convert(f[i+1280]); s16[6*i+5] = convert(f[i+1280]);
} }
break;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment