[FFmpeg-devel] dca.c: output scale is a bit off

Alexander E. Patrakov patrakov
Wed Aug 20 16:53:22 CEST 2008


Hello,

Recently I have reported a bug against libdca because it had the full scale of 
its output (except the LFE channel) off by a factor of sqrt(2) / 1.5 = 
0.942... I know this because:

1) I encoded a wav file of my own choice with "Surcode DTS DVD" software and 
checked the output of a libdca-based decoder, and 

2) under this assumption on scaling, when encoding just a DC level with my own 
yet-to-be-released encoder, the levels in channels after the forward QMF 
transform for non-LFE channels & lowpass of the LFE channel (i.e., just 
before the quantization) match very well (e.g., 0x16A0A144 in LFE vs 
0x16A09BD3 in other channels for a 50% DC level).

The LFE channel scaling was always OK, and in libdca r84, the scaling factor 
has been fixed for other channels.

The scaling factor in ffmpeg's dca.c was copied from the old and buggy version 
of libdca. Please apply the patch below in order to fix this ffmpeg bug.

Index: libavcodec/dca.c
===================================================================
--- libavcodec/dca.c	(revision 14863)
+++ libavcodec/dca.c	(working copy)
@@ -990,7 +990,7 @@
 /*        static float pcm_to_double[8] =
             {32768.0, 32768.0, 524288.0, 524288.0, 0, 8388608.0, 
8388608.0};*/
          qmf_32_subbands(s, k, subband_samples[k], &s->samples[256 * k],
-                            2.0 / 3 /*pcm_to_double[s->source_pcm_res] */ ,
+                            M_SQRT1_2 /*pcm_to_double[s->source_pcm_res] */ ,
                             0 /*s->bias */ );
     }
 
-- 
Alexander E. Patrakov




More information about the ffmpeg-devel mailing list