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; |