1*61046927SAndroid Build Coastguard Worker /**************************************************************************
2*61046927SAndroid Build Coastguard Worker *
3*61046927SAndroid Build Coastguard Worker * Copyright 2010 Younes Manton & Thomas Balling Sørensen.
4*61046927SAndroid Build Coastguard Worker * All Rights Reserved.
5*61046927SAndroid Build Coastguard Worker *
6*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
7*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the
8*61046927SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including
9*61046927SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish,
10*61046927SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to
11*61046927SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to
12*61046927SAndroid Build Coastguard Worker * the following conditions:
13*61046927SAndroid Build Coastguard Worker *
14*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the
15*61046927SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions
16*61046927SAndroid Build Coastguard Worker * of the Software.
17*61046927SAndroid Build Coastguard Worker *
18*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19*61046927SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20*61046927SAndroid Build Coastguard Worker * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21*61046927SAndroid Build Coastguard Worker * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
22*61046927SAndroid Build Coastguard Worker * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23*61046927SAndroid Build Coastguard Worker * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24*61046927SAndroid Build Coastguard Worker * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25*61046927SAndroid Build Coastguard Worker *
26*61046927SAndroid Build Coastguard Worker **************************************************************************/
27*61046927SAndroid Build Coastguard Worker
28*61046927SAndroid Build Coastguard Worker #include <assert.h>
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard Worker #include "util/u_memory.h"
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Worker #include "vdpau_private.h"
33*61046927SAndroid Build Coastguard Worker
34*61046927SAndroid Build Coastguard Worker static void* ftab[67] =
35*61046927SAndroid Build Coastguard Worker {
36*61046927SAndroid Build Coastguard Worker &vlVdpGetErrorString, /* VDP_FUNC_ID_GET_ERROR_STRING */
37*61046927SAndroid Build Coastguard Worker &vlVdpGetProcAddress, /* VDP_FUNC_ID_GET_PROC_ADDRESS */
38*61046927SAndroid Build Coastguard Worker &vlVdpGetApiVersion, /* VDP_FUNC_ID_GET_API_VERSION */
39*61046927SAndroid Build Coastguard Worker NULL, /* DUMMY */
40*61046927SAndroid Build Coastguard Worker &vlVdpGetInformationString, /* VDP_FUNC_ID_GET_INFORMATION_STRING */
41*61046927SAndroid Build Coastguard Worker &vlVdpDeviceDestroy, /* VDP_FUNC_ID_DEVICE_DESTROY */
42*61046927SAndroid Build Coastguard Worker &vlVdpGenerateCSCMatrix, /* VDP_FUNC_ID_GENERATE_CSC_MATRIX */
43*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfaceQueryCapabilities, /* VDP_FUNC_ID_VIDEO_SURFACE_QUERY_CAPABILITIES */
44*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities, /* VDP_FUNC_ID_VIDEO_SURFACE_QUERY_GET_PUT_BITS_Y_CB_CR_CAPABILITIES */
45*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfaceCreate, /* VDP_FUNC_ID_VIDEO_SURFACE_CREATE */
46*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfaceDestroy, /* VDP_FUNC_ID_VIDEO_SURFACE_DESTROY */
47*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfaceGetParameters, /* VDP_FUNC_ID_VIDEO_SURFACE_GET_PARAMETERS */
48*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfaceGetBitsYCbCr, /* VDP_FUNC_ID_VIDEO_SURFACE_GET_BITS_Y_CB_CR */
49*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfacePutBitsYCbCr, /* VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR */
50*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceQueryCapabilities, /* VDP_FUNC_ID_OUTPUT_SURFACE_QUERY_CAPABILITIES */
51*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceQueryGetPutBitsNativeCapabilities, /* VDP_FUNC_ID_OUTPUT_SURFACE_QUERY_GET_PUT_BITS_NATIVE_CAPABILITIES */
52*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceQueryPutBitsIndexedCapabilities, /* VDP_FUNC_ID_OUTPUT_SURFACE_QUERY_PUT_BITS_INDEXED_CAPABILITIES */
53*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceQueryPutBitsYCbCrCapabilities, /* VDP_FUNC_ID_OUTPUT_SURFACE_QUERY_PUT_BITS_Y_CB_CR_CAPABILITIES */
54*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceCreate, /* VDP_FUNC_ID_OUTPUT_SURFACE_CREATE */
55*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceDestroy, /* VDP_FUNC_ID_OUTPUT_SURFACE_DESTROY */
56*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceGetParameters, /* VDP_FUNC_ID_OUTPUT_SURFACE_GET_PARAMETERS */
57*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceGetBitsNative, /* VDP_FUNC_ID_OUTPUT_SURFACE_GET_BITS_NATIVE */
58*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfacePutBitsNative, /* VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_NATIVE */
59*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfacePutBitsIndexed, /* VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_INDEXED */
60*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfacePutBitsYCbCr, /* VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_Y_CB_CR */
61*61046927SAndroid Build Coastguard Worker &vlVdpBitmapSurfaceQueryCapabilities, /* VDP_FUNC_ID_BITMAP_SURFACE_QUERY_CAPABILITIES */
62*61046927SAndroid Build Coastguard Worker &vlVdpBitmapSurfaceCreate, /* VDP_FUNC_ID_BITMAP_SURFACE_CREATE */
63*61046927SAndroid Build Coastguard Worker &vlVdpBitmapSurfaceDestroy, /* VDP_FUNC_ID_BITMAP_SURFACE_DESTROY */
64*61046927SAndroid Build Coastguard Worker &vlVdpBitmapSurfaceGetParameters, /* VDP_FUNC_ID_BITMAP_SURFACE_GET_PARAMETERS */
65*61046927SAndroid Build Coastguard Worker &vlVdpBitmapSurfacePutBitsNative, /* VDP_FUNC_ID_BITMAP_SURFACE_PUT_BITS_NATIVE */
66*61046927SAndroid Build Coastguard Worker NULL, /* DUMMY */
67*61046927SAndroid Build Coastguard Worker NULL, /* DUMMY */
68*61046927SAndroid Build Coastguard Worker NULL, /* DUMMY */
69*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceRenderOutputSurface, /* VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_OUTPUT_SURFACE */
70*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceRenderBitmapSurface, /* VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_BITMAP_SURFACE */
71*61046927SAndroid Build Coastguard Worker NULL, /* VDP_FUNC_ID_OUTPUT_SURFACE_RENDER_VIDEO_SURFACE_LUMA */
72*61046927SAndroid Build Coastguard Worker &vlVdpDecoderQueryCapabilities, /* VDP_FUNC_ID_DECODER_QUERY_CAPABILITIES */
73*61046927SAndroid Build Coastguard Worker &vlVdpDecoderCreate, /* VDP_FUNC_ID_DECODER_CREATE */
74*61046927SAndroid Build Coastguard Worker &vlVdpDecoderDestroy, /* VDP_FUNC_ID_DECODER_DESTROY */
75*61046927SAndroid Build Coastguard Worker &vlVdpDecoderGetParameters, /* VDP_FUNC_ID_DECODER_GET_PARAMETERS */
76*61046927SAndroid Build Coastguard Worker &vlVdpDecoderRender, /* VDP_FUNC_ID_DECODER_RENDER */
77*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerQueryFeatureSupport, /* VDP_FUNC_ID_VIDEO_MIXER_QUERY_FEATURE_SUPPORT */
78*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerQueryParameterSupport, /* VDP_FUNC_ID_VIDEO_MIXER_QUERY_PARAMETER_SUPPORT */
79*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerQueryAttributeSupport, /* VDP_FUNC_ID_VIDEO_MIXER_QUERY_ATTRIBUTE_SUPPORT */
80*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerQueryParameterValueRange, /* VDP_FUNC_ID_VIDEO_MIXER_QUERY_PARAMETER_VALUE_RANGE */
81*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerQueryAttributeValueRange, /* VDP_FUNC_ID_VIDEO_MIXER_QUERY_ATTRIBUTE_VALUE_RANGE */
82*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerCreate, /* VDP_FUNC_ID_VIDEO_MIXER_CREATE */
83*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerSetFeatureEnables, /* VDP_FUNC_ID_VIDEO_MIXER_SET_FEATURE_ENABLES */
84*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerSetAttributeValues, /* VDP_FUNC_ID_VIDEO_MIXER_SET_ATTRIBUTE_VALUES */
85*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerGetFeatureSupport, /* VDP_FUNC_ID_VIDEO_MIXER_GET_FEATURE_SUPPORT */
86*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerGetFeatureEnables, /* VDP_FUNC_ID_VIDEO_MIXER_GET_FEATURE_ENABLES */
87*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerGetParameterValues, /* VDP_FUNC_ID_VIDEO_MIXER_GET_PARAMETER_VALUES */
88*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerGetAttributeValues, /* VDP_FUNC_ID_VIDEO_MIXER_GET_ATTRIBUTE_VALUES */
89*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerDestroy, /* VDP_FUNC_ID_VIDEO_MIXER_DESTROY */
90*61046927SAndroid Build Coastguard Worker &vlVdpVideoMixerRender, /* VDP_FUNC_ID_VIDEO_MIXER_RENDER */
91*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueTargetDestroy, /* VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_DESTROY */
92*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueCreate, /* VDP_FUNC_ID_PRESENTATION_QUEUE_CREATE */
93*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueDestroy, /* VDP_FUNC_ID_PRESENTATION_QUEUE_DESTROY */
94*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueSetBackgroundColor, /* VDP_FUNC_ID_PRESENTATION_QUEUE_SET_BACKGROUND_COLOR */
95*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueGetBackgroundColor, /* VDP_FUNC_ID_PRESENTATION_QUEUE_GET_BACKGROUND_COLOR */
96*61046927SAndroid Build Coastguard Worker NULL, /* DUMMY */
97*61046927SAndroid Build Coastguard Worker NULL, /* DUMMY */
98*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueGetTime, /* VDP_FUNC_ID_PRESENTATION_QUEUE_GET_TIME */
99*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueDisplay, /* VDP_FUNC_ID_PRESENTATION_QUEUE_DISPLAY */
100*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueBlockUntilSurfaceIdle, /* VDP_FUNC_ID_PRESENTATION_QUEUE_BLOCK_UNTIL_SURFACE_IDLE */
101*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueQuerySurfaceStatus, /* VDP_FUNC_ID_PRESENTATION_QUEUE_QUERY_SURFACE_STATUS */
102*61046927SAndroid Build Coastguard Worker &vlVdpPreemptionCallbackRegister /* VDP_FUNC_ID_PREEMPTION_CALLBACK_REGISTER */
103*61046927SAndroid Build Coastguard Worker };
104*61046927SAndroid Build Coastguard Worker
105*61046927SAndroid Build Coastguard Worker static void* ftab_winsys[1] =
106*61046927SAndroid Build Coastguard Worker {
107*61046927SAndroid Build Coastguard Worker &vlVdpPresentationQueueTargetCreateX11 /* VDP_FUNC_ID_PRESENTATION_QUEUE_TARGET_CREATE_X11 */
108*61046927SAndroid Build Coastguard Worker };
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker static void* ftab_driver[4] =
111*61046927SAndroid Build Coastguard Worker {
112*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfaceGallium, /* VDP_FUNC_ID_SURFACE_GALLIUM */
113*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceGallium, /* VDP_FUNC_ID_OUTPUT_SURFACE_GALLIUM */
114*61046927SAndroid Build Coastguard Worker &vlVdpVideoSurfaceDMABuf, /* VDP_FUNC_ID_VIDEO_SURFACE_DMA_BUF */
115*61046927SAndroid Build Coastguard Worker &vlVdpOutputSurfaceDMABuf /* VDP_FUNC_ID_OUTPUT_SURFACE_DMA_BUF */
116*61046927SAndroid Build Coastguard Worker };
117*61046927SAndroid Build Coastguard Worker
vlGetFuncFTAB(VdpFuncId function_id,void ** func)118*61046927SAndroid Build Coastguard Worker bool vlGetFuncFTAB(VdpFuncId function_id, void **func)
119*61046927SAndroid Build Coastguard Worker {
120*61046927SAndroid Build Coastguard Worker assert(func);
121*61046927SAndroid Build Coastguard Worker *func = NULL;
122*61046927SAndroid Build Coastguard Worker
123*61046927SAndroid Build Coastguard Worker if (function_id < VDP_FUNC_ID_BASE_WINSYS) {
124*61046927SAndroid Build Coastguard Worker if (function_id < ARRAY_SIZE(ftab))
125*61046927SAndroid Build Coastguard Worker *func = ftab[function_id];
126*61046927SAndroid Build Coastguard Worker
127*61046927SAndroid Build Coastguard Worker } else if (function_id < VDP_FUNC_ID_BASE_DRIVER) {
128*61046927SAndroid Build Coastguard Worker function_id -= VDP_FUNC_ID_BASE_WINSYS;
129*61046927SAndroid Build Coastguard Worker if (function_id < ARRAY_SIZE(ftab_winsys))
130*61046927SAndroid Build Coastguard Worker *func = ftab_winsys[function_id];
131*61046927SAndroid Build Coastguard Worker
132*61046927SAndroid Build Coastguard Worker } else {
133*61046927SAndroid Build Coastguard Worker function_id -= VDP_FUNC_ID_BASE_DRIVER;
134*61046927SAndroid Build Coastguard Worker if (function_id < ARRAY_SIZE(ftab_driver))
135*61046927SAndroid Build Coastguard Worker *func = ftab_driver[function_id];
136*61046927SAndroid Build Coastguard Worker }
137*61046927SAndroid Build Coastguard Worker
138*61046927SAndroid Build Coastguard Worker return *func != NULL;
139*61046927SAndroid Build Coastguard Worker }
140