[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