2 * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 #include "va_backend.h"
27 #include "dummy_drv_video.h"
36 #define INIT_DRIVER_DATA struct dummy_driver_data *driver_data = (struct dummy_driver_data *) ctx->pDriverData;
38 #define CONFIG(id) ((object_config_p) object_heap_lookup( &driver_data->config_heap, id ))
39 #define CONTEXT(id) ((object_context_p) object_heap_lookup( &driver_data->context_heap, id ))
40 #define SURFACE(id) ((object_surface_p) object_heap_lookup( &driver_data->surface_heap, id ))
41 #define BUFFER(id) ((object_buffer_p) object_heap_lookup( &driver_data->buffer_heap, id ))
43 #define CONFIG_ID_OFFSET 0x01000000
44 #define CONTEXT_ID_OFFSET 0x02000000
45 #define SURFACE_ID_OFFSET 0x04000000
46 #define BUFFER_ID_OFFSET 0x08000000
48 static void dummy__error_message(const char *msg, ...)
52 fprintf(stderr, "dummy_drv_video error: ");
54 vfprintf(stderr, msg, args);
58 static void dummy__information_message(const char *msg, ...)
62 fprintf(stderr, "dummy_drv_video: ");
64 vfprintf(stderr, msg, args);
68 VAStatus dummy_QueryConfigProfiles(
70 VAProfile *profile_list, /* out */
71 int *num_profiles /* out */
77 profile_list[i++] = VAProfileMPEG2Simple;
78 profile_list[i++] = VAProfileMPEG2Main;
79 profile_list[i++] = VAProfileMPEG4Simple;
80 profile_list[i++] = VAProfileMPEG4AdvancedSimple;
81 profile_list[i++] = VAProfileMPEG4Main;
82 profile_list[i++] = VAProfileH264Baseline;
83 profile_list[i++] = VAProfileH264Main;
84 profile_list[i++] = VAProfileH264High;
85 profile_list[i++] = VAProfileVC1Simple;
86 profile_list[i++] = VAProfileVC1Main;
87 profile_list[i++] = VAProfileVC1Advanced;
89 /* If the assert fails then DUMMY_MAX_PROFILES needs to be bigger */
90 ASSERT(i <= DUMMY_MAX_PROFILES);
93 return VA_STATUS_SUCCESS;
96 VAStatus dummy_QueryConfigEntrypoints(
99 VAEntrypoint *entrypoint_list, /* out */
100 int *num_entrypoints /* out */
106 case VAProfileMPEG2Simple:
107 case VAProfileMPEG2Main:
108 *num_entrypoints = 2;
109 entrypoint_list[0] = VAEntrypointVLD;
110 entrypoint_list[1] = VAEntrypointMoComp;
113 case VAProfileMPEG4Simple:
114 case VAProfileMPEG4AdvancedSimple:
115 case VAProfileMPEG4Main:
116 *num_entrypoints = 1;
117 entrypoint_list[0] = VAEntrypointVLD;
120 case VAProfileH264Baseline:
121 case VAProfileH264Main:
122 case VAProfileH264High:
123 *num_entrypoints = 1;
124 entrypoint_list[0] = VAEntrypointVLD;
127 case VAProfileVC1Simple:
128 case VAProfileVC1Main:
129 case VAProfileVC1Advanced:
130 *num_entrypoints = 1;
131 entrypoint_list[0] = VAEntrypointVLD;
135 *num_entrypoints = 0;
139 /* If the assert fails then DUMMY_MAX_ENTRYPOINTS needs to be bigger */
140 ASSERT(*num_entrypoints <= DUMMY_MAX_ENTRYPOINTS);
141 return VA_STATUS_SUCCESS;
144 VAStatus dummy_GetConfigAttributes(
145 VADriverContextP ctx,
147 VAEntrypoint entrypoint,
148 VAConfigAttrib *attrib_list, /* in/out */
156 /* Other attributes don't seem to be defined */
157 /* What to do if we don't know the attribute? */
158 for (i = 0; i < num_attribs; i++)
160 switch (attrib_list[i].type)
162 case VAConfigAttribRTFormat:
163 attrib_list[i].value = VA_RT_FORMAT_YUV420;
168 attrib_list[i].value = VA_ATTRIB_NOT_SUPPORTED;
173 return VA_STATUS_SUCCESS;
176 static VAStatus dummy__update_attribute(object_config_p obj_config, VAConfigAttrib *attrib)
179 /* Check existing attrbiutes */
180 for(i = 0; obj_config->attrib_count < i; i++)
182 if (obj_config->attrib_list[i].type == attrib->type)
184 /* Update existing attribute */
185 obj_config->attrib_list[i].value = attrib->value;
186 return VA_STATUS_SUCCESS;
189 if (obj_config->attrib_count < DUMMY_MAX_CONFIG_ATTRIBUTES)
191 i = obj_config->attrib_count;
192 obj_config->attrib_list[i].type = attrib->type;
193 obj_config->attrib_list[i].value = attrib->value;
194 obj_config->attrib_count++;
195 return VA_STATUS_SUCCESS;
197 return VA_STATUS_ERROR_MAX_NUM_EXCEEDED;
200 VAStatus dummy_CreateConfig(
201 VADriverContextP ctx,
203 VAEntrypoint entrypoint,
204 VAConfigAttrib *attrib_list,
206 VAConfigID *config_id /* out */
212 object_config_p obj_config;
215 /* Validate profile & entrypoint */
217 case VAProfileMPEG2Simple:
218 case VAProfileMPEG2Main:
219 if ((VAEntrypointVLD == entrypoint) ||
220 (VAEntrypointMoComp == entrypoint))
222 vaStatus = VA_STATUS_SUCCESS;
226 vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
230 case VAProfileMPEG4Simple:
231 case VAProfileMPEG4AdvancedSimple:
232 case VAProfileMPEG4Main:
233 if (VAEntrypointVLD == entrypoint)
235 vaStatus = VA_STATUS_SUCCESS;
239 vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
243 case VAProfileH264Baseline:
244 case VAProfileH264Main:
245 case VAProfileH264High:
246 if (VAEntrypointVLD == entrypoint)
248 vaStatus = VA_STATUS_SUCCESS;
252 vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
256 case VAProfileVC1Simple:
257 case VAProfileVC1Main:
258 case VAProfileVC1Advanced:
259 if (VAEntrypointVLD == entrypoint)
261 vaStatus = VA_STATUS_SUCCESS;
265 vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
270 vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
274 if (VA_STATUS_SUCCESS != vaStatus)
279 configID = object_heap_allocate( &driver_data->config_heap );
280 obj_config = CONFIG(configID);
281 if (NULL == obj_config)
283 vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
287 obj_config->profile = profile;
288 obj_config->entrypoint = entrypoint;
289 obj_config->attrib_list[0].type = VAConfigAttribRTFormat;
290 obj_config->attrib_list[0].value = VA_RT_FORMAT_YUV420;
291 obj_config->attrib_count = 1;
293 for(i = 0; i < num_attribs; i++)
295 vaStatus = dummy__update_attribute(obj_config, &(attrib_list[i]));
296 if (VA_STATUS_SUCCESS != vaStatus)
303 if (VA_STATUS_SUCCESS != vaStatus)
305 object_heap_free( &driver_data->config_heap, (object_base_p) obj_config);
309 *config_id = configID;
315 VAStatus dummy_DestroyConfig(
316 VADriverContextP ctx,
322 object_config_p obj_config;
324 obj_config = CONFIG(config_id);
325 if (NULL == obj_config)
327 vaStatus = VA_STATUS_ERROR_INVALID_CONFIG;
331 object_heap_free( &driver_data->config_heap, (object_base_p) obj_config);
332 return VA_STATUS_SUCCESS;
335 VAStatus dummy_QueryConfigAttributes(
336 VADriverContextP ctx,
337 VAConfigID config_id,
338 VAProfile *profile, /* out */
339 VAEntrypoint *entrypoint, /* out */
340 VAConfigAttrib *attrib_list, /* out */
341 int *num_attribs /* out */
345 VAStatus vaStatus = VA_STATUS_SUCCESS;
346 object_config_p obj_config;
349 obj_config = CONFIG(config_id);
352 *profile = obj_config->profile;
353 *entrypoint = obj_config->entrypoint;
354 *num_attribs = obj_config->attrib_count;
355 for(i = 0; i < obj_config->attrib_count; i++)
357 attrib_list[i] = obj_config->attrib_list[i];
363 VAStatus dummy_CreateSurfaces(
364 VADriverContextP ctx,
369 VASurfaceID *surfaces /* out */
373 VAStatus vaStatus = VA_STATUS_SUCCESS;
376 /* We only support one format */
377 if (VA_RT_FORMAT_YUV420 != format)
379 return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT;
382 for (i = 0; i < num_surfaces; i++)
384 int surfaceID = object_heap_allocate( &driver_data->surface_heap );
385 object_surface_p obj_surface = SURFACE(surfaceID);
386 if (NULL == obj_surface)
388 vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
391 obj_surface->surface_id = surfaceID;
392 surfaces[i] = surfaceID;
396 if (VA_STATUS_SUCCESS != vaStatus)
398 /* surfaces[i-1] was the last successful allocation */
401 object_surface_p obj_surface = SURFACE(surfaces[i]);
402 surfaces[i] = VA_INVALID_SURFACE;
404 object_heap_free( &driver_data->surface_heap, (object_base_p) obj_surface);
411 VAStatus dummy_DestroySurfaces(
412 VADriverContextP ctx,
413 VASurfaceID *surface_list,
419 for(i = num_surfaces; i--; )
421 object_surface_p obj_surface = SURFACE(surface_list[i]);
423 object_heap_free( &driver_data->surface_heap, (object_base_p) obj_surface);
425 return VA_STATUS_SUCCESS;
428 VAStatus dummy_QueryImageFormats(
429 VADriverContextP ctx,
430 VAImageFormat *format_list, /* out */
431 int *num_formats /* out */
437 return VA_STATUS_SUCCESS;
440 VAStatus dummy_CreateImage(
441 VADriverContextP ctx,
442 VAImageFormat *format,
445 VAImage *image /* out */
451 return VA_STATUS_SUCCESS;
454 VAStatus dummy_DeriveImage(
455 VADriverContextP ctx,
457 VAImage *image /* out */
463 return VA_STATUS_SUCCESS;
466 VAStatus dummy_DestroyImage(
467 VADriverContextP ctx,
474 return VA_STATUS_SUCCESS;
477 VAStatus dummy_SetImagePalette(
478 VADriverContextP ctx,
480 unsigned char *palette
486 return VA_STATUS_SUCCESS;
489 VAStatus dummy_GetImage(
490 VADriverContextP ctx,
492 int x, /* coordinates of the upper left source pixel */
494 unsigned int width, /* width and height of the region */
502 return VA_STATUS_SUCCESS;
505 VAStatus dummy_PutImage(
506 VADriverContextP ctx,
520 return VA_STATUS_SUCCESS;
523 VAStatus dummy_PutImage2(
524 VADriverContextP ctx,
529 unsigned int src_width,
530 unsigned int src_height,
533 unsigned int dest_width,
534 unsigned int dest_height
540 return VA_STATUS_SUCCESS;
543 VAStatus dummy_QuerySubpictureFormats(
544 VADriverContextP ctx,
545 VAImageFormat *format_list, /* out */
546 unsigned int *flags, /* out */
547 unsigned int *num_formats /* out */
553 return VA_STATUS_SUCCESS;
556 VAStatus dummy_CreateSubpicture(
557 VADriverContextP ctx,
559 VASubpictureID *subpicture /* out */
565 return VA_STATUS_SUCCESS;
568 VAStatus dummy_DestroySubpicture(
569 VADriverContextP ctx,
570 VASubpictureID subpicture
576 return VA_STATUS_SUCCESS;
579 VAStatus dummy_SetSubpictureImage(
580 VADriverContextP ctx,
581 VASubpictureID subpicture,
588 return VA_STATUS_SUCCESS;
591 VAStatus dummy_SetSubpicturePalette(
592 VADriverContextP ctx,
593 VASubpictureID subpicture,
595 * pointer to an array holding the palette data. The size of the array is
596 * num_palette_entries * entry_bytes in size. The order of the components
597 * in the palette is described by the component_order in VASubpicture struct
599 unsigned char *palette
605 return VA_STATUS_SUCCESS;
608 VAStatus dummy_SetSubpictureChromakey(
609 VADriverContextP ctx,
610 VASubpictureID subpicture,
611 unsigned int chromakey_min,
612 unsigned int chromakey_max,
613 unsigned int chromakey_mask
619 return VA_STATUS_SUCCESS;
622 VAStatus dummy_SetSubpictureGlobalAlpha(
623 VADriverContextP ctx,
624 VASubpictureID subpicture,
631 return VA_STATUS_SUCCESS;
634 VAStatus dummy_AssociateSubpicture(
635 VADriverContextP ctx,
636 VASubpictureID subpicture,
637 VASurfaceID *target_surfaces,
639 short src_x, /* upper left offset in subpicture */
641 short dest_x, /* upper left offset in surface */
643 unsigned short width,
644 unsigned short height,
646 * whether to enable chroma-keying or global-alpha
647 * see VA_SUBPICTURE_XXX values
655 return VA_STATUS_SUCCESS;
658 VAStatus dummy_AssociateSubpicture2(
659 VADriverContextP ctx,
660 VASubpictureID subpicture,
661 VASurfaceID *target_surfaces,
663 short src_x, /* upper left offset in subpicture */
665 unsigned short src_width,
666 unsigned short src_height,
667 short dest_x, /* upper left offset in surface */
669 unsigned short dest_width,
670 unsigned short dest_height,
672 * whether to enable chroma-keying or global-alpha
673 * see VA_SUBPICTURE_XXX values
681 return VA_STATUS_SUCCESS;
684 VAStatus dummy_DeassociateSubpicture(
685 VADriverContextP ctx,
686 VASubpictureID subpicture,
687 VASurfaceID *target_surfaces,
694 return VA_STATUS_SUCCESS;
697 VAStatus dummy_CreateContext(
698 VADriverContextP ctx,
699 VAConfigID config_id,
703 VASurfaceID *render_targets,
704 int num_render_targets,
705 VAContextID *context /* out */
709 VAStatus vaStatus = VA_STATUS_SUCCESS;
710 object_config_p obj_config;
713 obj_config = CONFIG(config_id);
714 if (NULL == obj_config)
716 vaStatus = VA_STATUS_ERROR_INVALID_CONFIG;
721 /* Validate picture dimensions */
723 int contextID = object_heap_allocate( &driver_data->context_heap );
724 object_context_p obj_context = CONTEXT(contextID);
725 if (NULL == obj_context)
727 vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
731 obj_context->context_id = contextID;
732 *context = contextID;
733 obj_context->current_render_target = -1;
734 obj_context->config_id = config_id;
735 obj_context->picture_width = picture_width;
736 obj_context->picture_height = picture_height;
737 obj_context->num_render_targets = num_render_targets;
738 obj_context->render_targets = (VASurfaceID *) malloc(num_render_targets * sizeof(VASurfaceID));
739 if (obj_context->render_targets == NULL)
741 vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
745 for(i = 0; i < num_render_targets; i++)
747 if (NULL == SURFACE(render_targets[i]))
749 vaStatus = VA_STATUS_ERROR_INVALID_SURFACE;
752 obj_context->render_targets[i] = render_targets[i];
754 obj_context->flags = flag;
757 if (VA_STATUS_SUCCESS != vaStatus)
759 obj_context->context_id = -1;
760 obj_context->config_id = -1;
761 free(obj_context->render_targets);
762 obj_context->render_targets = NULL;
763 obj_context->num_render_targets = 0;
764 obj_context->flags = 0;
765 object_heap_free( &driver_data->context_heap, (object_base_p) obj_context);
772 VAStatus dummy_DestroyContext(
773 VADriverContextP ctx,
778 object_context_p obj_context = CONTEXT(context);
781 obj_context->context_id = -1;
782 obj_context->config_id = -1;
783 obj_context->picture_width = 0;
784 obj_context->picture_height = 0;
785 if (obj_context->render_targets)
787 free(obj_context->render_targets);
789 obj_context->render_targets = NULL;
790 obj_context->num_render_targets = 0;
791 obj_context->flags = 0;
793 obj_context->current_render_target = -1;
795 object_heap_free( &driver_data->context_heap, (object_base_p) obj_context);
797 return VA_STATUS_SUCCESS;
802 static VAStatus dummy__allocate_buffer(object_buffer_p obj_buffer, int size)
804 VAStatus vaStatus = VA_STATUS_SUCCESS;
806 obj_buffer->buffer_data = realloc(obj_buffer->buffer_data, size);
807 if (NULL == obj_buffer->buffer_data)
809 vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
814 VAStatus dummy_CreateBuffer(
815 VADriverContextP ctx,
816 VAContextID context, /* in */
817 VABufferType type, /* in */
818 unsigned int size, /* in */
819 unsigned int num_elements, /* in */
821 VABufferID *buf_id /* out */
825 VAStatus vaStatus = VA_STATUS_SUCCESS;
827 object_buffer_p obj_buffer;
832 case VAPictureParameterBufferType:
833 case VAIQMatrixBufferType:
834 case VABitPlaneBufferType:
835 case VASliceGroupMapBufferType:
836 case VASliceParameterBufferType:
837 case VASliceDataBufferType:
838 case VAMacroblockParameterBufferType:
839 case VAResidualDataBufferType:
840 case VADeblockingParameterBufferType:
841 case VAImageBufferType:
845 vaStatus = VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE;
849 bufferID = object_heap_allocate( &driver_data->buffer_heap );
850 obj_buffer = BUFFER(bufferID);
851 if (NULL == obj_buffer)
853 vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED;
857 obj_buffer->buffer_data = NULL;
859 vaStatus = dummy__allocate_buffer(obj_buffer, size * num_elements);
860 if (VA_STATUS_SUCCESS == vaStatus)
862 obj_buffer->max_num_elements = num_elements;
863 obj_buffer->num_elements = num_elements;
866 memcpy(obj_buffer->buffer_data, data, size * num_elements);
870 if (VA_STATUS_SUCCESS == vaStatus)
879 VAStatus dummy_BufferSetNumElements(
880 VADriverContextP ctx,
881 VABufferID buf_id, /* in */
882 unsigned int num_elements /* in */
886 VAStatus vaStatus = VA_STATUS_SUCCESS;
887 object_buffer_p obj_buffer = BUFFER(buf_id);
890 if ((num_elements < 0) || (num_elements > obj_buffer->max_num_elements))
892 vaStatus = VA_STATUS_ERROR_UNKNOWN;
894 if (VA_STATUS_SUCCESS == vaStatus)
896 obj_buffer->num_elements = num_elements;
902 VAStatus dummy_MapBuffer(
903 VADriverContextP ctx,
904 VABufferID buf_id, /* in */
905 void **pbuf /* out */
909 VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN;
910 object_buffer_p obj_buffer = BUFFER(buf_id);
912 if (NULL == obj_buffer)
914 vaStatus = VA_STATUS_ERROR_INVALID_BUFFER;
918 if (NULL != obj_buffer->buffer_data)
920 *pbuf = obj_buffer->buffer_data;
921 vaStatus = VA_STATUS_SUCCESS;
926 VAStatus dummy_UnmapBuffer(
927 VADriverContextP ctx,
928 VABufferID buf_id /* in */
932 return VA_STATUS_SUCCESS;
935 static void dummy__destroy_buffer(struct dummy_driver_data *driver_data, object_buffer_p obj_buffer)
937 if (NULL != obj_buffer->buffer_data)
939 free(obj_buffer->buffer_data);
940 obj_buffer->buffer_data = NULL;
943 object_heap_free( &driver_data->buffer_heap, (object_base_p) obj_buffer);
946 VAStatus dummy_DestroyBuffer(
947 VADriverContextP ctx,
952 object_buffer_p obj_buffer = BUFFER(buffer_id);
955 dummy__destroy_buffer(driver_data, obj_buffer);
956 return VA_STATUS_SUCCESS;
959 VAStatus dummy_BeginPicture(
960 VADriverContextP ctx,
962 VASurfaceID render_target
966 VAStatus vaStatus = VA_STATUS_SUCCESS;
967 object_context_p obj_context;
968 object_surface_p obj_surface;
970 obj_context = CONTEXT(context);
973 obj_surface = SURFACE(render_target);
976 obj_context->current_render_target = obj_surface->base.id;
981 VAStatus dummy_RenderPicture(
982 VADriverContextP ctx,
989 VAStatus vaStatus = VA_STATUS_SUCCESS;
990 object_context_p obj_context;
991 object_surface_p obj_surface;
994 obj_context = CONTEXT(context);
997 obj_surface = SURFACE(obj_context->current_render_target);
1000 /* verify that we got valid buffer references */
1001 for(i = 0; i < num_buffers; i++)
1003 object_buffer_p obj_buffer = BUFFER(buffers[i]);
1005 if (NULL == obj_buffer)
1007 vaStatus = VA_STATUS_ERROR_INVALID_BUFFER;
1012 /* Release buffers */
1013 for(i = 0; i < num_buffers; i++)
1015 object_buffer_p obj_buffer = BUFFER(buffers[i]);
1017 dummy__destroy_buffer(driver_data, obj_buffer);
1023 VAStatus dummy_EndPicture(
1024 VADriverContextP ctx,
1029 VAStatus vaStatus = VA_STATUS_SUCCESS;
1030 object_context_p obj_context;
1031 object_surface_p obj_surface;
1033 obj_context = CONTEXT(context);
1034 ASSERT(obj_context);
1036 obj_surface = SURFACE(obj_context->current_render_target);
1037 ASSERT(obj_surface);
1039 // For now, assume that we are done with rendering right away
1040 obj_context->current_render_target = -1;
1046 VAStatus dummy_SyncSurface(
1047 VADriverContextP ctx,
1048 VAContextID context,
1049 VASurfaceID render_target
1053 VAStatus vaStatus = VA_STATUS_SUCCESS;
1054 object_context_p obj_context;
1055 object_surface_p obj_surface;
1057 obj_context = CONTEXT(context);
1058 ASSERT(obj_context);
1060 obj_surface = SURFACE(render_target);
1061 ASSERT(obj_surface);
1063 /* Assume that this shouldn't be called before vaEndPicture() */
1064 ASSERT( obj_context->current_render_target != obj_surface->base.id );
1069 VAStatus dummy_QuerySurfaceStatus(
1070 VADriverContextP ctx,
1071 VASurfaceID render_target,
1072 VASurfaceStatus *status /* out */
1076 VAStatus vaStatus = VA_STATUS_SUCCESS;
1077 object_surface_p obj_surface;
1079 obj_surface = SURFACE(render_target);
1080 ASSERT(obj_surface);
1082 *status = VASurfaceReady;
1087 VAStatus dummy_PutSurface(
1088 VADriverContextP ctx,
1089 VASurfaceID surface,
1090 Drawable draw, /* X Drawable */
1093 unsigned short srcw,
1094 unsigned short srch,
1097 unsigned short destw,
1098 unsigned short desth,
1099 VARectangle *cliprects, /* client supplied clip list */
1100 unsigned int number_cliprects, /* number of clip rects in the clip list */
1101 unsigned int flags /* de-interlacing flags */
1105 return VA_STATUS_ERROR_UNKNOWN;
1109 * Query display attributes
1110 * The caller must provide a "attr_list" array that can hold at
1111 * least vaMaxNumDisplayAttributes() entries. The actual number of attributes
1112 * returned in "attr_list" is returned in "num_attributes".
1114 VAStatus dummy_QueryDisplayAttributes (
1115 VADriverContextP ctx,
1116 VADisplayAttribute *attr_list, /* out */
1117 int *num_attributes /* out */
1121 return VA_STATUS_ERROR_UNKNOWN;
1125 * Get display attributes
1126 * This function returns the current attribute values in "attr_list".
1127 * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field
1128 * from vaQueryDisplayAttributes() can have their values retrieved.
1130 VAStatus dummy_GetDisplayAttributes (
1131 VADriverContextP ctx,
1132 VADisplayAttribute *attr_list, /* in/out */
1137 return VA_STATUS_ERROR_UNKNOWN;
1141 * Set display attributes
1142 * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field
1143 * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or
1144 * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED
1146 VAStatus dummy_SetDisplayAttributes (
1147 VADriverContextP ctx,
1148 VADisplayAttribute *attr_list,
1153 return VA_STATUS_ERROR_UNKNOWN;
1157 VAStatus dummy_CopySurfaceToBuffer(
1158 VADriverContextP ctx,
1159 VASurfaceID surface,
1160 unsigned int *fourcc, /* following are output argument */
1161 unsigned int *luma_stride,
1162 unsigned int *chroma_u_stride,
1163 unsigned int *chroma_v_stride,
1164 unsigned int *luma_offset,
1165 unsigned int *chroma_u_offset,
1166 unsigned int *chroma_v_offset,
1171 return VA_STATUS_ERROR_UNKNOWN;
1174 VAStatus dummy_Terminate( VADriverContextP ctx )
1177 object_buffer_p obj_buffer;
1178 object_surface_p obj_surface;
1179 object_context_p obj_context;
1180 object_config_p obj_config;
1181 object_heap_iterator iter;
1183 /* Clean up left over buffers */
1184 obj_buffer = (object_buffer_p) object_heap_first( &driver_data->buffer_heap, &iter);
1187 dummy__information_message("vaTerminate: bufferID %08x still allocated, destroying\n", obj_buffer->base.id);
1188 dummy__destroy_buffer(driver_data, obj_buffer);
1189 obj_buffer = (object_buffer_p) object_heap_next( &driver_data->buffer_heap, &iter);
1191 object_heap_destroy( &driver_data->buffer_heap );
1194 object_heap_destroy( &driver_data->surface_heap );
1197 object_heap_destroy( &driver_data->context_heap );
1199 /* Clean up configIDs */
1200 obj_config = (object_config_p) object_heap_first( &driver_data->config_heap, &iter);
1203 object_heap_free( &driver_data->config_heap, (object_base_p) obj_config);
1204 obj_config = (object_config_p) object_heap_next( &driver_data->config_heap, &iter);
1206 object_heap_destroy( &driver_data->config_heap );
1208 free(ctx->pDriverData);
1209 ctx->pDriverData = NULL;
1211 return VA_STATUS_SUCCESS;
1214 VAStatus __vaDriverInit_0_30( VADriverContextP ctx )
1218 struct dummy_driver_data *driver_data;
1221 ctx->version_major = 0;
1222 ctx->version_minor = 29;
1223 ctx->max_profiles = DUMMY_MAX_PROFILES;
1224 ctx->max_entrypoints = DUMMY_MAX_ENTRYPOINTS;
1225 ctx->max_attributes = DUMMY_MAX_CONFIG_ATTRIBUTES;
1226 ctx->max_image_formats = DUMMY_MAX_IMAGE_FORMATS;
1227 ctx->max_subpic_formats = DUMMY_MAX_SUBPIC_FORMATS;
1228 ctx->max_display_attributes = DUMMY_MAX_DISPLAY_ATTRIBUTES;
1229 ctx->str_vendor = DUMMY_STR_VENDOR;
1231 ctx->vtable.vaTerminate = dummy_Terminate;
1232 ctx->vtable.vaQueryConfigEntrypoints = dummy_QueryConfigEntrypoints;
1233 ctx->vtable.vaQueryConfigProfiles = dummy_QueryConfigProfiles;
1234 ctx->vtable.vaQueryConfigEntrypoints = dummy_QueryConfigEntrypoints;
1235 ctx->vtable.vaQueryConfigAttributes = dummy_QueryConfigAttributes;
1236 ctx->vtable.vaCreateConfig = dummy_CreateConfig;
1237 ctx->vtable.vaDestroyConfig = dummy_DestroyConfig;
1238 ctx->vtable.vaGetConfigAttributes = dummy_GetConfigAttributes;
1239 ctx->vtable.vaCreateSurfaces = dummy_CreateSurfaces;
1240 ctx->vtable.vaDestroySurfaces = dummy_DestroySurfaces;
1241 ctx->vtable.vaCreateContext = dummy_CreateContext;
1242 ctx->vtable.vaDestroyContext = dummy_DestroyContext;
1243 ctx->vtable.vaCreateBuffer = dummy_CreateBuffer;
1244 ctx->vtable.vaBufferSetNumElements = dummy_BufferSetNumElements;
1245 ctx->vtable.vaMapBuffer = dummy_MapBuffer;
1246 ctx->vtable.vaUnmapBuffer = dummy_UnmapBuffer;
1247 ctx->vtable.vaDestroyBuffer = dummy_DestroyBuffer;
1248 ctx->vtable.vaBeginPicture = dummy_BeginPicture;
1249 ctx->vtable.vaRenderPicture = dummy_RenderPicture;
1250 ctx->vtable.vaEndPicture = dummy_EndPicture;
1251 ctx->vtable.vaSyncSurface = dummy_SyncSurface;
1252 ctx->vtable.vaQuerySurfaceStatus = dummy_QuerySurfaceStatus;
1253 ctx->vtable.vaPutSurface = dummy_PutSurface;
1254 ctx->vtable.vaQueryImageFormats = dummy_QueryImageFormats;
1255 ctx->vtable.vaCreateImage = dummy_CreateImage;
1256 ctx->vtable.vaDeriveImage = dummy_DeriveImage;
1257 ctx->vtable.vaDestroyImage = dummy_DestroyImage;
1258 ctx->vtable.vaSetImagePalette = dummy_SetImagePalette;
1259 ctx->vtable.vaGetImage = dummy_GetImage;
1260 ctx->vtable.vaPutImage = dummy_PutImage;
1261 ctx->vtable.vaPutImage2 = dummy_PutImage2;
1262 ctx->vtable.vaQuerySubpictureFormats = dummy_QuerySubpictureFormats;
1263 ctx->vtable.vaCreateSubpicture = dummy_CreateSubpicture;
1264 ctx->vtable.vaDestroySubpicture = dummy_DestroySubpicture;
1265 ctx->vtable.vaSetSubpictureImage = dummy_SetSubpictureImage;
1266 ctx->vtable.vaSetSubpictureChromakey = dummy_SetSubpictureChromakey;
1267 ctx->vtable.vaSetSubpictureGlobalAlpha = dummy_SetSubpictureGlobalAlpha;
1268 ctx->vtable.vaAssociateSubpicture = dummy_AssociateSubpicture;
1269 ctx->vtable.vaAssociateSubpicture2 = dummy_AssociateSubpicture2;
1270 ctx->vtable.vaDeassociateSubpicture = dummy_DeassociateSubpicture;
1271 ctx->vtable.vaQueryDisplayAttributes = dummy_QueryDisplayAttributes;
1272 ctx->vtable.vaGetDisplayAttributes = dummy_GetDisplayAttributes;
1273 ctx->vtable.vaSetDisplayAttributes = dummy_SetDisplayAttributes;
1275 ctx->vtable.vaCopySurfaceToBuffer = dummy_CopySurfaceToBuffer;
1277 driver_data = (struct dummy_driver_data *) malloc( sizeof(*driver_data) );
1278 ctx->pDriverData = (void *) driver_data;
1280 result = object_heap_init( &driver_data->config_heap, sizeof(struct object_config), CONFIG_ID_OFFSET );
1281 ASSERT( result == 0 );
1283 result = object_heap_init( &driver_data->context_heap, sizeof(struct object_context), CONTEXT_ID_OFFSET );
1284 ASSERT( result == 0 );
1286 result = object_heap_init( &driver_data->surface_heap, sizeof(struct object_surface), SURFACE_ID_OFFSET );
1287 ASSERT( result == 0 );
1289 result = object_heap_init( &driver_data->buffer_heap, sizeof(struct object_buffer), BUFFER_ID_OFFSET );
1290 ASSERT( result == 0 );
1293 return VA_STATUS_SUCCESS;