Also wait until frame is encoded successfully before incrementing bits_written
and samples_written.
---
libavcodec/ac3enc.c | 15 +++++++++------
1 files changed, 9 insertions(+), 6 deletions(-)
diff --git libavcodec/ac3enc.c libavcodec/ac3enc.c
index 0f876e8..022de2b 100644
--- libavcodec/ac3enc.c
+++ libavcodec/ac3enc.c
@@ -1295,8 +1295,6 @@ static void adjust_frame_size(AC3EncodeContext *s)
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);
- s->bits_written += s->frame_size * 16;
- s->samples_written += AC3_FRAME_SIZE;
}
static int AC3_encode_frame(AVCodecContext *avctx,
@@ -1309,7 +1307,9 @@ static int AC3_encode_frame(AVCodecContext *avctx,
uint8_t exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS];
uint8_t bap[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS];
int8_t exp_shift[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS];
- int frame_bits;
+ int frame_bits, frame_size;
+
+ adjust_frame_size(s);
deinterleave_samples(s, data);
@@ -1317,8 +1317,6 @@ static int AC3_encode_frame(AVCodecContext *avctx,
process_exponents(s, mdct_coef, exp, exp_strategy, exp_shift, &frame_bits);
- adjust_frame_size(s);
-
if (compute_bit_allocation(s, bap, exp, exp_strategy, frame_bits))
return AVERROR(EINVAL);
/* everything is known... let's output the frame */
@@ -1328,7 +1326,12 @@ static int AC3_encode_frame(AVCodecContext *avctx,
output_audio_block(s, exp_strategy[blk], exp[blk], bap[blk],
mdct_coef[blk], exp_shift[blk], blk);
}
- return output_frame_end(s);
+ frame_size = output_frame_end(s);
+
+ s->bits_written += frame_size * 8;
+ s->samples_written += AC3_FRAME_SIZE;
+
+ return frame_size;
}
static av_cold int AC3_encode_close(AVCodecContext *avctx)
_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc