[PATCH] i965_drv_video: implement vaGetImage by internal post proc pipeline
Xiang, Haihao
haihao.xiang at intel.com
Tue Jul 26 01:10:24 PDT 2011
Signed-off-by: Xiang, Haihao <haihao.xiang at intel.com>
---
src/i965_drv_video.c | 48 +++++++++++++++++-------------------------------
1 files changed, 17 insertions(+), 31 deletions(-)
diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c
index effc51d..2779b85 100644
--- a/src/i965_drv_video.c
+++ b/src/i965_drv_video.c
@@ -2442,13 +2442,16 @@ i965_GetImage(VADriverContextP ctx,
VAImageID image)
{
struct i965_driver_data *i965 = i965_driver_data(ctx);
- struct i965_render_state *render_state = &i965->render_state;
-
+ struct i965_surface src_surface;
+ struct i965_surface dst_surface;
+ VAStatus va_status;
+ VARectangle rect;
struct object_surface *obj_surface = SURFACE(surface);
+ struct object_image *obj_image = IMAGE(image);
+
if (!obj_surface)
return VA_STATUS_ERROR_INVALID_SURFACE;
- struct object_image *obj_image = IMAGE(image);
if (!obj_image)
return VA_STATUS_ERROR_INVALID_IMAGE;
@@ -2461,40 +2464,23 @@ i965_GetImage(VADriverContextP ctx,
y + height > obj_image->image.height)
return VA_STATUS_ERROR_INVALID_PARAMETER;
- VAStatus va_status;
- void *image_data = NULL;
-
- va_status = i965_MapBuffer(ctx, obj_image->image.buf, &image_data);
- if (va_status != VA_STATUS_SUCCESS)
- return va_status;
+ if (!obj_surface->bo)
+ return VA_STATUS_SUCCESS;
- VARectangle rect;
rect.x = x;
rect.y = y;
rect.width = width;
rect.height = height;
+ src_surface.id = surface;
+ src_surface.flag = I965_SURFACE_SURFACE;
+ dst_surface.id = image;
+ dst_surface.flag = I965_SURFACE_IMAGE;
+ va_status = i965_image_processing(ctx,
+ &src_surface,
+ &rect,
+ &dst_surface,
+ &rect);
- switch (obj_image->image.format.fourcc) {
- case VA_FOURCC('Y','V','1','2'):
- case VA_FOURCC('I','4','2','0'):
- /* I420 is native format for MPEG-2 decoded surfaces */
- if (render_state->interleaved_uv)
- goto operation_failed;
- get_image_i420(obj_image, image_data, obj_surface, &rect);
- break;
- case VA_FOURCC('N','V','1','2'):
- /* NV12 is native format for H.264 decoded surfaces */
- if (!render_state->interleaved_uv)
- goto operation_failed;
- get_image_nv12(obj_image, image_data, obj_surface, &rect);
- break;
- default:
- operation_failed:
- va_status = VA_STATUS_ERROR_OPERATION_FAILED;
- break;
- }
-
- i965_UnmapBuffer(ctx, obj_image->image.buf);
return va_status;
}
--
1.7.5.4
More information about the Libva
mailing list