device.c revision 2c21d28e8315ff65cb6f47fda46cbd65d67fb4e7
1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/************************************************************************** 2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * 3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Copyright 2010 Younes Manton og Thomas Balling Sørensen. 4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * All Rights Reserved. 5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * 6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * Permission is hereby granted, free of charge, to any person obtaining a 7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * copy of this software and associated documentation files (the 8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * "Software"), to deal in the Software without restriction, including 9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * without limitation the rights to use, copy, modify, merge, publish, 10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * distribute, sub license, and/or sell copies of the Software, and to 11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * permit persons to whom the Software is furnished to do so, subject to 12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * the following conditions: 13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * 14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * The above copyright notice and this permission notice (including the 15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * next paragraph) shall be included in all copies or substantial portions 16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * of the Software. 17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * 18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * 26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler **************************************************************************/ 27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <pipe/p_compiler.h> 29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <pipe/p_video_context.h> 30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <vl_winsys.h> 31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <util/u_memory.h> 32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <util/u_debug.h> 33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "vdpau_private.h" 34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 35793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPUBLIC VdpStatus 36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslervdp_imp_device_create_x11(Display *display, int screen, VdpDevice *device, 37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler VdpGetProcAddress **get_proc_address) 38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler VdpStatus ret; 40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vlVdpDevice *dev = NULL; 41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!(display && device && get_proc_address)) 43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_INVALID_POINTER; 44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!vlCreateHTAB()) { 46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ret = VDP_STATUS_RESOURCES; 47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler goto no_htab; 48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler dev = CALLOC(1, sizeof(vlVdpDevice)); 51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!dev) { 52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ret = VDP_STATUS_RESOURCES; 53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler goto no_dev; 54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler dev->display = display; 57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler dev->screen = screen; 58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler dev->vscreen = vl_screen_create(display, screen); 59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!dev->vscreen) { 60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ret = VDP_STATUS_RESOURCES; 61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler goto no_vscreen; 62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler dev->context = vl_video_create(dev->vscreen); 65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!dev->context) { 66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ret = VDP_STATUS_RESOURCES; 67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler goto no_context; 68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *device = vlAddDataHTAB(dev); 71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (*device == 0) { 72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ret = VDP_STATUS_ERROR; 73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler goto no_handle; 74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 75793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 76793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *get_proc_address = &vlVdpGetProcAddress; 77793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler debug_printf("[VDPAU] Device created succesfully\n"); 78793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 79793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_OK; 80793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 81793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerno_handle: 82793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler /* Destroy vscreen */ 83793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerno_context: 84793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vl_screen_destroy(dev->vscreen); 85793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerno_vscreen: 86793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler FREE(dev); 87793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerno_dev: 88793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vlDestroyHTAB(); 89793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerno_htab: 90793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return ret; 91793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 92793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 93793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerPUBLIC VdpStatus 94793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslervlVdpPresentationQueueTargetCreateX11(VdpDevice device, Drawable drawable, 95793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler VdpPresentationQueueTarget *target) 96793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 97793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler VdpStatus ret; 98793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vlVdpPresentationQueueTarget *pqt = NULL; 99793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 100793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler debug_printf("[VDPAU] Creating PresentationQueueTarget\n"); 101793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 102793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!drawable) 103793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_INVALID_HANDLE; 104793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 105793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vlVdpDevice *dev = vlGetDataHTAB(device); 106793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!dev) 107793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_INVALID_HANDLE; 108793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 109793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler pqt = CALLOC(1, sizeof(vlVdpPresentationQueue)); 110793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!pqt) 111793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_RESOURCES; 112793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 113793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler pqt->device = dev; 114793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler pqt->drawable = drawable; 115793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 116793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler *target = vlAddDataHTAB(pqt); 117793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (*target == 0) { 118793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler ret = VDP_STATUS_ERROR; 119793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler goto no_handle; 120793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 121793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 122793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_OK; 123793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 124793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerno_handle: 125793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler FREE(dev); 126793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return ret; 127793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 128793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 129793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerVdpStatus 130793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslervlVdpDeviceDestroy(VdpDevice device) 131793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 132793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler debug_printf("[VDPAU] Destroying destroy\n"); 133793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 134793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vlVdpDevice *dev = vlGetDataHTAB(device); 135793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!dev) 136793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_INVALID_HANDLE; 137793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler FREE(dev); 138793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vlDestroyHTAB(); 139793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 140793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler debug_printf("[VDPAU] Device destroyed succesfully\n"); 141793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 142793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_OK; 143793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 144793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 145793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslerVdpStatus 146793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslervlVdpGetProcAddress(VdpDevice device, VdpFuncId function_id, void **function_pointer) 147793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 148793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler vlVdpDevice *dev = vlGetDataHTAB(device); 149793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!dev) 150793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_INVALID_HANDLE; 151793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 152793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!function_pointer) 153793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_INVALID_POINTER; 154793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 155793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!vlGetFuncFTAB(function_id, function_pointer)) 156793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_INVALID_FUNC_ID; 157793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 158793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return VDP_STATUS_OK; 159793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 160793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 161793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define _ERROR_TYPE(TYPE,STRING) case TYPE: return STRING; 162793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 163793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerchar const * 164793ee12c6df9cad3806238d32528c49a3ff9331dNoah PreslervlVdpGetErrorString (VdpStatus status) 165793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 166793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler switch (status) { 167793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_OK,"The operation completed successfully; no error."); 168793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_NO_IMPLEMENTATION,"No backend implementation could be loaded."); 169793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_DISPLAY_PREEMPTED,"The display was preempted, or a fatal error occurred. The application must re-initialize VDPAU."); 170793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_HANDLE,"An invalid handle value was provided. Either the handle does not exist at all, or refers to an object of an incorrect type."); 171793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_POINTER ,"An invalid pointer was provided. Typically, this means that a NULL pointer was provided for an 'output' parameter."); 172793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_CHROMA_TYPE ,"An invalid/unsupported VdpChromaType value was supplied."); 173793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_Y_CB_CR_FORMAT,"An invalid/unsupported VdpYCbCrFormat value was supplied."); 174793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_RGBA_FORMAT,"An invalid/unsupported VdpRGBAFormat value was supplied."); 175793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_INDEXED_FORMAT,"An invalid/unsupported VdpIndexedFormat value was supplied."); 176793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_COLOR_STANDARD,"An invalid/unsupported VdpColorStandard value was supplied."); 177793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_COLOR_TABLE_FORMAT,"An invalid/unsupported VdpColorTableFormat value was supplied."); 178793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_BLEND_FACTOR,"An invalid/unsupported VdpOutputSurfaceRenderBlendFactor value was supplied."); 179793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_BLEND_EQUATION,"An invalid/unsupported VdpOutputSurfaceRenderBlendEquation value was supplied."); 180793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_FLAG,"An invalid/unsupported flag value/combination was supplied."); 181793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_DECODER_PROFILE,"An invalid/unsupported VdpDecoderProfile value was supplied."); 182793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_VIDEO_MIXER_FEATURE,"An invalid/unsupported VdpVideoMixerFeature value was supplied."); 183793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_VIDEO_MIXER_PARAMETER ,"An invalid/unsupported VdpVideoMixerParameter value was supplied."); 184793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_VIDEO_MIXER_ATTRIBUTE,"An invalid/unsupported VdpVideoMixerAttribute value was supplied."); 185793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_VIDEO_MIXER_PICTURE_STRUCTURE,"An invalid/unsupported VdpVideoMixerPictureStructure value was supplied."); 186793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_FUNC_ID,"An invalid/unsupported VdpFuncId value was supplied."); 187793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_SIZE,"The size of a supplied object does not match the object it is being used with.\ 188793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler For example, a VdpVideoMixer is configured to process VdpVideoSurface objects of a specific size.\ 189793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler If presented with a VdpVideoSurface of a different size, this error will be raised."); 190793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_VALUE,"An invalid/unsupported value was supplied.\ 191793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler This is a catch-all error code for values of type other than those with a specific error code."); 192793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_INVALID_STRUCT_VERSION,"An invalid/unsupported structure version was specified in a versioned structure. \ 193793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler This implies that the implementation is older than the header file the application was built against."); 194793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_RESOURCES,"The system does not have enough resources to complete the requested operation at this time."); 195793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_HANDLE_DEVICE_MISMATCH,"The set of handles supplied are not all related to the same VdpDevice.When performing operations \ 196793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler that operate on multiple surfaces, such as VdpOutputSurfaceRenderOutputSurface or VdpVideoMixerRender, \ 197793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler all supplied surfaces must have been created within the context of the same VdpDevice object. \ 198793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler This error is raised if they were not."); 199793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler _ERROR_TYPE(VDP_STATUS_ERROR,"A catch-all error, used when no other error code applies."); 200793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler default: return "Unknown Error"; 201793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 202793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 203793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler