1 /* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include <stdlib.h> 12 #include <stdio.h> 13 #include <string.h> 14 #include <limits.h> 15 #include <assert.h> 16 17 #include "math.h" 18 #include "vp8/common/common.h" 19 #include "ratectrl.h" 20 #include "vp8/common/entropymode.h" 21 #include "vpx_mem/vpx_mem.h" 22 #include "vp8/common/systemdependent.h" 23 #include "encodemv.h" 24 #include "vpx_dsp/vpx_dsp_common.h" 25 #include "vpx_ports/system_state.h" 26 27 #define MIN_BPB_FACTOR 0.01 28 #define MAX_BPB_FACTOR 50 29 30 extern const MB_PREDICTION_MODE vp8_mode_order[MAX_MODES]; 31 32 #ifdef MODE_STATS 33 extern int y_modes[5]; 34 extern int uv_modes[4]; 35 extern int b_modes[10]; 36 37 extern int inter_y_modes[10]; 38 extern int inter_uv_modes[4]; 39 extern int inter_b_modes[10]; 40 #endif 41 42 /* Bits Per MB at different Q (Multiplied by 512) */ 43 #define BPER_MB_NORMBITS 9 44 45 /* Work in progress recalibration of baseline rate tables based on 46 * the assumption that bits per mb is inversely proportional to the 47 * quantizer value. 48 */ 49 const int vp8_bits_per_mb[2][QINDEX_RANGE] = { 50 /* Intra case 450000/Qintra */ 51 { 52 1125000, 900000, 750000, 642857, 562500, 500000, 450000, 450000, 409090, 53 375000, 346153, 321428, 300000, 281250, 264705, 264705, 250000, 236842, 54 225000, 225000, 214285, 214285, 204545, 204545, 195652, 195652, 187500, 55 180000, 180000, 173076, 166666, 160714, 155172, 150000, 145161, 140625, 56 136363, 132352, 128571, 125000, 121621, 121621, 118421, 115384, 112500, 57 109756, 107142, 104651, 102272, 100000, 97826, 97826, 95744, 93750, 58 91836, 90000, 88235, 86538, 84905, 83333, 81818, 80357, 78947, 59 77586, 76271, 75000, 73770, 72580, 71428, 70312, 69230, 68181, 60 67164, 66176, 65217, 64285, 63380, 62500, 61643, 60810, 60000, 61 59210, 59210, 58441, 57692, 56962, 56250, 55555, 54878, 54216, 62 53571, 52941, 52325, 51724, 51136, 50561, 49450, 48387, 47368, 63 46875, 45918, 45000, 44554, 44117, 43269, 42452, 41666, 40909, 64 40178, 39473, 38793, 38135, 36885, 36290, 35714, 35156, 34615, 65 34090, 33582, 33088, 32608, 32142, 31468, 31034, 30405, 29801, 66 29220, 28662, 67 }, 68 /* Inter case 285000/Qinter */ 69 { 70 712500, 570000, 475000, 407142, 356250, 316666, 285000, 259090, 237500, 71 219230, 203571, 190000, 178125, 167647, 158333, 150000, 142500, 135714, 72 129545, 123913, 118750, 114000, 109615, 105555, 101785, 98275, 95000, 73 91935, 89062, 86363, 83823, 81428, 79166, 77027, 75000, 73076, 74 71250, 69512, 67857, 66279, 64772, 63333, 61956, 60638, 59375, 75 58163, 57000, 55882, 54807, 53773, 52777, 51818, 50892, 50000, 76 49137, 47500, 45967, 44531, 43181, 41911, 40714, 39583, 38513, 77 37500, 36538, 35625, 34756, 33928, 33139, 32386, 31666, 30978, 78 30319, 29687, 29081, 28500, 27941, 27403, 26886, 26388, 25909, 79 25446, 25000, 24568, 23949, 23360, 22800, 22265, 21755, 21268, 80 20802, 20357, 19930, 19520, 19127, 18750, 18387, 18037, 17701, 81 17378, 17065, 16764, 16473, 16101, 15745, 15405, 15079, 14766, 82 14467, 14179, 13902, 13636, 13380, 13133, 12895, 12666, 12445, 83 12179, 11924, 11632, 11445, 11220, 11003, 10795, 10594, 10401, 84 10215, 10035, 85 } 86 }; 87 88 static const int kf_boost_qadjustment[QINDEX_RANGE] = { 89 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 90 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 91 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 92 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 93 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 200, 201, 94 201, 202, 203, 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, 95 209, 209, 210, 210, 211, 211, 212, 212, 213, 213, 214, 214, 215, 215, 216, 96 216, 217, 217, 218, 218, 219, 219, 220, 220, 220, 220, 220, 220, 220, 220, 97 220, 220, 220, 220, 220, 220, 220, 220, 98 }; 99 100 /* #define GFQ_ADJUSTMENT (Q+100) */ 101 #define GFQ_ADJUSTMENT vp8_gf_boost_qadjustment[Q] 102 const int vp8_gf_boost_qadjustment[QINDEX_RANGE] = { 103 80, 82, 84, 86, 88, 90, 92, 94, 96, 97, 98, 99, 100, 101, 102, 104 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 105 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 106 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 107 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 108 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 109 178, 179, 180, 181, 182, 183, 184, 184, 185, 185, 186, 186, 187, 187, 188, 110 188, 189, 189, 190, 190, 191, 191, 192, 192, 193, 193, 194, 194, 194, 194, 111 195, 195, 196, 196, 197, 197, 198, 198 112 }; 113 114 /* 115 const int vp8_gf_boost_qadjustment[QINDEX_RANGE] = 116 { 117 100,101,102,103,104,105,105,106, 118 106,107,107,108,109,109,110,111, 119 112,113,114,115,116,117,118,119, 120 120,121,122,123,124,125,126,127, 121 128,129,130,131,132,133,134,135, 122 136,137,138,139,140,141,142,143, 123 144,145,146,147,148,149,150,151, 124 152,153,154,155,156,157,158,159, 125 160,161,162,163,164,165,166,167, 126 168,169,170,170,171,171,172,172, 127 173,173,173,174,174,174,175,175, 128 175,176,176,176,177,177,177,177, 129 178,178,179,179,180,180,181,181, 130 182,182,183,183,184,184,185,185, 131 186,186,187,187,188,188,189,189, 132 190,190,191,191,192,192,193,193, 133 }; 134 */ 135 136 static const int kf_gf_boost_qlimits[QINDEX_RANGE] = { 137 150, 155, 160, 165, 170, 175, 180, 185, 190, 195, 200, 205, 210, 215, 220, 138 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 139 300, 305, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410, 420, 430, 140 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 141 590, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 142 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 143 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 144 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 145 600, 600, 600, 600, 600, 600, 600, 600, 146 }; 147 148 static const int gf_adjust_table[101] = { 149 100, 115, 130, 145, 160, 175, 190, 200, 210, 220, 230, 240, 260, 270, 280, 150 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 400, 400, 400, 151 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 152 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 153 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 154 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 155 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 156 }; 157 158 static const int gf_intra_usage_adjustment[20] = { 159 125, 120, 115, 110, 105, 100, 95, 85, 80, 75, 160 70, 65, 60, 55, 50, 50, 50, 50, 50, 50, 161 }; 162 163 static const int gf_interval_table[101] = { 164 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 165 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 166 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 167 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 168 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 169 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 170 }; 171 172 static const unsigned int prior_key_frame_weight[KEY_FRAME_CONTEXT] = { 1, 2, 3, 173 4, 5 }; 174 175 void vp8_save_coding_context(VP8_COMP *cpi) { 176 CODING_CONTEXT *const cc = &cpi->coding_context; 177 178 /* Stores a snapshot of key state variables which can subsequently be 179 * restored with a call to vp8_restore_coding_context. These functions are 180 * intended for use in a re-code loop in vp8_compress_frame where the 181 * quantizer value is adjusted between loop iterations. 182 */ 183 184 cc->frames_since_key = cpi->frames_since_key; 185 cc->filter_level = cpi->common.filter_level; 186 cc->frames_till_gf_update_due = cpi->frames_till_gf_update_due; 187 cc->frames_since_golden = cpi->frames_since_golden; 188 189 vp8_copy(cc->mvc, cpi->common.fc.mvc); 190 vp8_copy(cc->mvcosts, cpi->rd_costs.mvcosts); 191 192 vp8_copy(cc->ymode_prob, cpi->common.fc.ymode_prob); 193 vp8_copy(cc->uv_mode_prob, cpi->common.fc.uv_mode_prob); 194 195 vp8_copy(cc->ymode_count, cpi->mb.ymode_count); 196 vp8_copy(cc->uv_mode_count, cpi->mb.uv_mode_count); 197 198 /* Stats */ 199 #ifdef MODE_STATS 200 vp8_copy(cc->y_modes, y_modes); 201 vp8_copy(cc->uv_modes, uv_modes); 202 vp8_copy(cc->b_modes, b_modes); 203 vp8_copy(cc->inter_y_modes, inter_y_modes); 204 vp8_copy(cc->inter_uv_modes, inter_uv_modes); 205 vp8_copy(cc->inter_b_modes, inter_b_modes); 206 #endif 207 208 cc->this_frame_percent_intra = cpi->this_frame_percent_intra; 209 } 210 211 void vp8_restore_coding_context(VP8_COMP *cpi) { 212 CODING_CONTEXT *const cc = &cpi->coding_context; 213 214 /* Restore key state variables to the snapshot state stored in the 215 * previous call to vp8_save_coding_context. 216 */ 217 218 cpi->frames_since_key = cc->frames_since_key; 219 cpi->common.filter_level = cc->filter_level; 220 cpi->frames_till_gf_update_due = cc->frames_till_gf_update_due; 221 cpi->frames_since_golden = cc->frames_since_golden; 222 223 vp8_copy(cpi->common.fc.mvc, cc->mvc); 224 225 vp8_copy(cpi->rd_costs.mvcosts, cc->mvcosts); 226 227 vp8_copy(cpi->common.fc.ymode_prob, cc->ymode_prob); 228 vp8_copy(cpi->common.fc.uv_mode_prob, cc->uv_mode_prob); 229 230 vp8_copy(cpi->mb.ymode_count, cc->ymode_count); 231 vp8_copy(cpi->mb.uv_mode_count, cc->uv_mode_count); 232 233 /* Stats */ 234 #ifdef MODE_STATS 235 vp8_copy(y_modes, cc->y_modes); 236 vp8_copy(uv_modes, cc->uv_modes); 237 vp8_copy(b_modes, cc->b_modes); 238 vp8_copy(inter_y_modes, cc->inter_y_modes); 239 vp8_copy(inter_uv_modes, cc->inter_uv_modes); 240 vp8_copy(inter_b_modes, cc->inter_b_modes); 241 #endif 242 243 cpi->this_frame_percent_intra = cc->this_frame_percent_intra; 244 } 245 246 void vp8_setup_key_frame(VP8_COMP *cpi) { 247 /* Setup for Key frame: */ 248 249 vp8_default_coef_probs(&cpi->common); 250 251 memcpy(cpi->common.fc.mvc, vp8_default_mv_context, 252 sizeof(vp8_default_mv_context)); 253 { 254 int flag[2] = { 1, 1 }; 255 vp8_build_component_cost_table( 256 cpi->mb.mvcost, (const MV_CONTEXT *)cpi->common.fc.mvc, flag); 257 } 258 259 /* Make sure we initialize separate contexts for altref,gold, and normal. 260 * TODO shouldn't need 3 different copies of structure to do this! 261 */ 262 memcpy(&cpi->lfc_a, &cpi->common.fc, sizeof(cpi->common.fc)); 263 memcpy(&cpi->lfc_g, &cpi->common.fc, sizeof(cpi->common.fc)); 264 memcpy(&cpi->lfc_n, &cpi->common.fc, sizeof(cpi->common.fc)); 265 266 cpi->common.filter_level = cpi->common.base_qindex * 3 / 8; 267 268 /* Provisional interval before next GF */ 269 if (cpi->auto_gold) { 270 cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; 271 } else { 272 cpi->frames_till_gf_update_due = DEFAULT_GF_INTERVAL; 273 } 274 275 cpi->common.refresh_golden_frame = 1; 276 cpi->common.refresh_alt_ref_frame = 1; 277 } 278 279 static int estimate_bits_at_q(int frame_kind, int Q, int MBs, 280 double correction_factor) { 281 int Bpm = (int)(.5 + correction_factor * vp8_bits_per_mb[frame_kind][Q]); 282 283 /* Attempt to retain reasonable accuracy without overflow. The cutoff is 284 * chosen such that the maximum product of Bpm and MBs fits 31 bits. The 285 * largest Bpm takes 20 bits. 286 */ 287 if (MBs > (1 << 11)) { 288 return (Bpm >> BPER_MB_NORMBITS) * MBs; 289 } else { 290 return (Bpm * MBs) >> BPER_MB_NORMBITS; 291 } 292 } 293 294 static void calc_iframe_target_size(VP8_COMP *cpi) { 295 /* boost defaults to half second */ 296 int kf_boost; 297 uint64_t target; 298 299 /* Clear down mmx registers to allow floating point in what follows */ 300 vpx_clear_system_state(); 301 302 if (cpi->oxcf.fixed_q >= 0) { 303 int Q = cpi->oxcf.key_q; 304 305 target = estimate_bits_at_q(INTRA_FRAME, Q, cpi->common.MBs, 306 cpi->key_frame_rate_correction_factor); 307 } else if (cpi->pass == 2) { 308 /* New Two pass RC */ 309 target = cpi->per_frame_bandwidth; 310 } 311 /* First Frame is a special case */ 312 else if (cpi->common.current_video_frame == 0) { 313 /* 1 Pass there is no information on which to base size so use 314 * bandwidth per second * fraction of the initial buffer 315 * level 316 */ 317 target = cpi->oxcf.starting_buffer_level / 2; 318 319 if (target > cpi->oxcf.target_bandwidth * 3 / 2) { 320 target = cpi->oxcf.target_bandwidth * 3 / 2; 321 } 322 } else { 323 /* if this keyframe was forced, use a more recent Q estimate */ 324 int Q = (cpi->common.frame_flags & FRAMEFLAGS_KEY) ? cpi->avg_frame_qindex 325 : cpi->ni_av_qi; 326 327 int initial_boost = 32; /* |3.0 * per_frame_bandwidth| */ 328 /* Boost depends somewhat on frame rate: only used for 1 layer case. */ 329 if (cpi->oxcf.number_of_layers == 1) { 330 kf_boost = VPXMAX(initial_boost, (int)(2 * cpi->output_framerate - 16)); 331 } else { 332 /* Initial factor: set target size to: |3.0 * per_frame_bandwidth|. */ 333 kf_boost = initial_boost; 334 } 335 336 /* adjustment up based on q: this factor ranges from ~1.2 to 2.2. */ 337 kf_boost = kf_boost * kf_boost_qadjustment[Q] / 100; 338 339 /* frame separation adjustment ( down) */ 340 if (cpi->frames_since_key < cpi->output_framerate / 2) { 341 kf_boost = 342 (int)(kf_boost * cpi->frames_since_key / (cpi->output_framerate / 2)); 343 } 344 345 /* Minimal target size is |2* per_frame_bandwidth|. */ 346 if (kf_boost < 16) kf_boost = 16; 347 348 target = ((16 + kf_boost) * cpi->per_frame_bandwidth) >> 4; 349 } 350 351 if (cpi->oxcf.rc_max_intra_bitrate_pct) { 352 unsigned int max_rate = 353 cpi->per_frame_bandwidth * cpi->oxcf.rc_max_intra_bitrate_pct / 100; 354 355 if (target > max_rate) target = max_rate; 356 } 357 358 cpi->this_frame_target = (int)target; 359 360 /* TODO: if we separate rate targeting from Q targetting, move this. 361 * Reset the active worst quality to the baseline value for key frames. 362 */ 363 if (cpi->pass != 2) cpi->active_worst_quality = cpi->worst_quality; 364 365 #if 0 366 { 367 FILE *f; 368 369 f = fopen("kf_boost.stt", "a"); 370 fprintf(f, " %8u %10d %10d %10d\n", 371 cpi->common.current_video_frame, cpi->gfu_boost, cpi->baseline_gf_interval, cpi->source_alt_ref_pending); 372 373 fclose(f); 374 } 375 #endif 376 } 377 378 /* Do the best we can to define the parameters for the next GF based on what 379 * information we have available. 380 */ 381 static void calc_gf_params(VP8_COMP *cpi) { 382 int Q = 383 (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] : cpi->oxcf.fixed_q; 384 int Boost = 0; 385 386 int gf_frame_useage = 0; /* Golden frame useage since last GF */ 387 int tot_mbs = cpi->recent_ref_frame_usage[INTRA_FRAME] + 388 cpi->recent_ref_frame_usage[LAST_FRAME] + 389 cpi->recent_ref_frame_usage[GOLDEN_FRAME] + 390 cpi->recent_ref_frame_usage[ALTREF_FRAME]; 391 392 int pct_gf_active = (100 * cpi->gf_active_count) / 393 (cpi->common.mb_rows * cpi->common.mb_cols); 394 395 if (tot_mbs) { 396 gf_frame_useage = (cpi->recent_ref_frame_usage[GOLDEN_FRAME] + 397 cpi->recent_ref_frame_usage[ALTREF_FRAME]) * 398 100 / tot_mbs; 399 } 400 401 if (pct_gf_active > gf_frame_useage) gf_frame_useage = pct_gf_active; 402 403 /* Not two pass */ 404 if (cpi->pass != 2) { 405 /* Single Pass lagged mode: TBD */ 406 if (0) { 407 } 408 409 /* Single Pass compression: Has to use current and historical data */ 410 else { 411 #if 0 412 /* Experimental code */ 413 int index = cpi->one_pass_frame_index; 414 int frames_to_scan = (cpi->max_gf_interval <= MAX_LAG_BUFFERS) ? cpi->max_gf_interval : MAX_LAG_BUFFERS; 415 416 /* ************** Experimental code - incomplete */ 417 /* 418 double decay_val = 1.0; 419 double IIAccumulator = 0.0; 420 double last_iiaccumulator = 0.0; 421 double IIRatio; 422 423 cpi->one_pass_frame_index = cpi->common.current_video_frame%MAX_LAG_BUFFERS; 424 425 for ( i = 0; i < (frames_to_scan - 1); i++ ) 426 { 427 if ( index < 0 ) 428 index = MAX_LAG_BUFFERS; 429 index --; 430 431 if ( cpi->one_pass_frame_stats[index].frame_coded_error > 0.0 ) 432 { 433 IIRatio = cpi->one_pass_frame_stats[index].frame_intra_error / cpi->one_pass_frame_stats[index].frame_coded_error; 434 435 if ( IIRatio > 30.0 ) 436 IIRatio = 30.0; 437 } 438 else 439 IIRatio = 30.0; 440 441 IIAccumulator += IIRatio * decay_val; 442 443 decay_val = decay_val * cpi->one_pass_frame_stats[index].frame_pcnt_inter; 444 445 if ( (i > MIN_GF_INTERVAL) && 446 ((IIAccumulator - last_iiaccumulator) < 2.0) ) 447 { 448 break; 449 } 450 last_iiaccumulator = IIAccumulator; 451 } 452 453 Boost = IIAccumulator*100.0/16.0; 454 cpi->baseline_gf_interval = i; 455 456 */ 457 #else 458 459 /*************************************************************/ 460 /* OLD code */ 461 462 /* Adjust boost based upon ambient Q */ 463 Boost = GFQ_ADJUSTMENT; 464 465 /* Adjust based upon most recently measure intra useage */ 466 Boost = Boost * 467 gf_intra_usage_adjustment[(cpi->this_frame_percent_intra < 15) 468 ? cpi->this_frame_percent_intra 469 : 14] / 470 100; 471 472 /* Adjust gf boost based upon GF usage since last GF */ 473 Boost = Boost * gf_adjust_table[gf_frame_useage] / 100; 474 #endif 475 } 476 477 /* golden frame boost without recode loop often goes awry. be 478 * safe by keeping numbers down. 479 */ 480 if (!cpi->sf.recode_loop) { 481 if (cpi->compressor_speed == 2) Boost = Boost / 2; 482 } 483 484 /* Apply an upper limit based on Q for 1 pass encodes */ 485 if (Boost > kf_gf_boost_qlimits[Q] && (cpi->pass == 0)) { 486 Boost = kf_gf_boost_qlimits[Q]; 487 488 /* Apply lower limits to boost. */ 489 } else if (Boost < 110) { 490 Boost = 110; 491 } 492 493 /* Note the boost used */ 494 cpi->last_boost = Boost; 495 } 496 497 /* Estimate next interval 498 * This is updated once the real frame size/boost is known. 499 */ 500 if (cpi->oxcf.fixed_q == -1) { 501 if (cpi->pass == 2) { /* 2 Pass */ 502 cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; 503 } else { /* 1 Pass */ 504 cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; 505 506 if (cpi->last_boost > 750) cpi->frames_till_gf_update_due++; 507 508 if (cpi->last_boost > 1000) cpi->frames_till_gf_update_due++; 509 510 if (cpi->last_boost > 1250) cpi->frames_till_gf_update_due++; 511 512 if (cpi->last_boost >= 1500) cpi->frames_till_gf_update_due++; 513 514 if (gf_interval_table[gf_frame_useage] > cpi->frames_till_gf_update_due) { 515 cpi->frames_till_gf_update_due = gf_interval_table[gf_frame_useage]; 516 } 517 518 if (cpi->frames_till_gf_update_due > cpi->max_gf_interval) { 519 cpi->frames_till_gf_update_due = cpi->max_gf_interval; 520 } 521 } 522 } else { 523 cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; 524 } 525 526 /* ARF on or off */ 527 if (cpi->pass != 2) { 528 /* For now Alt ref is not allowed except in 2 pass modes. */ 529 cpi->source_alt_ref_pending = 0; 530 531 /*if ( cpi->oxcf.fixed_q == -1) 532 { 533 if ( cpi->oxcf.play_alternate && (cpi->last_boost > (100 + 534 (AF_THRESH*cpi->frames_till_gf_update_due)) ) ) 535 cpi->source_alt_ref_pending = 1; 536 else 537 cpi->source_alt_ref_pending = 0; 538 }*/ 539 } 540 } 541 542 static void calc_pframe_target_size(VP8_COMP *cpi) { 543 int min_frame_target; 544 int old_per_frame_bandwidth = cpi->per_frame_bandwidth; 545 546 if (cpi->current_layer > 0) { 547 cpi->per_frame_bandwidth = 548 cpi->layer_context[cpi->current_layer].avg_frame_size_for_layer; 549 } 550 551 min_frame_target = 0; 552 553 if (cpi->pass == 2) { 554 min_frame_target = cpi->min_frame_bandwidth; 555 556 if (min_frame_target < (cpi->av_per_frame_bandwidth >> 5)) { 557 min_frame_target = cpi->av_per_frame_bandwidth >> 5; 558 } 559 } else if (min_frame_target < cpi->per_frame_bandwidth / 4) { 560 min_frame_target = cpi->per_frame_bandwidth / 4; 561 } 562 563 /* Special alt reference frame case */ 564 if ((cpi->common.refresh_alt_ref_frame) && 565 (cpi->oxcf.number_of_layers == 1)) { 566 if (cpi->pass == 2) { 567 /* Per frame bit target for the alt ref frame */ 568 cpi->per_frame_bandwidth = cpi->twopass.gf_bits; 569 cpi->this_frame_target = cpi->per_frame_bandwidth; 570 } 571 572 /* One Pass ??? TBD */ 573 } 574 575 /* Normal frames (gf,and inter) */ 576 else { 577 /* 2 pass */ 578 if (cpi->pass == 2) { 579 cpi->this_frame_target = cpi->per_frame_bandwidth; 580 } 581 /* 1 pass */ 582 else { 583 int Adjustment; 584 /* Make rate adjustment to recover bits spent in key frame 585 * Test to see if the key frame inter data rate correction 586 * should still be in force 587 */ 588 if (cpi->kf_overspend_bits > 0) { 589 Adjustment = (cpi->kf_bitrate_adjustment <= cpi->kf_overspend_bits) 590 ? cpi->kf_bitrate_adjustment 591 : cpi->kf_overspend_bits; 592 593 if (Adjustment > (cpi->per_frame_bandwidth - min_frame_target)) { 594 Adjustment = (cpi->per_frame_bandwidth - min_frame_target); 595 } 596 597 cpi->kf_overspend_bits -= Adjustment; 598 599 /* Calculate an inter frame bandwidth target for the next 600 * few frames designed to recover any extra bits spent on 601 * the key frame. 602 */ 603 cpi->this_frame_target = cpi->per_frame_bandwidth - Adjustment; 604 605 if (cpi->this_frame_target < min_frame_target) { 606 cpi->this_frame_target = min_frame_target; 607 } 608 } else { 609 cpi->this_frame_target = cpi->per_frame_bandwidth; 610 } 611 612 /* If appropriate make an adjustment to recover bits spent on a 613 * recent GF 614 */ 615 if ((cpi->gf_overspend_bits > 0) && 616 (cpi->this_frame_target > min_frame_target)) { 617 Adjustment = (cpi->non_gf_bitrate_adjustment <= cpi->gf_overspend_bits) 618 ? cpi->non_gf_bitrate_adjustment 619 : cpi->gf_overspend_bits; 620 621 if (Adjustment > (cpi->this_frame_target - min_frame_target)) { 622 Adjustment = (cpi->this_frame_target - min_frame_target); 623 } 624 625 cpi->gf_overspend_bits -= Adjustment; 626 cpi->this_frame_target -= Adjustment; 627 } 628 629 /* Apply small + and - boosts for non gf frames */ 630 if ((cpi->last_boost > 150) && (cpi->frames_till_gf_update_due > 0) && 631 (cpi->current_gf_interval >= (MIN_GF_INTERVAL << 1))) { 632 /* % Adjustment limited to the range 1% to 10% */ 633 Adjustment = (cpi->last_boost - 100) >> 5; 634 635 if (Adjustment < 1) { 636 Adjustment = 1; 637 } else if (Adjustment > 10) { 638 Adjustment = 10; 639 } 640 641 /* Convert to bits */ 642 Adjustment = (cpi->this_frame_target * Adjustment) / 100; 643 644 if (Adjustment > (cpi->this_frame_target - min_frame_target)) { 645 Adjustment = (cpi->this_frame_target - min_frame_target); 646 } 647 648 if (cpi->frames_since_golden == (cpi->current_gf_interval >> 1)) { 649 Adjustment = (cpi->current_gf_interval - 1) * Adjustment; 650 // Limit adjustment to 10% of current target. 651 if (Adjustment > (10 * cpi->this_frame_target) / 100) { 652 Adjustment = (10 * cpi->this_frame_target) / 100; 653 } 654 cpi->this_frame_target += Adjustment; 655 } else { 656 cpi->this_frame_target -= Adjustment; 657 } 658 } 659 } 660 } 661 662 /* Sanity check that the total sum of adjustments is not above the 663 * maximum allowed That is that having allowed for KF and GF penalties 664 * we have not pushed the current interframe target to low. If the 665 * adjustment we apply here is not capable of recovering all the extra 666 * bits we have spent in the KF or GF then the remainder will have to 667 * be recovered over a longer time span via other buffer / rate control 668 * mechanisms. 669 */ 670 if (cpi->this_frame_target < min_frame_target) { 671 cpi->this_frame_target = min_frame_target; 672 } 673 674 if (!cpi->common.refresh_alt_ref_frame) { 675 /* Note the baseline target data rate for this inter frame. */ 676 cpi->inter_frame_target = cpi->this_frame_target; 677 } 678 679 /* One Pass specific code */ 680 if (cpi->pass == 0) { 681 /* Adapt target frame size with respect to any buffering constraints: */ 682 if (cpi->buffered_mode) { 683 int one_percent_bits = (int)(1 + cpi->oxcf.optimal_buffer_level / 100); 684 685 if ((cpi->buffer_level < cpi->oxcf.optimal_buffer_level) || 686 (cpi->bits_off_target < cpi->oxcf.optimal_buffer_level)) { 687 int percent_low = 0; 688 689 /* Decide whether or not we need to adjust the frame data 690 * rate target. 691 * 692 * If we are are below the optimal buffer fullness level 693 * and adherence to buffering constraints is important to 694 * the end usage then adjust the per frame target. 695 */ 696 if ((cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) && 697 (cpi->buffer_level < cpi->oxcf.optimal_buffer_level)) { 698 percent_low = 699 (int)((cpi->oxcf.optimal_buffer_level - cpi->buffer_level) / 700 one_percent_bits); 701 } 702 /* Are we overshooting the long term clip data rate... */ 703 else if (cpi->bits_off_target < 0) { 704 /* Adjust per frame data target downwards to compensate. */ 705 percent_low = 706 (int)(100 * -cpi->bits_off_target / (cpi->total_byte_count * 8)); 707 } 708 709 if (percent_low > cpi->oxcf.under_shoot_pct) { 710 percent_low = cpi->oxcf.under_shoot_pct; 711 } else if (percent_low < 0) { 712 percent_low = 0; 713 } 714 715 /* lower the target bandwidth for this frame. */ 716 cpi->this_frame_target -= (cpi->this_frame_target * percent_low) / 200; 717 718 /* Are we using allowing control of active_worst_allowed_q 719 * according to buffer level. 720 */ 721 if (cpi->auto_worst_q && cpi->ni_frames > 150) { 722 int64_t critical_buffer_level; 723 724 /* For streaming applications the most important factor is 725 * cpi->buffer_level as this takes into account the 726 * specified short term buffering constraints. However, 727 * hitting the long term clip data rate target is also 728 * important. 729 */ 730 if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) { 731 /* Take the smaller of cpi->buffer_level and 732 * cpi->bits_off_target 733 */ 734 critical_buffer_level = (cpi->buffer_level < cpi->bits_off_target) 735 ? cpi->buffer_level 736 : cpi->bits_off_target; 737 } 738 /* For local file playback short term buffering constraints 739 * are less of an issue 740 */ 741 else { 742 /* Consider only how we are doing for the clip as a 743 * whole 744 */ 745 critical_buffer_level = cpi->bits_off_target; 746 } 747 748 /* Set the active worst quality based upon the selected 749 * buffer fullness number. 750 */ 751 if (critical_buffer_level < cpi->oxcf.optimal_buffer_level) { 752 if (critical_buffer_level > (cpi->oxcf.optimal_buffer_level >> 2)) { 753 int64_t qadjustment_range = cpi->worst_quality - cpi->ni_av_qi; 754 int64_t above_base = (critical_buffer_level - 755 (cpi->oxcf.optimal_buffer_level >> 2)); 756 757 /* Step active worst quality down from 758 * cpi->ni_av_qi when (critical_buffer_level == 759 * cpi->optimal_buffer_level) to 760 * cpi->worst_quality when 761 * (critical_buffer_level == 762 * cpi->optimal_buffer_level >> 2) 763 */ 764 cpi->active_worst_quality = 765 cpi->worst_quality - 766 (int)((qadjustment_range * above_base) / 767 (cpi->oxcf.optimal_buffer_level * 3 >> 2)); 768 } else { 769 cpi->active_worst_quality = cpi->worst_quality; 770 } 771 } else { 772 cpi->active_worst_quality = cpi->ni_av_qi; 773 } 774 } else { 775 cpi->active_worst_quality = cpi->worst_quality; 776 } 777 } else { 778 int percent_high = 0; 779 780 if ((cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) && 781 (cpi->buffer_level > cpi->oxcf.optimal_buffer_level)) { 782 percent_high = 783 (int)((cpi->buffer_level - cpi->oxcf.optimal_buffer_level) / 784 one_percent_bits); 785 } else if (cpi->bits_off_target > cpi->oxcf.optimal_buffer_level) { 786 percent_high = 787 (int)((100 * cpi->bits_off_target) / (cpi->total_byte_count * 8)); 788 } 789 790 if (percent_high > cpi->oxcf.over_shoot_pct) { 791 percent_high = cpi->oxcf.over_shoot_pct; 792 } else if (percent_high < 0) { 793 percent_high = 0; 794 } 795 796 cpi->this_frame_target += (cpi->this_frame_target * percent_high) / 200; 797 798 /* Are we allowing control of active_worst_allowed_q according 799 * to buffer level. 800 */ 801 if (cpi->auto_worst_q && cpi->ni_frames > 150) { 802 /* When using the relaxed buffer model stick to the 803 * user specified value 804 */ 805 cpi->active_worst_quality = cpi->ni_av_qi; 806 } else { 807 cpi->active_worst_quality = cpi->worst_quality; 808 } 809 } 810 811 /* Set active_best_quality to prevent quality rising too high */ 812 cpi->active_best_quality = cpi->best_quality; 813 814 /* Worst quality obviously must not be better than best quality */ 815 if (cpi->active_worst_quality <= cpi->active_best_quality) { 816 cpi->active_worst_quality = cpi->active_best_quality + 1; 817 } 818 819 if (cpi->active_worst_quality > 127) cpi->active_worst_quality = 127; 820 } 821 /* Unbuffered mode (eg. video conferencing) */ 822 else { 823 /* Set the active worst quality */ 824 cpi->active_worst_quality = cpi->worst_quality; 825 } 826 827 /* Special trap for constrained quality mode 828 * "active_worst_quality" may never drop below cq level 829 * for any frame type. 830 */ 831 if (cpi->oxcf.end_usage == USAGE_CONSTRAINED_QUALITY && 832 cpi->active_worst_quality < cpi->cq_target_quality) { 833 cpi->active_worst_quality = cpi->cq_target_quality; 834 } 835 } 836 837 /* Test to see if we have to drop a frame 838 * The auto-drop frame code is only used in buffered mode. 839 * In unbufferd mode (eg vide conferencing) the descision to 840 * code or drop a frame is made outside the codec in response to real 841 * world comms or buffer considerations. 842 */ 843 if (cpi->drop_frames_allowed && 844 (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) && 845 ((cpi->common.frame_type != KEY_FRAME))) { 846 /* Check for a buffer underun-crisis in which case we have to drop 847 * a frame 848 */ 849 if ((cpi->buffer_level < 0)) { 850 #if 0 851 FILE *f = fopen("dec.stt", "a"); 852 fprintf(f, "%10d %10d %10d %10d ***** BUFFER EMPTY\n", 853 (int) cpi->common.current_video_frame, 854 cpi->decimation_factor, cpi->common.horiz_scale, 855 (cpi->buffer_level * 100) / cpi->oxcf.optimal_buffer_level); 856 fclose(f); 857 #endif 858 cpi->drop_frame = 1; 859 860 /* Update the buffer level variable. */ 861 cpi->bits_off_target += cpi->av_per_frame_bandwidth; 862 if (cpi->bits_off_target > cpi->oxcf.maximum_buffer_size) { 863 cpi->bits_off_target = (int)cpi->oxcf.maximum_buffer_size; 864 } 865 cpi->buffer_level = cpi->bits_off_target; 866 867 if (cpi->oxcf.number_of_layers > 1) { 868 unsigned int i; 869 870 // Propagate bits saved by dropping the frame to higher layers. 871 for (i = cpi->current_layer + 1; i < cpi->oxcf.number_of_layers; ++i) { 872 LAYER_CONTEXT *lc = &cpi->layer_context[i]; 873 lc->bits_off_target += (int)(lc->target_bandwidth / lc->framerate); 874 if (lc->bits_off_target > lc->maximum_buffer_size) { 875 lc->bits_off_target = lc->maximum_buffer_size; 876 } 877 lc->buffer_level = lc->bits_off_target; 878 } 879 } 880 } 881 } 882 883 /* Adjust target frame size for Golden Frames: */ 884 if (cpi->oxcf.error_resilient_mode == 0 && 885 (cpi->frames_till_gf_update_due == 0) && !cpi->drop_frame) { 886 if (!cpi->gf_update_onepass_cbr) { 887 int Q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] 888 : cpi->oxcf.fixed_q; 889 890 int gf_frame_useage = 0; /* Golden frame useage since last GF */ 891 int tot_mbs = cpi->recent_ref_frame_usage[INTRA_FRAME] + 892 cpi->recent_ref_frame_usage[LAST_FRAME] + 893 cpi->recent_ref_frame_usage[GOLDEN_FRAME] + 894 cpi->recent_ref_frame_usage[ALTREF_FRAME]; 895 896 int pct_gf_active = (100 * cpi->gf_active_count) / 897 (cpi->common.mb_rows * cpi->common.mb_cols); 898 899 if (tot_mbs) { 900 gf_frame_useage = (cpi->recent_ref_frame_usage[GOLDEN_FRAME] + 901 cpi->recent_ref_frame_usage[ALTREF_FRAME]) * 902 100 / tot_mbs; 903 } 904 905 if (pct_gf_active > gf_frame_useage) gf_frame_useage = pct_gf_active; 906 907 /* Is a fixed manual GF frequency being used */ 908 if (cpi->auto_gold) { 909 /* For one pass throw a GF if recent frame intra useage is 910 * low or the GF useage is high 911 */ 912 if ((cpi->pass == 0) && 913 (cpi->this_frame_percent_intra < 15 || gf_frame_useage >= 5)) { 914 cpi->common.refresh_golden_frame = 1; 915 916 /* Two pass GF descision */ 917 } else if (cpi->pass == 2) { 918 cpi->common.refresh_golden_frame = 1; 919 } 920 } 921 922 #if 0 923 924 /* Debug stats */ 925 if (0) { 926 FILE *f; 927 928 f = fopen("gf_useaget.stt", "a"); 929 fprintf(f, " %8ld %10ld %10ld %10ld %10ld\n", 930 cpi->common.current_video_frame, cpi->gfu_boost, 931 GFQ_ADJUSTMENT, cpi->gfu_boost, gf_frame_useage); 932 fclose(f); 933 } 934 935 #endif 936 937 if (cpi->common.refresh_golden_frame == 1) { 938 #if 0 939 940 if (0) { 941 FILE *f; 942 943 f = fopen("GFexit.stt", "a"); 944 fprintf(f, "%8ld GF coded\n", cpi->common.current_video_frame); 945 fclose(f); 946 } 947 948 #endif 949 950 if (cpi->auto_adjust_gold_quantizer) { 951 calc_gf_params(cpi); 952 } 953 954 /* If we are using alternate ref instead of gf then do not apply the 955 * boost It will instead be applied to the altref update Jims 956 * modified boost 957 */ 958 if (!cpi->source_alt_ref_active) { 959 if (cpi->oxcf.fixed_q < 0) { 960 if (cpi->pass == 2) { 961 /* The spend on the GF is defined in the two pass 962 * code for two pass encodes 963 */ 964 cpi->this_frame_target = cpi->per_frame_bandwidth; 965 } else { 966 int Boost = cpi->last_boost; 967 int frames_in_section = cpi->frames_till_gf_update_due + 1; 968 int allocation_chunks = (frames_in_section * 100) + (Boost - 100); 969 int bits_in_section = cpi->inter_frame_target * frames_in_section; 970 971 /* Normalize Altboost and allocations chunck down to 972 * prevent overflow 973 */ 974 while (Boost > 1000) { 975 Boost /= 2; 976 allocation_chunks /= 2; 977 } 978 979 /* Avoid loss of precision but avoid overflow */ 980 if ((bits_in_section >> 7) > allocation_chunks) { 981 cpi->this_frame_target = 982 Boost * (bits_in_section / allocation_chunks); 983 } else { 984 cpi->this_frame_target = 985 (Boost * bits_in_section) / allocation_chunks; 986 } 987 } 988 } else { 989 cpi->this_frame_target = 990 (estimate_bits_at_q(1, Q, cpi->common.MBs, 1.0) * 991 cpi->last_boost) / 992 100; 993 } 994 } else { 995 /* If there is an active ARF at this location use the minimum 996 * bits on this frame even if it is a contructed arf. 997 * The active maximum quantizer insures that an appropriate 998 * number of bits will be spent if needed for contstructed ARFs. 999 */ 1000 cpi->this_frame_target = 0; 1001 } 1002 1003 cpi->current_gf_interval = cpi->frames_till_gf_update_due; 1004 } 1005 } else { 1006 // Special case for 1 pass CBR: fixed gf period. 1007 // TODO(marpan): Adjust this boost/interval logic. 1008 // If gf_cbr_boost_pct is small (below threshold) set the flag 1009 // gf_noboost_onepass_cbr = 1, which forces the gf to use the same 1010 // rate correction factor as last. 1011 cpi->gf_noboost_onepass_cbr = (cpi->oxcf.gf_cbr_boost_pct <= 100); 1012 cpi->baseline_gf_interval = cpi->gf_interval_onepass_cbr; 1013 // Skip this update if the zero_mvcount is low. 1014 if (cpi->zeromv_count > (cpi->common.MBs >> 1)) { 1015 cpi->common.refresh_golden_frame = 1; 1016 cpi->this_frame_target = 1017 (cpi->this_frame_target * (100 + cpi->oxcf.gf_cbr_boost_pct)) / 100; 1018 } 1019 cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; 1020 cpi->current_gf_interval = cpi->frames_till_gf_update_due; 1021 } 1022 } 1023 1024 cpi->per_frame_bandwidth = old_per_frame_bandwidth; 1025 } 1026 1027 void vp8_update_rate_correction_factors(VP8_COMP *cpi, int damp_var) { 1028 int Q = cpi->common.base_qindex; 1029 int correction_factor = 100; 1030 double rate_correction_factor; 1031 double adjustment_limit; 1032 1033 int projected_size_based_on_q = 0; 1034 1035 /* Clear down mmx registers to allow floating point in what follows */ 1036 vpx_clear_system_state(); 1037 1038 if (cpi->common.frame_type == KEY_FRAME) { 1039 rate_correction_factor = cpi->key_frame_rate_correction_factor; 1040 } else { 1041 if (cpi->oxcf.number_of_layers == 1 && !cpi->gf_noboost_onepass_cbr && 1042 (cpi->common.refresh_alt_ref_frame || 1043 cpi->common.refresh_golden_frame)) { 1044 rate_correction_factor = cpi->gf_rate_correction_factor; 1045 } else { 1046 rate_correction_factor = cpi->rate_correction_factor; 1047 } 1048 } 1049 1050 /* Work out how big we would have expected the frame to be at this Q 1051 * given the current correction factor. Stay in double to avoid int 1052 * overflow when values are large 1053 */ 1054 projected_size_based_on_q = 1055 (int)(((.5 + 1056 rate_correction_factor * 1057 vp8_bits_per_mb[cpi->common.frame_type][Q]) * 1058 cpi->common.MBs) / 1059 (1 << BPER_MB_NORMBITS)); 1060 1061 /* Make some allowance for cpi->zbin_over_quant */ 1062 if (cpi->mb.zbin_over_quant > 0) { 1063 int Z = cpi->mb.zbin_over_quant; 1064 double Factor = 0.99; 1065 double factor_adjustment = 0.01 / 256.0; 1066 1067 while (Z > 0) { 1068 Z--; 1069 projected_size_based_on_q = (int)(Factor * projected_size_based_on_q); 1070 Factor += factor_adjustment; 1071 1072 if (Factor >= 0.999) Factor = 0.999; 1073 } 1074 } 1075 1076 /* Work out a size correction factor. */ 1077 if (projected_size_based_on_q > 0) { 1078 correction_factor = 1079 (100 * cpi->projected_frame_size) / projected_size_based_on_q; 1080 } 1081 1082 /* More heavily damped adjustment used if we have been oscillating 1083 * either side of target 1084 */ 1085 switch (damp_var) { 1086 case 0: adjustment_limit = 0.75; break; 1087 case 1: adjustment_limit = 0.375; break; 1088 case 2: 1089 default: adjustment_limit = 0.25; break; 1090 } 1091 1092 if (correction_factor > 102) { 1093 /* We are not already at the worst allowable quality */ 1094 correction_factor = 1095 (int)(100.5 + ((correction_factor - 100) * adjustment_limit)); 1096 rate_correction_factor = 1097 ((rate_correction_factor * correction_factor) / 100); 1098 1099 /* Keep rate_correction_factor within limits */ 1100 if (rate_correction_factor > MAX_BPB_FACTOR) { 1101 rate_correction_factor = MAX_BPB_FACTOR; 1102 } 1103 } else if (correction_factor < 99) { 1104 /* We are not already at the best allowable quality */ 1105 correction_factor = 1106 (int)(100.5 - ((100 - correction_factor) * adjustment_limit)); 1107 rate_correction_factor = 1108 ((rate_correction_factor * correction_factor) / 100); 1109 1110 /* Keep rate_correction_factor within limits */ 1111 if (rate_correction_factor < MIN_BPB_FACTOR) { 1112 rate_correction_factor = MIN_BPB_FACTOR; 1113 } 1114 } 1115 1116 if (cpi->common.frame_type == KEY_FRAME) { 1117 cpi->key_frame_rate_correction_factor = rate_correction_factor; 1118 } else { 1119 if (cpi->oxcf.number_of_layers == 1 && !cpi->gf_noboost_onepass_cbr && 1120 (cpi->common.refresh_alt_ref_frame || 1121 cpi->common.refresh_golden_frame)) { 1122 cpi->gf_rate_correction_factor = rate_correction_factor; 1123 } else { 1124 cpi->rate_correction_factor = rate_correction_factor; 1125 } 1126 } 1127 } 1128 1129 int vp8_regulate_q(VP8_COMP *cpi, int target_bits_per_frame) { 1130 int Q = cpi->active_worst_quality; 1131 1132 if (cpi->force_maxqp == 1) { 1133 cpi->active_worst_quality = cpi->worst_quality; 1134 return cpi->worst_quality; 1135 } 1136 /* Reset Zbin OQ value */ 1137 cpi->mb.zbin_over_quant = 0; 1138 1139 if (cpi->oxcf.fixed_q >= 0) { 1140 Q = cpi->oxcf.fixed_q; 1141 1142 if (cpi->common.frame_type == KEY_FRAME) { 1143 Q = cpi->oxcf.key_q; 1144 } else if (cpi->oxcf.number_of_layers == 1 && 1145 cpi->common.refresh_alt_ref_frame && 1146 !cpi->gf_noboost_onepass_cbr) { 1147 Q = cpi->oxcf.alt_q; 1148 } else if (cpi->oxcf.number_of_layers == 1 && 1149 cpi->common.refresh_golden_frame && 1150 !cpi->gf_noboost_onepass_cbr) { 1151 Q = cpi->oxcf.gold_q; 1152 } 1153 } else { 1154 int i; 1155 int last_error = INT_MAX; 1156 int target_bits_per_mb; 1157 int bits_per_mb_at_this_q; 1158 double correction_factor; 1159 1160 /* Select the appropriate correction factor based upon type of frame. */ 1161 if (cpi->common.frame_type == KEY_FRAME) { 1162 correction_factor = cpi->key_frame_rate_correction_factor; 1163 } else { 1164 if (cpi->oxcf.number_of_layers == 1 && !cpi->gf_noboost_onepass_cbr && 1165 (cpi->common.refresh_alt_ref_frame || 1166 cpi->common.refresh_golden_frame)) { 1167 correction_factor = cpi->gf_rate_correction_factor; 1168 } else { 1169 correction_factor = cpi->rate_correction_factor; 1170 } 1171 } 1172 1173 /* Calculate required scaling factor based on target frame size and 1174 * size of frame produced using previous Q 1175 */ 1176 if (target_bits_per_frame >= (INT_MAX >> BPER_MB_NORMBITS)) { 1177 /* Case where we would overflow int */ 1178 target_bits_per_mb = (target_bits_per_frame / cpi->common.MBs) 1179 << BPER_MB_NORMBITS; 1180 } else { 1181 target_bits_per_mb = 1182 (target_bits_per_frame << BPER_MB_NORMBITS) / cpi->common.MBs; 1183 } 1184 1185 i = cpi->active_best_quality; 1186 1187 do { 1188 bits_per_mb_at_this_q = 1189 (int)(.5 + 1190 correction_factor * vp8_bits_per_mb[cpi->common.frame_type][i]); 1191 1192 if (bits_per_mb_at_this_q <= target_bits_per_mb) { 1193 if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error) { 1194 Q = i; 1195 } else { 1196 Q = i - 1; 1197 } 1198 1199 break; 1200 } else { 1201 last_error = bits_per_mb_at_this_q - target_bits_per_mb; 1202 } 1203 } while (++i <= cpi->active_worst_quality); 1204 1205 /* If we are at MAXQ then enable Q over-run which seeks to claw 1206 * back additional bits through things like the RD multiplier 1207 * and zero bin size. 1208 */ 1209 if (Q >= MAXQ) { 1210 int zbin_oqmax; 1211 1212 double Factor = 0.99; 1213 double factor_adjustment = 0.01 / 256.0; 1214 1215 if (cpi->common.frame_type == KEY_FRAME) { 1216 zbin_oqmax = 0; 1217 } else if (cpi->oxcf.number_of_layers == 1 && 1218 !cpi->gf_noboost_onepass_cbr && 1219 (cpi->common.refresh_alt_ref_frame || 1220 (cpi->common.refresh_golden_frame && 1221 !cpi->source_alt_ref_active))) { 1222 zbin_oqmax = 16; 1223 } else { 1224 zbin_oqmax = ZBIN_OQ_MAX; 1225 } 1226 1227 /*{ 1228 double Factor = 1229 (double)target_bits_per_mb/(double)bits_per_mb_at_this_q; 1230 double Oq; 1231 1232 Factor = Factor/1.2683; 1233 1234 Oq = pow( Factor, (1.0/-0.165) ); 1235 1236 if ( Oq > zbin_oqmax ) 1237 Oq = zbin_oqmax; 1238 1239 cpi->zbin_over_quant = (int)Oq; 1240 }*/ 1241 1242 /* Each incrment in the zbin is assumed to have a fixed effect 1243 * on bitrate. This is not of course true. The effect will be 1244 * highly clip dependent and may well have sudden steps. The 1245 * idea here is to acheive higher effective quantizers than the 1246 * normal maximum by expanding the zero bin and hence 1247 * decreasing the number of low magnitude non zero coefficients. 1248 */ 1249 while (cpi->mb.zbin_over_quant < zbin_oqmax) { 1250 cpi->mb.zbin_over_quant++; 1251 1252 if (cpi->mb.zbin_over_quant > zbin_oqmax) { 1253 cpi->mb.zbin_over_quant = zbin_oqmax; 1254 } 1255 1256 /* Adjust bits_per_mb_at_this_q estimate */ 1257 bits_per_mb_at_this_q = (int)(Factor * bits_per_mb_at_this_q); 1258 Factor += factor_adjustment; 1259 1260 if (Factor >= 0.999) Factor = 0.999; 1261 1262 /* Break out if we get down to the target rate */ 1263 if (bits_per_mb_at_this_q <= target_bits_per_mb) break; 1264 } 1265 } 1266 } 1267 1268 return Q; 1269 } 1270 1271 static int estimate_keyframe_frequency(VP8_COMP *cpi) { 1272 int i; 1273 1274 /* Average key frame frequency */ 1275 int av_key_frame_frequency = 0; 1276 1277 /* First key frame at start of sequence is a special case. We have no 1278 * frequency data. 1279 */ 1280 if (cpi->key_frame_count == 1) { 1281 /* Assume a default of 1 kf every 2 seconds, or the max kf interval, 1282 * whichever is smaller. 1283 */ 1284 int key_freq = cpi->oxcf.key_freq > 0 ? cpi->oxcf.key_freq : 1; 1285 av_key_frame_frequency = 1 + (int)cpi->output_framerate * 2; 1286 1287 if (cpi->oxcf.auto_key && av_key_frame_frequency > key_freq) { 1288 av_key_frame_frequency = key_freq; 1289 } 1290 1291 cpi->prior_key_frame_distance[KEY_FRAME_CONTEXT - 1] = 1292 av_key_frame_frequency; 1293 } else { 1294 unsigned int total_weight = 0; 1295 int last_kf_interval = 1296 (cpi->frames_since_key > 0) ? cpi->frames_since_key : 1; 1297 1298 /* reset keyframe context and calculate weighted average of last 1299 * KEY_FRAME_CONTEXT keyframes 1300 */ 1301 for (i = 0; i < KEY_FRAME_CONTEXT; ++i) { 1302 if (i < KEY_FRAME_CONTEXT - 1) { 1303 cpi->prior_key_frame_distance[i] = cpi->prior_key_frame_distance[i + 1]; 1304 } else { 1305 cpi->prior_key_frame_distance[i] = last_kf_interval; 1306 } 1307 1308 av_key_frame_frequency += 1309 prior_key_frame_weight[i] * cpi->prior_key_frame_distance[i]; 1310 total_weight += prior_key_frame_weight[i]; 1311 } 1312 1313 av_key_frame_frequency /= total_weight; 1314 } 1315 // TODO (marpan): Given the checks above, |av_key_frame_frequency| 1316 // should always be above 0. But for now we keep the sanity check in. 1317 if (av_key_frame_frequency == 0) av_key_frame_frequency = 1; 1318 return av_key_frame_frequency; 1319 } 1320 1321 void vp8_adjust_key_frame_context(VP8_COMP *cpi) { 1322 /* Clear down mmx registers to allow floating point in what follows */ 1323 vpx_clear_system_state(); 1324 1325 /* Do we have any key frame overspend to recover? */ 1326 /* Two-pass overspend handled elsewhere. */ 1327 if ((cpi->pass != 2) && 1328 (cpi->projected_frame_size > cpi->per_frame_bandwidth)) { 1329 int overspend; 1330 1331 /* Update the count of key frame overspend to be recovered in 1332 * subsequent frames. A portion of the KF overspend is treated as gf 1333 * overspend (and hence recovered more quickly) as the kf is also a 1334 * gf. Otherwise the few frames following each kf tend to get more 1335 * bits allocated than those following other gfs. 1336 */ 1337 overspend = (cpi->projected_frame_size - cpi->per_frame_bandwidth); 1338 1339 if (cpi->oxcf.number_of_layers > 1) { 1340 cpi->kf_overspend_bits += overspend; 1341 } else { 1342 cpi->kf_overspend_bits += overspend * 7 / 8; 1343 cpi->gf_overspend_bits += overspend * 1 / 8; 1344 } 1345 1346 /* Work out how much to try and recover per frame. */ 1347 cpi->kf_bitrate_adjustment = 1348 cpi->kf_overspend_bits / estimate_keyframe_frequency(cpi); 1349 } 1350 1351 cpi->frames_since_key = 0; 1352 cpi->key_frame_count++; 1353 } 1354 1355 void vp8_compute_frame_size_bounds(VP8_COMP *cpi, int *frame_under_shoot_limit, 1356 int *frame_over_shoot_limit) { 1357 /* Set-up bounds on acceptable frame size: */ 1358 if (cpi->oxcf.fixed_q >= 0) { 1359 /* Fixed Q scenario: frame size never outranges target 1360 * (there is no target!) 1361 */ 1362 *frame_under_shoot_limit = 0; 1363 *frame_over_shoot_limit = INT_MAX; 1364 } else { 1365 if (cpi->common.frame_type == KEY_FRAME) { 1366 *frame_over_shoot_limit = cpi->this_frame_target * 9 / 8; 1367 *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8; 1368 } else { 1369 if (cpi->oxcf.number_of_layers > 1 || cpi->common.refresh_alt_ref_frame || 1370 cpi->common.refresh_golden_frame) { 1371 *frame_over_shoot_limit = cpi->this_frame_target * 9 / 8; 1372 *frame_under_shoot_limit = cpi->this_frame_target * 7 / 8; 1373 } else { 1374 /* For CBR take buffer fullness into account */ 1375 if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) { 1376 if (cpi->buffer_level >= ((cpi->oxcf.optimal_buffer_level + 1377 cpi->oxcf.maximum_buffer_size) >> 1378 1)) { 1379 /* Buffer is too full so relax overshoot and tighten 1380 * undershoot 1381 */ 1382 *frame_over_shoot_limit = cpi->this_frame_target * 12 / 8; 1383 *frame_under_shoot_limit = cpi->this_frame_target * 6 / 8; 1384 } else if (cpi->buffer_level <= 1385 (cpi->oxcf.optimal_buffer_level >> 1)) { 1386 /* Buffer is too low so relax undershoot and tighten 1387 * overshoot 1388 */ 1389 *frame_over_shoot_limit = cpi->this_frame_target * 10 / 8; 1390 *frame_under_shoot_limit = cpi->this_frame_target * 4 / 8; 1391 } else { 1392 *frame_over_shoot_limit = cpi->this_frame_target * 11 / 8; 1393 *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8; 1394 } 1395 } 1396 /* VBR and CQ mode */ 1397 /* Note that tighter restrictions here can help quality 1398 * but hurt encode speed 1399 */ 1400 else { 1401 /* Stron overshoot limit for constrained quality */ 1402 if (cpi->oxcf.end_usage == USAGE_CONSTRAINED_QUALITY) { 1403 *frame_over_shoot_limit = cpi->this_frame_target * 11 / 8; 1404 *frame_under_shoot_limit = cpi->this_frame_target * 2 / 8; 1405 } else { 1406 *frame_over_shoot_limit = cpi->this_frame_target * 11 / 8; 1407 *frame_under_shoot_limit = cpi->this_frame_target * 5 / 8; 1408 } 1409 } 1410 } 1411 } 1412 1413 /* For very small rate targets where the fractional adjustment 1414 * (eg * 7/8) may be tiny make sure there is at least a minimum 1415 * range. 1416 */ 1417 *frame_over_shoot_limit += 200; 1418 *frame_under_shoot_limit -= 200; 1419 if (*frame_under_shoot_limit < 0) *frame_under_shoot_limit = 0; 1420 } 1421 } 1422 1423 /* return of 0 means drop frame */ 1424 int vp8_pick_frame_size(VP8_COMP *cpi) { 1425 VP8_COMMON *cm = &cpi->common; 1426 1427 if (cm->frame_type == KEY_FRAME) { 1428 calc_iframe_target_size(cpi); 1429 } else { 1430 calc_pframe_target_size(cpi); 1431 1432 /* Check if we're dropping the frame: */ 1433 if (cpi->drop_frame) { 1434 cpi->drop_frame = 0; 1435 return 0; 1436 } 1437 } 1438 return 1; 1439 } 1440 // If this just encoded frame (mcomp/transform/quant, but before loopfilter and 1441 // pack_bitstream) has large overshoot, and was not being encoded close to the 1442 // max QP, then drop this frame and force next frame to be encoded at max QP. 1443 // Allow this for screen_content_mode = 2, or if drop frames is allowed. 1444 // TODO(marpan): Should do this exit condition during the encode_frame 1445 // (i.e., halfway during the encoding of the frame) to save cycles. 1446 int vp8_drop_encodedframe_overshoot(VP8_COMP *cpi, int Q) { 1447 int force_drop_overshoot = 0; 1448 #if CONFIG_MULTI_RES_ENCODING 1449 // Only check for dropping due to overshoot on the lowest stream. 1450 // If the lowest stream of the multi-res encoding was dropped due to 1451 // overshoot, then force dropping on all upper layer streams 1452 // (mr_encoder_id > 0). 1453 LOWER_RES_FRAME_INFO *low_res_frame_info = 1454 (LOWER_RES_FRAME_INFO *)cpi->oxcf.mr_low_res_mode_info; 1455 if (cpi->oxcf.mr_total_resolutions > 1 && cpi->oxcf.mr_encoder_id > 0) { 1456 force_drop_overshoot = low_res_frame_info->is_frame_dropped_overshoot_maxqp; 1457 if (!force_drop_overshoot) { 1458 cpi->force_maxqp = 0; 1459 cpi->frames_since_last_drop_overshoot++; 1460 return 0; 1461 } 1462 } 1463 #endif 1464 if (cpi->common.frame_type != KEY_FRAME && 1465 (cpi->oxcf.screen_content_mode == 2 || 1466 (cpi->drop_frames_allowed && 1467 (force_drop_overshoot || 1468 (cpi->rate_correction_factor < (4.0f * MIN_BPB_FACTOR) && 1469 cpi->frames_since_last_drop_overshoot > (int)cpi->framerate))))) { 1470 // Note: the "projected_frame_size" from encode_frame() only gives estimate 1471 // of mode/motion vector rate (in non-rd mode): so below we only require 1472 // that projected_frame_size is somewhat greater than per-frame-bandwidth, 1473 // but add additional condition with high threshold on prediction residual. 1474 1475 // QP threshold: only allow dropping if we are not close to qp_max. 1476 int thresh_qp = 3 * cpi->worst_quality >> 2; 1477 // Rate threshold, in bytes. 1478 int thresh_rate = 2 * (cpi->av_per_frame_bandwidth >> 3); 1479 // Threshold for the average (over all macroblocks) of the pixel-sum 1480 // residual error over 16x16 block. 1481 int thresh_pred_err_mb = (200 << 4); 1482 int pred_err_mb = (int)(cpi->mb.prediction_error / cpi->common.MBs); 1483 // Reduce/ignore thresh_rate if pred_err_mb much larger than its threshold, 1484 // give more weight to pred_err metric for overshoot detection. 1485 if (cpi->drop_frames_allowed && pred_err_mb > (thresh_pred_err_mb << 4)) 1486 thresh_rate = thresh_rate >> 3; 1487 if ((Q < thresh_qp && cpi->projected_frame_size > thresh_rate && 1488 pred_err_mb > thresh_pred_err_mb) || 1489 force_drop_overshoot) { 1490 unsigned int i; 1491 double new_correction_factor; 1492 int target_bits_per_mb; 1493 const int target_size = cpi->av_per_frame_bandwidth; 1494 // Flag to indicate we will force next frame to be encoded at max QP. 1495 cpi->force_maxqp = 1; 1496 // Reset the buffer levels. 1497 cpi->buffer_level = cpi->oxcf.optimal_buffer_level; 1498 cpi->bits_off_target = cpi->oxcf.optimal_buffer_level; 1499 // Compute a new rate correction factor, corresponding to the current 1500 // target frame size and max_QP, and adjust the rate correction factor 1501 // upwards, if needed. 1502 // This is to prevent a bad state where the re-encoded frame at max_QP 1503 // undershoots significantly, and then we end up dropping every other 1504 // frame because the QP/rate_correction_factor may have been too low 1505 // before the drop and then takes too long to come up. 1506 if (target_size >= (INT_MAX >> BPER_MB_NORMBITS)) { 1507 target_bits_per_mb = (target_size / cpi->common.MBs) 1508 << BPER_MB_NORMBITS; 1509 } else { 1510 target_bits_per_mb = 1511 (target_size << BPER_MB_NORMBITS) / cpi->common.MBs; 1512 } 1513 // Rate correction factor based on target_size_per_mb and max_QP. 1514 new_correction_factor = 1515 (double)target_bits_per_mb / 1516 (double)vp8_bits_per_mb[INTER_FRAME][cpi->worst_quality]; 1517 if (new_correction_factor > cpi->rate_correction_factor) { 1518 cpi->rate_correction_factor = 1519 VPXMIN(2.0 * cpi->rate_correction_factor, new_correction_factor); 1520 } 1521 if (cpi->rate_correction_factor > MAX_BPB_FACTOR) { 1522 cpi->rate_correction_factor = MAX_BPB_FACTOR; 1523 } 1524 // Drop this frame: update frame counters. 1525 cpi->common.current_video_frame++; 1526 cpi->frames_since_key++; 1527 cpi->temporal_pattern_counter++; 1528 cpi->frames_since_last_drop_overshoot = 0; 1529 if (cpi->oxcf.number_of_layers > 1) { 1530 // Set max_qp and rate correction for all temporal layers if overshoot 1531 // is detected. 1532 for (i = 0; i < cpi->oxcf.number_of_layers; ++i) { 1533 LAYER_CONTEXT *lc = &cpi->layer_context[i]; 1534 lc->force_maxqp = 1; 1535 lc->frames_since_last_drop_overshoot = 0; 1536 lc->rate_correction_factor = cpi->rate_correction_factor; 1537 } 1538 } 1539 #if CONFIG_MULTI_RES_ENCODING 1540 if (cpi->oxcf.mr_total_resolutions > 1) 1541 low_res_frame_info->is_frame_dropped_overshoot_maxqp = 1; 1542 #endif 1543 return 1; 1544 } 1545 cpi->force_maxqp = 0; 1546 cpi->frames_since_last_drop_overshoot++; 1547 #if CONFIG_MULTI_RES_ENCODING 1548 if (cpi->oxcf.mr_total_resolutions > 1) 1549 low_res_frame_info->is_frame_dropped_overshoot_maxqp = 0; 1550 #endif 1551 return 0; 1552 } 1553 cpi->force_maxqp = 0; 1554 cpi->frames_since_last_drop_overshoot++; 1555 #if CONFIG_MULTI_RES_ENCODING 1556 if (cpi->oxcf.mr_total_resolutions > 1) 1557 low_res_frame_info->is_frame_dropped_overshoot_maxqp = 0; 1558 #endif 1559 return 0; 1560 } 1561