vdpau_private.h revision 501ac572c604ef248ed41311a065bc5f4746fcb3
1/**************************************************************************
2 *
3 * Copyright 2010 Younes Manton & Thomas Balling Sørensen.
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 **************************************************************************/
27
28#ifndef VDPAU_PRIVATE_H
29#define VDPAU_PRIVATE_H
30
31
32#include <vdpau/vdpau.h>
33#include <vdpau/vdpau_x11.h>
34#include <pipe/p_compiler.h>
35#include <pipe/p_video_context.h>
36#include <vl_winsys.h>
37#include <assert.h>
38
39#define INFORMATION G3DVL VDPAU Driver Shared Library version VER_MAJOR.VER_MINOR
40#define QUOTEME(x) #x
41#define TOSTRING(x) QUOTEME(x)
42#define INFORMATION_STRING TOSTRING(INFORMATION)
43#define VL_HANDLES
44
45static enum pipe_video_chroma_format TypeToPipe(VdpChromaType vdpau_type)
46{
47   switch (vdpau_type) {
48      case VDP_CHROMA_TYPE_420:
49         return PIPE_VIDEO_CHROMA_FORMAT_420;
50      case VDP_CHROMA_TYPE_422:
51         return PIPE_VIDEO_CHROMA_FORMAT_422;
52      case VDP_CHROMA_TYPE_444:
53         return PIPE_VIDEO_CHROMA_FORMAT_444;
54      default:
55         assert(0);
56   }
57
58   return -1;
59}
60
61static VdpChromaType PipeToType(enum pipe_video_chroma_format pipe_type)
62{
63   switch (pipe_type) {
64      case PIPE_VIDEO_CHROMA_FORMAT_420:
65         return VDP_CHROMA_TYPE_420;
66      case PIPE_VIDEO_CHROMA_FORMAT_422:
67         return VDP_CHROMA_TYPE_422;
68      case PIPE_VIDEO_CHROMA_FORMAT_444:
69         return VDP_CHROMA_TYPE_444;
70      default:
71         assert(0);
72   }
73
74   return -1;
75}
76
77
78static enum pipe_format FormatToPipe(VdpYCbCrFormat vdpau_format)
79{
80   switch (vdpau_format) {
81      case VDP_YCBCR_FORMAT_NV12:
82         return PIPE_FORMAT_NV12;
83      case VDP_YCBCR_FORMAT_YV12:
84         return PIPE_FORMAT_YV12;
85      case VDP_YCBCR_FORMAT_UYVY:
86         return PIPE_FORMAT_UYVY;
87      case VDP_YCBCR_FORMAT_YUYV:
88         return PIPE_FORMAT_YUYV;
89      case VDP_YCBCR_FORMAT_Y8U8V8A8: /* Not defined in p_format.h */
90         return 0;
91      case VDP_YCBCR_FORMAT_V8U8Y8A8:
92	     return PIPE_FORMAT_VUYA;
93      default:
94         assert(0);
95   }
96
97   return -1;
98}
99
100static enum pipe_format FormatRGBAToPipe(VdpRGBAFormat vdpau_format)
101{
102   switch (vdpau_format) {
103      case VDP_RGBA_FORMAT_A8:
104         return PIPE_FORMAT_A8_UNORM;
105      case VDP_RGBA_FORMAT_B10G10R10A2:
106         return PIPE_FORMAT_B10G10R10A2_UNORM;
107      case VDP_RGBA_FORMAT_B8G8R8A8:
108         return PIPE_FORMAT_B8G8R8A8_UNORM;
109      case VDP_RGBA_FORMAT_R10G10B10A2:
110         return PIPE_FORMAT_R10G10B10A2_UNORM;
111      case VDP_RGBA_FORMAT_R8G8B8A8:
112         return PIPE_FORMAT_R8G8B8A8_UNORM;
113      default:
114         assert(0);
115   }
116
117   return -1;
118}
119
120static VdpYCbCrFormat PipeToFormat(enum pipe_format p_format)
121{
122   switch (p_format) {
123      case PIPE_FORMAT_NV12:
124         return VDP_YCBCR_FORMAT_NV12;
125      case PIPE_FORMAT_YV12:
126         return VDP_YCBCR_FORMAT_YV12;
127      case PIPE_FORMAT_UYVY:
128         return VDP_YCBCR_FORMAT_UYVY;
129      case PIPE_FORMAT_YUYV:
130         return VDP_YCBCR_FORMAT_YUYV;
131      //case PIPE_FORMAT_YUVA:
132        // return VDP_YCBCR_FORMAT_Y8U8V8A8;
133      case PIPE_FORMAT_VUYA:
134	 return VDP_YCBCR_FORMAT_V8U8Y8A8;
135      default:
136         assert(0);
137   }
138
139   return -1;
140}
141
142static enum pipe_video_profile ProfileToPipe(VdpDecoderProfile vdpau_profile)
143{
144   switch (vdpau_profile) {
145      case VDP_DECODER_PROFILE_MPEG1:
146         return PIPE_VIDEO_PROFILE_MPEG1;
147      case VDP_DECODER_PROFILE_MPEG2_SIMPLE:
148         return PIPE_VIDEO_PROFILE_MPEG2_SIMPLE;
149      case VDP_DECODER_PROFILE_MPEG2_MAIN:
150         return PIPE_VIDEO_PROFILE_MPEG2_MAIN;
151      case VDP_DECODER_PROFILE_H264_BASELINE:
152         return PIPE_VIDEO_PROFILE_MPEG4_AVC_BASELINE;
153      case VDP_DECODER_PROFILE_H264_MAIN: /* Not defined in p_format.h */
154         return PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN;
155      case VDP_DECODER_PROFILE_H264_HIGH:
156	     return PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH;
157      default:
158         PIPE_VIDEO_PROFILE_UNKNOWN;
159   }
160
161   return -1;
162}
163
164typedef struct
165{
166   Display *display;
167   int screen;
168   struct vl_screen *vscreen;
169} vlVdpDevice;
170
171typedef struct
172{
173   vlVdpDevice *device;
174   Drawable drawable;
175} vlVdpPresentationQueueTarget;
176
177typedef struct
178{
179   vlVdpDevice *device;
180   Drawable drawable;
181} vlVdpPresentationQueue;
182
183typedef struct
184{
185	vlVdpDevice *device;
186} vlVdpVideoMixer;
187
188typedef struct
189{
190   vlVdpDevice *device;
191   uint32_t width;
192   uint32_t height;
193   uint32_t pitch;
194   struct pipe_surface *psurface;
195   enum pipe_video_chroma_format chroma_format;
196   uint8_t *data;
197} vlVdpSurface;
198
199typedef struct
200{
201   vlVdpDevice *device;
202   uint32_t width;
203   uint32_t height;
204   enum pipe_format format;
205} vlVdpOutputSurface;
206
207typedef struct
208{
209	vlVdpDevice *device;
210    struct vl_context *vctx;
211	enum pipe_video_chroma_format chroma_format;
212	enum pipe_video_profile profile;
213	uint32_t width;
214	uint32_t height;
215} vlVdpDecoder;
216
217typedef uint32_t vlHandle;
218
219boolean vlCreateHTAB(void);
220void vlDestroyHTAB(void);
221vlHandle vlAddDataHTAB(void *data);
222void* vlGetDataHTAB(vlHandle handle);
223boolean vlGetFuncFTAB(VdpFuncId function_id, void **func);
224
225/* Public functions */
226VdpDeviceCreateX11 vdp_imp_device_create_x11;
227VdpPresentationQueueTargetCreateX11 vlVdpPresentationQueueTargetCreateX11;
228
229/* Internal function pointers */
230VdpGetErrorString vlVdpGetErrorString;
231VdpDeviceDestroy vlVdpDeviceDestroy;
232VdpGetProcAddress vlVdpGetProcAddress;
233VdpGetApiVersion vlVdpGetApiVersion;
234VdpGetInformationString vlVdpGetInformationString;
235VdpVideoSurfaceQueryCapabilities vlVdpVideoSurfaceQueryCapabilities;
236VdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities vlVdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities;
237VdpDecoderQueryCapabilities vlVdpDecoderQueryCapabilities;
238VdpOutputSurfaceQueryCapabilities vlVdpOutputSurfaceQueryCapabilities;
239VdpOutputSurfaceQueryGetPutBitsNativeCapabilities vlVdpOutputSurfaceQueryGetPutBitsNativeCapabilities;
240VdpOutputSurfaceQueryPutBitsYCbCrCapabilities vlVdpOutputSurfaceQueryPutBitsYCbCrCapabilities;
241VdpBitmapSurfaceQueryCapabilities vlVdpBitmapSurfaceQueryCapabilities;
242VdpVideoMixerQueryFeatureSupport vlVdpVideoMixerQueryFeatureSupport;
243VdpVideoMixerQueryParameterSupport vlVdpVideoMixerQueryParameterSupport;
244VdpVideoMixerQueryParameterValueRange vlVdpVideoMixerQueryParameterValueRange;
245VdpVideoMixerQueryAttributeSupport vlVdpVideoMixerQueryAttributeSupport;
246VdpVideoMixerQueryAttributeValueRange vlVdpVideoMixerQueryAttributeValueRange;
247VdpVideoSurfaceCreate vlVdpVideoSurfaceCreate;
248VdpVideoSurfaceDestroy vlVdpVideoSurfaceDestroy;
249VdpVideoSurfaceGetParameters vlVdpVideoSurfaceGetParameters;
250VdpVideoSurfaceGetBitsYCbCr vlVdpVideoSurfaceGetBitsYCbCr;
251VdpVideoSurfacePutBitsYCbCr vlVdpVideoSurfacePutBitsYCbCr;
252VdpDecoderCreate vlVdpDecoderCreate;
253VdpDecoderDestroy vlVdpDecoderDestroy;
254VdpDecoderRender vlVdpDecoderRender;
255VdpOutputSurfaceCreate vlVdpOutputSurfaceCreate;
256VdpBitmapSurfaceCreate vlVdpBitmapSurfaceCreate;
257VdpBitmapSurfaceDestroy vlVdpBitmapSurfaceDestroy;
258VdpBitmapSurfaceGetParameters vlVdpBitmapSurfaceGetParameters;
259VdpBitmapSurfacePutBitsNative vlVdpBitmapSurfacePutBitsNative;
260VdpPresentationQueueTargetDestroy vlVdpPresentationQueueTargetDestroy;
261VdpPresentationQueueCreate vlVdpPresentationQueueCreate;
262VdpPresentationQueueDestroy vlVdpPresentationQueueDestroy;
263VdpPresentationQueueSetBackgroundColor vlVdpPresentationQueueSetBackgroundColor;
264VdpPresentationQueueGetBackgroundColor vlVdpPresentationQueueGetBackgroundColor;
265VdpPresentationQueueGetTime vlVdpPresentationQueueGetTime;
266VdpPresentationQueueDisplay vlVdpPresentationQueueDisplay;
267VdpPresentationQueueBlockUntilSurfaceIdle vlVdpPresentationQueueBlockUntilSurfaceIdle;
268VdpPresentationQueueQuerySurfaceStatus vlVdpPresentationQueueQuerySurfaceStatus;
269VdpPreemptionCallback vlVdpPreemptionCallback;
270VdpPreemptionCallbackRegister vlVdpPreemptionCallbackRegister;
271VdpVideoMixerSetFeatureEnables vlVdpVideoMixerSetFeatureEnables;
272VdpVideoMixerCreate vlVdpVideoMixerCreate;
273VdpVideoMixerRender vlVdpVideoMixerRender;
274VdpVideoMixerSetAttributeValues vlVdpVideoMixerSetAttributeValues;
275VdpGenerateCSCMatrix vlVdpGenerateCSCMatrix;
276
277
278#endif // VDPAU_PRIVATE_H
279