diff options
author | Gwenole Beauchesne <gbeauchesne@splitted-desktop.com> | 2009-11-18 10:32:11 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2009-11-18 11:51:11 +0800 |
commit | 29dfeb7e59e86f05e46f4c280c4ba0ae8ac0c85f (patch) | |
tree | b4756801d633e558fe45b0ac7c7cee7962ccfaf8 /i965_drv_video | |
parent | 7451873c2061ab068d76926db83d8b15575efcad (diff) | |
download | libva-29dfeb7e59e86f05e46f4c280c4ba0ae8ac0c85f.tar.gz |
fix subpicture association and deassociation
Diffstat (limited to 'i965_drv_video')
-rw-r--r-- | i965_drv_video/i965_drv_video.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c index 13bb5f8..1dc424d 100644 --- a/i965_drv_video/i965_drv_video.c +++ b/i965_drv_video/i965_drv_video.c @@ -293,6 +293,7 @@ i965_CreateSurfaces(VADriverContextP ctx, surfaces[i] = surfaceID; obj_surface->status = VASurfaceReady; + obj_surface->subpic = VA_INVALID_ID; obj_surface->width = width; obj_surface->height = height; obj_surface->size = SIZE_YUV420(width, height); @@ -495,22 +496,18 @@ i965_AssociateSubpicture(VADriverContextP ctx, unsigned int flags) { struct i965_driver_data *i965 = i965_driver_data(ctx); - VAStatus vaStatus = VA_STATUS_SUCCESS; - /*only ipicture*/ - - struct object_surface *obj_surface = SURFACE(*target_surfaces); struct object_subpic *obj_subpic = SUBPIC(subpicture); + int i; - if (NULL == obj_surface) { - vaStatus = VA_STATUS_ERROR_INVALID_CONFIG; - return vaStatus; - } - obj_subpic->dstx = dest_x; obj_subpic->dsty = dest_y; - obj_surface->subpic = subpicture; - + for (i = 0; i < num_surfaces; i++) { + struct object_surface *obj_surface = SURFACE(target_surfaces[i]); + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + obj_surface->subpic = subpicture; + } return VA_STATUS_SUCCESS; } @@ -521,6 +518,16 @@ i965_DeassociateSubpicture(VADriverContextP ctx, VASurfaceID *target_surfaces, int num_surfaces) { + struct i965_driver_data *i965 = i965_driver_data(ctx); + int i; + + for (i = 0; i < num_surfaces; i++) { + struct object_surface *obj_surface = SURFACE(target_surfaces[i]); + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + if (obj_surface->subpic == subpicture) + obj_surface->subpic = VA_INVALID_ID; + } return VA_STATUS_SUCCESS; } @@ -1317,7 +1324,7 @@ i965_PutSurface(VADriverContextP ctx, srcx, srcy, srcw, srch, destx, desty, destw, desth); obj_surface = SURFACE(surface); - if(obj_surface->subpic != 0) { + if(obj_surface->subpic != VA_INVALID_ID) { i965_render_put_subpic(ctx, surface, srcx, srcy, srcw, srch, destx, desty, destw, desth); |