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 24 matching lines...) Expand all Loading... |
35 unsigned int cq_level; // constrained quality level | 35 unsigned int cq_level; // constrained quality level |
36 unsigned int rc_max_intra_bitrate_pct; | 36 unsigned int rc_max_intra_bitrate_pct; |
37 unsigned int rc_max_inter_bitrate_pct; | 37 unsigned int rc_max_inter_bitrate_pct; |
38 unsigned int gf_cbr_boost_pct; | 38 unsigned int gf_cbr_boost_pct; |
39 unsigned int lossless; | 39 unsigned int lossless; |
40 unsigned int frame_parallel_decoding_mode; | 40 unsigned int frame_parallel_decoding_mode; |
41 AQ_MODE aq_mode; | 41 AQ_MODE aq_mode; |
42 unsigned int frame_periodic_boost; | 42 unsigned int frame_periodic_boost; |
43 vpx_bit_depth_t bit_depth; | 43 vpx_bit_depth_t bit_depth; |
44 vp9e_tune_content content; | 44 vp9e_tune_content content; |
| 45 vpx_color_space_t color_space; |
45 }; | 46 }; |
46 | 47 |
47 static struct vp9_extracfg default_extra_cfg = { | 48 static struct vp9_extracfg default_extra_cfg = { |
48 0, // cpu_used | 49 0, // cpu_used |
49 1, // enable_auto_alt_ref | 50 1, // enable_auto_alt_ref |
50 0, // noise_sensitivity | 51 0, // noise_sensitivity |
51 0, // sharpness | 52 0, // sharpness |
52 0, // static_thresh | 53 0, // static_thresh |
53 0, // tile_columns | 54 0, // tile_columns |
54 0, // tile_rows | 55 0, // tile_rows |
55 7, // arnr_max_frames | 56 7, // arnr_max_frames |
56 5, // arnr_strength | 57 5, // arnr_strength |
57 VP8_TUNE_PSNR, // tuning | 58 VP8_TUNE_PSNR, // tuning |
58 10, // cq_level | 59 10, // cq_level |
59 0, // rc_max_intra_bitrate_pct | 60 0, // rc_max_intra_bitrate_pct |
60 0, // rc_max_inter_bitrate_pct | 61 0, // rc_max_inter_bitrate_pct |
61 0, // gf_cbr_boost_pct | 62 0, // gf_cbr_boost_pct |
62 0, // lossless | 63 0, // lossless |
63 0, // frame_parallel_decoding_mode | 64 0, // frame_parallel_decoding_mode |
64 NO_AQ, // aq_mode | 65 NO_AQ, // aq_mode |
65 0, // frame_periodic_delta_q | 66 0, // frame_periodic_delta_q |
66 VPX_BITS_8, // Bit depth | 67 VPX_BITS_8, // Bit depth |
67 VP9E_CONTENT_DEFAULT // content | 68 VP9E_CONTENT_DEFAULT, // content |
| 69 VPX_CS_UNKNOWN, // color space |
68 }; | 70 }; |
69 | 71 |
70 struct vpx_codec_alg_priv { | 72 struct vpx_codec_alg_priv { |
71 vpx_codec_priv_t base; | 73 vpx_codec_priv_t base; |
72 vpx_codec_enc_cfg_t cfg; | 74 vpx_codec_enc_cfg_t cfg; |
73 struct vp9_extracfg extra_cfg; | 75 struct vp9_extracfg extra_cfg; |
74 VP9EncoderConfig oxcf; | 76 VP9EncoderConfig oxcf; |
75 VP9_COMP *cpi; | 77 VP9_COMP *cpi; |
76 unsigned char *cx_data; | 78 unsigned char *cx_data; |
77 size_t cx_data_sz; | 79 size_t cx_data_sz; |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 ERROR("Codec high bit-depth not supported in profile < 2"); | 289 ERROR("Codec high bit-depth not supported in profile < 2"); |
288 } | 290 } |
289 if (cfg->g_profile <= (unsigned int)PROFILE_1 && | 291 if (cfg->g_profile <= (unsigned int)PROFILE_1 && |
290 cfg->g_input_bit_depth > 8) { | 292 cfg->g_input_bit_depth > 8) { |
291 ERROR("Source high bit-depth not supported in profile < 2"); | 293 ERROR("Source high bit-depth not supported in profile < 2"); |
292 } | 294 } |
293 if (cfg->g_profile > (unsigned int)PROFILE_1 && | 295 if (cfg->g_profile > (unsigned int)PROFILE_1 && |
294 cfg->g_bit_depth == VPX_BITS_8) { | 296 cfg->g_bit_depth == VPX_BITS_8) { |
295 ERROR("Codec bit-depth 8 not supported in profile > 1"); | 297 ERROR("Codec bit-depth 8 not supported in profile > 1"); |
296 } | 298 } |
297 | 299 RANGE_CHECK(extra_cfg, color_space, VPX_CS_UNKNOWN, VPX_CS_SRGB); |
298 return VPX_CODEC_OK; | 300 return VPX_CODEC_OK; |
299 } | 301 } |
300 | 302 |
301 static vpx_codec_err_t validate_img(vpx_codec_alg_priv_t *ctx, | 303 static vpx_codec_err_t validate_img(vpx_codec_alg_priv_t *ctx, |
302 const vpx_image_t *img) { | 304 const vpx_image_t *img) { |
303 switch (img->fmt) { | 305 switch (img->fmt) { |
304 case VPX_IMG_FMT_YV12: | 306 case VPX_IMG_FMT_YV12: |
305 case VPX_IMG_FMT_I420: | 307 case VPX_IMG_FMT_I420: |
306 case VPX_IMG_FMT_I42016: | 308 case VPX_IMG_FMT_I42016: |
307 break; | 309 break; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 case VPX_IMG_FMT_I42016: return 24; | 346 case VPX_IMG_FMT_I42016: return 24; |
345 case VPX_IMG_FMT_I42216: return 32; | 347 case VPX_IMG_FMT_I42216: return 32; |
346 case VPX_IMG_FMT_I44416: return 48; | 348 case VPX_IMG_FMT_I44416: return 48; |
347 case VPX_IMG_FMT_I44016: return 32; | 349 case VPX_IMG_FMT_I44016: return 32; |
348 default: assert(0 && "Invalid image format"); break; | 350 default: assert(0 && "Invalid image format"); break; |
349 } | 351 } |
350 return 0; | 352 return 0; |
351 } | 353 } |
352 | 354 |
353 static vpx_codec_err_t set_encoder_config( | 355 static vpx_codec_err_t set_encoder_config( |
354 VP9EncoderConfig *oxcf, | 356 VP9EncoderConfig *oxcf, |
355 const vpx_codec_enc_cfg_t *cfg, | 357 const vpx_codec_enc_cfg_t *cfg, |
356 const struct vp9_extracfg *extra_cfg) { | 358 const struct vp9_extracfg *extra_cfg) { |
357 const int is_vbr = cfg->rc_end_usage == VPX_VBR; | 359 const int is_vbr = cfg->rc_end_usage == VPX_VBR; |
358 oxcf->profile = cfg->g_profile; | 360 oxcf->profile = cfg->g_profile; |
359 oxcf->max_threads = (int)cfg->g_threads; | 361 oxcf->max_threads = (int)cfg->g_threads; |
360 oxcf->width = cfg->g_w; | 362 oxcf->width = cfg->g_w; |
361 oxcf->height = cfg->g_h; | 363 oxcf->height = cfg->g_h; |
362 oxcf->bit_depth = cfg->g_bit_depth; | 364 oxcf->bit_depth = cfg->g_bit_depth; |
363 oxcf->input_bit_depth = cfg->g_input_bit_depth; | 365 oxcf->input_bit_depth = cfg->g_input_bit_depth; |
364 // guess a frame rate if out of whack, use 30 | 366 // guess a frame rate if out of whack, use 30 |
365 oxcf->init_framerate = (double)cfg->g_timebase.den / cfg->g_timebase.num; | 367 oxcf->init_framerate = (double)cfg->g_timebase.den / cfg->g_timebase.num; |
366 if (oxcf->init_framerate > 180) | 368 if (oxcf->init_framerate > 180) |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 oxcf->enable_auto_arf = extra_cfg->enable_auto_alt_ref; | 432 oxcf->enable_auto_arf = extra_cfg->enable_auto_alt_ref; |
431 oxcf->noise_sensitivity = extra_cfg->noise_sensitivity; | 433 oxcf->noise_sensitivity = extra_cfg->noise_sensitivity; |
432 oxcf->sharpness = extra_cfg->sharpness; | 434 oxcf->sharpness = extra_cfg->sharpness; |
433 | 435 |
434 oxcf->two_pass_stats_in = cfg->rc_twopass_stats_in; | 436 oxcf->two_pass_stats_in = cfg->rc_twopass_stats_in; |
435 | 437 |
436 #if CONFIG_FP_MB_STATS | 438 #if CONFIG_FP_MB_STATS |
437 oxcf->firstpass_mb_stats_in = cfg->rc_firstpass_mb_stats_in; | 439 oxcf->firstpass_mb_stats_in = cfg->rc_firstpass_mb_stats_in; |
438 #endif | 440 #endif |
439 | 441 |
| 442 oxcf->color_space = extra_cfg->color_space; |
440 oxcf->arnr_max_frames = extra_cfg->arnr_max_frames; | 443 oxcf->arnr_max_frames = extra_cfg->arnr_max_frames; |
441 oxcf->arnr_strength = extra_cfg->arnr_strength; | 444 oxcf->arnr_strength = extra_cfg->arnr_strength; |
442 | 445 |
443 oxcf->tuning = extra_cfg->tuning; | 446 oxcf->tuning = extra_cfg->tuning; |
444 oxcf->content = extra_cfg->content; | 447 oxcf->content = extra_cfg->content; |
445 | 448 |
446 oxcf->tile_columns = extra_cfg->tile_columns; | 449 oxcf->tile_columns = extra_cfg->tile_columns; |
447 oxcf->tile_rows = extra_cfg->tile_rows; | 450 oxcf->tile_rows = extra_cfg->tile_rows; |
448 | 451 |
449 oxcf->error_resilient_mode = cfg->g_error_resilient; | 452 oxcf->error_resilient_mode = cfg->g_error_resilient; |
(...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1315 return VPX_CODEC_OK; | 1318 return VPX_CODEC_OK; |
1316 } | 1319 } |
1317 | 1320 |
1318 static vpx_codec_err_t ctrl_set_tune_content(vpx_codec_alg_priv_t *ctx, | 1321 static vpx_codec_err_t ctrl_set_tune_content(vpx_codec_alg_priv_t *ctx, |
1319 va_list args) { | 1322 va_list args) { |
1320 struct vp9_extracfg extra_cfg = ctx->extra_cfg; | 1323 struct vp9_extracfg extra_cfg = ctx->extra_cfg; |
1321 extra_cfg.content = CAST(VP9E_SET_TUNE_CONTENT, args); | 1324 extra_cfg.content = CAST(VP9E_SET_TUNE_CONTENT, args); |
1322 return update_extra_cfg(ctx, &extra_cfg); | 1325 return update_extra_cfg(ctx, &extra_cfg); |
1323 } | 1326 } |
1324 | 1327 |
| 1328 static vpx_codec_err_t ctrl_set_color_space(vpx_codec_alg_priv_t *ctx, |
| 1329 va_list args) { |
| 1330 struct vp9_extracfg extra_cfg = ctx->extra_cfg; |
| 1331 extra_cfg.color_space = CAST(VP9E_SET_COLOR_SPACE, args); |
| 1332 return update_extra_cfg(ctx, &extra_cfg); |
| 1333 } |
| 1334 |
1325 static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = { | 1335 static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = { |
1326 {VP8_COPY_REFERENCE, ctrl_copy_reference}, | 1336 {VP8_COPY_REFERENCE, ctrl_copy_reference}, |
1327 {VP8E_UPD_ENTROPY, ctrl_update_entropy}, | 1337 {VP8E_UPD_ENTROPY, ctrl_update_entropy}, |
1328 {VP8E_UPD_REFERENCE, ctrl_update_reference}, | 1338 {VP8E_UPD_REFERENCE, ctrl_update_reference}, |
1329 {VP8E_USE_REFERENCE, ctrl_use_reference}, | 1339 {VP8E_USE_REFERENCE, ctrl_use_reference}, |
1330 | 1340 |
1331 // Setters | 1341 // Setters |
1332 {VP8_SET_REFERENCE, ctrl_set_reference}, | 1342 {VP8_SET_REFERENCE, ctrl_set_reference}, |
1333 {VP8_SET_POSTPROC, ctrl_set_previewpp}, | 1343 {VP8_SET_POSTPROC, ctrl_set_previewpp}, |
1334 {VP8E_SET_ROI_MAP, ctrl_set_roi_map}, | 1344 {VP8E_SET_ROI_MAP, ctrl_set_roi_map}, |
(...skipping 15 matching lines...) Expand all Loading... |
1350 {VP8E_SET_GF_CBR_BOOST_PCT, ctrl_set_rc_gf_cbr_boost_pct}, | 1360 {VP8E_SET_GF_CBR_BOOST_PCT, ctrl_set_rc_gf_cbr_boost_pct}, |
1351 {VP9E_SET_LOSSLESS, ctrl_set_lossless}, | 1361 {VP9E_SET_LOSSLESS, ctrl_set_lossless}, |
1352 {VP9E_SET_FRAME_PARALLEL_DECODING, ctrl_set_frame_parallel_decoding_mode}, | 1362 {VP9E_SET_FRAME_PARALLEL_DECODING, ctrl_set_frame_parallel_decoding_mode}, |
1353 {VP9E_SET_AQ_MODE, ctrl_set_aq_mode}, | 1363 {VP9E_SET_AQ_MODE, ctrl_set_aq_mode}, |
1354 {VP9E_SET_FRAME_PERIODIC_BOOST, ctrl_set_frame_periodic_boost}, | 1364 {VP9E_SET_FRAME_PERIODIC_BOOST, ctrl_set_frame_periodic_boost}, |
1355 {VP9E_SET_SVC, ctrl_set_svc}, | 1365 {VP9E_SET_SVC, ctrl_set_svc}, |
1356 {VP9E_SET_SVC_PARAMETERS, ctrl_set_svc_parameters}, | 1366 {VP9E_SET_SVC_PARAMETERS, ctrl_set_svc_parameters}, |
1357 {VP9E_REGISTER_CX_CALLBACK, ctrl_register_cx_callback}, | 1367 {VP9E_REGISTER_CX_CALLBACK, ctrl_register_cx_callback}, |
1358 {VP9E_SET_SVC_LAYER_ID, ctrl_set_svc_layer_id}, | 1368 {VP9E_SET_SVC_LAYER_ID, ctrl_set_svc_layer_id}, |
1359 {VP9E_SET_TUNE_CONTENT, ctrl_set_tune_content}, | 1369 {VP9E_SET_TUNE_CONTENT, ctrl_set_tune_content}, |
| 1370 {VP9E_SET_COLOR_SPACE, ctrl_set_color_space}, |
1360 {VP9E_SET_NOISE_SENSITIVITY, ctrl_set_noise_sensitivity}, | 1371 {VP9E_SET_NOISE_SENSITIVITY, ctrl_set_noise_sensitivity}, |
1361 | 1372 |
1362 // Getters | 1373 // Getters |
1363 {VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer}, | 1374 {VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer}, |
1364 {VP8E_GET_LAST_QUANTIZER_64, ctrl_get_quantizer64}, | 1375 {VP8E_GET_LAST_QUANTIZER_64, ctrl_get_quantizer64}, |
1365 {VP9_GET_REFERENCE, ctrl_get_reference}, | 1376 {VP9_GET_REFERENCE, ctrl_get_reference}, |
1366 {VP9E_GET_SVC_LAYER_ID, ctrl_get_svc_layer_id}, | 1377 {VP9E_GET_SVC_LAYER_ID, ctrl_get_svc_layer_id}, |
1367 | 1378 |
1368 { -1, NULL}, | 1379 { -1, NULL}, |
1369 }; | 1380 }; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 1, // 1 cfg map | 1470 1, // 1 cfg map |
1460 encoder_usage_cfg_map, // vpx_codec_enc_cfg_map_t | 1471 encoder_usage_cfg_map, // vpx_codec_enc_cfg_map_t |
1461 encoder_encode, // vpx_codec_encode_fn_t | 1472 encoder_encode, // vpx_codec_encode_fn_t |
1462 encoder_get_cxdata, // vpx_codec_get_cx_data_fn_t | 1473 encoder_get_cxdata, // vpx_codec_get_cx_data_fn_t |
1463 encoder_set_config, // vpx_codec_enc_config_set_fn_t | 1474 encoder_set_config, // vpx_codec_enc_config_set_fn_t |
1464 NULL, // vpx_codec_get_global_headers_fn_t | 1475 NULL, // vpx_codec_get_global_headers_fn_t |
1465 encoder_get_preview, // vpx_codec_get_preview_frame_fn_t | 1476 encoder_get_preview, // vpx_codec_get_preview_frame_fn_t |
1466 NULL // vpx_codec_enc_mr_get_mem_loc_fn_t | 1477 NULL // vpx_codec_enc_mr_get_mem_loc_fn_t |
1467 } | 1478 } |
1468 }; | 1479 }; |
OLD | NEW |