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 19 matching lines...) Expand all Loading... |
30 #include "vp9/encoder/vp9_lookahead.h" | 30 #include "vp9/encoder/vp9_lookahead.h" |
31 #include "vp9/encoder/vp9_mbgraph.h" | 31 #include "vp9/encoder/vp9_mbgraph.h" |
32 #include "vp9/encoder/vp9_mcomp.h" | 32 #include "vp9/encoder/vp9_mcomp.h" |
33 #include "vp9/encoder/vp9_quantize.h" | 33 #include "vp9/encoder/vp9_quantize.h" |
34 #include "vp9/encoder/vp9_ratectrl.h" | 34 #include "vp9/encoder/vp9_ratectrl.h" |
35 #include "vp9/encoder/vp9_rd.h" | 35 #include "vp9/encoder/vp9_rd.h" |
36 #include "vp9/encoder/vp9_speed_features.h" | 36 #include "vp9/encoder/vp9_speed_features.h" |
37 #include "vp9/encoder/vp9_svc_layercontext.h" | 37 #include "vp9/encoder/vp9_svc_layercontext.h" |
38 #include "vp9/encoder/vp9_tokenize.h" | 38 #include "vp9/encoder/vp9_tokenize.h" |
39 #include "vp9/encoder/vp9_variance.h" | 39 #include "vp9/encoder/vp9_variance.h" |
40 #if CONFIG_DENOISING | 40 #if CONFIG_VP9_TEMPORAL_DENOISING |
41 #include "vp9/encoder/vp9_denoiser.h" | 41 #include "vp9/encoder/vp9_denoiser.h" |
42 #endif | 42 #endif |
43 | 43 |
44 #ifdef __cplusplus | 44 #ifdef __cplusplus |
45 extern "C" { | 45 extern "C" { |
46 #endif | 46 #endif |
47 | 47 |
48 #define DEFAULT_GF_INTERVAL 10 | 48 #define DEFAULT_GF_INTERVAL 10 |
49 | 49 |
50 typedef struct { | 50 typedef struct { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 CYCLIC_REFRESH_AQ = 3, | 127 CYCLIC_REFRESH_AQ = 3, |
128 AQ_MODE_COUNT // This should always be the last member of the enum | 128 AQ_MODE_COUNT // This should always be the last member of the enum |
129 } AQ_MODE; | 129 } AQ_MODE; |
130 | 130 |
131 | 131 |
132 typedef struct VP9EncoderConfig { | 132 typedef struct VP9EncoderConfig { |
133 BITSTREAM_PROFILE profile; | 133 BITSTREAM_PROFILE profile; |
134 BIT_DEPTH bit_depth; | 134 BIT_DEPTH bit_depth; |
135 int width; // width of data passed to the compressor | 135 int width; // width of data passed to the compressor |
136 int height; // height of data passed to the compressor | 136 int height; // height of data passed to the compressor |
137 double framerate; // set to passed in framerate | 137 double init_framerate; // set to passed in framerate |
138 int64_t target_bandwidth; // bandwidth to be used in kilobits per second | 138 int64_t target_bandwidth; // bandwidth to be used in kilobits per second |
139 | 139 |
140 int noise_sensitivity; // pre processing blur: recommendation 0 | 140 int noise_sensitivity; // pre processing blur: recommendation 0 |
141 int sharpness; // sharpening output: recommendation 0: | 141 int sharpness; // sharpening output: recommendation 0: |
142 int speed; | 142 int speed; |
143 unsigned int rc_max_intra_bitrate_pct; | 143 unsigned int rc_max_intra_bitrate_pct; |
144 | 144 |
145 MODE mode; | 145 MODE mode; |
| 146 int pass; |
146 | 147 |
147 // Key Framing Operations | 148 // Key Framing Operations |
148 int auto_key; // autodetect cut scenes and set the keyframes | 149 int auto_key; // autodetect cut scenes and set the keyframes |
149 int key_freq; // maximum distance to key frame. | 150 int key_freq; // maximum distance to key frame. |
150 | 151 |
151 int lag_in_frames; // how many frames lag before we start encoding | 152 int lag_in_frames; // how many frames lag before we start encoding |
152 | 153 |
153 // ---------------------------------------------------------------- | 154 // ---------------------------------------------------------------- |
154 // DATARATE CONTROL OPTIONS | 155 // DATARATE CONTROL OPTIONS |
155 | 156 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 int tile_rows; | 226 int tile_rows; |
226 | 227 |
227 struct vpx_fixed_buf two_pass_stats_in; | 228 struct vpx_fixed_buf two_pass_stats_in; |
228 struct vpx_codec_pkt_list *output_pkt_list; | 229 struct vpx_codec_pkt_list *output_pkt_list; |
229 | 230 |
230 #if CONFIG_FP_MB_STATS | 231 #if CONFIG_FP_MB_STATS |
231 struct vpx_fixed_buf firstpass_mb_stats_in; | 232 struct vpx_fixed_buf firstpass_mb_stats_in; |
232 #endif | 233 #endif |
233 | 234 |
234 vp8e_tuning tuning; | 235 vp8e_tuning tuning; |
| 236 vp9e_tune_content content; |
235 } VP9EncoderConfig; | 237 } VP9EncoderConfig; |
236 | 238 |
237 static INLINE int is_lossless_requested(const VP9EncoderConfig *cfg) { | 239 static INLINE int is_lossless_requested(const VP9EncoderConfig *cfg) { |
238 return cfg->best_allowed_q == 0 && cfg->worst_allowed_q == 0; | 240 return cfg->best_allowed_q == 0 && cfg->worst_allowed_q == 0; |
239 } | 241 } |
240 | 242 |
241 static INLINE int is_best_mode(MODE mode) { | 243 static INLINE int is_best_mode(MODE mode) { |
242 return mode == ONE_PASS_BEST || mode == TWO_PASS_SECOND_BEST; | 244 return mode == ONE_PASS_BEST || mode == TWO_PASS_SECOND_BEST; |
243 } | 245 } |
244 | 246 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 | 291 |
290 // Ambient reconstruction err target for force key frames | 292 // Ambient reconstruction err target for force key frames |
291 int ambient_err; | 293 int ambient_err; |
292 | 294 |
293 RD_OPT rd; | 295 RD_OPT rd; |
294 | 296 |
295 CODING_CONTEXT coding_context; | 297 CODING_CONTEXT coding_context; |
296 | 298 |
297 int zbin_mode_boost; | 299 int zbin_mode_boost; |
298 int zbin_mode_boost_enabled; | 300 int zbin_mode_boost_enabled; |
299 int active_arnr_frames; // <= cpi->oxcf.arnr_max_frames | |
300 int active_arnr_strength; // <= cpi->oxcf.arnr_max_strength | |
301 | 301 |
302 int64_t last_time_stamp_seen; | 302 int64_t last_time_stamp_seen; |
303 int64_t last_end_time_stamp_seen; | 303 int64_t last_end_time_stamp_seen; |
304 int64_t first_time_stamp_ever; | 304 int64_t first_time_stamp_ever; |
305 | 305 |
306 RATE_CONTROL rc; | 306 RATE_CONTROL rc; |
| 307 double framerate; |
307 | 308 |
308 vp9_coeff_count coef_counts[TX_SIZES][PLANE_TYPES]; | 309 vp9_coeff_count coef_counts[TX_SIZES][PLANE_TYPES]; |
309 | 310 |
310 struct vpx_codec_pkt_list *output_pkt_list; | 311 struct vpx_codec_pkt_list *output_pkt_list; |
311 | 312 |
312 MBGRAPH_FRAME_STATS mbgraph_stats[MAX_LAG_BUFFERS]; | 313 MBGRAPH_FRAME_STATS mbgraph_stats[MAX_LAG_BUFFERS]; |
313 int mbgraph_n_frames; // number of frames filled in the above | 314 int mbgraph_n_frames; // number of frames filled in the above |
314 int static_mb_pct; // % forced skip mbs by segmentation | 315 int static_mb_pct; // % forced skip mbs by segmentation |
315 | |
316 int pass; | |
317 | |
318 int ref_frame_flags; | 316 int ref_frame_flags; |
319 | 317 |
320 SPEED_FEATURES sf; | 318 SPEED_FEATURES sf; |
321 | 319 |
322 unsigned int max_mv_magnitude; | 320 unsigned int max_mv_magnitude; |
323 int mv_step_param; | 321 int mv_step_param; |
324 | 322 |
325 // Default value is 1. From first pass stats, encode_breakout may be disabled. | 323 // Default value is 1. From first pass stats, encode_breakout may be disabled. |
326 ENCODE_BREAKOUT_TYPE allow_encode_breakout; | 324 ENCODE_BREAKOUT_TYPE allow_encode_breakout; |
327 | 325 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 | 421 |
424 PICK_MODE_CONTEXT *leaf_tree; | 422 PICK_MODE_CONTEXT *leaf_tree; |
425 PC_TREE *pc_tree; | 423 PC_TREE *pc_tree; |
426 PC_TREE *pc_root; | 424 PC_TREE *pc_root; |
427 int partition_cost[PARTITION_CONTEXTS][PARTITION_TYPES]; | 425 int partition_cost[PARTITION_CONTEXTS][PARTITION_TYPES]; |
428 | 426 |
429 int multi_arf_allowed; | 427 int multi_arf_allowed; |
430 int multi_arf_enabled; | 428 int multi_arf_enabled; |
431 int multi_arf_last_grp_enabled; | 429 int multi_arf_last_grp_enabled; |
432 | 430 |
433 #if CONFIG_DENOISING | 431 #if CONFIG_VP9_TEMPORAL_DENOISING |
434 VP9_DENOISER denoiser; | 432 VP9_DENOISER denoiser; |
435 #endif | 433 #endif |
436 } VP9_COMP; | 434 } VP9_COMP; |
437 | 435 |
438 void vp9_initialize_enc(); | 436 void vp9_initialize_enc(); |
439 | 437 |
440 struct VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf); | 438 struct VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf); |
441 void vp9_remove_compressor(VP9_COMP *cpi); | 439 void vp9_remove_compressor(VP9_COMP *cpi); |
442 | 440 |
443 void vp9_change_config(VP9_COMP *cpi, const VP9EncoderConfig *oxcf); | 441 void vp9_change_config(VP9_COMP *cpi, const VP9EncoderConfig *oxcf); |
(...skipping 11 matching lines...) Expand all Loading... |
455 int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest, | 453 int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest, |
456 vp9_ppflags_t *flags); | 454 vp9_ppflags_t *flags); |
457 | 455 |
458 int vp9_use_as_reference(VP9_COMP *cpi, int ref_frame_flags); | 456 int vp9_use_as_reference(VP9_COMP *cpi, int ref_frame_flags); |
459 | 457 |
460 void vp9_update_reference(VP9_COMP *cpi, int ref_frame_flags); | 458 void vp9_update_reference(VP9_COMP *cpi, int ref_frame_flags); |
461 | 459 |
462 int vp9_copy_reference_enc(VP9_COMP *cpi, VP9_REFFRAME ref_frame_flag, | 460 int vp9_copy_reference_enc(VP9_COMP *cpi, VP9_REFFRAME ref_frame_flag, |
463 YV12_BUFFER_CONFIG *sd); | 461 YV12_BUFFER_CONFIG *sd); |
464 | 462 |
465 int vp9_get_reference_enc(VP9_COMP *cpi, int index, | |
466 YV12_BUFFER_CONFIG **fb); | |
467 | |
468 int vp9_set_reference_enc(VP9_COMP *cpi, VP9_REFFRAME ref_frame_flag, | 463 int vp9_set_reference_enc(VP9_COMP *cpi, VP9_REFFRAME ref_frame_flag, |
469 YV12_BUFFER_CONFIG *sd); | 464 YV12_BUFFER_CONFIG *sd); |
470 | 465 |
471 int vp9_update_entropy(VP9_COMP *cpi, int update); | 466 int vp9_update_entropy(VP9_COMP *cpi, int update); |
472 | 467 |
473 int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map, int rows, int cols); | 468 int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map, int rows, int cols); |
474 | 469 |
475 int vp9_set_internal_size(VP9_COMP *cpi, | 470 int vp9_set_internal_size(VP9_COMP *cpi, |
476 VPX_SCALING horiz_mode, VPX_SCALING vert_mode); | 471 VPX_SCALING horiz_mode, VPX_SCALING vert_mode); |
477 | 472 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 int64_t vp9_rescale(int64_t val, int64_t num, int denom); | 523 int64_t vp9_rescale(int64_t val, int64_t num, int denom); |
529 | 524 |
530 void vp9_set_high_precision_mv(VP9_COMP *cpi, int allow_high_precision_mv); | 525 void vp9_set_high_precision_mv(VP9_COMP *cpi, int allow_high_precision_mv); |
531 | 526 |
532 YV12_BUFFER_CONFIG *vp9_scale_if_required(VP9_COMMON *cm, | 527 YV12_BUFFER_CONFIG *vp9_scale_if_required(VP9_COMMON *cm, |
533 YV12_BUFFER_CONFIG *unscaled, | 528 YV12_BUFFER_CONFIG *unscaled, |
534 YV12_BUFFER_CONFIG *scaled); | 529 YV12_BUFFER_CONFIG *scaled); |
535 | 530 |
536 void vp9_apply_encoding_flags(VP9_COMP *cpi, vpx_enc_frame_flags_t flags); | 531 void vp9_apply_encoding_flags(VP9_COMP *cpi, vpx_enc_frame_flags_t flags); |
537 | 532 |
| 533 static INLINE int is_spatial_svc(const struct VP9_COMP *const cpi) { |
| 534 return cpi->use_svc && |
| 535 cpi->svc.number_temporal_layers == 1 && |
| 536 cpi->svc.number_spatial_layers > 1; |
| 537 } |
| 538 |
538 static INLINE int is_altref_enabled(const VP9_COMP *const cpi) { | 539 static INLINE int is_altref_enabled(const VP9_COMP *const cpi) { |
539 return cpi->oxcf.mode != REALTIME && cpi->oxcf.lag_in_frames > 0 && | 540 return cpi->oxcf.mode != REALTIME && cpi->oxcf.lag_in_frames > 0 && |
540 (cpi->oxcf.play_alternate && | 541 (cpi->oxcf.play_alternate && |
541 (!(cpi->use_svc && cpi->svc.number_temporal_layers == 1) || | 542 (!is_spatial_svc(cpi) || |
542 cpi->oxcf.ss_play_alternate[cpi->svc.spatial_layer_id])); | 543 cpi->oxcf.ss_play_alternate[cpi->svc.spatial_layer_id])); |
543 } | 544 } |
544 | 545 |
545 static INLINE void set_ref_ptrs(VP9_COMMON *cm, MACROBLOCKD *xd, | 546 static INLINE void set_ref_ptrs(VP9_COMMON *cm, MACROBLOCKD *xd, |
546 MV_REFERENCE_FRAME ref0, | 547 MV_REFERENCE_FRAME ref0, |
547 MV_REFERENCE_FRAME ref1) { | 548 MV_REFERENCE_FRAME ref1) { |
548 xd->block_refs[0] = &cm->frame_refs[ref0 >= LAST_FRAME ? ref0 - LAST_FRAME | 549 xd->block_refs[0] = &cm->frame_refs[ref0 >= LAST_FRAME ? ref0 - LAST_FRAME |
549 : 0]; | 550 : 0]; |
550 xd->block_refs[1] = &cm->frame_refs[ref1 >= LAST_FRAME ? ref1 - LAST_FRAME | 551 xd->block_refs[1] = &cm->frame_refs[ref1 >= LAST_FRAME ? ref1 - LAST_FRAME |
551 : 0]; | 552 : 0]; |
552 } | 553 } |
553 | 554 |
554 static INLINE int get_chessboard_index(const VP9_COMMON *cm) { | 555 static INLINE int get_chessboard_index(const int frame_index) { |
555 return cm->current_video_frame % 2; | 556 return frame_index & 0x1; |
556 } | 557 } |
557 | 558 |
558 #ifdef __cplusplus | 559 #ifdef __cplusplus |
559 } // extern "C" | 560 } // extern "C" |
560 #endif | 561 #endif |
561 | 562 |
562 #endif // VP9_ENCODER_VP9_ENCODER_H_ | 563 #endif // VP9_ENCODER_VP9_ENCODER_H_ |
OLD | NEW |