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