[FFmpeg-devel] dca.c: are 16384-byte frames valid?

Alexander E. Patrakov patrakov
Sat Aug 23 11:08:01 CEST 2008


consider a 48 kHz DTS stream encoded at 6144000 bps (the highest 
officially-allowed bitrate in the spec). Since each DTS subframe contains 32 
samples for 32 subbands, it expands to 1024 PCM samples. A frame contains at 
least one subframe, let's assume it contains exactly one subframe. 1024 
samples per frame  = 1024 / 48000 seconds per frame. Now let's calculate the 
frame size.

6144000 bps * ((1024 / 48000) seconds per frame = 131072 bits per frame, or 
16384 bytes per frame. So it looks like 16384-byte frames are, in fact, valid 
(otherwise, it is impossible to reach 6144000 bps), and ffmpeg should not 
reject them.

Index: libavcodec/dca.c
--- libavcodec/dca.c	(revision 14913)
+++ libavcodec/dca.c	(working copy)
@@ -69,7 +69,7 @@
 #define HEADER_SIZE 14
 #define CONVERT_BIAS 384
-#define DCA_MAX_FRAME_SIZE 16383
+#define DCA_MAX_FRAME_SIZE 16384
 /** Bit allocation */
 typedef struct {

OTOH, I have no 6144000 bps DTS files except those produced with my own (known 
buggy) encoder. Also, even at the highest ABITS value (i.e., 26) in each 
channel and subband, it is not possible to fill a frame with 131072 bits 
using just linear independent quantization of each subband sample (i.e., no 
ADPCM, transitions, joint channel coding or extensions). Without such 
advanced things, the achievable maximum is 120493 bits per frame, and the 
rest should be padded by zeros.

Alexander E. Patrakov

More information about the ffmpeg-devel mailing list