mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-23 04:24:35 +02:00
AC3: support encoding fractional frame sizes
Patch by Justin Ruggles, jruggle <<at>> earthlink <<dot>> net Originally committed as revision 5263 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
c4e7baa85c
commit
f760b70fbe
@ -38,6 +38,8 @@ typedef struct AC3EncodeContext {
|
||||
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 @@ static int AC3_encode_init(AVCodecContext *avctx)
|
||||
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 @@ static int AC3_encode_frame(AVCodecContext *avctx,
|
||||
}
|
||||
}
|
||||
|
||||
/* 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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user