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