mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-04-14 00:58:38 +02:00
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>
This commit is contained in:
parent
7073938121
commit
3dd82afc74
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user