| Index: source/libvpx/vp9/vp9_cx_iface.c
|
| ===================================================================
|
| --- source/libvpx/vp9/vp9_cx_iface.c (revision 292608)
|
| +++ source/libvpx/vp9/vp9_cx_iface.c (working copy)
|
| @@ -188,11 +188,9 @@
|
| }
|
| if (alt_ref_sum > REF_FRAMES - cfg->ss_number_layers)
|
| ERROR("Not enough ref buffers for svc alt ref frames");
|
| - if ((cfg->ss_number_layers > 3 ||
|
| - cfg->ss_number_layers * cfg->ts_number_layers > 4) &&
|
| + if (cfg->ss_number_layers * cfg->ts_number_layers > 3 &&
|
| cfg->g_error_resilient == 0)
|
| - ERROR("Multiple frame context are not supported for more than 3 spatial "
|
| - "layers or more than 4 spatial x temporal layers");
|
| + ERROR("Multiple frame context are not supported for more than 3 layers");
|
| }
|
| #endif
|
|
|
| @@ -274,28 +272,50 @@
|
| }
|
|
|
| #if !CONFIG_VP9_HIGHBITDEPTH
|
| - if (cfg->g_profile > (unsigned int)PROFILE_1)
|
| + if (cfg->g_profile > (unsigned int)PROFILE_1) {
|
| ERROR("Profile > 1 not supported in this build configuration");
|
| + }
|
| #endif
|
| if (cfg->g_profile <= (unsigned int)PROFILE_1 &&
|
| - extra_cfg->bit_depth > VPX_BITS_8)
|
| + cfg->g_bit_depth > VPX_BITS_8) {
|
| ERROR("Codec high bit-depth not supported in profile < 2");
|
| + }
|
| + if (cfg->g_profile <= (unsigned int)PROFILE_1 &&
|
| + cfg->g_input_bit_depth > 8) {
|
| + ERROR("Source high bit-depth not supported in profile < 2");
|
| + }
|
| if (cfg->g_profile > (unsigned int)PROFILE_1 &&
|
| - extra_cfg->bit_depth == VPX_BITS_8)
|
| + cfg->g_bit_depth == VPX_BITS_8) {
|
| ERROR("Codec bit-depth 8 not supported in profile > 1");
|
| + }
|
|
|
| return VPX_CODEC_OK;
|
| }
|
|
|
| -
|
| static vpx_codec_err_t validate_img(vpx_codec_alg_priv_t *ctx,
|
| const vpx_image_t *img) {
|
| switch (img->fmt) {
|
| case VPX_IMG_FMT_YV12:
|
| case VPX_IMG_FMT_I420:
|
| + case VPX_IMG_FMT_I42016:
|
| + break;
|
| case VPX_IMG_FMT_I422:
|
| case VPX_IMG_FMT_I444:
|
| + case VPX_IMG_FMT_I440:
|
| + if (ctx->cfg.g_profile != (unsigned int)PROFILE_1) {
|
| + ERROR("Invalid image format. I422, I444, I440 images are "
|
| + "not supported in profile.");
|
| + }
|
| break;
|
| + case VPX_IMG_FMT_I42216:
|
| + case VPX_IMG_FMT_I44416:
|
| + case VPX_IMG_FMT_I44016:
|
| + if (ctx->cfg.g_profile != (unsigned int)PROFILE_1 &&
|
| + ctx->cfg.g_profile != (unsigned int)PROFILE_3) {
|
| + ERROR("Invalid image format. 16-bit I422, I444, I440 images are "
|
| + "not supported in profile.");
|
| + }
|
| + break;
|
| default:
|
| ERROR("Invalid image format. Only YV12, I420, I422, I444 images are "
|
| "supported.");
|
| @@ -314,9 +334,11 @@
|
| case VPX_IMG_FMT_I420: return 12;
|
| case VPX_IMG_FMT_I422: return 16;
|
| case VPX_IMG_FMT_I444: return 24;
|
| + case VPX_IMG_FMT_I440: return 16;
|
| case VPX_IMG_FMT_I42016: return 24;
|
| case VPX_IMG_FMT_I42216: return 32;
|
| case VPX_IMG_FMT_I44416: return 48;
|
| + case VPX_IMG_FMT_I44016: return 32;
|
| default: assert(0 && "Invalid image format"); break;
|
| }
|
| return 0;
|
| @@ -330,7 +352,7 @@
|
| oxcf->profile = cfg->g_profile;
|
| oxcf->width = cfg->g_w;
|
| oxcf->height = cfg->g_h;
|
| - oxcf->bit_depth = extra_cfg->bit_depth;
|
| + oxcf->bit_depth = cfg->g_bit_depth;
|
| oxcf->input_bit_depth = cfg->g_input_bit_depth;
|
| // guess a frame rate if out of whack, use 30
|
| oxcf->init_framerate = (double)cfg->g_timebase.den / cfg->g_timebase.num;
|
|
|