[Ffmpeg-cvslog] CVS: ffmpeg/libavcodec ac3enc.c,1.29,1.30

Corey Hickey CVS corey
Mon Apr 3 02:51:11 CEST 2006


Update of /cvsroot/ffmpeg/ffmpeg/libavcodec
In directory mail:/var2/tmp/cvs-serv17203/libavcodec

Modified Files:
	ac3enc.c 
Log Message:
AC3: support encoding fractional frame sizes

Patch by Justin Ruggles, jruggle <<at>> earthlink <<dot>> net


Index: ac3enc.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/ac3enc.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- ac3enc.c	26 Mar 2006 17:07:02 -0000	1.29
+++ ac3enc.c	3 Apr 2006 00:51:09 -0000	1.30
@@ -38,6 +38,8 @@
     unsigned int bsid;
     unsigned int frame_size_min; /* minimum frame size in case rounding is necessary */
     unsigned int frame_size; /* current frame size in words */
+    unsigned int bits_written;
+    unsigned int samples_written;
     int halfratecod;
     unsigned int frmsizecod;
     unsigned int fscod; /* frequency */
@@ -859,7 +861,8 @@
     s->bit_rate = bitrate;
     s->frmsizecod = i << 1;
     s->frame_size_min = (bitrate * 1000 * AC3_FRAME_SIZE) / (freq * 16);
-    /* for now we do not handle fractional sizes */
+    s->bits_written = 0;
+    s->samples_written = 0;
     s->frame_size = s->frame_size_min;
 
     /* bit allocation init */
@@ -1422,6 +1425,15 @@
         }
     }
 
+    /* adjust for fractional frame sizes */
+    while(s->bits_written >= s->bit_rate*1000 && s->samples_written >= s->sample_rate) {
+        s->bits_written -= s->bit_rate*1000;
+        s->samples_written -= s->sample_rate;
+    }
+    s->frame_size = s->frame_size_min + (s->bits_written * s->sample_rate < s->samples_written * s->bit_rate*1000);
+    s->bits_written += s->frame_size * 16;
+    s->samples_written += AC3_FRAME_SIZE;
+
     compute_bit_allocation(s, bap, encoded_exp, exp_strategy, frame_bits);
     /* everything is known... let's output the frame */
     output_frame_header(s, frame);





More information about the ffmpeg-cvslog mailing list