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 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 if (cfg->ts_target_bitrate[i] < cfg->ts_target_bitrate[i - 1]) | 171 if (cfg->ts_target_bitrate[i] < cfg->ts_target_bitrate[i - 1]) |
172 ERROR("ts_target_bitrate entries are not increasing"); | 172 ERROR("ts_target_bitrate entries are not increasing"); |
173 | 173 |
174 RANGE_CHECK(cfg, ts_rate_decimator[cfg->ts_number_layers - 1], 1, 1); | 174 RANGE_CHECK(cfg, ts_rate_decimator[cfg->ts_number_layers - 1], 1, 1); |
175 for (i = cfg->ts_number_layers - 2; i > 0; --i) | 175 for (i = cfg->ts_number_layers - 2; i > 0; --i) |
176 if (cfg->ts_rate_decimator[i - 1] != 2 * cfg->ts_rate_decimator[i]) | 176 if (cfg->ts_rate_decimator[i - 1] != 2 * cfg->ts_rate_decimator[i]) |
177 ERROR("ts_rate_decimator factors are not powers of 2"); | 177 ERROR("ts_rate_decimator factors are not powers of 2"); |
178 } | 178 } |
179 | 179 |
180 #if CONFIG_SPATIAL_SVC | 180 #if CONFIG_SPATIAL_SVC |
181 if (cfg->ss_number_layers * cfg->ts_number_layers > REF_FRAMES) | |
182 ERROR("Too many layers. Maximum 8 layers could be set"); | |
183 | 181 |
184 if ((cfg->ss_number_layers > 1 || cfg->ts_number_layers > 1) && | 182 if ((cfg->ss_number_layers > 1 || cfg->ts_number_layers > 1) && |
185 cfg->g_pass == VPX_RC_LAST_PASS) { | 183 cfg->g_pass == VPX_RC_LAST_PASS) { |
186 unsigned int i, alt_ref_sum = 0; | 184 unsigned int i, alt_ref_sum = 0; |
187 for (i = 0; i < cfg->ss_number_layers; ++i) { | 185 for (i = 0; i < cfg->ss_number_layers; ++i) { |
188 if (cfg->ss_enable_auto_alt_ref[i]) | 186 if (cfg->ss_enable_auto_alt_ref[i]) |
189 ++alt_ref_sum; | 187 ++alt_ref_sum; |
190 } | 188 } |
191 if (alt_ref_sum > | 189 if (alt_ref_sum > REF_FRAMES - cfg->ss_number_layers) |
192 REF_FRAMES - cfg->ss_number_layers * cfg->ts_number_layers) | |
193 ERROR("Not enough ref buffers for svc alt ref frames"); | 190 ERROR("Not enough ref buffers for svc alt ref frames"); |
194 if ((cfg->ss_number_layers > 3 || | 191 if ((cfg->ss_number_layers > 3 || |
195 cfg->ss_number_layers * cfg->ts_number_layers > 4) && | 192 cfg->ss_number_layers * cfg->ts_number_layers > 4) && |
196 cfg->g_error_resilient == 0) | 193 cfg->g_error_resilient == 0) |
197 ERROR("Multiple frame context are not supported for more than 3 spatial " | 194 ERROR("Multiple frame context are not supported for more than 3 spatial " |
198 "layers or more than 4 spatial x temporal layers"); | 195 "layers or more than 4 spatial x temporal layers"); |
199 } | 196 } |
200 #endif | 197 #endif |
201 | 198 |
202 // VP9 does not support a lower bound on the keyframe interval in | 199 // VP9 does not support a lower bound on the keyframe interval in |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 static vpx_codec_err_t ctrl_set_enable_auto_alt_ref(vpx_codec_alg_priv_t *ctx, | 545 static vpx_codec_err_t ctrl_set_enable_auto_alt_ref(vpx_codec_alg_priv_t *ctx, |
549 va_list args) { | 546 va_list args) { |
550 struct vp9_extracfg extra_cfg = ctx->extra_cfg; | 547 struct vp9_extracfg extra_cfg = ctx->extra_cfg; |
551 extra_cfg.enable_auto_alt_ref = CAST(VP8E_SET_ENABLEAUTOALTREF, args); | 548 extra_cfg.enable_auto_alt_ref = CAST(VP8E_SET_ENABLEAUTOALTREF, args); |
552 return update_extra_cfg(ctx, &extra_cfg); | 549 return update_extra_cfg(ctx, &extra_cfg); |
553 } | 550 } |
554 | 551 |
555 static vpx_codec_err_t ctrl_set_noise_sensitivity(vpx_codec_alg_priv_t *ctx, | 552 static vpx_codec_err_t ctrl_set_noise_sensitivity(vpx_codec_alg_priv_t *ctx, |
556 va_list args) { | 553 va_list args) { |
557 struct vp9_extracfg extra_cfg = ctx->extra_cfg; | 554 struct vp9_extracfg extra_cfg = ctx->extra_cfg; |
558 extra_cfg.noise_sensitivity = CAST(VP8E_SET_NOISE_SENSITIVITY, args); | 555 extra_cfg.noise_sensitivity = CAST(VP9E_SET_NOISE_SENSITIVITY, args); |
559 return update_extra_cfg(ctx, &extra_cfg); | 556 return update_extra_cfg(ctx, &extra_cfg); |
560 } | 557 } |
561 | 558 |
562 static vpx_codec_err_t ctrl_set_sharpness(vpx_codec_alg_priv_t *ctx, | 559 static vpx_codec_err_t ctrl_set_sharpness(vpx_codec_alg_priv_t *ctx, |
563 va_list args) { | 560 va_list args) { |
564 struct vp9_extracfg extra_cfg = ctx->extra_cfg; | 561 struct vp9_extracfg extra_cfg = ctx->extra_cfg; |
565 extra_cfg.sharpness = CAST(VP8E_SET_SHARPNESS, args); | 562 extra_cfg.sharpness = CAST(VP8E_SET_SHARPNESS, args); |
566 return update_extra_cfg(ctx, &extra_cfg); | 563 return update_extra_cfg(ctx, &extra_cfg); |
567 } | 564 } |
568 | 565 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 ctx->config.enc = &priv->cfg; | 676 ctx->config.enc = &priv->cfg; |
680 } | 677 } |
681 | 678 |
682 priv->extra_cfg = default_extra_cfg; | 679 priv->extra_cfg = default_extra_cfg; |
683 vp9_initialize_enc(); | 680 vp9_initialize_enc(); |
684 | 681 |
685 res = validate_config(priv, &priv->cfg, &priv->extra_cfg); | 682 res = validate_config(priv, &priv->cfg, &priv->extra_cfg); |
686 | 683 |
687 if (res == VPX_CODEC_OK) { | 684 if (res == VPX_CODEC_OK) { |
688 set_encoder_config(&priv->oxcf, &priv->cfg, &priv->extra_cfg); | 685 set_encoder_config(&priv->oxcf, &priv->cfg, &priv->extra_cfg); |
| 686 #if CONFIG_VP9_HIGHBITDEPTH |
| 687 priv->oxcf.use_highbitdepth = |
| 688 (ctx->init_flags & VPX_CODEC_USE_HIGHBITDEPTH) ? 1 : 0; |
| 689 #endif |
689 priv->cpi = vp9_create_compressor(&priv->oxcf); | 690 priv->cpi = vp9_create_compressor(&priv->oxcf); |
690 if (priv->cpi == NULL) | 691 if (priv->cpi == NULL) |
691 res = VPX_CODEC_MEM_ERROR; | 692 res = VPX_CODEC_MEM_ERROR; |
692 else | 693 else |
693 priv->cpi->output_pkt_list = &priv->pkt_list.head; | 694 priv->cpi->output_pkt_list = &priv->pkt_list.head; |
694 } | 695 } |
695 } | 696 } |
696 | 697 |
697 return res; | 698 return res; |
698 } | 699 } |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
974 } else { | 975 } else { |
975 pkt.data.frame.buf = cx_data; | 976 pkt.data.frame.buf = cx_data; |
976 pkt.data.frame.sz = size; | 977 pkt.data.frame.sz = size; |
977 } | 978 } |
978 pkt.data.frame.partition_id = -1; | 979 pkt.data.frame.partition_id = -1; |
979 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt); | 980 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt); |
980 cx_data += size; | 981 cx_data += size; |
981 cx_data_sz -= size; | 982 cx_data_sz -= size; |
982 #if CONFIG_SPATIAL_SVC | 983 #if CONFIG_SPATIAL_SVC |
983 if (is_two_pass_svc(cpi)) { | 984 if (is_two_pass_svc(cpi)) { |
984 vpx_codec_cx_pkt_t pkt; | 985 vpx_codec_cx_pkt_t pkt_sizes, pkt_psnr; |
985 int i; | 986 int i; |
986 vp9_zero(pkt); | 987 vp9_zero(pkt_sizes); |
987 pkt.kind = VPX_CODEC_SPATIAL_SVC_LAYER_SIZES; | 988 vp9_zero(pkt_psnr); |
| 989 pkt_sizes.kind = VPX_CODEC_SPATIAL_SVC_LAYER_SIZES; |
| 990 pkt_psnr.kind = VPX_CODEC_SPATIAL_SVC_LAYER_PSNR; |
988 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) { | 991 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) { |
989 pkt.data.layer_sizes[i] = cpi->svc.layer_context[i].layer_size; | 992 LAYER_CONTEXT *lc = &cpi->svc.layer_context[i]; |
990 cpi->svc.layer_context[i].layer_size = 0; | 993 pkt_sizes.data.layer_sizes[i] = lc->layer_size; |
| 994 pkt_psnr.data.layer_psnr[i] = lc->psnr_pkt; |
| 995 lc->layer_size = 0; |
991 } | 996 } |
992 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt); | 997 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt_sizes); |
| 998 vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt_psnr); |
993 } | 999 } |
994 #endif | 1000 #endif |
995 } | 1001 } |
996 } | 1002 } |
997 } | 1003 } |
998 | 1004 |
999 return res; | 1005 return res; |
1000 } | 1006 } |
1001 | 1007 |
1002 static const vpx_codec_cx_pkt_t *encoder_get_cxdata(vpx_codec_alg_priv_t *ctx, | 1008 static const vpx_codec_cx_pkt_t *encoder_get_cxdata(vpx_codec_alg_priv_t *ctx, |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1185 if (svc->spatial_layer_id < 0 || | 1191 if (svc->spatial_layer_id < 0 || |
1186 svc->spatial_layer_id >= (int)ctx->cfg.ss_number_layers) { | 1192 svc->spatial_layer_id >= (int)ctx->cfg.ss_number_layers) { |
1187 return VPX_CODEC_INVALID_PARAM; | 1193 return VPX_CODEC_INVALID_PARAM; |
1188 } | 1194 } |
1189 return VPX_CODEC_OK; | 1195 return VPX_CODEC_OK; |
1190 } | 1196 } |
1191 | 1197 |
1192 static vpx_codec_err_t ctrl_set_svc_parameters(vpx_codec_alg_priv_t *ctx, | 1198 static vpx_codec_err_t ctrl_set_svc_parameters(vpx_codec_alg_priv_t *ctx, |
1193 va_list args) { | 1199 va_list args) { |
1194 VP9_COMP *const cpi = ctx->cpi; | 1200 VP9_COMP *const cpi = ctx->cpi; |
1195 vpx_svc_parameters_t *const params = va_arg(args, vpx_svc_parameters_t *); | 1201 vpx_svc_extra_cfg_t *const params = va_arg(args, vpx_svc_extra_cfg_t *); |
| 1202 int i; |
1196 | 1203 |
1197 if (params == NULL || params->spatial_layer < 0 || | 1204 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) { |
1198 params->spatial_layer >= cpi->svc.number_spatial_layers) | 1205 LAYER_CONTEXT *lc = &cpi->svc.layer_context[i]; |
1199 return VPX_CODEC_INVALID_PARAM; | |
1200 | 1206 |
1201 if (params->spatial_layer == 0) { | 1207 lc->max_q = params->max_quantizers[i]; |
1202 int i; | 1208 lc->min_q = params->min_quantizers[i]; |
1203 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) { | 1209 lc->scaling_factor_num = params->scaling_factor_num[i]; |
1204 cpi->svc.layer_context[i].svc_params_received.spatial_layer = -1; | 1210 lc->scaling_factor_den = params->scaling_factor_den[i]; |
1205 } | |
1206 } | 1211 } |
1207 | 1212 |
1208 cpi->svc.layer_context[params->spatial_layer].svc_params_received = | |
1209 *params; | |
1210 | |
1211 return VPX_CODEC_OK; | 1213 return VPX_CODEC_OK; |
1212 } | 1214 } |
1213 | 1215 |
1214 static vpx_codec_err_t ctrl_set_tune_content(vpx_codec_alg_priv_t *ctx, | 1216 static vpx_codec_err_t ctrl_set_tune_content(vpx_codec_alg_priv_t *ctx, |
1215 va_list args) { | 1217 va_list args) { |
1216 struct vp9_extracfg extra_cfg = ctx->extra_cfg; | 1218 struct vp9_extracfg extra_cfg = ctx->extra_cfg; |
1217 extra_cfg.content = CAST(VP9E_SET_TUNE_CONTENT, args); | 1219 extra_cfg.content = CAST(VP9E_SET_TUNE_CONTENT, args); |
1218 return update_extra_cfg(ctx, &extra_cfg); | 1220 return update_extra_cfg(ctx, &extra_cfg); |
1219 } | 1221 } |
1220 | 1222 |
1221 static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = { | 1223 static vpx_codec_ctrl_fn_map_t encoder_ctrl_maps[] = { |
1222 {VP8_COPY_REFERENCE, ctrl_copy_reference}, | 1224 {VP8_COPY_REFERENCE, ctrl_copy_reference}, |
1223 {VP8E_UPD_ENTROPY, ctrl_update_entropy}, | 1225 {VP8E_UPD_ENTROPY, ctrl_update_entropy}, |
1224 {VP8E_UPD_REFERENCE, ctrl_update_reference}, | 1226 {VP8E_UPD_REFERENCE, ctrl_update_reference}, |
1225 {VP8E_USE_REFERENCE, ctrl_use_reference}, | 1227 {VP8E_USE_REFERENCE, ctrl_use_reference}, |
1226 | 1228 |
1227 // Setters | 1229 // Setters |
1228 {VP8_SET_REFERENCE, ctrl_set_reference}, | 1230 {VP8_SET_REFERENCE, ctrl_set_reference}, |
1229 {VP8_SET_POSTPROC, ctrl_set_previewpp}, | 1231 {VP8_SET_POSTPROC, ctrl_set_previewpp}, |
1230 {VP8E_SET_ROI_MAP, ctrl_set_roi_map}, | 1232 {VP8E_SET_ROI_MAP, ctrl_set_roi_map}, |
1231 {VP8E_SET_ACTIVEMAP, ctrl_set_active_map}, | 1233 {VP8E_SET_ACTIVEMAP, ctrl_set_active_map}, |
1232 {VP8E_SET_SCALEMODE, ctrl_set_scale_mode}, | 1234 {VP8E_SET_SCALEMODE, ctrl_set_scale_mode}, |
1233 {VP8E_SET_CPUUSED, ctrl_set_cpuused}, | 1235 {VP8E_SET_CPUUSED, ctrl_set_cpuused}, |
1234 {VP8E_SET_NOISE_SENSITIVITY, ctrl_set_noise_sensitivity}, | |
1235 {VP8E_SET_ENABLEAUTOALTREF, ctrl_set_enable_auto_alt_ref}, | 1236 {VP8E_SET_ENABLEAUTOALTREF, ctrl_set_enable_auto_alt_ref}, |
1236 {VP8E_SET_SHARPNESS, ctrl_set_sharpness}, | 1237 {VP8E_SET_SHARPNESS, ctrl_set_sharpness}, |
1237 {VP8E_SET_STATIC_THRESHOLD, ctrl_set_static_thresh}, | 1238 {VP8E_SET_STATIC_THRESHOLD, ctrl_set_static_thresh}, |
1238 {VP9E_SET_TILE_COLUMNS, ctrl_set_tile_columns}, | 1239 {VP9E_SET_TILE_COLUMNS, ctrl_set_tile_columns}, |
1239 {VP9E_SET_TILE_ROWS, ctrl_set_tile_rows}, | 1240 {VP9E_SET_TILE_ROWS, ctrl_set_tile_rows}, |
1240 {VP8E_SET_ARNR_MAXFRAMES, ctrl_set_arnr_max_frames}, | 1241 {VP8E_SET_ARNR_MAXFRAMES, ctrl_set_arnr_max_frames}, |
1241 {VP8E_SET_ARNR_STRENGTH, ctrl_set_arnr_strength}, | 1242 {VP8E_SET_ARNR_STRENGTH, ctrl_set_arnr_strength}, |
1242 {VP8E_SET_ARNR_TYPE, ctrl_set_arnr_type}, | 1243 {VP8E_SET_ARNR_TYPE, ctrl_set_arnr_type}, |
1243 {VP8E_SET_TUNING, ctrl_set_tuning}, | 1244 {VP8E_SET_TUNING, ctrl_set_tuning}, |
1244 {VP8E_SET_CQ_LEVEL, ctrl_set_cq_level}, | 1245 {VP8E_SET_CQ_LEVEL, ctrl_set_cq_level}, |
1245 {VP8E_SET_MAX_INTRA_BITRATE_PCT, ctrl_set_rc_max_intra_bitrate_pct}, | 1246 {VP8E_SET_MAX_INTRA_BITRATE_PCT, ctrl_set_rc_max_intra_bitrate_pct}, |
1246 {VP9E_SET_LOSSLESS, ctrl_set_lossless}, | 1247 {VP9E_SET_LOSSLESS, ctrl_set_lossless}, |
1247 {VP9E_SET_FRAME_PARALLEL_DECODING, ctrl_set_frame_parallel_decoding_mode}, | 1248 {VP9E_SET_FRAME_PARALLEL_DECODING, ctrl_set_frame_parallel_decoding_mode}, |
1248 {VP9E_SET_AQ_MODE, ctrl_set_aq_mode}, | 1249 {VP9E_SET_AQ_MODE, ctrl_set_aq_mode}, |
1249 {VP9E_SET_FRAME_PERIODIC_BOOST, ctrl_set_frame_periodic_boost}, | 1250 {VP9E_SET_FRAME_PERIODIC_BOOST, ctrl_set_frame_periodic_boost}, |
1250 {VP9E_SET_SVC, ctrl_set_svc}, | 1251 {VP9E_SET_SVC, ctrl_set_svc}, |
1251 {VP9E_SET_SVC_PARAMETERS, ctrl_set_svc_parameters}, | 1252 {VP9E_SET_SVC_PARAMETERS, ctrl_set_svc_parameters}, |
1252 {VP9E_SET_SVC_LAYER_ID, ctrl_set_svc_layer_id}, | 1253 {VP9E_SET_SVC_LAYER_ID, ctrl_set_svc_layer_id}, |
1253 {VP9E_SET_TUNE_CONTENT, ctrl_set_tune_content}, | 1254 {VP9E_SET_TUNE_CONTENT, ctrl_set_tune_content}, |
| 1255 {VP9E_SET_NOISE_SENSITIVITY, ctrl_set_noise_sensitivity}, |
1254 | 1256 |
1255 // Getters | 1257 // Getters |
1256 {VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer}, | 1258 {VP8E_GET_LAST_QUANTIZER, ctrl_get_quantizer}, |
1257 {VP8E_GET_LAST_QUANTIZER_64, ctrl_get_quantizer64}, | 1259 {VP8E_GET_LAST_QUANTIZER_64, ctrl_get_quantizer64}, |
1258 {VP9_GET_REFERENCE, ctrl_get_reference}, | 1260 {VP9_GET_REFERENCE, ctrl_get_reference}, |
1259 | 1261 |
1260 { -1, NULL}, | 1262 { -1, NULL}, |
1261 }; | 1263 }; |
1262 | 1264 |
1263 static vpx_codec_enc_cfg_map_t encoder_usage_cfg_map[] = { | 1265 static vpx_codec_enc_cfg_map_t encoder_usage_cfg_map[] = { |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1326 } | 1328 } |
1327 }, | 1329 }, |
1328 }; | 1330 }; |
1329 | 1331 |
1330 #ifndef VERSION_STRING | 1332 #ifndef VERSION_STRING |
1331 #define VERSION_STRING | 1333 #define VERSION_STRING |
1332 #endif | 1334 #endif |
1333 CODEC_INTERFACE(vpx_codec_vp9_cx) = { | 1335 CODEC_INTERFACE(vpx_codec_vp9_cx) = { |
1334 "WebM Project VP9 Encoder" VERSION_STRING, | 1336 "WebM Project VP9 Encoder" VERSION_STRING, |
1335 VPX_CODEC_INTERNAL_ABI_VERSION, | 1337 VPX_CODEC_INTERNAL_ABI_VERSION, |
| 1338 #if CONFIG_VP9_HIGHBITDEPTH |
| 1339 VPX_CODEC_CAP_HIGHBITDEPTH | |
| 1340 #endif |
1336 VPX_CODEC_CAP_ENCODER | VPX_CODEC_CAP_PSNR, // vpx_codec_caps_t | 1341 VPX_CODEC_CAP_ENCODER | VPX_CODEC_CAP_PSNR, // vpx_codec_caps_t |
1337 encoder_init, // vpx_codec_init_fn_t | 1342 encoder_init, // vpx_codec_init_fn_t |
1338 encoder_destroy, // vpx_codec_destroy_fn_t | 1343 encoder_destroy, // vpx_codec_destroy_fn_t |
1339 encoder_ctrl_maps, // vpx_codec_ctrl_fn_map_t | 1344 encoder_ctrl_maps, // vpx_codec_ctrl_fn_map_t |
1340 { // NOLINT | 1345 { // NOLINT |
1341 NULL, // vpx_codec_peek_si_fn_t | 1346 NULL, // vpx_codec_peek_si_fn_t |
1342 NULL, // vpx_codec_get_si_fn_t | 1347 NULL, // vpx_codec_get_si_fn_t |
1343 NULL, // vpx_codec_decode_fn_t | 1348 NULL, // vpx_codec_decode_fn_t |
1344 NULL, // vpx_codec_frame_get_fn_t | 1349 NULL, // vpx_codec_frame_get_fn_t |
1345 NULL // vpx_codec_set_fb_fn_t | 1350 NULL // vpx_codec_set_fb_fn_t |
1346 }, | 1351 }, |
1347 { // NOLINT | 1352 { // NOLINT |
1348 1, // 1 cfg map | 1353 1, // 1 cfg map |
1349 encoder_usage_cfg_map, // vpx_codec_enc_cfg_map_t | 1354 encoder_usage_cfg_map, // vpx_codec_enc_cfg_map_t |
1350 encoder_encode, // vpx_codec_encode_fn_t | 1355 encoder_encode, // vpx_codec_encode_fn_t |
1351 encoder_get_cxdata, // vpx_codec_get_cx_data_fn_t | 1356 encoder_get_cxdata, // vpx_codec_get_cx_data_fn_t |
1352 encoder_set_config, // vpx_codec_enc_config_set_fn_t | 1357 encoder_set_config, // vpx_codec_enc_config_set_fn_t |
1353 NULL, // vpx_codec_get_global_headers_fn_t | 1358 NULL, // vpx_codec_get_global_headers_fn_t |
1354 encoder_get_preview, // vpx_codec_get_preview_frame_fn_t | 1359 encoder_get_preview, // vpx_codec_get_preview_frame_fn_t |
1355 NULL // vpx_codec_enc_mr_get_mem_loc_fn_t | 1360 NULL // vpx_codec_enc_mr_get_mem_loc_fn_t |
1356 } | 1361 } |
1357 }; | 1362 }; |
OLD | NEW |