MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / modify_qscale

Function modify_qscale

libavcodec/ratecontrol.c:167–254  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

165}
166
167static double modify_qscale(MPVMainEncContext *const m, const RateControlEntry *rce,
168 double q, int frame_num)
169{
170 MPVEncContext *const s = &m->s;
171 RateControlContext *const rcc = &m->rc_context;
172 const double buffer_size = s->c.avctx->rc_buffer_size;
173 const double fps = get_fps(s->c.avctx);
174 const double min_rate = s->c.avctx->rc_min_rate / fps;
175 const double max_rate = s->c.avctx->rc_max_rate / fps;
176 const int pict_type = rce->new_pict_type;
177 int qmin, qmax;
178
179 get_qminmax(&qmin, &qmax, m, pict_type);
180
181 /* modulation */
182 if (rcc->qmod_freq &&
183 frame_num % rcc->qmod_freq == 0 &&
184 pict_type == AV_PICTURE_TYPE_P)
185 q *= rcc->qmod_amp;
186
187 /* buffer overflow/underflow protection */
188 if (buffer_size) {
189 double expected_size = rcc->buffer_index;
190 double q_limit;
191
192 if (min_rate) {
193 double d = 2 * (buffer_size - expected_size) / buffer_size;
194 if (d > 1.0)
195 d = 1.0;
196 else if (d < 0.0001)
197 d = 0.0001;
198 q *= pow(d, 1.0 / rcc->buffer_aggressivity);
199
200 q_limit = bits2qp(rce,
201 FFMAX((min_rate - buffer_size + rcc->buffer_index) *
202 s->c.avctx->rc_min_vbv_overflow_use, 1));
203
204 if (q > q_limit) {
205 if (s->c.avctx->debug & FF_DEBUG_RC)
206 av_log(s->c.avctx, AV_LOG_DEBUG,
207 "limiting QP %f -> %f\n", q, q_limit);
208 q = q_limit;
209 }
210 }
211
212 if (max_rate) {
213 double d = 2 * expected_size / buffer_size;
214 if (d > 1.0)
215 d = 1.0;
216 else if (d < 0.0001)
217 d = 0.0001;
218 q /= pow(d, 1.0 / rcc->buffer_aggressivity);
219
220 q_limit = bits2qp(rce,
221 FFMAX(rcc->buffer_index *
222 s->c.avctx->rc_max_available_vbv_use,
223 1));
224 if (q < q_limit) {

Callers 2

init_pass2Function · 0.85
ff_rate_estimate_qscaleFunction · 0.85

Calls 4

get_fpsFunction · 0.85
get_qminmaxFunction · 0.85
bits2qpFunction · 0.85
av_logFunction · 0.85

Tested by

no test coverage detected