* 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>
return VA_STATUS_SUCCESS;
}
-VAStatus dummy_QueryConfigAttributes(
+VAStatus dummy_GetConfigAttributes(
VADriverContextP ctx,
VAProfile profile,
VAEntrypoint entrypoint,
return vaStatus;
}
-VAStatus dummy_GetConfigAttributes(
+VAStatus dummy_DestroyConfig(
+ VADriverContextP ctx,
+ 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 */
int height,
int format,
int num_surfaces,
- VASurface *surfaces /* out */
+ VASurfaceID *surfaces /* out */
)
{
INIT_DRIVER_DATA
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 */
/* 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;
}
-VAStatus dummy_DestroySurface(
+VAStatus dummy_DestroySurfaces(
VADriverContextP ctx,
- VASurface *surface_list,
+ VASurfaceID *surface_list,
int num_surfaces
)
{
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;
}
+VAStatus dummy_DeriveImage(
+ VADriverContextP ctx,
+ VASurfaceID surface,
+ VAImage *image /* out */
+)
+{
+ INIT_DRIVER_DATA
+
+ /* TODO */
+ return VA_STATUS_SUCCESS;
+}
+
VAStatus dummy_DestroyImage(
VADriverContextP ctx,
- VAImage *image
+ VAImageID image
+)
+{
+ INIT_DRIVER_DATA
+
+ /* TODO */
+ return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_SetImagePalette(
+ VADriverContextP ctx,
+ VAImageID image,
+ unsigned char *palette
)
{
INIT_DRIVER_DATA
VAStatus dummy_GetImage(
VADriverContextP ctx,
- VASurface *surface,
+ 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,
- VAImage *image
+ VAImageID image
)
{
INIT_DRIVER_DATA
return VA_STATUS_SUCCESS;
}
+
VAStatus dummy_PutImage(
VADriverContextP ctx,
- VASurface *surface,
- VAImage *image,
+ VASurfaceID surface,
+ VAImageID image,
int src_x,
int src_y,
- unsigned int width,
- unsigned int height,
+ unsigned int src_width,
+ unsigned int src_height,
int dest_x,
- int dest_y
+ int dest_y,
+ unsigned int dest_width,
+ unsigned int dest_height
)
{
INIT_DRIVER_DATA
VAStatus dummy_CreateSubpicture(
VADriverContextP ctx,
- VAImage *image,
- VASubpicture *subpicture /* out */
+ VAImageID image,
+ VASubpictureID *subpicture /* out */
)
{
INIT_DRIVER_DATA
VAStatus dummy_DestroySubpicture(
VADriverContextP ctx,
- VASubpicture *subpicture
+ VASubpictureID subpicture
+)
+{
+ INIT_DRIVER_DATA
+
+ /* TODO */
+ return VA_STATUS_SUCCESS;
+}
+
+VAStatus dummy_SetSubpictureImage(
+ VADriverContextP ctx,
+ VASubpictureID subpicture,
+ VAImageID image
)
{
INIT_DRIVER_DATA
VAStatus dummy_SetSubpicturePalette(
VADriverContextP ctx,
- VASubpicture *subpicture,
+ 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
VAStatus dummy_SetSubpictureChromakey(
VADriverContextP ctx,
- VASubpicture *subpicture,
+ VASubpictureID subpicture,
unsigned int chromakey_min,
- unsigned int chromakey_max
+ unsigned int chromakey_max,
+ unsigned int chromakey_mask
)
{
INIT_DRIVER_DATA
VAStatus dummy_SetSubpictureGlobalAlpha(
VADriverContextP ctx,
- VASubpicture *subpicture,
+ VASubpictureID subpicture,
float global_alpha
)
{
return VA_STATUS_SUCCESS;
}
+
VAStatus dummy_AssociateSubpicture(
VADriverContextP ctx,
- VASurface *target_surface,
- VASubpicture *subpicture,
+ 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 width,
- unsigned short height,
+ unsigned short dest_width,
+ unsigned short dest_height,
/*
* whether to enable chroma-keying or global-alpha
* see VA_SUBPICTURE_XXX values
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(
VADriverContextP ctx,
VAConfigID config_id,
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
return vaStatus;
}
- obj_context->context = context;
+ obj_context->context_id = contextID;
+ *context = contextID;
obj_context->current_render_target = -1;
-
- 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));
+ 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;
+ }
+
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);
}
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);
}
+
+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;
{
case VAPictureParameterBufferType:
case VAIQMatrixBufferType:
+ case VABitPlaneBufferType:
+ case VASliceGroupMapBufferType:
case VASliceParameterBufferType:
case VASliceDataBufferType:
case VAMacroblockParameterBufferType:
case VAResidualDataBufferType:
case VADeblockingParameterBufferType:
+ case VAImageBufferType:
/* Ok */
break;
default:
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)
{
}
}
+ if (VA_STATUS_SUCCESS == vaStatus)
+ {
+ *buf_id = bufferID;
+ }
+
return vaStatus;
}
+
VAStatus dummy_BufferSetNumElements(
VADriverContextP ctx,
VABufferID buf_id, /* in */
VAStatus dummy_BeginPicture(
VADriverContextP ctx,
- VAContext *context,
- VASurface *render_target
+ VAContextID context,
+ VASurfaceID render_target
)
{
INIT_DRIVER_DATA
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;
VAStatus dummy_RenderPicture(
VADriverContextP ctx,
- VAContext *context,
+ VAContextID context,
VABufferID *buffers,
int num_buffers
)
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);
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;
}
VAStatus dummy_EndPicture(
VADriverContextP ctx,
- VAContext *context
+ VAContextID context
)
{
INIT_DRIVER_DATA
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);
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;
}
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;
- }
+ *status = VASurfaceReady;
return vaStatus;
}
VAStatus dummy_PutSurface(
VADriverContextP ctx,
- VASurface *surface,
+ VASurfaceID surface,
Drawable draw, /* X Drawable */
short srcx,
short srcy,
unsigned short desth,
VARectangle *cliprects, /* client supplied clip list */
unsigned int number_cliprects, /* number of clip rects in the clip list */
- int flags /* de-interlacing flags */
+ unsigned int flags /* de-interlacing flags */
)
{
/* TODO */
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;
+}
+
+/*
+ * 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_SUCCESS;
}
-VAStatus __vaDriverInit_0_22( 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 = 22;
+ 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.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.vaDestroySurface = dummy_DestroySurface;
+ ctx->vtable.vaDestroySurfaces = dummy_DestroySurfaces;
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.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.vaSetSubpicturePalette = dummy_SetSubpicturePalette;
+ ctx->vtable.vaSetSubpictureImage = dummy_SetSubpictureImage;
ctx->vtable.vaSetSubpictureChromakey = dummy_SetSubpictureChromakey;
ctx->vtable.vaSetSubpictureGlobalAlpha = dummy_SetSubpictureGlobalAlpha;
ctx->vtable.vaAssociateSubpicture = dummy_AssociateSubpicture;
- ctx->vtable.vaDbgCopySurfaceToBuffer = dummy_DbgCopySurfaceToBuffer;
+ 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;
driver_data = (struct dummy_driver_data *) malloc( sizeof(*driver_data) );
ctx->pDriverData = (void *) driver_data;