1f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton/**************************************************************************
2f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton *
3501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * Copyright 2010 Younes Manton & Thomas Balling Sørensen.
4f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * All Rights Reserved.
5f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton *
6f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * Permission is hereby granted, free of charge, to any person obtaining a
7f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * copy of this software and associated documentation files (the
8f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * "Software"), to deal in the Software without restriction, including
9f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * without limitation the rights to use, copy, modify, merge, publish,
10f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * distribute, sub license, and/or sell copies of the Software, and to
11f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * permit persons to whom the Software is furnished to do so, subject to
12f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * the following conditions:
13f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton *
14f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * The above copyright notice and this permission notice (including the
15f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * next paragraph) shall be included in all copies or substantial portions
16f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * of the Software.
17f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton *
18f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton *
26f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton **************************************************************************/
27f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton
283299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen#ifndef VDPAU_PRIVATE_H
293299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen#define VDPAU_PRIVATE_H
303299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
3108f3a7cf7e9133f50adf33f800aa3696c909347fChristian König#include <assert.h>
3208f3a7cf7e9133f50adf33f800aa3696c909347fChristian König
33f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton#include <vdpau/vdpau.h>
3465fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen#include <vdpau/vdpau_x11.h>
3508f3a7cf7e9133f50adf33f800aa3696c909347fChristian König
3628f8ff6b622d63e8ffe322ab2cdf5197941f1a40Kai Wasserbäch#include "pipe/p_compiler.h"
3728f8ff6b622d63e8ffe322ab2cdf5197941f1a40Kai Wasserbäch#include "pipe/p_video_decoder.h"
3808f3a7cf7e9133f50adf33f800aa3696c909347fChristian König
3928f8ff6b622d63e8ffe322ab2cdf5197941f1a40Kai Wasserbäch#include "util/u_debug.h"
40167b1b32c5ff30d514253072ce54513112c03d4dChristian König#include "util/u_rect.h"
4105579339c0da442669ea75749651e8cf4f9ec39bChristian König#include "os/os_thread.h"
4214766f820069ca987543918bce96410c481e5d20Christian König
4328f8ff6b622d63e8ffe322ab2cdf5197941f1a40Kai Wasserbäch#include "vl/vl_compositor.h"
4414766f820069ca987543918bce96410c481e5d20Christian König#include "vl/vl_csc.h"
4536cd50152c76d5a5b34202887af68aab09854d5dChristian König#include "vl/vl_matrix_filter.h"
46bbb48e983d232d67031250127b3c2acfc086369eChristian König#include "vl/vl_median_filter.h"
47fc0a5e21d77ae2f082fd19dd2295e84f6fb7bd3bChristian König#include "vl/vl_winsys.h"
483299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
49fa2a8316cebeb75626ffa3e38dbc1500e82054f6Emeric Grange/* Full VDPAU API documentation available at :
50fa2a8316cebeb75626ffa3e38dbc1500e82054f6Emeric Grange * ftp://download.nvidia.com/XFree86/vdpau/doxygen/html/index.html */
51fa2a8316cebeb75626ffa3e38dbc1500e82054f6Emeric Grange
523299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen#define INFORMATION G3DVL VDPAU Driver Shared Library version VER_MAJOR.VER_MINOR
533299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen#define QUOTEME(x) #x
543299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen#define TOSTRING(x) QUOTEME(x)
553299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen#define INFORMATION_STRING TOSTRING(INFORMATION)
563299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen#define VL_HANDLES
573299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
58e6d41e4d0326cac60b49e149d86d0f95c2518045Christian Königstatic inline enum pipe_video_chroma_format
59e6d41e4d0326cac60b49e149d86d0f95c2518045Christian KönigChromaToPipe(VdpChromaType vdpau_type)
603299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen{
613299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   switch (vdpau_type) {
623299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case VDP_CHROMA_TYPE_420:
633299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return PIPE_VIDEO_CHROMA_FORMAT_420;
643299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case VDP_CHROMA_TYPE_422:
653299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return PIPE_VIDEO_CHROMA_FORMAT_422;
663299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case VDP_CHROMA_TYPE_444:
673299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return PIPE_VIDEO_CHROMA_FORMAT_444;
683299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      default:
693299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         assert(0);
703299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   }
713299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
723299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   return -1;
733299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen}
743299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
75e6d41e4d0326cac60b49e149d86d0f95c2518045Christian Königstatic inline VdpChromaType
76e6d41e4d0326cac60b49e149d86d0f95c2518045Christian KönigPipeToChroma(enum pipe_video_chroma_format pipe_type)
773299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen{
783299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   switch (pipe_type) {
793299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case PIPE_VIDEO_CHROMA_FORMAT_420:
803299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return VDP_CHROMA_TYPE_420;
813299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case PIPE_VIDEO_CHROMA_FORMAT_422:
823299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return VDP_CHROMA_TYPE_422;
833299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case PIPE_VIDEO_CHROMA_FORMAT_444:
843299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return VDP_CHROMA_TYPE_444;
853299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      default:
863299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         assert(0);
873299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   }
883299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
893299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   return -1;
903299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen}
913299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
92e6d41e4d0326cac60b49e149d86d0f95c2518045Christian Königstatic inline enum pipe_format
933d769619e2937cb4f2a036e82b396d9e53d65ba8Christian KönigFormatYCBCRToPipe(VdpYCbCrFormat vdpau_format)
943299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen{
953299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   switch (vdpau_format) {
963299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case VDP_YCBCR_FORMAT_NV12:
973299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return PIPE_FORMAT_NV12;
983299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case VDP_YCBCR_FORMAT_YV12:
993299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return PIPE_FORMAT_YV12;
1003299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case VDP_YCBCR_FORMAT_UYVY:
1013299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return PIPE_FORMAT_UYVY;
1023299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case VDP_YCBCR_FORMAT_YUYV:
1033299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         return PIPE_FORMAT_YUYV;
104d5fc3746fe3a337bccba0d644543633b728b9444Christian König      case VDP_YCBCR_FORMAT_Y8U8V8A8:
105d5fc3746fe3a337bccba0d644543633b728b9444Christian König         return PIPE_FORMAT_R8G8B8A8_UNORM;
1063299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      case VDP_YCBCR_FORMAT_V8U8Y8A8:
107d5fc3746fe3a337bccba0d644543633b728b9444Christian König         return PIPE_FORMAT_B8G8R8A8_UNORM;
1083299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      default:
1093299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         assert(0);
1103299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   }
1113299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
11249e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   return PIPE_FORMAT_NONE;
1133299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen}
1143299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
1153d769619e2937cb4f2a036e82b396d9e53d65ba8Christian Königstatic inline VdpYCbCrFormat
1163d769619e2937cb4f2a036e82b396d9e53d65ba8Christian KönigPipeToFormatYCBCR(enum pipe_format p_format)
1173d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König{
1183d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König   switch (p_format) {
1193d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_NV12:
1203d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_YCBCR_FORMAT_NV12;
1213d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_YV12:
1223d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_YCBCR_FORMAT_YV12;
1233d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_UYVY:
1243d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_YCBCR_FORMAT_UYVY;
1253d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_YUYV:
1263d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_YCBCR_FORMAT_YUYV;
127d5fc3746fe3a337bccba0d644543633b728b9444Christian König      case PIPE_FORMAT_R8G8B8A8_UNORM:
128d5fc3746fe3a337bccba0d644543633b728b9444Christian König        return VDP_YCBCR_FORMAT_Y8U8V8A8;
129d5fc3746fe3a337bccba0d644543633b728b9444Christian König      case PIPE_FORMAT_B8G8R8A8_UNORM:
130fa2a8316cebeb75626ffa3e38dbc1500e82054f6Emeric Grange         return VDP_YCBCR_FORMAT_V8U8Y8A8;
1313d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      default:
1323d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         assert(0);
1333d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König   }
1343d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König
1353d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König   return -1;
1363d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König}
1373d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König
138e6d41e4d0326cac60b49e149d86d0f95c2518045Christian Königstatic inline enum pipe_format
139e6d41e4d0326cac60b49e149d86d0f95c2518045Christian KönigFormatRGBAToPipe(VdpRGBAFormat vdpau_format)
14065fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen{
14165fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen   switch (vdpau_format) {
14265fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen      case VDP_RGBA_FORMAT_A8:
14365fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen         return PIPE_FORMAT_A8_UNORM;
14465fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen      case VDP_RGBA_FORMAT_B10G10R10A2:
14565fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen         return PIPE_FORMAT_B10G10R10A2_UNORM;
14665fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen      case VDP_RGBA_FORMAT_B8G8R8A8:
14765fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen         return PIPE_FORMAT_B8G8R8A8_UNORM;
14865fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen      case VDP_RGBA_FORMAT_R10G10B10A2:
14965fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen         return PIPE_FORMAT_R10G10B10A2_UNORM;
15065fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen      case VDP_RGBA_FORMAT_R8G8B8A8:
15165fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen         return PIPE_FORMAT_R8G8B8A8_UNORM;
15265fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen      default:
15365fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen         assert(0);
15465fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen   }
15565fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen
15649e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   return PIPE_FORMAT_NONE;
15765fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen}
15865fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen
1593d769619e2937cb4f2a036e82b396d9e53d65ba8Christian Königstatic inline VdpRGBAFormat
1603d769619e2937cb4f2a036e82b396d9e53d65ba8Christian KönigPipeToFormatRGBA(enum pipe_format p_format)
1613299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen{
1623299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   switch (p_format) {
1633d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_A8_UNORM:
1643d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_RGBA_FORMAT_A8;
1653d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_B10G10R10A2_UNORM:
1663d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_RGBA_FORMAT_B10G10R10A2;
1673d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_B8G8R8A8_UNORM:
1683d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_RGBA_FORMAT_B8G8R8A8;
1693d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_R10G10B10A2_UNORM:
1703d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_RGBA_FORMAT_R10G10B10A2;
1713d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König      case PIPE_FORMAT_R8G8B8A8_UNORM:
1723d769619e2937cb4f2a036e82b396d9e53d65ba8Christian König         return VDP_RGBA_FORMAT_R8G8B8A8;
1733299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen      default:
1743299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen         assert(0);
1753299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   }
1763299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
1773299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen   return -1;
1783299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen}
179f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton
18049e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian Königstatic inline enum pipe_format
18149e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian KönigFormatIndexedToPipe(VdpRGBAFormat vdpau_format)
18249e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König{
18349e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   switch (vdpau_format) {
18449e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König      case VDP_INDEXED_FORMAT_A4I4:
18549e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König         return PIPE_FORMAT_A4R4_UNORM;
18649e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König      case VDP_INDEXED_FORMAT_I4A4:
18749e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König         return PIPE_FORMAT_R4A4_UNORM;
18849e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König      case VDP_INDEXED_FORMAT_A8I8:
18949e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König         return PIPE_FORMAT_A8R8_UNORM;
19049e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König      case VDP_INDEXED_FORMAT_I8A8:
19149e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König         return PIPE_FORMAT_R8A8_UNORM;
19249e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König      default:
19349e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König         assert(0);
19449e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   }
19549e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König
19649e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   return PIPE_FORMAT_NONE;
19749e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König}
19849e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König
19949e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian Königstatic inline enum pipe_format
20049e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian KönigFormatColorTableToPipe(VdpColorTableFormat vdpau_format)
20149e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König{
20249e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   switch(vdpau_format) {
20349e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König      case VDP_COLOR_TABLE_FORMAT_B8G8R8X8:
20449e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König         return PIPE_FORMAT_B8G8R8X8_UNORM;
20549e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König      default:
20649e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König         assert(0);
20749e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   }
208c24bc6f8684abee8c9a1b263334cd7a8506657b1Emeric Grange
20949e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   return PIPE_FORMAT_NONE;
21049e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König}
21149e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König
212e6d41e4d0326cac60b49e149d86d0f95c2518045Christian Königstatic inline enum pipe_video_profile
213e6d41e4d0326cac60b49e149d86d0f95c2518045Christian KönigProfileToPipe(VdpDecoderProfile vdpau_profile)
214725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen{
215725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen   switch (vdpau_profile) {
216725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen      case VDP_DECODER_PROFILE_MPEG1:
217725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen         return PIPE_VIDEO_PROFILE_MPEG1;
218725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen      case VDP_DECODER_PROFILE_MPEG2_SIMPLE:
219725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen         return PIPE_VIDEO_PROFILE_MPEG2_SIMPLE;
220725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen      case VDP_DECODER_PROFILE_MPEG2_MAIN:
221725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen         return PIPE_VIDEO_PROFILE_MPEG2_MAIN;
222725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen      case VDP_DECODER_PROFILE_H264_BASELINE:
223725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen         return PIPE_VIDEO_PROFILE_MPEG4_AVC_BASELINE;
224c24bc6f8684abee8c9a1b263334cd7a8506657b1Emeric Grange      case VDP_DECODER_PROFILE_H264_MAIN:
225725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen         return PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN;
226725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen      case VDP_DECODER_PROFILE_H264_HIGH:
227c24bc6f8684abee8c9a1b263334cd7a8506657b1Emeric Grange         return PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH;
22891d33b5c589a63f73212546825988cfa4f80b207Maarten Lankhorst      case VDP_DECODER_PROFILE_MPEG4_PART2_SP:
22991d33b5c589a63f73212546825988cfa4f80b207Maarten Lankhorst         return PIPE_VIDEO_PROFILE_MPEG4_SIMPLE;
23091d33b5c589a63f73212546825988cfa4f80b207Maarten Lankhorst      case VDP_DECODER_PROFILE_MPEG4_PART2_ASP:
23191d33b5c589a63f73212546825988cfa4f80b207Maarten Lankhorst         return PIPE_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE;
232eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst      case VDP_DECODER_PROFILE_VC1_SIMPLE:
233eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst         return PIPE_VIDEO_PROFILE_VC1_SIMPLE;
234eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst      case VDP_DECODER_PROFILE_VC1_MAIN:
235eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst         return PIPE_VIDEO_PROFILE_VC1_MAIN;
236eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst      case VDP_DECODER_PROFILE_VC1_ADVANCED:
237eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst         return PIPE_VIDEO_PROFILE_VC1_ADVANCED;
238725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen      default:
2392471acfc4c051d480861265011fa5e77fad02887Christian König         return PIPE_VIDEO_PROFILE_UNKNOWN;
240725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen   }
241725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen}
242725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen
24334145ecdad8d6d3b14dc88dafd71b689c68de36cChristian Königstatic inline VdpDecoderProfile
24434145ecdad8d6d3b14dc88dafd71b689c68de36cChristian KönigPipeToProfile(enum pipe_video_profile p_profile)
24534145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König{
24634145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König   switch (p_profile) {
24734145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König      case PIPE_VIDEO_PROFILE_MPEG1:
24834145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König         return VDP_DECODER_PROFILE_MPEG1;
24934145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König      case PIPE_VIDEO_PROFILE_MPEG2_SIMPLE:
25034145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König         return VDP_DECODER_PROFILE_MPEG2_SIMPLE;
25134145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König      case PIPE_VIDEO_PROFILE_MPEG2_MAIN:
25234145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König         return VDP_DECODER_PROFILE_MPEG2_MAIN;
25334145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König      case PIPE_VIDEO_PROFILE_MPEG4_AVC_BASELINE:
25434145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König         return VDP_DECODER_PROFILE_H264_BASELINE;
255c24bc6f8684abee8c9a1b263334cd7a8506657b1Emeric Grange      case PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN:
25634145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König         return VDP_DECODER_PROFILE_H264_MAIN;
25734145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König      case PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH:
258c24bc6f8684abee8c9a1b263334cd7a8506657b1Emeric Grange         return VDP_DECODER_PROFILE_H264_HIGH;
25991d33b5c589a63f73212546825988cfa4f80b207Maarten Lankhorst      case PIPE_VIDEO_PROFILE_MPEG4_SIMPLE:
26091d33b5c589a63f73212546825988cfa4f80b207Maarten Lankhorst         return VDP_DECODER_PROFILE_MPEG4_PART2_SP;
26191d33b5c589a63f73212546825988cfa4f80b207Maarten Lankhorst      case PIPE_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE:
26291d33b5c589a63f73212546825988cfa4f80b207Maarten Lankhorst         return VDP_DECODER_PROFILE_MPEG4_PART2_ASP;
263eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst      case PIPE_VIDEO_PROFILE_VC1_SIMPLE:
264eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst         return VDP_DECODER_PROFILE_VC1_SIMPLE;
265eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst      case PIPE_VIDEO_PROFILE_VC1_MAIN:
266eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst         return VDP_DECODER_PROFILE_VC1_MAIN;
267eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst      case PIPE_VIDEO_PROFILE_VC1_ADVANCED:
268eadbcb221db16af96aa6c3f40d48896d23d9eebcMaarten Lankhorst         return VDP_DECODER_PROFILE_VC1_ADVANCED;
26934145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König      default:
27034145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König         assert(0);
27134145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König         return -1;
27234145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König   }
27334145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König}
27434145ecdad8d6d3b14dc88dafd71b689c68de36cChristian König
275d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian Königstatic inline struct u_rect *
276d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian KönigRectToPipe(const VdpRect *src, struct u_rect *dst)
27749e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König{
27849e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   if (src) {
279d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König      dst->x0 = src->x0;
280d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König      dst->y0 = src->y0;
281d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König      dst->x1 = src->x1;
282d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König      dst->y1 = src->y1;
28349e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König      return dst;
28449e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   }
28549e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   return NULL;
28649e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König}
28749e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König
288494e0025d995fb2cab04474d13880ee438b0c868Christian Königstatic inline struct pipe_box
289494e0025d995fb2cab04474d13880ee438b0c868Christian KönigRectToPipeBox(const VdpRect *rect, struct pipe_resource *res)
290494e0025d995fb2cab04474d13880ee438b0c868Christian König{
291494e0025d995fb2cab04474d13880ee438b0c868Christian König   struct pipe_box box;
292494e0025d995fb2cab04474d13880ee438b0c868Christian König
293494e0025d995fb2cab04474d13880ee438b0c868Christian König   box.x = 0;
294494e0025d995fb2cab04474d13880ee438b0c868Christian König   box.y = 0;
295494e0025d995fb2cab04474d13880ee438b0c868Christian König   box.z = 0;
296494e0025d995fb2cab04474d13880ee438b0c868Christian König   box.width = res->width0;
297494e0025d995fb2cab04474d13880ee438b0c868Christian König   box.height = res->height0;
298494e0025d995fb2cab04474d13880ee438b0c868Christian König   box.depth = 1;
299494e0025d995fb2cab04474d13880ee438b0c868Christian König
300494e0025d995fb2cab04474d13880ee438b0c868Christian König   if (rect) {
301494e0025d995fb2cab04474d13880ee438b0c868Christian König      box.x = MIN2(rect->x0, rect->x1);
302494e0025d995fb2cab04474d13880ee438b0c868Christian König      box.y = MIN2(rect->y0, rect->y1);
303494e0025d995fb2cab04474d13880ee438b0c868Christian König      box.width = abs(rect->x1 - rect->x0);
304494e0025d995fb2cab04474d13880ee438b0c868Christian König      box.height = abs(rect->y1 - rect->y0);
305494e0025d995fb2cab04474d13880ee438b0c868Christian König   }
306494e0025d995fb2cab04474d13880ee438b0c868Christian König
307494e0025d995fb2cab04474d13880ee438b0c868Christian König   return box;
308494e0025d995fb2cab04474d13880ee438b0c868Christian König}
309494e0025d995fb2cab04474d13880ee438b0c868Christian König
310f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Mantontypedef struct
311f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton{
312bff1ac875c2c62ba5045bb953f800253c49361cbThomas Balling Sørensen   struct vl_screen *vscreen;
3131448e829e86981e6144410ba6a3d0f16357fb2b3Christian König   struct pipe_context *context;
31449e24d3b8c0129e11fcc94b6e74dc2589d64c882Christian König   struct vl_compositor compositor;
31505579339c0da442669ea75749651e8cf4f9ec39bChristian König   pipe_mutex mutex;
316f8ac7e034803a1c873bf156c012fede6d2640097Christian König
317f8ac7e034803a1c873bf156c012fede6d2640097Christian König   struct {
318f8ac7e034803a1c873bf156c012fede6d2640097Christian König      struct vl_compositor_state *cstate;
319f8ac7e034803a1c873bf156c012fede6d2640097Christian König      VdpOutputSurface surface;
320f8ac7e034803a1c873bf156c012fede6d2640097Christian König   } delayed_rendering;
321f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton} vlVdpDevice;
322f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton
3233299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensentypedef struct
3243299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen{
325725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen   vlVdpDevice *device;
32665fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen   Drawable drawable;
32765fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen} vlVdpPresentationQueueTarget;
32865fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen
32965fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensentypedef struct
33065fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen{
33165fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen   vlVdpDevice *device;
332cae77aa80b3629a147ce3ae4526646014efae595Christian König   Drawable drawable;
33332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   struct vl_compositor_state cstate;
33465fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen} vlVdpPresentationQueue;
33565fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen
33665fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensentypedef struct
33765fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen{
33849f4aff75ce781fb71383a5ffe44e51e34ff1bf3Christian König   vlVdpDevice *device;
33932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   struct vl_compositor_state cstate;
340bbb48e983d232d67031250127b3c2acfc086369eChristian König
341bbb48e983d232d67031250127b3c2acfc086369eChristian König   struct {
342bbb48e983d232d67031250127b3c2acfc086369eChristian König      bool supported, enabled;
343553e8203879d163e6fe2f3a8f6b80a44749514c1Christian König      unsigned level;
344bbb48e983d232d67031250127b3c2acfc086369eChristian König      struct vl_median_filter *filter;
345bbb48e983d232d67031250127b3c2acfc086369eChristian König   } noise_reduction;
346bbb48e983d232d67031250127b3c2acfc086369eChristian König
34736cd50152c76d5a5b34202887af68aab09854d5dChristian König   struct {
34836cd50152c76d5a5b34202887af68aab09854d5dChristian König      bool supported, enabled;
34936cd50152c76d5a5b34202887af68aab09854d5dChristian König      float value;
35036cd50152c76d5a5b34202887af68aab09854d5dChristian König      struct vl_matrix_filter *filter;
35136cd50152c76d5a5b34202887af68aab09854d5dChristian König   } sharpness;
35236cd50152c76d5a5b34202887af68aab09854d5dChristian König
35389b9863252272a7109d468738517a0d68376a909Maarten Lankhorst   unsigned video_width, video_height;
35489b9863252272a7109d468738517a0d68376a909Maarten Lankhorst   enum pipe_video_chroma_format chroma_format;
35514766f820069ca987543918bce96410c481e5d20Christian König   unsigned max_layers, skip_chroma_deint;
35636cd50152c76d5a5b34202887af68aab09854d5dChristian König   float luma_key_min, luma_key_max;
35714766f820069ca987543918bce96410c481e5d20Christian König
35814766f820069ca987543918bce96410c481e5d20Christian König   bool custom_csc;
35914766f820069ca987543918bce96410c481e5d20Christian König   vl_csc_matrix csc;
36065fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen} vlVdpVideoMixer;
36165fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen
36265fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensentypedef struct
36365fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen{
36465fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen   vlVdpDevice *device;
3654a4811ea178fb158339c1fbfacc58a9ab97058f8Christian König   struct pipe_video_buffer templat, *video_buffer;
3663299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen} vlVdpSurface;
3673299997bcc5a672617095adb560b3834dced39a6Thomas Balling Sørensen
3683aa087fa048dfda37ab247e2dbe4a809c2fac948Christian Königtypedef struct
3693aa087fa048dfda37ab247e2dbe4a809c2fac948Christian König{
3703aa087fa048dfda37ab247e2dbe4a809c2fac948Christian König   vlVdpDevice *device;
3713aa087fa048dfda37ab247e2dbe4a809c2fac948Christian König   struct pipe_sampler_view *sampler_view;
3723aa087fa048dfda37ab247e2dbe4a809c2fac948Christian König} vlVdpBitmapSurface;
3733aa087fa048dfda37ab247e2dbe4a809c2fac948Christian König
374e911dbb56374edf9f3b7c4cec0cf9a22738bb198Emeric Grangetypedef uint64_t vlVdpTime;
375e911dbb56374edf9f3b7c4cec0cf9a22738bb198Emeric Grange
376725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensentypedef struct
377725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen{
378e911dbb56374edf9f3b7c4cec0cf9a22738bb198Emeric Grange   vlVdpTime timestamp;
37965fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen   vlVdpDevice *device;
380b98b58c76a2560b1db603e62f96c6641cedfa8e8Christian König   struct pipe_surface *surface;
381b98b58c76a2560b1db603e62f96c6641cedfa8e8Christian König   struct pipe_sampler_view *sampler_view;
382e911dbb56374edf9f3b7c4cec0cf9a22738bb198Emeric Grange   struct pipe_fence_handle *fence;
38332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   struct vl_compositor_state cstate;
3849e51c200a78b8be8be195e0d82d69e952afd1343Christian König   struct u_rect dirty_area;
38565fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen} vlVdpOutputSurface;
38665fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen
38765fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensentypedef struct
38865fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen{
38949f4aff75ce781fb71383a5ffe44e51e34ff1bf3Christian König   vlVdpDevice *device;
3902471acfc4c051d480861265011fa5e77fad02887Christian König   struct pipe_video_decoder *decoder;
391725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen} vlVdpDecoder;
392725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling Sørensen
393f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Mantontypedef uint32_t vlHandle;
394f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton
395f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Mantonboolean vlCreateHTAB(void);
396f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Mantonvoid vlDestroyHTAB(void);
397f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonvlHandle vlAddDataHTAB(void *data);
398f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Mantonvoid* vlGetDataHTAB(vlHandle handle);
3995aa26412432dbdb3b1677d6d2f74bba010f443aeChristian Königvoid vlRemoveDataHTAB(vlHandle handle);
4005aa26412432dbdb3b1677d6d2f74bba010f443aeChristian König
401f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Mantonboolean vlGetFuncFTAB(VdpFuncId function_id, void **func);
402f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes Manton
40365fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen/* Public functions */
40465fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpDeviceCreateX11 vdp_imp_device_create_x11;
40565fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpPresentationQueueTargetCreateX11 vlVdpPresentationQueueTargetCreateX11;
40665fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen
407379f46c8ac50b9b76455b1e62d6d541182339e96Christian Königvoid vlVdpDefaultSamplerViewTemplate(struct pipe_sampler_view *templ, struct pipe_resource *res);
408379f46c8ac50b9b76455b1e62d6d541182339e96Christian König
409f8ac7e034803a1c873bf156c012fede6d2640097Christian König/* Delayed rendering funtionality */
410f8ac7e034803a1c873bf156c012fede6d2640097Christian Königvoid vlVdpResolveDelayedRendering(vlVdpDevice *dev, struct pipe_surface *surface, struct u_rect *dirty_area);
411f8ac7e034803a1c873bf156c012fede6d2640097Christian Königvoid vlVdpSave4DelayedRendering(vlVdpDevice *dev, VdpOutputSurface surface, struct vl_compositor_state *cstate);
412f8ac7e034803a1c873bf156c012fede6d2640097Christian König
41365fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen/* Internal function pointers */
414c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpGetErrorString vlVdpGetErrorString;
415f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpDeviceDestroy vlVdpDeviceDestroy;
416f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpGetProcAddress vlVdpGetProcAddress;
417f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpGetApiVersion vlVdpGetApiVersion;
418f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpGetInformationString vlVdpGetInformationString;
419f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpVideoSurfaceQueryCapabilities vlVdpVideoSurfaceQueryCapabilities;
420f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities vlVdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities;
421f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpDecoderQueryCapabilities vlVdpDecoderQueryCapabilities;
422f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpOutputSurfaceQueryCapabilities vlVdpOutputSurfaceQueryCapabilities;
423f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpOutputSurfaceQueryGetPutBitsNativeCapabilities vlVdpOutputSurfaceQueryGetPutBitsNativeCapabilities;
42438bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfaceQueryPutBitsIndexedCapabilities vlVdpOutputSurfaceQueryPutBitsIndexedCapabilities;
425f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpOutputSurfaceQueryPutBitsYCbCrCapabilities vlVdpOutputSurfaceQueryPutBitsYCbCrCapabilities;
426f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpBitmapSurfaceQueryCapabilities vlVdpBitmapSurfaceQueryCapabilities;
427f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpVideoMixerQueryFeatureSupport vlVdpVideoMixerQueryFeatureSupport;
428f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpVideoMixerQueryParameterSupport vlVdpVideoMixerQueryParameterSupport;
429f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpVideoMixerQueryParameterValueRange vlVdpVideoMixerQueryParameterValueRange;
430f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpVideoMixerQueryAttributeSupport vlVdpVideoMixerQueryAttributeSupport;
431f3e34ba6fba76870b1c91a27adb706d1b87aeec8Younes MantonVdpVideoMixerQueryAttributeValueRange vlVdpVideoMixerQueryAttributeValueRange;
4323299997bcc5a672617095adb560b3834dced39a6Thomas Balling SørensenVdpVideoSurfaceCreate vlVdpVideoSurfaceCreate;
4333299997bcc5a672617095adb560b3834dced39a6Thomas Balling SørensenVdpVideoSurfaceDestroy vlVdpVideoSurfaceDestroy;
4343299997bcc5a672617095adb560b3834dced39a6Thomas Balling SørensenVdpVideoSurfaceGetParameters vlVdpVideoSurfaceGetParameters;
4353299997bcc5a672617095adb560b3834dced39a6Thomas Balling SørensenVdpVideoSurfaceGetBitsYCbCr vlVdpVideoSurfaceGetBitsYCbCr;
4363299997bcc5a672617095adb560b3834dced39a6Thomas Balling SørensenVdpVideoSurfacePutBitsYCbCr vlVdpVideoSurfacePutBitsYCbCr;
4377f6af4909241de7197e774dee988f574cb576a3bChristian Königvoid vlVdpVideoSurfaceClear(vlVdpSurface *vlsurf);
438725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling SørensenVdpDecoderCreate vlVdpDecoderCreate;
439725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling SørensenVdpDecoderDestroy vlVdpDecoderDestroy;
44038bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpDecoderGetParameters vlVdpDecoderGetParameters;
441725e4ada3062c80623abf51477dfdc73fe294f3fThomas Balling SørensenVdpDecoderRender vlVdpDecoderRender;
442c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpOutputSurfaceCreate vlVdpOutputSurfaceCreate;
44338bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfaceDestroy vlVdpOutputSurfaceDestroy;
44438bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfaceGetParameters vlVdpOutputSurfaceGetParameters;
44538bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfaceGetBitsNative vlVdpOutputSurfaceGetBitsNative;
44638bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfacePutBitsNative vlVdpOutputSurfacePutBitsNative;
44738bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfacePutBitsIndexed vlVdpOutputSurfacePutBitsIndexed;
44838bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfacePutBitsYCbCr vlVdpOutputSurfacePutBitsYCbCr;
44938bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfaceRenderOutputSurface vlVdpOutputSurfaceRenderOutputSurface;
45038bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpOutputSurfaceRenderBitmapSurface vlVdpOutputSurfaceRenderBitmapSurface;
451c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpBitmapSurfaceCreate vlVdpBitmapSurfaceCreate;
452c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpBitmapSurfaceDestroy vlVdpBitmapSurfaceDestroy;
453c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpBitmapSurfaceGetParameters vlVdpBitmapSurfaceGetParameters;
454c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpBitmapSurfacePutBitsNative vlVdpBitmapSurfacePutBitsNative;
455c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueTargetDestroy vlVdpPresentationQueueTargetDestroy;
456c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueCreate vlVdpPresentationQueueCreate;
457c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueDestroy vlVdpPresentationQueueDestroy;
458c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueSetBackgroundColor vlVdpPresentationQueueSetBackgroundColor;
459c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueGetBackgroundColor vlVdpPresentationQueueGetBackgroundColor;
460c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueGetTime vlVdpPresentationQueueGetTime;
461c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueDisplay vlVdpPresentationQueueDisplay;
462c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueBlockUntilSurfaceIdle vlVdpPresentationQueueBlockUntilSurfaceIdle;
463c5b6f7d16699cfda696538890a9c1744847bb434Thomas Balling SørensenVdpPresentationQueueQuerySurfaceStatus vlVdpPresentationQueueQuerySurfaceStatus;
46465fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpPreemptionCallback vlVdpPreemptionCallback;
46565fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpPreemptionCallbackRegister vlVdpPreemptionCallbackRegister;
46665fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpVideoMixerSetFeatureEnables vlVdpVideoMixerSetFeatureEnables;
46765fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpVideoMixerCreate vlVdpVideoMixerCreate;
46865fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpVideoMixerRender vlVdpVideoMixerRender;
46965fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpVideoMixerSetAttributeValues vlVdpVideoMixerSetAttributeValues;
47038bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpVideoMixerGetFeatureSupport vlVdpVideoMixerGetFeatureSupport;
47138bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpVideoMixerGetFeatureEnables vlVdpVideoMixerGetFeatureEnables;
47238bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpVideoMixerGetParameterValues vlVdpVideoMixerGetParameterValues;
47338bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpVideoMixerGetAttributeValues vlVdpVideoMixerGetAttributeValues;
47438bd8131776879e9dc90d06848657756a4a13a66Christian KönigVdpVideoMixerDestroy vlVdpVideoMixerDestroy;
47565fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling SørensenVdpGenerateCSCMatrix vlVdpGenerateCSCMatrix;
47665fe0866aec7b5608419f6d184cb1fa4fe1dc45aThomas Balling Sørensen
47708f3a7cf7e9133f50adf33f800aa3696c909347fChristian König#define VDPAU_OUT   0
47808f3a7cf7e9133f50adf33f800aa3696c909347fChristian König#define VDPAU_ERR   1
47908f3a7cf7e9133f50adf33f800aa3696c909347fChristian König#define VDPAU_WARN  2
48008f3a7cf7e9133f50adf33f800aa3696c909347fChristian König#define VDPAU_TRACE 3
48108f3a7cf7e9133f50adf33f800aa3696c909347fChristian König
48208f3a7cf7e9133f50adf33f800aa3696c909347fChristian Königstatic inline void VDPAU_MSG(unsigned int level, const char *fmt, ...)
48308f3a7cf7e9133f50adf33f800aa3696c909347fChristian König{
48408f3a7cf7e9133f50adf33f800aa3696c909347fChristian König   static int debug_level = -1;
48508f3a7cf7e9133f50adf33f800aa3696c909347fChristian König
48608f3a7cf7e9133f50adf33f800aa3696c909347fChristian König   if (debug_level == -1) {
48708f3a7cf7e9133f50adf33f800aa3696c909347fChristian König      debug_level = MAX2(debug_get_num_option("VDPAU_DEBUG", 0), 0);
48808f3a7cf7e9133f50adf33f800aa3696c909347fChristian König   }
48908f3a7cf7e9133f50adf33f800aa3696c909347fChristian König
49008f3a7cf7e9133f50adf33f800aa3696c909347fChristian König   if (level <= debug_level) {
49108f3a7cf7e9133f50adf33f800aa3696c909347fChristian König      va_list ap;
49208f3a7cf7e9133f50adf33f800aa3696c909347fChristian König      va_start(ap, fmt);
49308f3a7cf7e9133f50adf33f800aa3696c909347fChristian König      _debug_vprintf(fmt, ap);
49408f3a7cf7e9133f50adf33f800aa3696c909347fChristian König      va_end(ap);
49508f3a7cf7e9133f50adf33f800aa3696c909347fChristian König   }
49608f3a7cf7e9133f50adf33f800aa3696c909347fChristian König}
49708f3a7cf7e9133f50adf33f800aa3696c909347fChristian König
498c24bc6f8684abee8c9a1b263334cd7a8506657b1Emeric Grange#endif /* VDPAU_PRIVATE_H */
499