libopencore-amr, libvo-amrwbenc: Only check the bitrate when changed
authorMartin Storsjö <martin@martin.st>
Wed, 13 Apr 2011 08:03:19 +0000 (11:03 +0300)
committerMartin Storsjö <martin@martin.st>
Wed, 13 Apr 2011 21:31:34 +0000 (00:31 +0300)
Also rename the incorrectly named enc_bitrate to enc_mode, use the
enc_bitrate variable for storing the last chosen bitrate.

This avoids continuous warning log messages if not using an
exactly matching bitrate, while still allowing changing bitrate
at any point.

Signed-off-by: Martin Storsjö <martin@martin.st>
libavcodec/libopencore-amr.c
libavcodec/libvo-amrwbenc.c

index e6216c9..c8b3a2c 100644 (file)
@@ -81,6 +81,7 @@ typedef struct AMRContext {
     void *dec_state;
     void *enc_state;
     int   enc_bitrate;
+    int   enc_mode;
 } AMRContext;
 
 static av_cold int amr_nb_decode_init(AVCodecContext *avctx)
@@ -181,7 +182,8 @@ static av_cold int amr_nb_encode_init(AVCodecContext *avctx)
         return -1;
     }
 
-    s->enc_bitrate = get_bitrate_mode(avctx->bit_rate, avctx);
+    s->enc_mode    = get_bitrate_mode(avctx->bit_rate, avctx);
+    s->enc_bitrate = avctx->bit_rate;
 
     return 0;
 }
@@ -202,12 +204,15 @@ static int amr_nb_encode_frame(AVCodecContext *avctx,
     AMRContext *s = avctx->priv_data;
     int written;
 
-    s->enc_bitrate = get_bitrate_mode(avctx->bit_rate, avctx);
+    if (s->enc_bitrate != avctx->bit_rate) {
+        s->enc_mode    = get_bitrate_mode(avctx->bit_rate, avctx);
+        s->enc_bitrate = avctx->bit_rate;
+    }
 
-    written = Encoder_Interface_Encode(s->enc_state, s->enc_bitrate, data,
+    written = Encoder_Interface_Encode(s->enc_state, s->enc_mode, data,
                                        frame, 0);
     av_dlog(avctx, "amr_nb_encode_frame encoded %u bytes, bitrate %u, first byte was %#02x\n",
-            written, s->enc_bitrate, frame[0]);
+            written, s->enc_mode, frame[0]);
 
     return written;
 }
index b194bf0..d3db5f8 100644 (file)
@@ -27,6 +27,7 @@
 typedef struct AMRWBContext {
     void  *state;
     int    mode;
+    int    last_bitrate;
     int    allow_dtx;
 } AMRWBContext;
 
@@ -70,7 +71,8 @@ static av_cold int amr_wb_encode_init(AVCodecContext *avctx)
         return AVERROR(ENOSYS);
     }
 
-    s->mode = get_wb_bitrate_mode(avctx->bit_rate, avctx);
+    s->mode            = get_wb_bitrate_mode(avctx->bit_rate, avctx);
+    s->last_bitrate    = avctx->bit_rate;
 
     avctx->frame_size  = 320;
     avctx->coded_frame = avcodec_alloc_frame();
@@ -97,7 +99,10 @@ static int amr_wb_encode_frame(AVCodecContext *avctx,
     AMRWBContext *s = avctx->priv_data;
     int size;
 
-    s->mode = get_wb_bitrate_mode(avctx->bit_rate, avctx);
+    if (s->last_bitrate != avctx->bit_rate) {
+        s->mode         = get_wb_bitrate_mode(avctx->bit_rate, avctx);
+        s->last_bitrate = avctx->bit_rate;
+    }
     size = E_IF_encode(s->state, s->mode, data, frame, s->allow_dtx);
     return size;
 }