diff options
Diffstat (limited to 'src/i965_drv_video.c')
-rw-r--r-- | src/i965_drv_video.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c index 9b54597c..0582741e 100644 --- a/src/i965_drv_video.c +++ b/src/i965_drv_video.c @@ -2508,12 +2508,16 @@ i965_CreateContext(VADriverContextP ctx, int i; int max_width; int max_height; + int min_width_height = I965_MIN_CODEC_ENC_RESOLUTION_WIDTH_HEIGHT; if (NULL == obj_config) { vaStatus = VA_STATUS_ERROR_INVALID_CONFIG; return vaStatus; } + if (obj_config->profile == VAProfileJPEGBaseline) + min_width_height = 1; + max_resolution(i965, obj_config, &max_width, &max_height); if (picture_width > max_width || @@ -2522,6 +2526,17 @@ i965_CreateContext(VADriverContextP ctx, return vaStatus; } + if ((VAEntrypointEncSlice == obj_config->entrypoint) || + (VAEntrypointEncPicture == obj_config->entrypoint) || + (VAEntrypointEncSliceLP == obj_config->entrypoint) || + (VAEntrypointFEI == obj_config->entrypoint)) { + if (picture_width < min_width_height || + picture_height < min_width_height) { + vaStatus = VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED; + return vaStatus; + } + } + /* Validate flag */ /* Validate picture dimensions */ contextID = NEW_CONTEXT_ID(); @@ -2666,6 +2681,7 @@ i965_CreateContext(VADriverContextP ctx, if (vaStatus == VA_STATUS_SUCCESS) obj_context->wrapper_context = wrapper_context; } + /* Error recovery */ if (VA_STATUS_SUCCESS != vaStatus) { i965_destroy_context(&i965->context_heap, (struct object_base *)obj_context); @@ -6438,21 +6454,23 @@ i965_QuerySurfaceAttributes(VADriverContextP ctx, i++; if (obj_config->entrypoint == VAEntrypointEncSlice || - obj_config->entrypoint == VAEntrypointEncSliceLP) { + obj_config->entrypoint == VAEntrypointEncSliceLP || + obj_config->entrypoint == VAEntrypointEncPicture || + obj_config->entrypoint == VAEntrypointFEI) { attribs[i].type = VASurfaceAttribMinWidth; attribs[i].value.type = VAGenericValueTypeInteger; attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE; - attribs[i].value.value.i = 32; + attribs[i].value.value.i = I965_MIN_CODEC_ENC_RESOLUTION_WIDTH_HEIGHT; if (obj_config->profile == VAProfileJPEGBaseline) - attribs[i].value.value.i = 16; + attribs[i].value.value.i = 1; i++; attribs[i].type = VASurfaceAttribMinHeight; attribs[i].value.type = VAGenericValueTypeInteger; attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE; - attribs[i].value.value.i = 32; + attribs[i].value.value.i = I965_MIN_CODEC_ENC_RESOLUTION_WIDTH_HEIGHT; if (obj_config->profile == VAProfileJPEGBaseline) - attribs[i].value.value.i = 16; + attribs[i].value.value.i = 1; i++; } |