Browse Source

libopencore-amr, libvo-amrwbenc: Only check the bitrate when changed

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>
tags/n0.8
Martin Storsjö 14 years ago
parent
commit
3dd82afc74
2 changed files with 16 additions and 6 deletions
  1. +9
    -4
      libavcodec/libopencore-amr.c
  2. +7
    -2
      libavcodec/libvo-amrwbenc.c

+ 9
- 4
libavcodec/libopencore-amr.c View File

@@ -81,6 +81,7 @@ typedef struct AMRContext {
void *dec_state; void *dec_state;
void *enc_state; void *enc_state;
int enc_bitrate; int enc_bitrate;
int enc_mode;
} AMRContext; } AMRContext;


static av_cold int amr_nb_decode_init(AVCodecContext *avctx) 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; 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; return 0;
} }
@@ -202,12 +204,15 @@ static int amr_nb_encode_frame(AVCodecContext *avctx,
AMRContext *s = avctx->priv_data; AMRContext *s = avctx->priv_data;
int written; 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); frame, 0);
av_dlog(avctx, "amr_nb_encode_frame encoded %u bytes, bitrate %u, first byte was %#02x\n", 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; return written;
} }


+ 7
- 2
libavcodec/libvo-amrwbenc.c View File

@@ -27,6 +27,7 @@
typedef struct AMRWBContext { typedef struct AMRWBContext {
void *state; void *state;
int mode; int mode;
int last_bitrate;
int allow_dtx; int allow_dtx;
} AMRWBContext; } AMRWBContext;


@@ -70,7 +71,8 @@ static av_cold int amr_wb_encode_init(AVCodecContext *avctx)
return AVERROR(ENOSYS); 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->frame_size = 320;
avctx->coded_frame = avcodec_alloc_frame(); avctx->coded_frame = avcodec_alloc_frame();
@@ -97,7 +99,10 @@ static int amr_wb_encode_frame(AVCodecContext *avctx,
AMRWBContext *s = avctx->priv_data; AMRWBContext *s = avctx->priv_data;
int size; 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); size = E_IF_encode(s->state, s->mode, data, frame, s->allow_dtx);
return size; return size;
} }


Loading…
Cancel
Save