Fix drivers build.
[profile/ivi/libva.git] / dummy_drv_video / dummy_drv_video.c
index 5e54117..98561a9 100644 (file)
@@ -1,13 +1,34 @@
 /*
- * @COPYRIGHT@ Intel Confidential - Unreleased Software
+ * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#include "va_backend.h"
+#include <va/va_backend.h>
 
 #include "dummy_drv_video.h"
 
 #include "assert.h"
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
 
@@ -53,7 +74,7 @@ VAStatus dummy_QueryConfigProfiles(
 {
     INIT_DRIVER_DATA
     int i = 0;
-    
+
     profile_list[i++] = VAProfileMPEG2Simple;
     profile_list[i++] = VAProfileMPEG2Main;
     profile_list[i++] = VAProfileMPEG4Simple;
@@ -70,7 +91,7 @@ VAStatus dummy_QueryConfigProfiles(
     ASSERT(i <= DUMMY_MAX_PROFILES);
     *num_profiles = i;
 
-       return VA_STATUS_SUCCESS;
+    return VA_STATUS_SUCCESS;
 }
 
 VAStatus dummy_QueryConfigEntrypoints(
@@ -81,7 +102,7 @@ VAStatus dummy_QueryConfigEntrypoints(
        )
 {
     INIT_DRIVER_DATA
-    
+
     switch (profile) {
         case VAProfileMPEG2Simple:
         case VAProfileMPEG2Main:
@@ -118,10 +139,10 @@ VAStatus dummy_QueryConfigEntrypoints(
 
     /* If the assert fails then DUMMY_MAX_ENTRYPOINTS needs to be bigger */
     ASSERT(*num_entrypoints <= DUMMY_MAX_ENTRYPOINTS);
-       return VA_STATUS_SUCCESS;
+    return VA_STATUS_SUCCESS;
 }
 
-VAStatus dummy_QueryConfigAttributes(
+VAStatus dummy_GetConfigAttributes(
                VADriverContextP ctx,
                VAProfile profile,
                VAEntrypoint entrypoint,
@@ -142,7 +163,7 @@ VAStatus dummy_QueryConfigAttributes(
           case VAConfigAttribRTFormat:
               attrib_list[i].value = VA_RT_FORMAT_YUV420;
               break;
-              
+
           default:
               /* Do nothing */
               attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED;
@@ -150,7 +171,7 @@ VAStatus dummy_QueryConfigAttributes(
         }
     }
 
-       return VA_STATUS_SUCCESS;
+    return VA_STATUS_SUCCESS;
 }
 
 static VAStatus dummy__update_attribute(object_config_p obj_config, VAConfigAttrib *attrib)
@@ -179,8 +200,8 @@ static VAStatus dummy__update_attribute(object_config_p obj_config, VAConfigAttr
 
 VAStatus dummy_CreateConfig(
                VADriverContextP ctx,
-               VAProfile profile, 
-               VAEntrypoint entrypoint, 
+               VAProfile profile,
+               VAEntrypoint entrypoint,
                VAConfigAttrib *attrib_list,
                int num_attribs,
                VAConfigID *config_id           /* out */
@@ -191,7 +212,7 @@ VAStatus dummy_CreateConfig(
     int configID;
     object_config_p obj_config;
     int i;
-    
+
     /* Validate profile & entrypoint */
     switch (profile) {
         case VAProfileMPEG2Simple:
@@ -278,7 +299,7 @@ VAStatus dummy_CreateConfig(
             break;
         }
     }
-    
+
     /* Error recovery */
     if (VA_STATUS_SUCCESS != vaStatus)
     {
@@ -289,12 +310,32 @@ VAStatus dummy_CreateConfig(
         *config_id = configID;
     }
 
-       return vaStatus;
+    return vaStatus;
 }
-       
-VAStatus dummy_GetConfigAttributes(
+
+VAStatus dummy_DestroyConfig(
                VADriverContextP ctx,
-               VAConfigID config_id, 
+               VAConfigID config_id
+       )
+{
+    INIT_DRIVER_DATA
+    VAStatus vaStatus;
+    object_config_p obj_config;
+
+    obj_config = CONFIG(config_id);
+    if (NULL == obj_config)
+    {
+        vaStatus = VA_STATUS_ERROR_INVALID_CONFIG;
+        return vaStatus;
+    }
+
+    object_heap_free( &driver_data->config_heap, (object_base_p) obj_config);
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_QueryConfigAttributes(
+               VADriverContextP ctx,
+               VAConfigID config_id,
                VAProfile *profile,             /* out */
                VAEntrypoint *entrypoint,       /* out */
                VAConfigAttrib *attrib_list,    /* out */
@@ -308,7 +349,7 @@ VAStatus dummy_GetConfigAttributes(
 
     obj_config = CONFIG(config_id);
     ASSERT(obj_config);
-    
+
     *profile = obj_config->profile;
     *entrypoint = obj_config->entrypoint;
     *num_attribs =  obj_config->attrib_count;
@@ -316,8 +357,8 @@ VAStatus dummy_GetConfigAttributes(
     {
         attrib_list[i] = obj_config->attrib_list[i];
     }
-    
-       return vaStatus;
+
+    return vaStatus;
 }
 
 VAStatus dummy_CreateSurfaces(
@@ -326,19 +367,19 @@ VAStatus dummy_CreateSurfaces(
                int height,
                int format,
                int num_surfaces,
-               VASurface *surfaces             /* out */
+               VASurfaceID *surfaces           /* out */
        )
 {
     INIT_DRIVER_DATA
     VAStatus vaStatus = VA_STATUS_SUCCESS;
     int i;
-    
+
     /* We only support one format */
     if (VA_RT_FORMAT_YUV420 != format)
     {
         return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
     }
-    
+
     for (i = 0; i < num_surfaces; i++)
     {
         int surfaceID = object_heap_allocate( &driver_data->surface_heap );
@@ -348,13 +389,8 @@ VAStatus dummy_CreateSurfaces(
             vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
             break;
         }
-        obj_surface->surface = &(surfaces[i]);
-        obj_surface->surface->surface_id = surfaceID;
-        obj_surface->surface->context_id = -1;
-        obj_surface->surface->width = width;
-        obj_surface->surface->height = height;
-        obj_surface->surface->format = format;
-        obj_surface->surface->privData = NULL;
+        obj_surface->surface_id = surfaceID;
+        surfaces[i] = surfaceID;
     }
 
     /* Error recovery */
@@ -363,19 +399,19 @@ VAStatus dummy_CreateSurfaces(
         /* surfaces[i-1] was the last successful allocation */
         for(; i--; )
         {
-            object_surface_p obj_surface = SURFACE(surfaces[i].surface_id);
-            surfaces[i].surface_id = -1;
+            object_surface_p obj_surface = SURFACE(surfaces[i]);
+            surfaces[i] = VA_INVALID_SURFACE;
             ASSERT(obj_surface);
             object_heap_free( &driver_data->surface_heap, (object_base_p) obj_surface);
         }
     }
 
-       return vaStatus;
+    return vaStatus;
 }
-       
-VAStatus dummy_DestroySurface(
+
+VAStatus dummy_DestroySurfaces(
                VADriverContextP ctx,
-               VASurface *surface_list,
+               VASurfaceID *surface_list,
                int num_surfaces
        )
 {
@@ -383,11 +419,240 @@ VAStatus dummy_DestroySurface(
     int i;
     for(i = num_surfaces; i--; )
     {
-        object_surface_p obj_surface = SURFACE(surface_list[i].surface_id);
+        object_surface_p obj_surface = SURFACE(surface_list[i]);
         ASSERT(obj_surface);
         object_heap_free( &driver_data->surface_heap, (object_base_p) obj_surface);
     }
-       return VA_STATUS_SUCCESS;
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_QueryImageFormats(
+       VADriverContextP ctx,
+       VAImageFormat *format_list,        /* out */
+       int *num_formats           /* out */
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_CreateImage(
+       VADriverContextP ctx,
+       VAImageFormat *format,
+       int width,
+       int height,
+       VAImage *image     /* out */
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_DeriveImage(
+       VADriverContextP ctx,
+       VASurfaceID surface,
+       VAImage *image     /* out */
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_DestroyImage(
+       VADriverContextP ctx,
+       VAImageID image
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_SetImagePalette(
+       VADriverContextP ctx,
+       VAImageID image,
+       unsigned char *palette
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_GetImage(
+       VADriverContextP ctx,
+       VASurfaceID surface,
+       int x,     /* coordinates of the upper left source pixel */
+       int y,
+       unsigned int width, /* width and height of the region */
+       unsigned int height,
+       VAImageID image
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+
+VAStatus dummy_PutImage(
+       VADriverContextP ctx,
+       VASurfaceID surface,
+       VAImageID image,
+       int src_x,
+       int src_y,
+       unsigned int src_width,
+       unsigned int src_height,
+       int dest_x,
+       int dest_y,
+       unsigned int dest_width,
+       unsigned int dest_height
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_QuerySubpictureFormats(
+       VADriverContextP ctx,
+       VAImageFormat *format_list,        /* out */
+       unsigned int *flags,       /* out */
+       unsigned int *num_formats  /* out */
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_CreateSubpicture(
+       VADriverContextP ctx,
+       VAImageID image,
+       VASubpictureID *subpicture   /* out */
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_DestroySubpicture(
+       VADriverContextP ctx,
+       VASubpictureID subpicture
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_SetSubpictureImage(
+        VADriverContextP ctx,
+        VASubpictureID subpicture,
+        VAImageID image
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_SetSubpicturePalette(
+       VADriverContextP ctx,
+       VASubpictureID subpicture,
+       /*
+        * pointer to an array holding the palette data.  The size of the array is
+        * num_palette_entries * entry_bytes in size.  The order of the components
+        * in the palette is described by the component_order in VASubpicture struct
+        */
+       unsigned char *palette
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_SetSubpictureChromakey(
+       VADriverContextP ctx,
+       VASubpictureID subpicture,
+       unsigned int chromakey_min,
+       unsigned int chromakey_max,
+       unsigned int chromakey_mask
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_SetSubpictureGlobalAlpha(
+       VADriverContextP ctx,
+       VASubpictureID subpicture,
+       float global_alpha 
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+
+VAStatus dummy_AssociateSubpicture(
+       VADriverContextP ctx,
+       VASubpictureID subpicture,
+       VASurfaceID *target_surfaces,
+       int num_surfaces,
+       short src_x, /* upper left offset in subpicture */
+       short src_y,
+       unsigned short src_width,
+       unsigned short src_height,
+       short dest_x, /* upper left offset in surface */
+       short dest_y,
+       unsigned short dest_width,
+       unsigned short dest_height,
+       /*
+        * whether to enable chroma-keying or global-alpha
+        * see VA_SUBPICTURE_XXX values
+        */
+       unsigned int flags
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_DeassociateSubpicture(
+       VADriverContextP ctx,
+       VASubpictureID subpicture,
+       VASurfaceID *target_surfaces,
+       int num_surfaces
+)
+{
+    INIT_DRIVER_DATA
+    
+    /* TODO */
+    return VA_STATUS_SUCCESS;
 }
 
 VAStatus dummy_CreateContext(
@@ -396,9 +661,9 @@ VAStatus dummy_CreateContext(
                int picture_width,
                int picture_height,
                int flag,
-               VASurface *render_targets,
+               VASurfaceID *render_targets,
                int num_render_targets,
-               VAContext *context              /* out */
+               VAContextID *context            /* out */
        )
 {
     INIT_DRIVER_DATA
@@ -412,7 +677,7 @@ VAStatus dummy_CreateContext(
         vaStatus = VA_STATUS_ERROR_INVALID_CONFIG;
         return vaStatus;
     }
-    
+
     /* Validate flag */
     /* Validate picture dimensions */
 
@@ -424,100 +689,117 @@ VAStatus dummy_CreateContext(
         return vaStatus;
     }
 
-    obj_context->context = context;
+    obj_context->context_id  = contextID;
+    *context = contextID;
     obj_context->current_render_target = -1;
+    obj_context->config_id = config_id;
+    obj_context->picture_width = picture_width;
+    obj_context->picture_height = picture_height;
+    obj_context->num_render_targets = num_render_targets;
+    obj_context->render_targets = (VASurfaceID *) malloc(num_render_targets * sizeof(VASurfaceID));
+    if (obj_context->render_targets == NULL)
+    {
+        vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
+        return vaStatus;
+    }
     
-    obj_context->context->context_id = contextID;
-    obj_context->context->config_id = config_id;
-    obj_context->context->picture_width = picture_width;
-    obj_context->context->picture_height = picture_height;
-    obj_context->context->num_render_targets = num_render_targets;
-    obj_context->context->render_targets = (VASurfaceID *) malloc(num_render_targets * sizeof(VASurfaceID));
     for(i = 0; i < num_render_targets; i++)
     {
-        if (NULL == SURFACE(render_targets[i].surface_id))
+        if (NULL == SURFACE(render_targets[i]))
         {
             vaStatus = VA_STATUS_ERROR_INVALID_SURFACE;
             break;
         }
-        obj_context->context->render_targets[i] = render_targets[i].surface_id;
+        obj_context->render_targets[i] = render_targets[i];
     }
-    obj_context->context->flags = flag;
-    obj_context->context->privData = NULL;
+    obj_context->flags = flag;
 
     /* Error recovery */
     if (VA_STATUS_SUCCESS != vaStatus)
     {
-        free(obj_context->context->render_targets);
-        obj_context->context->render_targets = NULL;
-        obj_context->context->context_id = -1;
-        obj_context->context->config_id = -1;
-        obj_context->context->picture_width = 0;
-        obj_context->context->picture_height = 0;
-        free(obj_context->context->render_targets);
-        obj_context->context->render_targets = NULL;
-        obj_context->context->num_render_targets = 0;
-        obj_context->context->flags = 0;
-        obj_context->context->privData = NULL;
+        obj_context->context_id = -1;
+        obj_context->config_id = -1;
+        free(obj_context->render_targets);
+        obj_context->render_targets = NULL;
+        obj_context->num_render_targets = 0;
+        obj_context->flags = 0;
         object_heap_free( &driver_data->context_heap, (object_base_p) obj_context);
     }
 
-       return vaStatus;
+    return vaStatus;
 }
 
 
 VAStatus dummy_DestroyContext(
                VADriverContextP ctx,
-               VAContext *context
+               VAContextID context
        )
 {
     INIT_DRIVER_DATA
-    object_context_p obj_context = CONTEXT(context->context_id);
+    object_context_p obj_context = CONTEXT(context);
     ASSERT(obj_context);
-    
-    obj_context->context->context_id = -1;
-    obj_context->context->config_id = -1;
-    obj_context->context->picture_width = 0;
-    obj_context->context->picture_height = 0;
-    if (obj_context->context->render_targets)
+
+    obj_context->context_id = -1;
+    obj_context->config_id = -1;
+    obj_context->picture_width = 0;
+    obj_context->picture_height = 0;
+    if (obj_context->render_targets)
     {
-        free(obj_context->context->render_targets);
+        free(obj_context->render_targets);
     }
-    obj_context->context->render_targets = NULL;
-    obj_context->context->num_render_targets = 0;
-    obj_context->context->flags = 0;
-    obj_context->context->privData = NULL;
+    obj_context->render_targets = NULL;
+    obj_context->num_render_targets = 0;
+    obj_context->flags = 0;
 
-    obj_context->context = NULL;
     obj_context->current_render_target = -1;
 
     object_heap_free( &driver_data->context_heap, (object_base_p) obj_context);
 
-       return VA_STATUS_SUCCESS;
+    return VA_STATUS_SUCCESS;
 }
 
 
+
+static VAStatus dummy__allocate_buffer(object_buffer_p obj_buffer, int size)
+{
+    VAStatus vaStatus = VA_STATUS_SUCCESS;
+
+    obj_buffer->buffer_data = realloc(obj_buffer->buffer_data, size);
+    if (NULL == obj_buffer->buffer_data)
+    {
+        vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
+    }
+    return vaStatus;
+}
+
 VAStatus dummy_CreateBuffer(
                VADriverContextP ctx,
-               VABufferType type,  /* in */
-               VABufferID *buf_desc    /* out */
-       )
+                VAContextID context,   /* in */
+                VABufferType type,     /* in */
+                unsigned int size,             /* in */
+                unsigned int num_elements,     /* in */
+                void *data,                    /* in */
+                VABufferID *buf_id             /* out */
+)
 {
     INIT_DRIVER_DATA
     VAStatus vaStatus = VA_STATUS_SUCCESS;
     int bufferID;
     object_buffer_p obj_buffer;
-    
+
     /* Validate type */
     switch (type)
     {
         case VAPictureParameterBufferType:
         case VAIQMatrixBufferType:
+        case VABitPlaneBufferType:
+        case VASliceGroupMapBufferType:
         case VASliceParameterBufferType:
         case VASliceDataBufferType:
         case VAMacroblockParameterBufferType:
         case VAResidualDataBufferType:
         case VADeblockingParameterBufferType:
+        case VAImageBufferType:
             /* Ok */
             break;
         default:
@@ -534,37 +816,7 @@ VAStatus dummy_CreateBuffer(
     }
 
     obj_buffer->buffer_data = NULL;
-    
-    *buf_desc = bufferID;
-
-       return vaStatus;
-}
-
-static VAStatus dummy__allocate_buffer(object_buffer_p obj_buffer, int size)
-{
-    VAStatus vaStatus = VA_STATUS_SUCCESS;
 
-    obj_buffer->buffer_data = realloc(obj_buffer->buffer_data, size);
-    if (NULL == obj_buffer->buffer_data)
-    {
-        vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
-    }
-    return vaStatus;
-}
-
-VAStatus dummy_BufferData(
-               VADriverContextP ctx,
-               VABufferID buf_id,      /* in */
-        unsigned int size,     /* in */
-        unsigned int num_elements,     /* in */
-        void *data             /* in */
-       )
-{
-    INIT_DRIVER_DATA
-    VAStatus vaStatus = VA_STATUS_SUCCESS;
-    object_buffer_p obj_buffer = BUFFER(buf_id);
-    ASSERT(obj_buffer);
-    
     vaStatus = dummy__allocate_buffer(obj_buffer, size * num_elements);
     if (VA_STATUS_SUCCESS == vaStatus)
     {
@@ -576,9 +828,15 @@ VAStatus dummy_BufferData(
         }
     }
 
-       return vaStatus;
+    if (VA_STATUS_SUCCESS == vaStatus)
+    {
+        *buf_id = bufferID;
+    }
+
+    return vaStatus;
 }
 
+
 VAStatus dummy_BufferSetNumElements(
                VADriverContextP ctx,
                VABufferID buf_id,      /* in */
@@ -589,7 +847,7 @@ VAStatus dummy_BufferSetNumElements(
     VAStatus vaStatus = VA_STATUS_SUCCESS;
     object_buffer_p obj_buffer = BUFFER(buf_id);
     ASSERT(obj_buffer);
-    
+
     if ((num_elements < 0) || (num_elements > obj_buffer->max_num_elements))
     {
         vaStatus = VA_STATUS_ERROR_UNKNOWN;
@@ -599,7 +857,7 @@ VAStatus dummy_BufferSetNumElements(
         obj_buffer->num_elements = num_elements;
     }
 
-       return vaStatus;
+    return vaStatus;
 }
 
 VAStatus dummy_MapBuffer(
@@ -617,13 +875,13 @@ VAStatus dummy_MapBuffer(
         vaStatus = VA_STATUS_ERROR_INVALID_BUFFER;
         return vaStatus;
     }
-    
+
     if (NULL != obj_buffer->buffer_data)
     {
         *pbuf = obj_buffer->buffer_data;
         vaStatus = VA_STATUS_SUCCESS;
     }
-       return vaStatus;
+    return vaStatus;
 }
 
 VAStatus dummy_UnmapBuffer(
@@ -632,7 +890,7 @@ VAStatus dummy_UnmapBuffer(
        )
 {
     /* Do nothing */
-       return VA_STATUS_SUCCESS;
+    return VA_STATUS_SUCCESS;
 }
 
 static void dummy__destroy_buffer(struct dummy_driver_data *driver_data, object_buffer_p obj_buffer)
@@ -642,7 +900,7 @@ static void dummy__destroy_buffer(struct dummy_driver_data *driver_data, object_
         free(obj_buffer->buffer_data);
         obj_buffer->buffer_data = NULL;
     }
-    
+
     object_heap_free( &driver_data->buffer_heap, (object_base_p) obj_buffer);
 }
 
@@ -656,34 +914,34 @@ VAStatus dummy_DestroyBuffer(
     ASSERT(obj_buffer);
 
     dummy__destroy_buffer(driver_data, obj_buffer);
-       return VA_STATUS_SUCCESS;
+    return VA_STATUS_SUCCESS;
 }
 
 VAStatus dummy_BeginPicture(
                VADriverContextP ctx,
-               VAContext *context,
-               VASurface *render_target
+               VAContextID context,
+               VASurfaceID render_target
        )
 {
     INIT_DRIVER_DATA
     VAStatus vaStatus = VA_STATUS_SUCCESS;
     object_context_p obj_context;
     object_surface_p obj_surface;
-    
-    obj_context = CONTEXT(context->context_id);
+
+    obj_context = CONTEXT(context);
     ASSERT(obj_context);
 
-    obj_surface = SURFACE(render_target->surface_id);
+    obj_surface = SURFACE(render_target);
     ASSERT(obj_surface);
 
     obj_context->current_render_target = obj_surface->base.id;
-    
-       return vaStatus;
+
+    return vaStatus;
 }
 
 VAStatus dummy_RenderPicture(
                VADriverContextP ctx,
-               VAContext *context,
+               VAContextID context,
                VABufferID *buffers,
                int num_buffers
        )
@@ -693,13 +951,13 @@ VAStatus dummy_RenderPicture(
     object_context_p obj_context;
     object_surface_p obj_surface;
     int i;
-    
-    obj_context = CONTEXT(context->context_id);
+
+    obj_context = CONTEXT(context);
     ASSERT(obj_context);
 
     obj_surface = SURFACE(obj_context->current_render_target);
     ASSERT(obj_surface);
-    
+
     /* verify that we got valid buffer references */
     for(i = 0; i < num_buffers; i++)
     {
@@ -711,90 +969,77 @@ VAStatus dummy_RenderPicture(
             break;
         }
     }
+    
+    /* Release buffers */
+    for(i = 0; i < num_buffers; i++)
+    {
+        object_buffer_p obj_buffer = BUFFER(buffers[i]);
+        ASSERT(obj_buffer);
+        dummy__destroy_buffer(driver_data, obj_buffer);
+    }
 
-       return vaStatus;
+    return vaStatus;
 }
 
 VAStatus dummy_EndPicture(
                VADriverContextP ctx,
-               VAContext *context
+               VAContextID context
        )
 {
     INIT_DRIVER_DATA
     VAStatus vaStatus = VA_STATUS_SUCCESS;
     object_context_p obj_context;
     object_surface_p obj_surface;
-    
-    obj_context = CONTEXT(context->context_id);
+
+    obj_context = CONTEXT(context);
     ASSERT(obj_context);
 
     obj_surface = SURFACE(obj_context->current_render_target);
     ASSERT(obj_surface);
-    
+
     // For now, assume that we are done with rendering right away
     obj_context->current_render_target = -1;
 
-       return vaStatus;
+    return vaStatus;
 }
 
 
 VAStatus dummy_SyncSurface(
                VADriverContextP ctx,
-               VAContext *context,
-               VASurface *render_target
+               VASurfaceID render_target
        )
 {
     INIT_DRIVER_DATA
     VAStatus vaStatus = VA_STATUS_SUCCESS;
-    object_context_p obj_context;
     object_surface_p obj_surface;
-    
-    obj_context = CONTEXT(context->context_id);
-    ASSERT(obj_context);
 
-    obj_surface = SURFACE(render_target->surface_id);
+    obj_surface = SURFACE(render_target);
     ASSERT(obj_surface);
 
-    /* Assume that this shouldn't be called before vaEndPicture() */
-    ASSERT( obj_context->current_render_target != obj_surface->base.id );
-    
-       return vaStatus;
+    return vaStatus;
 }
 
 VAStatus dummy_QuerySurfaceStatus(
                VADriverContextP ctx,
-               VAContext *context,
-               VASurface *render_target,
+               VASurfaceID render_target,
                VASurfaceStatus *status /* out */
        )
 {
     INIT_DRIVER_DATA
     VAStatus vaStatus = VA_STATUS_SUCCESS;
-    object_context_p obj_context;
     object_surface_p obj_surface;
-    
-    obj_context = CONTEXT(context->context_id);
-    ASSERT(obj_context);
 
-    obj_surface = SURFACE(render_target->surface_id);
+    obj_surface = SURFACE(render_target);
     ASSERT(obj_surface);
 
-    /* Assume that we are busy until vaEndPicture() is called */
-    if ( obj_context->current_render_target == obj_surface->base.id )
-    {
-        *status = VASurfaceRendering;
-    }
-    else
-    {
-        *status = VASurfaceReady;
-    }
-    
-       return vaStatus;
+    *status = VASurfaceReady;
+
+    return vaStatus;
 }
 
 VAStatus dummy_PutSurface(
                VADriverContextP ctx,
-               VASurface *surface,
+               VASurfaceID surface,
                Drawable draw, /* X Drawable */
                short srcx,
                short srcy,
@@ -804,22 +1049,79 @@ VAStatus dummy_PutSurface(
                short desty,
                unsigned short destw,
                unsigned short desth,
-               int flags /* de-interlacing flags */
+               VARectangle *cliprects, /* client supplied clip list */
+               unsigned int number_cliprects, /* number of clip rects in the clip list */
+               unsigned int flags /* de-interlacing flags */
        )
 {
     /* TODO */
-       return VA_STATUS_ERROR_UNKNOWN;
+    return VA_STATUS_ERROR_UNKNOWN;
 }
 
-VAStatus dummy_DbgCopySurfaceToBuffer(
+/* 
+ * Query display attributes 
+ * The caller must provide a "attr_list" array that can hold at
+ * least vaMaxNumDisplayAttributes() entries. The actual number of attributes
+ * returned in "attr_list" is returned in "num_attributes".
+ */
+VAStatus dummy_QueryDisplayAttributes (
                VADriverContextP ctx,
-               VASurface *surface,
-               void **buffer, /* out */
-               unsigned int *stride /* out */
+               VADisplayAttribute *attr_list,  /* out */
+               int *num_attributes             /* out */
        )
 {
     /* TODO */
-       return VA_STATUS_ERROR_UNKNOWN;
+    return VA_STATUS_ERROR_UNKNOWN;
+}
+
+/* 
+ * Get display attributes 
+ * This function returns the current attribute values in "attr_list".
+ * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field
+ * from vaQueryDisplayAttributes() can have their values retrieved.  
+ */
+VAStatus dummy_GetDisplayAttributes (
+               VADriverContextP ctx,
+               VADisplayAttribute *attr_list,  /* in/out */
+               int num_attributes
+       )
+{
+    /* TODO */
+    return VA_STATUS_ERROR_UNKNOWN;
+}
+
+/* 
+ * Set display attributes 
+ * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field
+ * from vaQueryDisplayAttributes() can be set.  If the attribute is not settable or 
+ * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED
+ */
+VAStatus dummy_SetDisplayAttributes (
+               VADriverContextP ctx,
+               VADisplayAttribute *attr_list,
+               int num_attributes
+       )
+{
+    /* TODO */
+    return VA_STATUS_ERROR_UNKNOWN;
+}
+
+
+VAStatus dummy_CopySurfaceToBuffer(
+               VADriverContextP ctx,
+               VASurfaceID surface,
+                unsigned int *fourcc, /* following are output argument */
+                unsigned int *luma_stride,
+                unsigned int *chroma_u_stride,
+                unsigned int *chroma_v_stride,
+                unsigned int *luma_offset,
+                unsigned int *chroma_u_offset,
+                unsigned int *chroma_v_offset,
+               void **buffer
+       )
+{
+    /* TODO */
+    return VA_STATUS_ERROR_UNKNOWN;
 }
 
 VAStatus dummy_Terminate( VADriverContextP ctx )
@@ -843,7 +1145,7 @@ VAStatus dummy_Terminate( VADriverContextP ctx )
 
     /* TODO cleanup */
     object_heap_destroy( &driver_data->surface_heap );
-    
+
     /* TODO cleanup */
     object_heap_destroy( &driver_data->context_heap );
 
@@ -859,51 +1161,73 @@ VAStatus dummy_Terminate( VADriverContextP ctx )
     free(ctx->pDriverData);
     ctx->pDriverData = NULL;
 
-       return VA_STATUS_SUCCESS;
+    return VA_STATUS_SUCCESS;
 }
 
-VAStatus __vaDriverInit_0_18(  VADriverContextP ctx )
+VAStatus __vaDriverInit_0_31(  VADriverContextP ctx )
 {
     object_base_p obj;
     int result;
     struct dummy_driver_data *driver_data;
     int i;
-    
-    ctx->version_major = 0;
-    ctx->version_minor = 18;
+
+    ctx->version_major = VA_MAJOR_VERSION;
+    ctx->version_minor = VA_MINOR_VERSION;
     ctx->max_profiles = DUMMY_MAX_PROFILES;
     ctx->max_entrypoints = DUMMY_MAX_ENTRYPOINTS;
     ctx->max_attributes = DUMMY_MAX_CONFIG_ATTRIBUTES;
+    ctx->max_image_formats = DUMMY_MAX_IMAGE_FORMATS;
+    ctx->max_subpic_formats = DUMMY_MAX_SUBPIC_FORMATS;
+    ctx->max_display_attributes = DUMMY_MAX_DISPLAY_ATTRIBUTES;
+    ctx->str_vendor = DUMMY_STR_VENDOR;
+
+    ctx->vtable.vaTerminate = dummy_Terminate;
+    ctx->vtable.vaQueryConfigEntrypoints = dummy_QueryConfigEntrypoints;
+    ctx->vtable.vaQueryConfigProfiles = dummy_QueryConfigProfiles;
+    ctx->vtable.vaQueryConfigEntrypoints = dummy_QueryConfigEntrypoints;
+    ctx->vtable.vaQueryConfigAttributes = dummy_QueryConfigAttributes;
+    ctx->vtable.vaCreateConfig = dummy_CreateConfig;
+    ctx->vtable.vaDestroyConfig = dummy_DestroyConfig;
+    ctx->vtable.vaGetConfigAttributes = dummy_GetConfigAttributes;
+    ctx->vtable.vaCreateSurfaces = dummy_CreateSurfaces;
+    ctx->vtable.vaDestroySurfaces = dummy_DestroySurfaces;
+    ctx->vtable.vaCreateContext = dummy_CreateContext;
+    ctx->vtable.vaDestroyContext = dummy_DestroyContext;
+    ctx->vtable.vaCreateBuffer = dummy_CreateBuffer;
+    ctx->vtable.vaBufferSetNumElements = dummy_BufferSetNumElements;
+    ctx->vtable.vaMapBuffer = dummy_MapBuffer;
+    ctx->vtable.vaUnmapBuffer = dummy_UnmapBuffer;
+    ctx->vtable.vaDestroyBuffer = dummy_DestroyBuffer;
+    ctx->vtable.vaBeginPicture = dummy_BeginPicture;
+    ctx->vtable.vaRenderPicture = dummy_RenderPicture;
+    ctx->vtable.vaEndPicture = dummy_EndPicture;
+    ctx->vtable.vaSyncSurface = dummy_SyncSurface;
+    ctx->vtable.vaQuerySurfaceStatus = dummy_QuerySurfaceStatus;
+    ctx->vtable.vaPutSurface = dummy_PutSurface;
+    ctx->vtable.vaQueryImageFormats = dummy_QueryImageFormats;
+    ctx->vtable.vaCreateImage = dummy_CreateImage;
+    ctx->vtable.vaDeriveImage = dummy_DeriveImage;
+    ctx->vtable.vaDestroyImage = dummy_DestroyImage;
+    ctx->vtable.vaSetImagePalette = dummy_SetImagePalette;
+    ctx->vtable.vaGetImage = dummy_GetImage;
+    ctx->vtable.vaPutImage = dummy_PutImage;
+    ctx->vtable.vaQuerySubpictureFormats = dummy_QuerySubpictureFormats;
+    ctx->vtable.vaCreateSubpicture = dummy_CreateSubpicture;
+    ctx->vtable.vaDestroySubpicture = dummy_DestroySubpicture;
+    ctx->vtable.vaSetSubpictureImage = dummy_SetSubpictureImage;
+    ctx->vtable.vaSetSubpictureChromakey = dummy_SetSubpictureChromakey;
+    ctx->vtable.vaSetSubpictureGlobalAlpha = dummy_SetSubpictureGlobalAlpha;
+    ctx->vtable.vaAssociateSubpicture = dummy_AssociateSubpicture;
+    ctx->vtable.vaDeassociateSubpicture = dummy_DeassociateSubpicture;
+    ctx->vtable.vaQueryDisplayAttributes = dummy_QueryDisplayAttributes;
+    ctx->vtable.vaGetDisplayAttributes = dummy_GetDisplayAttributes;
+    ctx->vtable.vaSetDisplayAttributes = dummy_SetDisplayAttributes;
+    
+    ctx->vtable.vaCopySurfaceToBuffer = dummy_CopySurfaceToBuffer;
 
-       ctx->vtable.vaTerminate = dummy_Terminate;
-       ctx->vtable.vaQueryConfigEntrypoints = dummy_QueryConfigEntrypoints;
-       ctx->vtable.vaTerminate = dummy_Terminate;
-       ctx->vtable.vaQueryConfigProfiles = dummy_QueryConfigProfiles;
-       ctx->vtable.vaQueryConfigEntrypoints = dummy_QueryConfigEntrypoints;
-       ctx->vtable.vaQueryConfigAttributes = dummy_QueryConfigAttributes;
-       ctx->vtable.vaCreateConfig = dummy_CreateConfig;
-       ctx->vtable.vaGetConfigAttributes = dummy_GetConfigAttributes;
-       ctx->vtable.vaCreateSurfaces = dummy_CreateSurfaces;
-       ctx->vtable.vaDestroySurface = dummy_DestroySurface;
-       ctx->vtable.vaCreateContext = dummy_CreateContext;
-       ctx->vtable.vaDestroyContext = dummy_DestroyContext;
-       ctx->vtable.vaCreateBuffer = dummy_CreateBuffer;
-       ctx->vtable.vaBufferData = dummy_BufferData;
-       ctx->vtable.vaBufferSetNumElements = dummy_BufferSetNumElements;
-       ctx->vtable.vaMapBuffer = dummy_MapBuffer;
-       ctx->vtable.vaUnmapBuffer = dummy_UnmapBuffer;
-       ctx->vtable.vaDestroyBuffer = dummy_DestroyBuffer;
-       ctx->vtable.vaBeginPicture = dummy_BeginPicture;
-       ctx->vtable.vaRenderPicture = dummy_RenderPicture;
-       ctx->vtable.vaEndPicture = dummy_EndPicture;
-       ctx->vtable.vaSyncSurface = dummy_SyncSurface;
-       ctx->vtable.vaQuerySurfaceStatus = dummy_QuerySurfaceStatus;
-       ctx->vtable.vaPutSurface = dummy_PutSurface;
-       ctx->vtable.vaDbgCopySurfaceToBuffer = dummy_DbgCopySurfaceToBuffer;
-
-       driver_data = (struct dummy_driver_data *) malloc( sizeof(*driver_data) );
+    driver_data = (struct dummy_driver_data *) malloc( sizeof(*driver_data) );
     ctx->pDriverData = (void *) driver_data;
-    
+
     result = object_heap_init( &driver_data->config_heap, sizeof(struct object_config), CONFIG_ID_OFFSET );
     ASSERT( result == 0 );