diff options
-rw-r--r-- | libmpcodecs/ad_libdca.c | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/libmpcodecs/ad_libdca.c b/libmpcodecs/ad_libdca.c index b8eef07352..e59225c1d5 100644 --- a/libmpcodecs/ad_libdca.c +++ b/libmpcodecs/ad_libdca.c @@ -52,7 +52,7 @@ LIBAD_EXTERN(libdca) static const char ch2flags[6] = { DTS_MONO, DTS_STEREO, - DTS_2F1R, + DTS_3F, DTS_2F2R, DTS_3F2R, DTS_3F2R | DTS_LFE @@ -90,10 +90,9 @@ static void convert2s16_multi(sample_t *f, int16_t *s16, int flags, int ch_out) break; case DTS_3F: 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; - s16[5*i+4] = convert(f[i+256]); + s16[3*i] = convert(f[i+256]); + s16[3*i+1] = convert(f[i+512]); + s16[3*i+2] = convert(f[i]); } break; case DTS_2F2R: @@ -106,57 +105,57 @@ static void convert2s16_multi(sample_t *f, int16_t *s16, int flags, int ch_out) break; case DTS_3F2R: for(i = 0; i < 256; i++){ - s16[5*i] = convert(f[i]); + s16[5*i] = convert(f[i+256]); s16[5*i+1] = convert(f[i+512]); s16[5*i+2] = convert(f[i+768]); s16[5*i+3] = convert(f[i+1024]); - s16[5*i+4] = convert(f[i+256]); + s16[5*i+4] = convert(f[i]); } 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; - s16[6*i+4] = convert(f[i+256]); - s16[6*i+5] = convert(f[i]); + s16[6*i+4] = convert(f[i]); + s16[6*i+5] = convert(f[i+256]); } break; case DTS_CHANNEL | DTS_LFE: case DTS_STEREO | DTS_LFE: case DTS_DOLBY | DTS_LFE: for(i = 0; i < 256; i++){ - s16[6*i] = convert(f[i+256]); - s16[6*i+1] = convert(f[i+512]); + s16[6*i] = convert(f[i]); + s16[6*i+1] = convert(f[i+256]); s16[6*i+2] = s16[6*i+3] = s16[6*i+4] = 0; - s16[6*i+5] = convert(f[i]); + s16[6*i+5] = convert(f[i+512]); } break; case DTS_3F | DTS_LFE: for(i = 0; i < 256; i++){ s16[6*i] = convert(f[i+256]); - s16[6*i+1] = convert(f[i+768]); + s16[6*i+1] = convert(f[i+512]); s16[6*i+2] = s16[6*i+3] = 0; - s16[6*i+4] = convert(f[i+512]); - s16[6*i+5] = convert(f[i]); + s16[6*i+4] = convert(f[i]); + s16[6*i+5] = convert(f[i+768]); } break; case DTS_2F2R | DTS_LFE: 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]); - s16[6*i+3] = convert(f[i+1024]); + s16[6*i] = convert(f[i]); + s16[6*i+1] = convert(f[i+256]); + s16[6*i+2] = convert(f[i+512]); + s16[6*i+3] = convert(f[i+768]); s16[6*i+4] = 0; - s16[6*i+5] = convert(f[i]); + s16[6*i+5] = convert(f[1024]); } break; case DTS_3F2R | DTS_LFE: 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]); - s16[6*i+3] = convert(f[i+1280]); - s16[6*i+4] = convert(f[i+512]); - s16[6*i+5] = convert(f[i]); + s16[6*i+1] = convert(f[i+512]); + s16[6*i+2] = convert(f[i+768]); + s16[6*i+3] = convert(f[i+1024]); + s16[6*i+4] = convert(f[i]); + s16[6*i+5] = convert(f[i+1280]); } break; } |