Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(551)

Side by Side Diff: source/libvpx/vp9/vp9_cx_iface.c

Issue 756673003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/encoder/x86/vp9_quantize_sse2.c ('k') | source/libvpx/vp9/vp9cx.mk » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 15 matching lines...) Expand all
26 unsigned int noise_sensitivity; 26 unsigned int noise_sensitivity;
27 unsigned int sharpness; 27 unsigned int sharpness;
28 unsigned int static_thresh; 28 unsigned int static_thresh;
29 unsigned int tile_columns; 29 unsigned int tile_columns;
30 unsigned int tile_rows; 30 unsigned int tile_rows;
31 unsigned int arnr_max_frames; 31 unsigned int arnr_max_frames;
32 unsigned int arnr_strength; 32 unsigned int arnr_strength;
33 vp8e_tuning tuning; 33 vp8e_tuning tuning;
34 unsigned int cq_level; // constrained quality level 34 unsigned int cq_level; // constrained quality level
35 unsigned int rc_max_intra_bitrate_pct; 35 unsigned int rc_max_intra_bitrate_pct;
36 unsigned int rc_max_inter_bitrate_pct;
37 unsigned int gf_cbr_boost_pct;
36 unsigned int lossless; 38 unsigned int lossless;
37 unsigned int frame_parallel_decoding_mode; 39 unsigned int frame_parallel_decoding_mode;
38 AQ_MODE aq_mode; 40 AQ_MODE aq_mode;
39 unsigned int frame_periodic_boost; 41 unsigned int frame_periodic_boost;
40 vpx_bit_depth_t bit_depth; 42 vpx_bit_depth_t bit_depth;
41 vp9e_tune_content content; 43 vp9e_tune_content content;
42 }; 44 };
43 45
44 static struct vp9_extracfg default_extra_cfg = { 46 static struct vp9_extracfg default_extra_cfg = {
45 0, // cpu_used 47 0, // cpu_used
46 1, // enable_auto_alt_ref 48 1, // enable_auto_alt_ref
47 0, // noise_sensitivity 49 0, // noise_sensitivity
48 0, // sharpness 50 0, // sharpness
49 0, // static_thresh 51 0, // static_thresh
50 0, // tile_columns 52 0, // tile_columns
51 0, // tile_rows 53 0, // tile_rows
52 7, // arnr_max_frames 54 7, // arnr_max_frames
53 5, // arnr_strength 55 5, // arnr_strength
54 VP8_TUNE_PSNR, // tuning 56 VP8_TUNE_PSNR, // tuning
55 10, // cq_level 57 10, // cq_level
56 0, // rc_max_intra_bitrate_pct 58 0, // rc_max_intra_bitrate_pct
59 0, // rc_max_inter_bitrate_pct
60 0, // gf_cbr_boost_pct
57 0, // lossless 61 0, // lossless
58 0, // frame_parallel_decoding_mode 62 0, // frame_parallel_decoding_mode
59 NO_AQ, // aq_mode 63 NO_AQ, // aq_mode
60 0, // frame_periodic_delta_q 64 0, // frame_periodic_delta_q
61 VPX_BITS_8, // Bit depth 65 VPX_BITS_8, // Bit depth
62 VP9E_CONTENT_DEFAULT // content 66 VP9E_CONTENT_DEFAULT // content
63 }; 67 };
64 68
65 struct vpx_codec_alg_priv { 69 struct vpx_codec_alg_priv {
66 vpx_codec_priv_t base; 70 vpx_codec_priv_t base;
67 vpx_codec_enc_cfg_t cfg; 71 vpx_codec_enc_cfg_t cfg;
68 struct vp9_extracfg extra_cfg; 72 struct vp9_extracfg extra_cfg;
69 VP9EncoderConfig oxcf; 73 VP9EncoderConfig oxcf;
70 VP9_COMP *cpi; 74 VP9_COMP *cpi;
71 unsigned char *cx_data; 75 unsigned char *cx_data;
72 size_t cx_data_sz; 76 size_t cx_data_sz;
73 unsigned char *pending_cx_data; 77 unsigned char *pending_cx_data;
74 size_t pending_cx_data_sz; 78 size_t pending_cx_data_sz;
75 int pending_frame_count; 79 int pending_frame_count;
76 size_t pending_frame_sizes[8]; 80 size_t pending_frame_sizes[8];
77 size_t pending_frame_magnitude; 81 size_t pending_frame_magnitude;
78 vpx_image_t preview_img; 82 vpx_image_t preview_img;
79 vp8_postproc_cfg_t preview_ppcfg; 83 vp8_postproc_cfg_t preview_ppcfg;
80 vpx_codec_pkt_list_decl(256) pkt_list; 84 vpx_codec_pkt_list_decl(256) pkt_list;
81 unsigned int fixed_kf_cntr; 85 unsigned int fixed_kf_cntr;
86 vpx_codec_priv_output_cx_pkt_cb_pair_t output_cx_pkt_cb;
82 }; 87 };
83 88
84 static VP9_REFFRAME ref_frame_to_vp9_reframe(vpx_ref_frame_type_t frame) { 89 static VP9_REFFRAME ref_frame_to_vp9_reframe(vpx_ref_frame_type_t frame) {
85 switch (frame) { 90 switch (frame) {
86 case VP8_LAST_FRAME: 91 case VP8_LAST_FRAME:
87 return VP9_LAST_FLAG; 92 return VP9_LAST_FLAG;
88 case VP8_GOLD_FRAME: 93 case VP8_GOLD_FRAME:
89 return VP9_GOLD_FLAG; 94 return VP9_GOLD_FLAG;
90 case VP8_ALTR_FRAME: 95 case VP8_ALTR_FRAME:
91 return VP9_ALT_FLAG; 96 return VP9_ALT_FLAG;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 RANGE_CHECK_HI(cfg, rc_overshoot_pct, 1000); 156 RANGE_CHECK_HI(cfg, rc_overshoot_pct, 1000);
152 RANGE_CHECK_HI(cfg, rc_2pass_vbr_bias_pct, 100); 157 RANGE_CHECK_HI(cfg, rc_2pass_vbr_bias_pct, 100);
153 RANGE_CHECK(cfg, kf_mode, VPX_KF_DISABLED, VPX_KF_AUTO); 158 RANGE_CHECK(cfg, kf_mode, VPX_KF_DISABLED, VPX_KF_AUTO);
154 RANGE_CHECK_BOOL(cfg, rc_resize_allowed); 159 RANGE_CHECK_BOOL(cfg, rc_resize_allowed);
155 RANGE_CHECK_HI(cfg, rc_dropframe_thresh, 100); 160 RANGE_CHECK_HI(cfg, rc_dropframe_thresh, 100);
156 RANGE_CHECK_HI(cfg, rc_resize_up_thresh, 100); 161 RANGE_CHECK_HI(cfg, rc_resize_up_thresh, 100);
157 RANGE_CHECK_HI(cfg, rc_resize_down_thresh, 100); 162 RANGE_CHECK_HI(cfg, rc_resize_down_thresh, 100);
158 RANGE_CHECK(cfg, g_pass, VPX_RC_ONE_PASS, VPX_RC_LAST_PASS); 163 RANGE_CHECK(cfg, g_pass, VPX_RC_ONE_PASS, VPX_RC_LAST_PASS);
159 164
160 if (cfg->rc_resize_allowed == 1) { 165 if (cfg->rc_resize_allowed == 1) {
161 RANGE_CHECK(cfg, rc_scaled_width, 1, cfg->g_w); 166 RANGE_CHECK(cfg, rc_scaled_width, 0, cfg->g_w);
162 RANGE_CHECK(cfg, rc_scaled_height, 1, cfg->g_h); 167 RANGE_CHECK(cfg, rc_scaled_height, 0, cfg->g_h);
163 } 168 }
164 169
165 RANGE_CHECK(cfg, ss_number_layers, 1, VPX_SS_MAX_LAYERS); 170 RANGE_CHECK(cfg, ss_number_layers, 1, VPX_SS_MAX_LAYERS);
166 RANGE_CHECK(cfg, ts_number_layers, 1, VPX_TS_MAX_LAYERS); 171 RANGE_CHECK(cfg, ts_number_layers, 1, VPX_TS_MAX_LAYERS);
167 172
168 if (cfg->ts_number_layers > 1) { 173 if (cfg->ts_number_layers > 1) {
169 unsigned int i; 174 unsigned int i;
170 for (i = 1; i < cfg->ts_number_layers; ++i) 175 for (i = 1; i < cfg->ts_number_layers; ++i)
171 if (cfg->ts_target_bitrate[i] < cfg->ts_target_bitrate[i - 1]) 176 if (cfg->ts_target_bitrate[i] < cfg->ts_target_bitrate[i - 1])
172 ERROR("ts_target_bitrate entries are not increasing"); 177 ERROR("ts_target_bitrate entries are not increasing");
(...skipping 22 matching lines...) Expand all
195 #endif 200 #endif
196 201
197 // VP9 does not support a lower bound on the keyframe interval in 202 // VP9 does not support a lower bound on the keyframe interval in
198 // automatic keyframe placement mode. 203 // automatic keyframe placement mode.
199 if (cfg->kf_mode != VPX_KF_DISABLED && 204 if (cfg->kf_mode != VPX_KF_DISABLED &&
200 cfg->kf_min_dist != cfg->kf_max_dist && 205 cfg->kf_min_dist != cfg->kf_max_dist &&
201 cfg->kf_min_dist > 0) 206 cfg->kf_min_dist > 0)
202 ERROR("kf_min_dist not supported in auto mode, use 0 " 207 ERROR("kf_min_dist not supported in auto mode, use 0 "
203 "or kf_max_dist instead."); 208 "or kf_max_dist instead.");
204 209
205 RANGE_CHECK_BOOL(extra_cfg, enable_auto_alt_ref); 210 RANGE_CHECK(extra_cfg, enable_auto_alt_ref, 0, 2);
206 RANGE_CHECK(extra_cfg, cpu_used, -16, 16); 211 RANGE_CHECK(extra_cfg, cpu_used, -16, 16);
207 RANGE_CHECK_HI(extra_cfg, noise_sensitivity, 6); 212 RANGE_CHECK_HI(extra_cfg, noise_sensitivity, 6);
208 RANGE_CHECK(extra_cfg, tile_columns, 0, 6); 213 RANGE_CHECK(extra_cfg, tile_columns, 0, 6);
209 RANGE_CHECK(extra_cfg, tile_rows, 0, 2); 214 RANGE_CHECK(extra_cfg, tile_rows, 0, 2);
210 RANGE_CHECK_HI(extra_cfg, sharpness, 7); 215 RANGE_CHECK_HI(extra_cfg, sharpness, 7);
211 RANGE_CHECK(extra_cfg, arnr_max_frames, 0, 15); 216 RANGE_CHECK(extra_cfg, arnr_max_frames, 0, 15);
212 RANGE_CHECK_HI(extra_cfg, arnr_strength, 6); 217 RANGE_CHECK_HI(extra_cfg, arnr_strength, 6);
213 RANGE_CHECK(extra_cfg, cq_level, 0, 63); 218 RANGE_CHECK(extra_cfg, cq_level, 0, 63);
214 RANGE_CHECK(cfg, g_bit_depth, VPX_BITS_8, VPX_BITS_12); 219 RANGE_CHECK(cfg, g_bit_depth, VPX_BITS_8, VPX_BITS_12);
215 RANGE_CHECK(cfg, g_input_bit_depth, 8, 12); 220 RANGE_CHECK(cfg, g_input_bit_depth, 8, 12);
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 break; 378 break;
374 } 379 }
375 380
376 oxcf->lag_in_frames = cfg->g_pass == VPX_RC_FIRST_PASS ? 0 381 oxcf->lag_in_frames = cfg->g_pass == VPX_RC_FIRST_PASS ? 0
377 : cfg->g_lag_in_frames; 382 : cfg->g_lag_in_frames;
378 oxcf->rc_mode = cfg->rc_end_usage; 383 oxcf->rc_mode = cfg->rc_end_usage;
379 384
380 // Convert target bandwidth from Kbit/s to Bit/s 385 // Convert target bandwidth from Kbit/s to Bit/s
381 oxcf->target_bandwidth = 1000 * cfg->rc_target_bitrate; 386 oxcf->target_bandwidth = 1000 * cfg->rc_target_bitrate;
382 oxcf->rc_max_intra_bitrate_pct = extra_cfg->rc_max_intra_bitrate_pct; 387 oxcf->rc_max_intra_bitrate_pct = extra_cfg->rc_max_intra_bitrate_pct;
388 oxcf->rc_max_inter_bitrate_pct = extra_cfg->rc_max_inter_bitrate_pct;
389 oxcf->gf_cbr_boost_pct = extra_cfg->gf_cbr_boost_pct;
383 390
384 oxcf->best_allowed_q = 391 oxcf->best_allowed_q =
385 extra_cfg->lossless ? 0 : vp9_quantizer_to_qindex(cfg->rc_min_quantizer); 392 extra_cfg->lossless ? 0 : vp9_quantizer_to_qindex(cfg->rc_min_quantizer);
386 oxcf->worst_allowed_q = 393 oxcf->worst_allowed_q =
387 extra_cfg->lossless ? 0 : vp9_quantizer_to_qindex(cfg->rc_max_quantizer); 394 extra_cfg->lossless ? 0 : vp9_quantizer_to_qindex(cfg->rc_max_quantizer);
388 oxcf->cq_level = vp9_quantizer_to_qindex(extra_cfg->cq_level); 395 oxcf->cq_level = vp9_quantizer_to_qindex(extra_cfg->cq_level);
389 oxcf->fixed_q = -1; 396 oxcf->fixed_q = -1;
390 397
391 oxcf->under_shoot_pct = cfg->rc_undershoot_pct; 398 oxcf->under_shoot_pct = cfg->rc_undershoot_pct;
392 oxcf->over_shoot_pct = cfg->rc_overshoot_pct; 399 oxcf->over_shoot_pct = cfg->rc_overshoot_pct;
393 400
394 oxcf->allow_spatial_resampling = cfg->rc_resize_allowed; 401 oxcf->scaled_frame_width = cfg->rc_scaled_width;
395 oxcf->scaled_frame_width = cfg->rc_scaled_width; 402 oxcf->scaled_frame_height = cfg->rc_scaled_height;
396 oxcf->scaled_frame_height = cfg->rc_scaled_height; 403 if (cfg->rc_resize_allowed == 1) {
404 oxcf->resize_mode =
405 (oxcf->scaled_frame_width == 0 || oxcf->scaled_frame_height == 0) ?
406 RESIZE_DYNAMIC : RESIZE_FIXED;
407 } else {
408 oxcf->resize_mode = RESIZE_NONE;
409 }
397 410
398 oxcf->maximum_buffer_size_ms = is_vbr ? 240000 : cfg->rc_buf_sz; 411 oxcf->maximum_buffer_size_ms = is_vbr ? 240000 : cfg->rc_buf_sz;
399 oxcf->starting_buffer_level_ms = is_vbr ? 60000 : cfg->rc_buf_initial_sz; 412 oxcf->starting_buffer_level_ms = is_vbr ? 60000 : cfg->rc_buf_initial_sz;
400 oxcf->optimal_buffer_level_ms = is_vbr ? 60000 : cfg->rc_buf_optimal_sz; 413 oxcf->optimal_buffer_level_ms = is_vbr ? 60000 : cfg->rc_buf_optimal_sz;
401 414
402 oxcf->drop_frames_water_mark = cfg->rc_dropframe_thresh; 415 oxcf->drop_frames_water_mark = cfg->rc_dropframe_thresh;
403 416
404 oxcf->two_pass_vbrbias = cfg->rc_2pass_vbr_bias_pct; 417 oxcf->two_pass_vbrbias = cfg->rc_2pass_vbr_bias_pct;
405 oxcf->two_pass_vbrmin_section = cfg->rc_2pass_vbr_minsection_pct; 418 oxcf->two_pass_vbrmin_section = cfg->rc_2pass_vbr_minsection_pct;
406 oxcf->two_pass_vbrmax_section = cfg->rc_2pass_vbr_maxsection_pct; 419 oxcf->two_pass_vbrmax_section = cfg->rc_2pass_vbr_maxsection_pct;
407 420
408 oxcf->auto_key = cfg->kf_mode == VPX_KF_AUTO && 421 oxcf->auto_key = cfg->kf_mode == VPX_KF_AUTO &&
409 cfg->kf_min_dist != cfg->kf_max_dist; 422 cfg->kf_min_dist != cfg->kf_max_dist;
410 423
411 oxcf->key_freq = cfg->kf_max_dist; 424 oxcf->key_freq = cfg->kf_max_dist;
412 425
413 oxcf->speed = abs(extra_cfg->cpu_used); 426 oxcf->speed = abs(extra_cfg->cpu_used);
414 oxcf->encode_breakout = extra_cfg->static_thresh; 427 oxcf->encode_breakout = extra_cfg->static_thresh;
415 oxcf->play_alternate = extra_cfg->enable_auto_alt_ref; 428 oxcf->enable_auto_arf = extra_cfg->enable_auto_alt_ref;
416 oxcf->noise_sensitivity = extra_cfg->noise_sensitivity; 429 oxcf->noise_sensitivity = extra_cfg->noise_sensitivity;
417 oxcf->sharpness = extra_cfg->sharpness; 430 oxcf->sharpness = extra_cfg->sharpness;
418 431
419 oxcf->two_pass_stats_in = cfg->rc_twopass_stats_in; 432 oxcf->two_pass_stats_in = cfg->rc_twopass_stats_in;
420 433
421 #if CONFIG_FP_MB_STATS 434 #if CONFIG_FP_MB_STATS
422 oxcf->firstpass_mb_stats_in = cfg->rc_firstpass_mb_stats_in; 435 oxcf->firstpass_mb_stats_in = cfg->rc_firstpass_mb_stats_in;
423 #endif 436 #endif
424 437
425 oxcf->arnr_max_frames = extra_cfg->arnr_max_frames; 438 oxcf->arnr_max_frames = extra_cfg->arnr_max_frames;
(...skipping 12 matching lines...) Expand all
438 451
439 oxcf->frame_periodic_boost = extra_cfg->frame_periodic_boost; 452 oxcf->frame_periodic_boost = extra_cfg->frame_periodic_boost;
440 453
441 oxcf->ss_number_layers = cfg->ss_number_layers; 454 oxcf->ss_number_layers = cfg->ss_number_layers;
442 455
443 if (oxcf->ss_number_layers > 1) { 456 if (oxcf->ss_number_layers > 1) {
444 int i; 457 int i;
445 for (i = 0; i < VPX_SS_MAX_LAYERS; ++i) { 458 for (i = 0; i < VPX_SS_MAX_LAYERS; ++i) {
446 oxcf->ss_target_bitrate[i] = 1000 * cfg->ss_target_bitrate[i]; 459 oxcf->ss_target_bitrate[i] = 1000 * cfg->ss_target_bitrate[i];
447 #if CONFIG_SPATIAL_SVC 460 #if CONFIG_SPATIAL_SVC
448 oxcf->ss_play_alternate[i] = cfg->ss_enable_auto_alt_ref[i]; 461 oxcf->ss_enable_auto_arf[i] = cfg->ss_enable_auto_alt_ref[i];
449 #endif 462 #endif
450 } 463 }
451 } else if (oxcf->ss_number_layers == 1) { 464 } else if (oxcf->ss_number_layers == 1) {
452 oxcf->ss_target_bitrate[0] = (int)oxcf->target_bandwidth; 465 oxcf->ss_target_bitrate[0] = (int)oxcf->target_bandwidth;
453 #if CONFIG_SPATIAL_SVC 466 #if CONFIG_SPATIAL_SVC
454 oxcf->ss_play_alternate[0] = extra_cfg->enable_auto_alt_ref; 467 oxcf->ss_enable_auto_arf[0] = extra_cfg->enable_auto_alt_ref;
455 #endif 468 #endif
456 } 469 }
457 470
458 oxcf->ts_number_layers = cfg->ts_number_layers; 471 oxcf->ts_number_layers = cfg->ts_number_layers;
459 472
460 if (oxcf->ts_number_layers > 1) { 473 if (oxcf->ts_number_layers > 1) {
461 int i; 474 int i;
462 for (i = 0; i < VPX_TS_MAX_LAYERS; ++i) { 475 for (i = 0; i < VPX_TS_MAX_LAYERS; ++i) {
463 oxcf->ts_target_bitrate[i] = 1000 * cfg->ts_target_bitrate[i]; 476 oxcf->ts_target_bitrate[i] = 1000 * cfg->ts_target_bitrate[i];
464 oxcf->ts_rate_decimator[i] = cfg->ts_rate_decimator[i]; 477 oxcf->ts_rate_decimator[i] = cfg->ts_rate_decimator[i];
(...skipping 21 matching lines...) Expand all
486 printf("fixed_q: %d\n", oxcf->fixed_q); 499 printf("fixed_q: %d\n", oxcf->fixed_q);
487 printf("worst_allowed_q: %d\n", oxcf->worst_allowed_q); 500 printf("worst_allowed_q: %d\n", oxcf->worst_allowed_q);
488 printf("best_allowed_q: %d\n", oxcf->best_allowed_q); 501 printf("best_allowed_q: %d\n", oxcf->best_allowed_q);
489 printf("allow_spatial_resampling: %d\n", oxcf->allow_spatial_resampling); 502 printf("allow_spatial_resampling: %d\n", oxcf->allow_spatial_resampling);
490 printf("scaled_frame_width: %d\n", oxcf->scaled_frame_width); 503 printf("scaled_frame_width: %d\n", oxcf->scaled_frame_width);
491 printf("scaled_frame_height: %d\n", oxcf->scaled_frame_height); 504 printf("scaled_frame_height: %d\n", oxcf->scaled_frame_height);
492 printf("two_pass_vbrbias: %d\n", oxcf->two_pass_vbrbias); 505 printf("two_pass_vbrbias: %d\n", oxcf->two_pass_vbrbias);
493 printf("two_pass_vbrmin_section: %d\n", oxcf->two_pass_vbrmin_section); 506 printf("two_pass_vbrmin_section: %d\n", oxcf->two_pass_vbrmin_section);
494 printf("two_pass_vbrmax_section: %d\n", oxcf->two_pass_vbrmax_section); 507 printf("two_pass_vbrmax_section: %d\n", oxcf->two_pass_vbrmax_section);
495 printf("lag_in_frames: %d\n", oxcf->lag_in_frames); 508 printf("lag_in_frames: %d\n", oxcf->lag_in_frames);
496 printf("play_alternate: %d\n", oxcf->play_alternate); 509 printf("enable_auto_arf: %d\n", oxcf->enable_auto_arf);
497 printf("Version: %d\n", oxcf->Version); 510 printf("Version: %d\n", oxcf->Version);
498 printf("encode_breakout: %d\n", oxcf->encode_breakout); 511 printf("encode_breakout: %d\n", oxcf->encode_breakout);
499 printf("error resilient: %d\n", oxcf->error_resilient_mode); 512 printf("error resilient: %d\n", oxcf->error_resilient_mode);
500 printf("frame parallel detokenization: %d\n", 513 printf("frame parallel detokenization: %d\n",
501 oxcf->frame_parallel_decoding_mode); 514 oxcf->frame_parallel_decoding_mode);
502 */ 515 */
503 return VPX_CODEC_OK; 516 return VPX_CODEC_OK;
504 } 517 }
505 518
506 static vpx_codec_err_t encoder_set_config(vpx_codec_alg_priv_t *ctx, 519 static vpx_codec_err_t encoder_set_config(vpx_codec_alg_priv_t *ctx,
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 } 655 }
643 656
644 static vpx_codec_err_t ctrl_set_rc_max_intra_bitrate_pct( 657 static vpx_codec_err_t ctrl_set_rc_max_intra_bitrate_pct(
645 vpx_codec_alg_priv_t *ctx, va_list args) { 658 vpx_codec_alg_priv_t *ctx, va_list args) {
646 struct vp9_extracfg extra_cfg = ctx->extra_cfg; 659 struct vp9_extracfg extra_cfg = ctx->extra_cfg;
647 extra_cfg.rc_max_intra_bitrate_pct = 660 extra_cfg.rc_max_intra_bitrate_pct =
648 CAST(VP8E_SET_MAX_INTRA_BITRATE_PCT, args); 661 CAST(VP8E_SET_MAX_INTRA_BITRATE_PCT, args);
649 return update_extra_cfg(ctx, &extra_cfg); 662 return update_extra_cfg(ctx, &extra_cfg);
650 } 663 }
651 664
665 static vpx_codec_err_t ctrl_set_rc_max_inter_bitrate_pct(
666 vpx_codec_alg_priv_t *ctx, va_list args) {
667 struct vp9_extracfg extra_cfg = ctx->extra_cfg;
668 extra_cfg.rc_max_inter_bitrate_pct =
669 CAST(VP8E_SET_MAX_INTER_BITRATE_PCT, args);
670 return update_extra_cfg(ctx, &extra_cfg);
671 }
672
673 static vpx_codec_err_t ctrl_set_rc_gf_cbr_boost_pct(
674 vpx_codec_alg_priv_t *ctx, va_list args) {
675 struct vp9_extracfg extra_cfg = ctx->extra_cfg;
676 extra_cfg.gf_cbr_boost_pct =
677 CAST(VP8E_SET_GF_CBR_BOOST_PCT, args);
678 return update_extra_cfg(ctx, &extra_cfg);
679 }
680
652 static vpx_codec_err_t ctrl_set_lossless(vpx_codec_alg_priv_t *ctx, 681 static vpx_codec_err_t ctrl_set_lossless(vpx_codec_alg_priv_t *ctx,
653 va_list args) { 682 va_list args) {
654 struct vp9_extracfg extra_cfg = ctx->extra_cfg; 683 struct vp9_extracfg extra_cfg = ctx->extra_cfg;
655 extra_cfg.lossless = CAST(VP9E_SET_LOSSLESS, args); 684 extra_cfg.lossless = CAST(VP9E_SET_LOSSLESS, args);
656 return update_extra_cfg(ctx, &extra_cfg); 685 return update_extra_cfg(ctx, &extra_cfg);
657 } 686 }
658 687
659 static vpx_codec_err_t ctrl_set_frame_parallel_decoding_mode( 688 static vpx_codec_err_t ctrl_set_frame_parallel_decoding_mode(
660 vpx_codec_alg_priv_t *ctx, va_list args) { 689 vpx_codec_alg_priv_t *ctx, va_list args) {
661 struct vp9_extracfg extra_cfg = ctx->extra_cfg; 690 struct vp9_extracfg extra_cfg = ctx->extra_cfg;
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
965 cpi->svc.spatial_layer_id < cpi->svc.number_spatial_layers - 1) 994 cpi->svc.spatial_layer_id < cpi->svc.number_spatial_layers - 1)
966 #endif 995 #endif
967 ) { 996 ) {
968 if (ctx->pending_cx_data == 0) 997 if (ctx->pending_cx_data == 0)
969 ctx->pending_cx_data = cx_data; 998 ctx->pending_cx_data = cx_data;
970 ctx->pending_cx_data_sz += size; 999 ctx->pending_cx_data_sz += size;
971 ctx->pending_frame_sizes[ctx->pending_frame_count++] = size; 1000 ctx->pending_frame_sizes[ctx->pending_frame_count++] = size;
972 ctx->pending_frame_magnitude |= size; 1001 ctx->pending_frame_magnitude |= size;
973 cx_data += size; 1002 cx_data += size;
974 cx_data_sz -= size; 1003 cx_data_sz -= size;
1004
1005 if (ctx->output_cx_pkt_cb.output_cx_pkt) {
1006 pkt.kind = VPX_CODEC_CX_FRAME_PKT;
1007 pkt.data.frame.pts = ticks_to_timebase_units(timebase,
1008 dst_time_stamp);
1009 pkt.data.frame.duration =
1010 (unsigned long)ticks_to_timebase_units(timebase,
1011 dst_end_time_stamp - dst_time_stamp);
1012 pkt.data.frame.flags = get_frame_pkt_flags(cpi, lib_flags);
1013 pkt.data.frame.buf = ctx->pending_cx_data;
1014 pkt.data.frame.sz = size;
1015 ctx->pending_cx_data = NULL;
1016 ctx->pending_cx_data_sz = 0;
1017 ctx->pending_frame_count = 0;
1018 ctx->pending_frame_magnitude = 0;
1019 ctx->output_cx_pkt_cb.output_cx_pkt(
1020 &pkt, ctx->output_cx_pkt_cb.user_priv);
1021 }
975 continue; 1022 continue;
976 } 1023 }
977 1024
978 // Add the frame packet to the list of returned packets. 1025 // Add the frame packet to the list of returned packets.
979 pkt.kind = VPX_CODEC_CX_FRAME_PKT; 1026 pkt.kind = VPX_CODEC_CX_FRAME_PKT;
980 pkt.data.frame.pts = ticks_to_timebase_units(timebase, dst_time_stamp); 1027 pkt.data.frame.pts = ticks_to_timebase_units(timebase, dst_time_stamp);
981 pkt.data.frame.duration = 1028 pkt.data.frame.duration =
982 (unsigned long)ticks_to_timebase_units(timebase, 1029 (unsigned long)ticks_to_timebase_units(timebase,
983 dst_end_time_stamp - dst_time_stamp); 1030 dst_end_time_stamp - dst_time_stamp);
984 pkt.data.frame.flags = get_frame_pkt_flags(cpi, lib_flags); 1031 pkt.data.frame.flags = get_frame_pkt_flags(cpi, lib_flags);
985 1032
986 if (ctx->pending_cx_data) { 1033 if (ctx->pending_cx_data) {
987 ctx->pending_frame_sizes[ctx->pending_frame_count++] = size; 1034 ctx->pending_frame_sizes[ctx->pending_frame_count++] = size;
988 ctx->pending_frame_magnitude |= size; 1035 ctx->pending_frame_magnitude |= size;
989 ctx->pending_cx_data_sz += size; 1036 ctx->pending_cx_data_sz += size;
990 size += write_superframe_index(ctx); 1037 // write the superframe only for the case when
1038 if (!ctx->output_cx_pkt_cb.output_cx_pkt)
1039 size += write_superframe_index(ctx);
991 pkt.data.frame.buf = ctx->pending_cx_data; 1040 pkt.data.frame.buf = ctx->pending_cx_data;
992 pkt.data.frame.sz = ctx->pending_cx_data_sz; 1041 pkt.data.frame.sz = ctx->pending_cx_data_sz;
993 ctx->pending_cx_data = NULL; 1042 ctx->pending_cx_data = NULL;
994 ctx->pending_cx_data_sz = 0; 1043 ctx->pending_cx_data_sz = 0;
995 ctx->pending_frame_count = 0; 1044 ctx->pending_frame_count = 0;
996 ctx->pending_frame_magnitude = 0; 1045 ctx->pending_frame_magnitude = 0;
997 } else { 1046 } else {
998 pkt.data.frame.buf = cx_data; 1047 pkt.data.frame.buf = cx_data;
999 pkt.data.frame.sz = size; 1048 pkt.data.frame.sz = size;
1000 } 1049 }
1001 pkt.data.frame.partition_id = -1; 1050 pkt.data.frame.partition_id = -1;
1002 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt); 1051
1052 if(ctx->output_cx_pkt_cb.output_cx_pkt)
1053 ctx->output_cx_pkt_cb.output_cx_pkt(&pkt, ctx->output_cx_pkt_cb.user_p riv);
1054 else
1055 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt);
1056
1003 cx_data += size; 1057 cx_data += size;
1004 cx_data_sz -= size; 1058 cx_data_sz -= size;
1005 #if CONFIG_SPATIAL_SVC 1059 #if CONFIG_SPATIAL_SVC
1006 if (is_two_pass_svc(cpi)) { 1060 if (is_two_pass_svc(cpi) && !ctx->output_cx_pkt_cb.output_cx_pkt) {
1007 vpx_codec_cx_pkt_t pkt_sizes, pkt_psnr; 1061 vpx_codec_cx_pkt_t pkt_sizes, pkt_psnr;
1008 int i; 1062 int i;
1009 vp9_zero(pkt_sizes); 1063 vp9_zero(pkt_sizes);
1010 vp9_zero(pkt_psnr); 1064 vp9_zero(pkt_psnr);
1011 pkt_sizes.kind = VPX_CODEC_SPATIAL_SVC_LAYER_SIZES; 1065 pkt_sizes.kind = VPX_CODEC_SPATIAL_SVC_LAYER_SIZES;
1012 pkt_psnr.kind = VPX_CODEC_SPATIAL_SVC_LAYER_PSNR; 1066 pkt_psnr.kind = VPX_CODEC_SPATIAL_SVC_LAYER_PSNR;
1013 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) { 1067 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) {
1014 LAYER_CONTEXT *lc = &cpi->svc.layer_context[i]; 1068 LAYER_CONTEXT *lc = &cpi->svc.layer_context[i];
1015 pkt_sizes.data.layer_sizes[i] = lc->layer_size; 1069 pkt_sizes.data.layer_sizes[i] = lc->layer_size;
1016 pkt_psnr.data.layer_psnr[i] = lc->psnr_pkt; 1070 pkt_psnr.data.layer_psnr[i] = lc->psnr_pkt;
1017 lc->layer_size = 0; 1071 lc->layer_size = 0;
1018 } 1072 }
1073
1019 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt_sizes); 1074 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt_sizes);
1075
1020 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt_psnr); 1076 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt_psnr);
1021 } 1077 }
1022 #endif 1078 #endif
1023 } 1079 }
1024 } 1080 }
1025 } 1081 }
1026 1082
1027 return res; 1083 return res;
1028 } 1084 }
1029 1085
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1210 svc->temporal_layer_id >= (int)ctx->cfg.ts_number_layers) { 1266 svc->temporal_layer_id >= (int)ctx->cfg.ts_number_layers) {
1211 return VPX_CODEC_INVALID_PARAM; 1267 return VPX_CODEC_INVALID_PARAM;
1212 } 1268 }
1213 if (svc->spatial_layer_id < 0 || 1269 if (svc->spatial_layer_id < 0 ||
1214 svc->spatial_layer_id >= (int)ctx->cfg.ss_number_layers) { 1270 svc->spatial_layer_id >= (int)ctx->cfg.ss_number_layers) {
1215 return VPX_CODEC_INVALID_PARAM; 1271 return VPX_CODEC_INVALID_PARAM;
1216 } 1272 }
1217 return VPX_CODEC_OK; 1273 return VPX_CODEC_OK;
1218 } 1274 }
1219 1275
1276 static vpx_codec_err_t ctrl_get_svc_layer_id(vpx_codec_alg_priv_t *ctx,
1277 va_list args) {
1278 vpx_svc_layer_id_t *data = va_arg(args, vpx_svc_layer_id_t *);
1279 VP9_COMP *const cpi = (VP9_COMP *)ctx->cpi;
1280 SVC *const svc = &cpi->svc;
1281
1282 data->spatial_layer_id = svc->spatial_layer_id;
1283 data->temporal_layer_id = svc->temporal_layer_id;
1284
1285 return VPX_CODEC_OK;
1286 }
1287
1220 static vpx_codec_err_t ctrl_set_svc_parameters(vpx_codec_alg_priv_t *ctx, 1288 static vpx_codec_err_t ctrl_set_svc_parameters(vpx_codec_alg_priv_t *ctx,
1221 va_list args) { 1289 va_list args) {
1222 VP9_COMP *const cpi = ctx->cpi; 1290 VP9_COMP *const cpi = ctx->cpi;
1223 vpx_svc_extra_cfg_t *const params = va_arg(args, vpx_svc_extra_cfg_t *); 1291 vpx_svc_extra_cfg_t *const params = va_arg(args, vpx_svc_extra_cfg_t *);
1224 int i; 1292 int i;
1225 1293
1226 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) { 1294 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) {
1227 LAYER_CONTEXT *lc = &cpi->svc.layer_context[i]; 1295 LAYER_CONTEXT *lc = &cpi->svc.layer_context[i];
1228 1296
1229 lc->max_q = params->max_quantizers[i]; 1297 lc->max_q = params->max_quantizers[i];
1230 lc->min_q = params->min_quantizers[i]; 1298 lc->min_q = params->min_quantizers[i];
1231 lc->scaling_factor_num = params->scaling_factor_num[i]; 1299 lc->scaling_factor_num = params->scaling_factor_num[i];
1232 lc->scaling_factor_den = params->scaling_factor_den[i]; 1300 lc->scaling_factor_den = params->scaling_factor_den[i];
1233 } 1301 }
1234 1302
1235 return VPX_CODEC_OK; 1303 return VPX_CODEC_OK;
1236 } 1304 }
1237 1305
1306 static vpx_codec_err_t ctrl_register_cx_callback(vpx_codec_alg_priv_t *ctx,
1307 va_list args) {
1308 vpx_codec_priv_output_cx_pkt_cb_pair_t *cbp =
1309 (vpx_codec_priv_output_cx_pkt_cb_pair_t *)va_arg(args, void *);
1310 ctx->output_cx_pkt_cb.output_cx_pkt = cbp->output_cx_pkt;
1311 ctx->output_cx_pkt_cb.user_priv = cbp->user_priv;
1312
1313 return VPX_CODEC_OK;
1314 }
1315
1238 static vpx_codec_err_t ctrl_set_tune_content(vpx_codec_alg_priv_t *ctx, 1316 static vpx_codec_err_t ctrl_set_tune_content(vpx_codec_alg_priv_t *ctx,
1239 va_list args) { 1317 va_list args) {
1240 struct vp9_extracfg extra_cfg = ctx->extra_cfg; 1318 struct vp9_extracfg extra_cfg = ctx->extra_cfg;
1241 extra_cfg.content = CAST(VP9E_SET_TUNE_CONTENT, args); 1319 extra_cfg.content = CAST(VP9E_SET_TUNE_CONTENT, args);
1242 return update_extra_cfg(ctx, &extra_cfg); 1320 return update_extra_cfg(ctx, &extra_cfg);
1243 } 1321 }
1244 1322
1245 static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = { 1323 static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = {
1246 {VP8_COPY_REFERENCE, ctrl_copy_reference}, 1324 {VP8_COPY_REFERENCE, ctrl_copy_reference},
1247 {VP8E_UPD_ENTROPY, ctrl_update_entropy}, 1325 {VP8E_UPD_ENTROPY, ctrl_update_entropy},
(...skipping 11 matching lines...) Expand all
1259 {VP8E_SET_SHARPNESS, ctrl_set_sharpness}, 1337 {VP8E_SET_SHARPNESS, ctrl_set_sharpness},
1260 {VP8E_SET_STATIC_THRESHOLD, ctrl_set_static_thresh}, 1338 {VP8E_SET_STATIC_THRESHOLD, ctrl_set_static_thresh},
1261 {VP9E_SET_TILE_COLUMNS, ctrl_set_tile_columns}, 1339 {VP9E_SET_TILE_COLUMNS, ctrl_set_tile_columns},
1262 {VP9E_SET_TILE_ROWS, ctrl_set_tile_rows}, 1340 {VP9E_SET_TILE_ROWS, ctrl_set_tile_rows},
1263 {VP8E_SET_ARNR_MAXFRAMES, ctrl_set_arnr_max_frames}, 1341 {VP8E_SET_ARNR_MAXFRAMES, ctrl_set_arnr_max_frames},
1264 {VP8E_SET_ARNR_STRENGTH, ctrl_set_arnr_strength}, 1342 {VP8E_SET_ARNR_STRENGTH, ctrl_set_arnr_strength},
1265 {VP8E_SET_ARNR_TYPE, ctrl_set_arnr_type}, 1343 {VP8E_SET_ARNR_TYPE, ctrl_set_arnr_type},
1266 {VP8E_SET_TUNING, ctrl_set_tuning}, 1344 {VP8E_SET_TUNING, ctrl_set_tuning},
1267 {VP8E_SET_CQ_LEVEL, ctrl_set_cq_level}, 1345 {VP8E_SET_CQ_LEVEL, ctrl_set_cq_level},
1268 {VP8E_SET_MAX_INTRA_BITRATE_PCT, ctrl_set_rc_max_intra_bitrate_pct}, 1346 {VP8E_SET_MAX_INTRA_BITRATE_PCT, ctrl_set_rc_max_intra_bitrate_pct},
1347 {VP8E_SET_MAX_INTER_BITRATE_PCT, ctrl_set_rc_max_inter_bitrate_pct},
1348 {VP8E_SET_GF_CBR_BOOST_PCT, ctrl_set_rc_gf_cbr_boost_pct},
1269 {VP9E_SET_LOSSLESS, ctrl_set_lossless}, 1349 {VP9E_SET_LOSSLESS, ctrl_set_lossless},
1270 {VP9E_SET_FRAME_PARALLEL_DECODING, ctrl_set_frame_parallel_decoding_mode}, 1350 {VP9E_SET_FRAME_PARALLEL_DECODING, ctrl_set_frame_parallel_decoding_mode},
1271 {VP9E_SET_AQ_MODE, ctrl_set_aq_mode}, 1351 {VP9E_SET_AQ_MODE, ctrl_set_aq_mode},
1272 {VP9E_SET_FRAME_PERIODIC_BOOST, ctrl_set_frame_periodic_boost}, 1352 {VP9E_SET_FRAME_PERIODIC_BOOST, ctrl_set_frame_periodic_boost},
1273 {VP9E_SET_SVC, ctrl_set_svc}, 1353 {VP9E_SET_SVC, ctrl_set_svc},
1274 {VP9E_SET_SVC_PARAMETERS, ctrl_set_svc_parameters}, 1354 {VP9E_SET_SVC_PARAMETERS, ctrl_set_svc_parameters},
1355 {VP9E_REGISTER_CX_CALLBACK, ctrl_register_cx_callback},
1275 {VP9E_SET_SVC_LAYER_ID, ctrl_set_svc_layer_id}, 1356 {VP9E_SET_SVC_LAYER_ID, ctrl_set_svc_layer_id},
1276 {VP9E_SET_TUNE_CONTENT, ctrl_set_tune_content}, 1357 {VP9E_SET_TUNE_CONTENT, ctrl_set_tune_content},
1277 {VP9E_SET_NOISE_SENSITIVITY, ctrl_set_noise_sensitivity}, 1358 {VP9E_SET_NOISE_SENSITIVITY, ctrl_set_noise_sensitivity},
1278 1359
1279 // Getters 1360 // Getters
1280 {VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer}, 1361 {VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer},
1281 {VP8E_GET_LAST_QUANTIZER_64, ctrl_get_quantizer64}, 1362 {VP8E_GET_LAST_QUANTIZER_64, ctrl_get_quantizer64},
1282 {VP9_GET_REFERENCE, ctrl_get_reference}, 1363 {VP9_GET_REFERENCE, ctrl_get_reference},
1364 {VP9E_GET_SVC_LAYER_ID, ctrl_get_svc_layer_id},
1283 1365
1284 { -1, NULL}, 1366 { -1, NULL},
1285 }; 1367 };
1286 1368
1287 static vpx_codec_enc_cfg_map_t encoder_usage_cfg_map[] = { 1369 static vpx_codec_enc_cfg_map_t encoder_usage_cfg_map[] = {
1288 { 1370 {
1289 0, 1371 0,
1290 { // NOLINT 1372 { // NOLINT
1291 0, // g_usage 1373 0, // g_usage
1292 0, // g_threads 1374 0, // g_threads
1293 0, // g_profile 1375 0, // g_profile
1294 1376
1295 320, // g_width 1377 320, // g_width
1296 240, // g_height 1378 240, // g_height
1297 VPX_BITS_8, // g_bit_depth 1379 VPX_BITS_8, // g_bit_depth
1298 8, // g_input_bit_depth 1380 8, // g_input_bit_depth
1299 1381
1300 {1, 30}, // g_timebase 1382 {1, 30}, // g_timebase
1301 1383
1302 0, // g_error_resilient 1384 0, // g_error_resilient
1303 1385
1304 VPX_RC_ONE_PASS, // g_pass 1386 VPX_RC_ONE_PASS, // g_pass
1305 1387
1306 25, // g_lag_in_frames 1388 25, // g_lag_in_frames
1307 1389
1308 0, // rc_dropframe_thresh 1390 0, // rc_dropframe_thresh
1309 0, // rc_resize_allowed 1391 0, // rc_resize_allowed
1310 1, // rc_scaled_width 1392 0, // rc_scaled_width
1311 1, // rc_scaled_height 1393 0, // rc_scaled_height
1312 60, // rc_resize_down_thresold 1394 60, // rc_resize_down_thresold
1313 30, // rc_resize_up_thresold 1395 30, // rc_resize_up_thresold
1314 1396
1315 VPX_VBR, // rc_end_usage 1397 VPX_VBR, // rc_end_usage
1316 #if VPX_ENCODER_ABI_VERSION > (1 + VPX_CODEC_ABI_VERSION) 1398 #if VPX_ENCODER_ABI_VERSION > (1 + VPX_CODEC_ABI_VERSION)
1317 {NULL, 0}, // rc_twopass_stats_in 1399 {NULL, 0}, // rc_twopass_stats_in
1318 {NULL, 0}, // rc_firstpass_mb_stats_in 1400 {NULL, 0}, // rc_firstpass_mb_stats_in
1319 #endif 1401 #endif
1320 256, // rc_target_bandwidth 1402 256, // rc_target_bandwidth
1321 0, // rc_min_quantizer 1403 0, // rc_min_quantizer
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1375 1, // 1 cfg map 1457 1, // 1 cfg map
1376 encoder_usage_cfg_map, // vpx_codec_enc_cfg_map_t 1458 encoder_usage_cfg_map, // vpx_codec_enc_cfg_map_t
1377 encoder_encode, // vpx_codec_encode_fn_t 1459 encoder_encode, // vpx_codec_encode_fn_t
1378 encoder_get_cxdata, // vpx_codec_get_cx_data_fn_t 1460 encoder_get_cxdata, // vpx_codec_get_cx_data_fn_t
1379 encoder_set_config, // vpx_codec_enc_config_set_fn_t 1461 encoder_set_config, // vpx_codec_enc_config_set_fn_t
1380 NULL, // vpx_codec_get_global_headers_fn_t 1462 NULL, // vpx_codec_get_global_headers_fn_t
1381 encoder_get_preview, // vpx_codec_get_preview_frame_fn_t 1463 encoder_get_preview, // vpx_codec_get_preview_frame_fn_t
1382 NULL // vpx_codec_enc_mr_get_mem_loc_fn_t 1464 NULL // vpx_codec_enc_mr_get_mem_loc_fn_t
1383 } 1465 }
1384 }; 1466 };
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/x86/vp9_quantize_sse2.c ('k') | source/libvpx/vp9/vp9cx.mk » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698