[FFmpeg-cvslog] aacenc: quit when the audio queue reaches 0 rather than keeping track of empty frames

Rostislav Pehlivanov git at videolan.org
Tue Nov 8 02:56:07 EET 2016


ffmpeg | branch: master | Rostislav Pehlivanov <atomnuker at gmail.com> | Mon Nov  7 02:11:50 2016 +0000| [0cf6853804675c99573889670b3447af4de1a3f3] | committer: Rostislav Pehlivanov

aacenc: quit when the audio queue reaches 0 rather than keeping track of empty frames

The libopus encoder does the same thing and its better than
keeping track of when the empty flush frames appear.

Signed-off-by: Rostislav Pehlivanov <atomnuker at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0cf6853804675c99573889670b3447af4de1a3f3
---

 libavcodec/aacenc.c | 9 +++------
 libavcodec/aacenc.h | 1 -
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c
index 363ed05..956e974 100644
--- a/libavcodec/aacenc.c
+++ b/libavcodec/aacenc.c
@@ -520,13 +520,13 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
     int chan_el_counter[4];
     FFPsyWindowInfo windows[AAC_MAX_CHANNELS];
 
-    if (s->last_frame == 2)
-        return 0;
-
     /* add current frame to queue */
     if (frame) {
         if ((ret = ff_af_queue_add(&s->afq, frame)) < 0)
             return ret;
+    } else {
+        if (!s->afq.remaining_samples || (!s->afq.frame_alloc && !s->afq.frame_count))
+            return 0;
     }
 
     copy_input_samples(s, frame);
@@ -841,9 +841,6 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
     s->lambda_sum += s->lambda;
     s->lambda_count++;
 
-    if (!frame)
-        s->last_frame++;
-
     ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
                        &avpkt->duration);
 
diff --git a/libavcodec/aacenc.h b/libavcodec/aacenc.h
index 38a9734..9d244fd 100644
--- a/libavcodec/aacenc.h
+++ b/libavcodec/aacenc.h
@@ -112,7 +112,6 @@ typedef struct AACEncContext {
     struct FFPsyPreprocessContext* psypp;
     AACCoefficientsEncoder *coder;
     int cur_channel;                             ///< current channel for coder context
-    int last_frame;
     int random_state;
     float lambda;
     int last_frame_pb_count;                     ///< number of bits for the previous frame



More information about the ffmpeg-cvslog mailing list