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