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