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

Reply via email to