OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 | 52 |
53 static int kfboost_qadjust(int qindex) { | 53 static int kfboost_qadjust(int qindex) { |
54 const double q = vp9_convert_qindex_to_q(qindex); | 54 const double q = vp9_convert_qindex_to_q(qindex); |
55 return (int)((0.00000973 * q * q * q) + | 55 return (int)((0.00000973 * q * q * q) + |
56 (-0.00613 * q * q) + | 56 (-0.00613 * q * q) + |
57 (1.316 * q) + 121.2); | 57 (1.316 * q) + 121.2); |
58 } | 58 } |
59 | 59 |
60 int vp9_bits_per_mb(FRAME_TYPE frame_type, int qindex, | 60 int vp9_bits_per_mb(FRAME_TYPE frame_type, int qindex, |
61 double correction_factor) { | 61 double correction_factor) { |
62 | |
63 const double q = vp9_convert_qindex_to_q(qindex); | 62 const double q = vp9_convert_qindex_to_q(qindex); |
64 int enumerator = frame_type == KEY_FRAME ? 4000000 : 2500000; | 63 int enumerator = frame_type == KEY_FRAME ? 3300000 : 2250000; |
65 | 64 |
66 // q based adjustment to baseline enumerator | 65 // q based adjustment to baseline enumerator |
67 enumerator += (int)(enumerator * q) >> 12; | 66 enumerator += (int)(enumerator * q) >> 12; |
68 return (int)(0.5 + (enumerator * correction_factor / q)); | 67 return (int)(0.5 + (enumerator * correction_factor / q)); |
69 } | 68 } |
70 | 69 |
71 void vp9_save_coding_context(VP9_COMP *cpi) { | 70 void vp9_save_coding_context(VP9_COMP *cpi) { |
72 CODING_CONTEXT *const cc = &cpi->coding_context; | 71 CODING_CONTEXT *const cc = &cpi->coding_context; |
73 VP9_COMMON *cm = &cpi->common; | 72 VP9_COMMON *cm = &cpi->common; |
74 | 73 |
75 // Stores a snapshot of key state variables which can subsequently be | 74 // Stores a snapshot of key state variables which can subsequently be |
76 // restored with a call to vp9_restore_coding_context. These functions are | 75 // restored with a call to vp9_restore_coding_context. These functions are |
77 // intended for use in a re-code loop in vp9_compress_frame where the | 76 // intended for use in a re-code loop in vp9_compress_frame where the |
78 // quantizer value is adjusted between loop iterations. | 77 // quantizer value is adjusted between loop iterations. |
79 | |
80 cc->nmvc = cm->fc.nmvc; | |
81 vp9_copy(cc->nmvjointcost, cpi->mb.nmvjointcost); | 78 vp9_copy(cc->nmvjointcost, cpi->mb.nmvjointcost); |
82 vp9_copy(cc->nmvcosts, cpi->mb.nmvcosts); | 79 vp9_copy(cc->nmvcosts, cpi->mb.nmvcosts); |
83 vp9_copy(cc->nmvcosts_hp, cpi->mb.nmvcosts_hp); | 80 vp9_copy(cc->nmvcosts_hp, cpi->mb.nmvcosts_hp); |
84 | 81 |
85 vp9_copy(cc->inter_mode_probs, cm->fc.inter_mode_probs); | |
86 | |
87 vp9_copy(cc->y_mode_prob, cm->fc.y_mode_prob); | |
88 vp9_copy(cc->uv_mode_prob, cm->fc.uv_mode_prob); | |
89 vp9_copy(cc->partition_prob, cm->fc.partition_prob); | |
90 | |
91 vp9_copy(cc->segment_pred_probs, cm->seg.pred_probs); | 82 vp9_copy(cc->segment_pred_probs, cm->seg.pred_probs); |
92 | 83 |
93 vp9_copy(cc->intra_inter_prob, cm->fc.intra_inter_prob); | |
94 vp9_copy(cc->comp_inter_prob, cm->fc.comp_inter_prob); | |
95 vp9_copy(cc->single_ref_prob, cm->fc.single_ref_prob); | |
96 vp9_copy(cc->comp_ref_prob, cm->fc.comp_ref_prob); | |
97 | |
98 vpx_memcpy(cpi->coding_context.last_frame_seg_map_copy, | 84 vpx_memcpy(cpi->coding_context.last_frame_seg_map_copy, |
99 cm->last_frame_seg_map, (cm->mi_rows * cm->mi_cols)); | 85 cm->last_frame_seg_map, (cm->mi_rows * cm->mi_cols)); |
100 | 86 |
101 vp9_copy(cc->last_ref_lf_deltas, cm->lf.last_ref_deltas); | 87 vp9_copy(cc->last_ref_lf_deltas, cm->lf.last_ref_deltas); |
102 vp9_copy(cc->last_mode_lf_deltas, cm->lf.last_mode_deltas); | 88 vp9_copy(cc->last_mode_lf_deltas, cm->lf.last_mode_deltas); |
103 | 89 |
104 vp9_copy(cc->coef_probs, cm->fc.coef_probs); | 90 cc->fc = cm->fc; |
105 vp9_copy(cc->switchable_interp_prob, cm->fc.switchable_interp_prob); | |
106 cc->tx_probs = cm->fc.tx_probs; | |
107 vp9_copy(cc->mbskip_probs, cm->fc.mbskip_probs); | |
108 } | 91 } |
109 | 92 |
110 void vp9_restore_coding_context(VP9_COMP *cpi) { | 93 void vp9_restore_coding_context(VP9_COMP *cpi) { |
111 CODING_CONTEXT *const cc = &cpi->coding_context; | 94 CODING_CONTEXT *const cc = &cpi->coding_context; |
112 VP9_COMMON *cm = &cpi->common; | 95 VP9_COMMON *cm = &cpi->common; |
113 | 96 |
114 // Restore key state variables to the snapshot state stored in the | 97 // Restore key state variables to the snapshot state stored in the |
115 // previous call to vp9_save_coding_context. | 98 // previous call to vp9_save_coding_context. |
116 | |
117 cm->fc.nmvc = cc->nmvc; | |
118 vp9_copy(cpi->mb.nmvjointcost, cc->nmvjointcost); | 99 vp9_copy(cpi->mb.nmvjointcost, cc->nmvjointcost); |
119 vp9_copy(cpi->mb.nmvcosts, cc->nmvcosts); | 100 vp9_copy(cpi->mb.nmvcosts, cc->nmvcosts); |
120 vp9_copy(cpi->mb.nmvcosts_hp, cc->nmvcosts_hp); | 101 vp9_copy(cpi->mb.nmvcosts_hp, cc->nmvcosts_hp); |
121 | 102 |
122 vp9_copy(cm->fc.inter_mode_probs, cc->inter_mode_probs); | |
123 | |
124 vp9_copy(cm->fc.y_mode_prob, cc->y_mode_prob); | |
125 vp9_copy(cm->fc.uv_mode_prob, cc->uv_mode_prob); | |
126 vp9_copy(cm->fc.partition_prob, cc->partition_prob); | |
127 | |
128 vp9_copy(cm->seg.pred_probs, cc->segment_pred_probs); | 103 vp9_copy(cm->seg.pred_probs, cc->segment_pred_probs); |
129 | 104 |
130 vp9_copy(cm->fc.intra_inter_prob, cc->intra_inter_prob); | |
131 vp9_copy(cm->fc.comp_inter_prob, cc->comp_inter_prob); | |
132 vp9_copy(cm->fc.single_ref_prob, cc->single_ref_prob); | |
133 vp9_copy(cm->fc.comp_ref_prob, cc->comp_ref_prob); | |
134 | |
135 vpx_memcpy(cm->last_frame_seg_map, | 105 vpx_memcpy(cm->last_frame_seg_map, |
136 cpi->coding_context.last_frame_seg_map_copy, | 106 cpi->coding_context.last_frame_seg_map_copy, |
137 (cm->mi_rows * cm->mi_cols)); | 107 (cm->mi_rows * cm->mi_cols)); |
138 | 108 |
139 vp9_copy(cm->lf.last_ref_deltas, cc->last_ref_lf_deltas); | 109 vp9_copy(cm->lf.last_ref_deltas, cc->last_ref_lf_deltas); |
140 vp9_copy(cm->lf.last_mode_deltas, cc->last_mode_lf_deltas); | 110 vp9_copy(cm->lf.last_mode_deltas, cc->last_mode_lf_deltas); |
141 | 111 |
142 vp9_copy(cm->fc.coef_probs, cc->coef_probs); | 112 cm->fc = cc->fc; |
143 vp9_copy(cm->fc.switchable_interp_prob, cc->switchable_interp_prob); | |
144 cm->fc.tx_probs = cc->tx_probs; | |
145 vp9_copy(cm->fc.mbskip_probs, cc->mbskip_probs); | |
146 } | 113 } |
147 | 114 |
148 void vp9_setup_key_frame(VP9_COMP *cpi) { | 115 void vp9_setup_key_frame(VP9_COMP *cpi) { |
149 VP9_COMMON *cm = &cpi->common; | 116 VP9_COMMON *cm = &cpi->common; |
150 | 117 |
151 vp9_setup_past_independence(cm); | 118 vp9_setup_past_independence(cm); |
152 | 119 |
153 // interval before next GF | 120 // interval before next GF |
154 cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; | 121 cpi->frames_till_gf_update_due = cpi->baseline_gf_interval; |
155 /* All buffers are implicitly updated on key frames. */ | 122 /* All buffers are implicitly updated on key frames. */ |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 if (cpi->refresh_alt_ref_frame) { | 184 if (cpi->refresh_alt_ref_frame) { |
218 // Special alt reference frame case | 185 // Special alt reference frame case |
219 // Per frame bit target for the alt ref frame | 186 // Per frame bit target for the alt ref frame |
220 cpi->per_frame_bandwidth = cpi->twopass.gf_bits; | 187 cpi->per_frame_bandwidth = cpi->twopass.gf_bits; |
221 cpi->this_frame_target = cpi->per_frame_bandwidth; | 188 cpi->this_frame_target = cpi->per_frame_bandwidth; |
222 } else { | 189 } else { |
223 // Normal frames (gf,and inter) | 190 // Normal frames (gf,and inter) |
224 cpi->this_frame_target = cpi->per_frame_bandwidth; | 191 cpi->this_frame_target = cpi->per_frame_bandwidth; |
225 } | 192 } |
226 | 193 |
227 // Sanity check that the total sum of adjustments is not above the maximum all
owed | 194 // Check that the total sum of adjustments is not above the maximum allowed. |
228 // That is that having allowed for KF and GF penalties we have not pushed the | 195 // That is, having allowed for the KF and GF penalties, we have not pushed |
229 // current interframe target to low. If the adjustment we apply here is not ca
pable of recovering | 196 // the current inter-frame target too low. If the adjustment we apply here is |
230 // all the extra bits we have spent in the KF or GF then the remainder will ha
ve to be recovered over | 197 // not capable of recovering all the extra bits we have spent in the KF or GF, |
231 // a longer time span via other buffer / rate control mechanisms. | 198 // then the remainder will have to be recovered over a longer time span via |
| 199 // other buffer / rate control mechanisms. |
232 if (cpi->this_frame_target < min_frame_target) | 200 if (cpi->this_frame_target < min_frame_target) |
233 cpi->this_frame_target = min_frame_target; | 201 cpi->this_frame_target = min_frame_target; |
234 | 202 |
235 if (!cpi->refresh_alt_ref_frame) | 203 if (!cpi->refresh_alt_ref_frame) |
236 // Note the baseline target data rate for this inter frame. | 204 // Note the baseline target data rate for this inter frame. |
237 cpi->inter_frame_target = cpi->this_frame_target; | 205 cpi->inter_frame_target = cpi->this_frame_target; |
238 | 206 |
239 // Adjust target frame size for Golden Frames: | 207 // Adjust target frame size for Golden Frames: |
240 if (cpi->frames_till_gf_update_due == 0) { | 208 if (cpi->frames_till_gf_update_due == 0) { |
241 const int q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] | 209 const int q = (cpi->oxcf.fixed_q < 0) ? cpi->last_q[INTER_FRAME] |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 } | 258 } |
291 | 259 |
292 // Work out how big we would have expected the frame to be at this Q given | 260 // Work out how big we would have expected the frame to be at this Q given |
293 // the current correction factor. | 261 // the current correction factor. |
294 // Stay in double to avoid int overflow when values are large | 262 // Stay in double to avoid int overflow when values are large |
295 projected_size_based_on_q = estimate_bits_at_q(cpi->common.frame_type, q, | 263 projected_size_based_on_q = estimate_bits_at_q(cpi->common.frame_type, q, |
296 cpi->common.MBs, | 264 cpi->common.MBs, |
297 rate_correction_factor); | 265 rate_correction_factor); |
298 | 266 |
299 // Work out a size correction factor. | 267 // Work out a size correction factor. |
300 // if ( cpi->this_frame_target > 0 ) | |
301 // correction_factor = (100 * cpi->projected_frame_size) / cpi->this_frame_ta
rget; | |
302 if (projected_size_based_on_q > 0) | 268 if (projected_size_based_on_q > 0) |
303 correction_factor = (100 * cpi->projected_frame_size) / projected_size_based
_on_q; | 269 correction_factor = |
| 270 (100 * cpi->projected_frame_size) / projected_size_based_on_q; |
304 | 271 |
305 // More heavily damped adjustment used if we have been oscillating either side
of target | 272 // More heavily damped adjustment used if we have been oscillating either side |
| 273 // of target. |
306 switch (damp_var) { | 274 switch (damp_var) { |
307 case 0: | 275 case 0: |
308 adjustment_limit = 0.75; | 276 adjustment_limit = 0.75; |
309 break; | 277 break; |
310 case 1: | 278 case 1: |
311 adjustment_limit = 0.375; | 279 adjustment_limit = 0.375; |
312 break; | 280 break; |
313 case 2: | 281 case 2: |
314 default: | 282 default: |
315 adjustment_limit = 0.25; | 283 adjustment_limit = 0.25; |
316 break; | 284 break; |
317 } | 285 } |
318 | 286 |
319 // if ( (correction_factor > 102) && (Q < cpi->active_worst_quality) ) | 287 // if ( (correction_factor > 102) && (Q < cpi->active_worst_quality) ) |
320 if (correction_factor > 102) { | 288 if (correction_factor > 102) { |
321 // We are not already at the worst allowable quality | 289 // We are not already at the worst allowable quality |
322 correction_factor = (int)(100.5 + ((correction_factor - 100) * adjustment_li
mit)); | 290 correction_factor = |
323 rate_correction_factor = ((rate_correction_factor * correction_factor) / 100
); | 291 (int)(100 + ((correction_factor - 100) * adjustment_limit)); |
| 292 rate_correction_factor = |
| 293 ((rate_correction_factor * correction_factor) / 100); |
324 | 294 |
325 // Keep rate_correction_factor within limits | 295 // Keep rate_correction_factor within limits |
326 if (rate_correction_factor > MAX_BPB_FACTOR) | 296 if (rate_correction_factor > MAX_BPB_FACTOR) |
327 rate_correction_factor = MAX_BPB_FACTOR; | 297 rate_correction_factor = MAX_BPB_FACTOR; |
328 } | 298 } else if (correction_factor < 99) { |
329 // else if ( (correction_factor < 99) && (Q > cpi->active_best_quality) ) | |
330 else if (correction_factor < 99) { | |
331 // We are not already at the best allowable quality | 299 // We are not already at the best allowable quality |
332 correction_factor = (int)(100.5 - ((100 - correction_factor) * adjustment_li
mit)); | 300 correction_factor = |
333 rate_correction_factor = ((rate_correction_factor * correction_factor) / 100
); | 301 (int)(100 - ((100 - correction_factor) * adjustment_limit)); |
| 302 rate_correction_factor = |
| 303 ((rate_correction_factor * correction_factor) / 100); |
334 | 304 |
335 // Keep rate_correction_factor within limits | 305 // Keep rate_correction_factor within limits |
336 if (rate_correction_factor < MIN_BPB_FACTOR) | 306 if (rate_correction_factor < MIN_BPB_FACTOR) |
337 rate_correction_factor = MIN_BPB_FACTOR; | 307 rate_correction_factor = MIN_BPB_FACTOR; |
338 } | 308 } |
339 | 309 |
340 if (cpi->common.frame_type == KEY_FRAME) | 310 if (cpi->common.frame_type == KEY_FRAME) { |
341 cpi->key_frame_rate_correction_factor = rate_correction_factor; | 311 cpi->key_frame_rate_correction_factor = rate_correction_factor; |
342 else { | 312 } else { |
343 if (cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame) | 313 if (cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame) |
344 cpi->gf_rate_correction_factor = rate_correction_factor; | 314 cpi->gf_rate_correction_factor = rate_correction_factor; |
345 else | 315 else |
346 cpi->rate_correction_factor = rate_correction_factor; | 316 cpi->rate_correction_factor = rate_correction_factor; |
347 } | 317 } |
348 } | 318 } |
349 | 319 |
350 | 320 |
351 int vp9_regulate_q(VP9_COMP *cpi, int target_bits_per_frame) { | 321 int vp9_regulate_q(VP9_COMP *cpi, int target_bits_per_frame) { |
352 int q = cpi->active_worst_quality; | 322 int q = cpi->active_worst_quality; |
353 | 323 |
354 int i; | 324 int i; |
355 int last_error = INT_MAX; | 325 int last_error = INT_MAX; |
356 int target_bits_per_mb; | 326 int target_bits_per_mb; |
357 int bits_per_mb_at_this_q; | 327 int bits_per_mb_at_this_q; |
358 double correction_factor; | 328 double correction_factor; |
359 | 329 |
360 // Select the appropriate correction factor based upon type of frame. | 330 // Select the appropriate correction factor based upon type of frame. |
361 if (cpi->common.frame_type == KEY_FRAME) | 331 if (cpi->common.frame_type == KEY_FRAME) { |
362 correction_factor = cpi->key_frame_rate_correction_factor; | 332 correction_factor = cpi->key_frame_rate_correction_factor; |
363 else { | 333 } else { |
364 if (cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame) | 334 if (cpi->refresh_alt_ref_frame || cpi->refresh_golden_frame) |
365 correction_factor = cpi->gf_rate_correction_factor; | 335 correction_factor = cpi->gf_rate_correction_factor; |
366 else | 336 else |
367 correction_factor = cpi->rate_correction_factor; | 337 correction_factor = cpi->rate_correction_factor; |
368 } | 338 } |
369 | 339 |
370 // Calculate required scaling factor based on target frame size and size of fr
ame produced using previous Q | 340 // Calculate required scaling factor based on target frame size and size of |
| 341 // frame produced using previous Q. |
371 if (target_bits_per_frame >= (INT_MAX >> BPER_MB_NORMBITS)) | 342 if (target_bits_per_frame >= (INT_MAX >> BPER_MB_NORMBITS)) |
372 target_bits_per_mb = (target_bits_per_frame / cpi->common.MBs) << BPER_MB_NO
RMBITS; // Case where we would overflow int | 343 target_bits_per_mb = |
| 344 (target_bits_per_frame / cpi->common.MBs) |
| 345 << BPER_MB_NORMBITS; // Case where we would overflow int |
373 else | 346 else |
374 target_bits_per_mb = (target_bits_per_frame << BPER_MB_NORMBITS) / cpi->comm
on.MBs; | 347 target_bits_per_mb = |
| 348 (target_bits_per_frame << BPER_MB_NORMBITS) / cpi->common.MBs; |
375 | 349 |
376 i = cpi->active_best_quality; | 350 i = cpi->active_best_quality; |
377 | 351 |
378 do { | 352 do { |
379 bits_per_mb_at_this_q = (int)vp9_bits_per_mb(cpi->common.frame_type, i, | 353 bits_per_mb_at_this_q = (int)vp9_bits_per_mb(cpi->common.frame_type, i, |
380 correction_factor); | 354 correction_factor); |
381 | 355 |
382 if (bits_per_mb_at_this_q <= target_bits_per_mb) { | 356 if (bits_per_mb_at_this_q <= target_bits_per_mb) { |
383 if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error) | 357 if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error) |
384 q = i; | 358 q = i; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 = cpi->prior_key_frame_distance[i + 1]; | 404 = cpi->prior_key_frame_distance[i + 1]; |
431 else | 405 else |
432 cpi->prior_key_frame_distance[i] = last_kf_interval; | 406 cpi->prior_key_frame_distance[i] = last_kf_interval; |
433 | 407 |
434 av_key_frame_frequency += prior_key_frame_weight[i] | 408 av_key_frame_frequency += prior_key_frame_weight[i] |
435 * cpi->prior_key_frame_distance[i]; | 409 * cpi->prior_key_frame_distance[i]; |
436 total_weight += prior_key_frame_weight[i]; | 410 total_weight += prior_key_frame_weight[i]; |
437 } | 411 } |
438 | 412 |
439 av_key_frame_frequency /= total_weight; | 413 av_key_frame_frequency /= total_weight; |
440 | |
441 } | 414 } |
442 return av_key_frame_frequency; | 415 return av_key_frame_frequency; |
443 } | 416 } |
444 | 417 |
445 | 418 |
446 void vp9_adjust_key_frame_context(VP9_COMP *cpi) { | 419 void vp9_adjust_key_frame_context(VP9_COMP *cpi) { |
447 // Clear down mmx registers to allow floating point in what follows | 420 // Clear down mmx registers to allow floating point in what follows |
448 vp9_clear_system_state(); | 421 vp9_clear_system_state(); |
449 | 422 |
450 cpi->frames_since_key = 0; | 423 cpi->frames_since_key = 0; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 int vp9_pick_frame_size(VP9_COMP *cpi) { | 467 int vp9_pick_frame_size(VP9_COMP *cpi) { |
495 VP9_COMMON *cm = &cpi->common; | 468 VP9_COMMON *cm = &cpi->common; |
496 | 469 |
497 if (cm->frame_type == KEY_FRAME) | 470 if (cm->frame_type == KEY_FRAME) |
498 calc_iframe_target_size(cpi); | 471 calc_iframe_target_size(cpi); |
499 else | 472 else |
500 calc_pframe_target_size(cpi); | 473 calc_pframe_target_size(cpi); |
501 | 474 |
502 return 1; | 475 return 1; |
503 } | 476 } |
OLD | NEW |