/* Resolution must be a multiple of two. */
c->width = mst->width;
c->height = mst->height;
- c->bit_rate = switch_calc_bitrate(c->width, c->height, 2, fps) * 1024;
+ c->bit_rate = mm->vb;
mst->st->time_base.den = 1000;
mst->st->time_base.num = 1;
c->time_base.den = 1000;
}
}
- c->gop_size = 250; // g=250
- c->keyint_min = 25; // keyint_min=25
- c->i_quant_factor = 0.71; // i_qfactor=0.71
- c->qcompress = 0.6; // qcomp=0.6
- c->qmin = 10; // qmin=10
- c->qmax = 31; // qmax=31
- c->max_qdiff = 4; // qdiff=4
- av_opt_set_int(c->priv_data, "crf", 18, 0);
+ if (mm->cbr) {
+ c->rc_min_rate = c->bit_rate;
+ c->rc_max_rate = c->bit_rate;
+ c->rc_buffer_size = c->bit_rate;
+ c->qcompress = 0;
+ } else {
+ c->gop_size = 250; // g=250
+ c->keyint_min = 25; // keyint_min=25
+ c->i_quant_factor = 0.71; // i_qfactor=0.71
+ c->qcompress = 0.6; // qcomp=0.6
+ c->qmin = 10; // qmin=10
+ c->qmax = 31; // qmax=31
+ c->max_qdiff = 4; // qdiff=4
+ av_opt_set_int(c->priv_data, "crf", 18, 0);
+ }
if (codec_id == AV_CODEC_ID_VP8) {
av_set_options_string(c, "quality=realtime", "=", ":");
handle->mm.ab = 128;
}
- handle->mm.vb = switch_calc_bitrate(handle->mm.vw, handle->mm.vh, 1, handle->mm.fps);
+ if (!handle->mm.vb) {
+ handle->mm.vb = switch_calc_bitrate(handle->mm.vw, handle->mm.vh, 1, handle->mm.fps);
+ }
if (fmt->video_codec != AV_CODEC_ID_NONE) {
const AVCodecDescriptor *desc;