Commit 2fe18543 authored by Aaron Plattner's avatar Aaron Plattner
Browse files

vdpau{,_x11}.h: Trailing whitespace removal

parent 2fe9e460
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* This copyright notice applies to this header file: * This copyright notice applies to this header file:
* *
* Copyright (c) 2008 NVIDIA Corporation * Copyright (c) 2008 NVIDIA Corporation
* *
* Permission is hereby granted, free of charge, to any person * Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation * obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without * files (the "Software"), to deal in the Software without
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
/** /**
* \mainpage Video Decode and Presentation API for Unix * \mainpage Video Decode and Presentation API for Unix
* *
* \section intro Introduction * \section intro Introduction
* *
* The Video Decode and Presentation API for Unix (VDPAU) provides * The Video Decode and Presentation API for Unix (VDPAU) provides
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
* A surface stores pixel information. Various types of surfaces * A surface stores pixel information. Various types of surfaces
* existing for different purposes: * existing for different purposes:
* *
* - \ref VdpVideoSurface "VdpVideoSurface"s store decompressed * - \ref VdpVideoSurface "VdpVideoSurface"s store decompressed
* YCbCr video frames in an implementation-defined internal * YCbCr video frames in an implementation-defined internal
* format. * format.
* - \ref VdpOutputSurface "VdpOutputSurface"s store RGB 4:4:4 * - \ref VdpOutputSurface "VdpOutputSurface"s store RGB 4:4:4
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
* *
* VDPAU is designed so that multiple implementations can be * VDPAU is designed so that multiple implementations can be
* used without application changes. For example, VDPAU could be * used without application changes. For example, VDPAU could be
* hosted on X11, or via direct GPU access. * hosted on X11, or via direct GPU access.
* *
* The key technology behind this is the use of function * The key technology behind this is the use of function
* pointers and a "get proc address" style API for all entry * pointers and a "get proc address" style API for all entry
...@@ -189,8 +189,8 @@ ...@@ -189,8 +189,8 @@
* library would handle loading the appropriate back-end, and * library would handle loading the appropriate back-end, and
* implementing a similar "get proc address" scheme internally. * implementing a similar "get proc address" scheme internally.
* *
* However, the above scheme does not work well in the context * However, the above scheme does not work well in the context
* of separated \ref api_core and \ref api_winsys. In this * of separated \ref api_core and \ref api_winsys. In this
* scenario, one would require a separate wrapper library per * scenario, one would require a separate wrapper library per
* Window System, since each Window System would have a * Window System, since each Window System would have a
* different function name and prototype for the main factory * different function name and prototype for the main factory
...@@ -208,67 +208,67 @@ ...@@ -208,67 +208,67 @@
* *
* \section threading Multi-threading * \section threading Multi-threading
* *
* All VDPAU functionality is fully thread-safe; any number of * All VDPAU functionality is fully thread-safe; any number of
* threads may call into any VDPAU functions at any time. VDPAU * threads may call into any VDPAU functions at any time. VDPAU
* may not be called from signal-handlers. * may not be called from signal-handlers.
* *
* Note, however, that this simply guarantees that internal * Note, however, that this simply guarantees that internal
* VDPAU state will not be corrupted by thread usage, and that * VDPAU state will not be corrupted by thread usage, and that
* crashes and deadlocks will not occur. Completely arbitrary * crashes and deadlocks will not occur. Completely arbitrary
* thread usage may not generate the results that an application * thread usage may not generate the results that an application
* desires. In particular, care must be taken when multiple * desires. In particular, care must be taken when multiple
* threads are performing operations on the same VDPAU objects. * threads are performing operations on the same VDPAU objects.
* *
* VDPAU implementations guarantee correct flow of surface * VDPAU implementations guarantee correct flow of surface
* content through the rendering pipeline, but only when * content through the rendering pipeline, but only when
* function calls that read from or write to a surface return to * function calls that read from or write to a surface return to
* the caller prior to any thread calling any other function(s) * the caller prior to any thread calling any other function(s)
* that read from or write to the surface. Invoking multiple * that read from or write to the surface. Invoking multiple
* reads from a surface in parallel is OK. * reads from a surface in parallel is OK.
* *
* Note that this restriction is placed upon VDPAU function * Note that this restriction is placed upon VDPAU function
* invocations, and specifically not upon any back-end * invocations, and specifically not upon any back-end
* hardware's physical rendering operations. VDPAU * hardware's physical rendering operations. VDPAU
* implementations are expected to internally synchronize such * implementations are expected to internally synchronize such
* hardware operations. * hardware operations.
* *
* In a single-threaded application, the above restriction comes * In a single-threaded application, the above restriction comes
* naturally; each function call completes before it is possible * naturally; each function call completes before it is possible
* to begin a new function call. * to begin a new function call.
* *
* In a multi-threaded application, threads may need to be * In a multi-threaded application, threads may need to be
* synchronized. For example, consider the situation where: * synchronized. For example, consider the situation where:
* *
* - Thread 1 is parsing compressed video data, passing them * - Thread 1 is parsing compressed video data, passing them
* through a \ref VdpDecoder "VdpDecoder" object, and filling a * through a \ref VdpDecoder "VdpDecoder" object, and filling a
* ring-buffer of \ref VdpVideoSurface "VdpVideoSurface"s * ring-buffer of \ref VdpVideoSurface "VdpVideoSurface"s
* - Thread 2 is consuming those \ref VdpVideoSurface * - Thread 2 is consuming those \ref VdpVideoSurface
* "VdpVideoSurface"s, and using a \ref VdpVideoMixer * "VdpVideoSurface"s, and using a \ref VdpVideoMixer
* "VdpVideoMixer" to process them and composite them with UI. * "VdpVideoMixer" to process them and composite them with UI.
* *
* In this case, the threads must synchronize to ensure that * In this case, the threads must synchronize to ensure that
* thread 1's call to \ref VdpDecoderRender has returned prior to * thread 1's call to \ref VdpDecoderRender has returned prior to
* thread 2's call(s) to \ref VdpVideoMixerRender that use that * thread 2's call(s) to \ref VdpVideoMixerRender that use that
* specific surface. This could be achieved using the following * specific surface. This could be achieved using the following
* pseudo-code: * pseudo-code:
* *
* \code * \code
* Queue<VdpVideoSurface> q_full_surfaces; * Queue<VdpVideoSurface> q_full_surfaces;
* Queue<VdpVideoSurface> q_empty_surfaces; * Queue<VdpVideoSurface> q_empty_surfaces;
* *
* thread_1() { * thread_1() {
* for (;;) { * for (;;) {
* VdpVideoSurface s = q_empty_surfaces.get(); * VdpVideoSurface s = q_empty_surfaces.get();
* // Parse compressed stream here * // Parse compressed stream here
* VdpDecoderRender(s, ...); * VdpDecoderRender(s, ...);
* q_full_surfaces.put(s); * q_full_surfaces.put(s);
* } * }
* } * }
* *
* // This would need to be more complex if * // This would need to be more complex if
* // VdpVideoMixerRender were to be provided with more * // VdpVideoMixerRender were to be provided with more
* // than one field/frame at a time. * // than one field/frame at a time.
* thread_1() { * thread_1() {
* for (;;) { * for (;;) {
* // Possibly, other rendering operations to mixer * // Possibly, other rendering operations to mixer
* // layer surfaces here. * // layer surfaces here.
...@@ -282,26 +282,26 @@ ...@@ -282,26 +282,26 @@
* } * }
* } * }
* \endcode * \endcode
* *
* Finally, note that VDPAU makes no guarantees regarding any * Finally, note that VDPAU makes no guarantees regarding any
* level of parallelism in any given implementation. Put another * level of parallelism in any given implementation. Put another
* way, use of multi-threading is not guaranteed to yield any * way, use of multi-threading is not guaranteed to yield any
* performance gain, and in theory could even slightly reduce * performance gain, and in theory could even slightly reduce
* performance due to threading/synchronization overhead. * performance due to threading/synchronization overhead.
* *
* However, the intent of the threading requirements is to allow * However, the intent of the threading requirements is to allow
* for e.g. video decoding and video mixer operations to proceed * for e.g. video decoding and video mixer operations to proceed
* in parallel in hardware. Given a (presumably multi-threaded) * in parallel in hardware. Given a (presumably multi-threaded)
* application that kept each portion of the hardware busy, this * application that kept each portion of the hardware busy, this
* would yield a performance increase. * would yield a performance increase.
* *
* \section endianness Surface Endianness * \section endianness Surface Endianness
* *
* When dealing with surface content, i.e. the input/output of * When dealing with surface content, i.e. the input/output of
* Put/GetBits functions, applications must take care to access * Put/GetBits functions, applications must take care to access
* memory in the correct fashion, so as to avoid endianness * memory in the correct fashion, so as to avoid endianness
* issues. * issues.
* *
* By established convention in the 3D graphics world, RGBA data * By established convention in the 3D graphics world, RGBA data
* is defined to be an array of 32-bit pixels containing packed * is defined to be an array of 32-bit pixels containing packed
* RGBA components, not as an array of bytes or interleaved RGBA * RGBA components, not as an array of bytes or interleaved RGBA
...@@ -311,35 +311,35 @@ ...@@ -311,35 +311,35 @@
* as interleaved arrays of 8-bit components (i.e. using an * as interleaved arrays of 8-bit components (i.e. using an
* 8-bit pointer.) Deviation from this convention will lead to * 8-bit pointer.) Deviation from this convention will lead to
* endianness issues, unless appropriate care is taken. * endianness issues, unless appropriate care is taken.
* *
* The same convention is followed for some packed YCbCr formats * The same convention is followed for some packed YCbCr formats
* such as \ref VDP_YCBCR_FORMAT_Y8U8V8A8; i.e. they are * such as \ref VDP_YCBCR_FORMAT_Y8U8V8A8; i.e. they are
* considered arrays of 32-bit pixels, and hence should be * considered arrays of 32-bit pixels, and hence should be
* accessed as such. * accessed as such.
* *
* For YCbCr formats with chroma decimation and/or planar * For YCbCr formats with chroma decimation and/or planar
* formats, however, this convention is awkward. Therefore, * formats, however, this convention is awkward. Therefore,
* formats such as \ref VDP_YCBCR_FORMAT_NV12 are defined as * formats such as \ref VDP_YCBCR_FORMAT_NV12 are defined as
* arrays of (potentially interleaved) byte-sized components. * arrays of (potentially interleaved) byte-sized components.
* Hence, applications should manipulate such data 8-bits at a * Hence, applications should manipulate such data 8-bits at a
* time, using 8-bit pointers. * time, using 8-bit pointers.
* *
* Note that one common usage for the input/output of * Note that one common usage for the input/output of
* Put/GetBits APIs is file I/O. Typical file I/O APIs treat all * Put/GetBits APIs is file I/O. Typical file I/O APIs treat all
* memory as a simple array of 8-bit values. This violates the * memory as a simple array of 8-bit values. This violates the
* rule requiring surface data to be accessed in its true native * rule requiring surface data to be accessed in its true native
* format. As such, applications may be required to solve * format. As such, applications may be required to solve
* endianness issues. Possible solutions include: * endianness issues. Possible solutions include:
* *
* - Authoring static UI data files according to the endianness * - Authoring static UI data files according to the endianness
* of the target execution platform. * of the target execution platform.
* - Conditionally byte-swapping Put/GetBits data buffers at * - Conditionally byte-swapping Put/GetBits data buffers at
* run-time based on execution platform. * run-time based on execution platform.
* *
* Note: Complete details regarding each surface format's * Note: Complete details regarding each surface format's
* precise pixel layout is included with the documentation of * precise pixel layout is included with the documentation of
* each surface type. For example, see \ref * each surface type. For example, see \ref
* VDP_RGBA_FORMAT_B8G8R8A8. * VDP_RGBA_FORMAT_B8G8R8A8.
* *
* \section video_decoder_usage Video Decoder Usage * \section video_decoder_usage Video Decoder Usage
* *
...@@ -389,7 +389,7 @@ ...@@ -389,7 +389,7 @@
* - The slice start code prefix may be included in a separate bitstream * - The slice start code prefix may be included in a separate bitstream
* buffer array entry to the actual slice data extracted from the bitstream. * buffer array entry to the actual slice data extracted from the bitstream.
* - Multiple bitstream buffer array entries (e.g. one per slice) may point at * - Multiple bitstream buffer array entries (e.g. one per slice) may point at
* the same physical data storage for the slice start code prefix. * the same physical data storage for the slice start code prefix.
* *
* \subsection VC-1 Simple and Main Profile * \subsection VC-1 Simple and Main Profile
* *
...@@ -428,13 +428,13 @@ ...@@ -428,13 +428,13 @@
* from the bitstream. * from the bitstream.
* *
* \section video_mixer_usage Video Mixer Usage * \section video_mixer_usage Video Mixer Usage
* *
* \subsection video_surface_content VdpVideoSurface Content * \subsection video_surface_content VdpVideoSurface Content
* *
* Each \ref VdpVideoSurface "VdpVideoSurface" is expected to contain an * Each \ref VdpVideoSurface "VdpVideoSurface" is expected to contain an
* entire frame's-worth of data, irrespective of whether an interlaced of * entire frame's-worth of data, irrespective of whether an interlaced of
* progressive sequence is being decoded. * progressive sequence is being decoded.
* *
* Depending on the exact encoding structure of the compressed video stream, * Depending on the exact encoding structure of the compressed video stream,
* the application may need to call \ref VdpDecoderRender twice to fill a * the application may need to call \ref VdpDecoderRender twice to fill a
* single \ref VdpVideoSurface "VdpVideoSurface". When the stream contains an * single \ref VdpVideoSurface "VdpVideoSurface". When the stream contains an
...@@ -442,12 +442,12 @@ ...@@ -442,12 +442,12 @@
* single \ref VdpDecoderRender call will fill the entire surface. When the * single \ref VdpDecoderRender call will fill the entire surface. When the
* stream contains separately encoded interlaced fields, two * stream contains separately encoded interlaced fields, two
* \ref VdpDecoderRender calls will be required; one for the top field, and * \ref VdpDecoderRender calls will be required; one for the top field, and
* one for the bottom field. * one for the bottom field.
* *
* Implementation note: When \ref VdpDecoderRender renders an interlaced * Implementation note: When \ref VdpDecoderRender renders an interlaced
* field, this operation must not disturb the content of the other field in * field, this operation must not disturb the content of the other field in
* the surface. * the surface.
* *
* \subsection vm_surf_list VdpVideoMixer Surface List * \subsection vm_surf_list VdpVideoMixer Surface List
* *
* An video stream is logically composed of a sequence of fields. An * An video stream is logically composed of a sequence of fields. An
...@@ -469,7 +469,7 @@ ...@@ -469,7 +469,7 @@
* determining the minimum required number of surfaces for optimal operation, * determining the minimum required number of surfaces for optimal operation,
* and the maximum number of useful surfaces, beyond which surfaces are not * and the maximum number of useful surfaces, beyond which surfaces are not
* used. It is recommended that in all cases other than plain bob/weave, at * used. It is recommended that in all cases other than plain bob/weave, at
* least 2 past and 1 future frame be provided. * least 2 past and 1 future frame be provided.
* *
* Note that it is entirely possible, in general, for any of the * Note that it is entirely possible, in general, for any of the
* \ref VdpVideoMixer "VdpVideoMixer" post-processing steps other than * \ref VdpVideoMixer "VdpVideoMixer" post-processing steps other than
...@@ -508,7 +508,7 @@ ...@@ -508,7 +508,7 @@
* </pre> * </pre>
* *
* then: * then:
* *
* <pre> * <pre>
* current_picture_structure: VDP_VIDEO_MIXER_PICTURE_STRUCTURE_TOP_FIELD * current_picture_structure: VDP_VIDEO_MIXER_PICTURE_STRUCTURE_TOP_FIELD
* past: [b4, t4, b3] * past: [b4, t4, b3]
...@@ -575,7 +575,7 @@ ...@@ -575,7 +575,7 @@
* Bob de-interlacing is the default when no advanced method is requested and * Bob de-interlacing is the default when no advanced method is requested and
* enabled. Advanced de-interlacing algorithms may fall back to bob e.g. when * enabled. Advanced de-interlacing algorithms may fall back to bob e.g. when
* required past/future fields are missing. * required past/future fields are missing.
* *
* All implementations must support bob de-interlacing. * All implementations must support bob de-interlacing.
* *
* \subsection deint_adv Advanced De-interlacing * \subsection deint_adv Advanced De-interlacing
...@@ -678,27 +678,27 @@ ...@@ -678,27 +678,27 @@
* in the descriptions above applies to the field stream after application of * in the descriptions above applies to the field stream after application of
* flags. * flags.
* *
* \section extending Extending the API * \section extending Extending the API
* *
* \subsection extend_enums Enumerations and Other Constants * \subsection extend_enums Enumerations and Other Constants
* *
* VDPAU defines a number of enumeration types. * VDPAU defines a number of enumeration types.
* *
* When modifying VDPAU, existing enumeration constants must * When modifying VDPAU, existing enumeration constants must
* continue to exist (although they may be deprecated), and do * continue to exist (although they may be deprecated), and do
* so in the existing order. * so in the existing order.
* *
* The above discussion naturally applies to "manually" defined * The above discussion naturally applies to "manually" defined
* enumerations, using pre-processor macros, too. * enumerations, using pre-processor macros, too.
* *
* \subsection extend_structs Structures * \subsection extend_structs Structures
* *
* In most case, VDPAU includes no provision for modifying existing * In most case, VDPAU includes no provision for modifying existing
* structure definitions, although they may be deprecated. * structure definitions, although they may be deprecated.
* *
* New structures may be created, together with new API entry * New structures may be created, together with new API entry
* points or feature/attribute/parameter values, to expose new * points or feature/attribute/parameter values, to expose new
* functionality. * functionality.
* *
* A few structures are considered plausible candidates for future extension. * A few structures are considered plausible candidates for future extension.
* Such structures include a version number as the first field, indicating the * Such structures include a version number as the first field, indicating the
...@@ -706,21 +706,21 @@ ...@@ -706,21 +706,21 @@
* modified by adding new fields to the end of the structure, so that the * modified by adding new fields to the end of the structure, so that the
* original structure definition is completely compatible with a leading * original structure definition is completely compatible with a leading
* subset of fields of the extended structure. * subset of fields of the extended structure.
* *
* \subsection extend_functions Functions * \subsection extend_functions Functions
* *
* Existing functions may not be modified, although they may be * Existing functions may not be modified, although they may be
* deprecated. * deprecated.
* *
* New functions may be added at will. Note the enumeration * New functions may be added at will. Note the enumeration
* requirements when modifying the enumeration that defines the * requirements when modifying the enumeration that defines the
* list of entry points. * list of entry points.
* *
* \section preemption_note Display Preemption * \section preemption_note Display Preemption
* *
* Please note that the display may be preempted away from * Please note that the display may be preempted away from
* VDPAU at any time. See \ref display_preemption for more * VDPAU at any time. See \ref display_preemption for more
* details. * details.
* *
* \subsection trademarks Trademarks * \subsection trademarks Trademarks
* *
...@@ -756,7 +756,7 @@ extern "C" { ...@@ -756,7 +756,7 @@ extern "C" {
/** /**
* \defgroup base_types Basic Types * \defgroup base_types Basic Types
* *
* VDPAU primarily uses ISO C99 types from \c stdint.h. * VDPAU primarily uses ISO C99 types from \c stdint.h.
* *
* @{ * @{
...@@ -766,8 +766,8 @@ extern "C" { ...@@ -766,8 +766,8 @@ extern "C" {
#define VDP_TRUE 1 #define VDP_TRUE 1
/** \brief A false \ref VdpBool value */ /** \brief A false \ref VdpBool value */
#define VDP_FALSE 0 #define VDP_FALSE 0
/** /**
* \brief A boolean value, holding \ref VDP_TRUE or \ref * \brief A boolean value, holding \ref VDP_TRUE or \ref
* VDP_FALSE. * VDP_FALSE.
*/ */
typedef int VdpBool; typedef int VdpBool;
...@@ -781,14 +781,14 @@ typedef int VdpBool; ...@@ -781,14 +781,14 @@ typedef int VdpBool;
*/ */
/** /**
* \brief An invalid object handle value. * \brief An invalid object handle value.
* *
* This value may be used to represent an invalid, or * This value may be used to represent an invalid, or
* non-existent, object (\ref VdpDevice "VdpDevice", * non-existent, object (\ref VdpDevice "VdpDevice",
* \ref VdpVideoSurface "VdpVideoSurface", etc.) * \ref VdpVideoSurface "VdpVideoSurface", etc.)
* *
* Note that most APIs require valid object handles in all * Note that most APIs require valid object handles in all
* cases, and will fail when presented with this value. * cases, and will fail when presented with this value.
*/ */
#define VDP_INVALID_HANDLE 0xffffffffU #define VDP_INVALID_HANDLE 0xffffffffU
...@@ -810,85 +810,85 @@ typedef uint32_t VdpChromaType; ...@@ -810,85 +810,85 @@ typedef uint32_t VdpChromaType;
*/ */
typedef uint32_t VdpYCbCrFormat; typedef uint32_t VdpYCbCrFormat;
/** /**
* \hideinitializer * \hideinitializer
* \brief The "NV12" YCbCr surface format. * \brief The "NV12" YCbCr surface format.
* *
* This format has a two planes, a Y plane and a UV plane. * This format has a two planes, a Y plane and a UV plane.
* *
* The Y plane is an array of byte-sized Y components. * The Y plane is an array of byte-sized Y components.
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
* *
* The UV plane is an array of interleaved byte-sized U and V * The UV plane is an array of interleaved byte-sized U and V
* components, in the order U, V, U, V. Applications should * components, in the order U, V, U, V. Applications should
* access this data via a uint8_t pointer. * access this data via a uint8_t pointer.
*/ */
#define VDP_YCBCR_FORMAT_NV12 (VdpYCbCrFormat)0 #define VDP_YCBCR_FORMAT_NV12 (VdpYCbCrFormat)0
/** /**
* \hideinitializer * \hideinitializer
* \brief The "YV12" YCbCr surface format. * \brief The "YV12" YCbCr surface format.
* *
* This format has a three planes, a Y plane, a U plane, and a V * This format has a three planes, a Y plane, a U plane, and a V
* plane. * plane.
* *
* Each of the planes is an array of byte-sized components. * Each of the planes is an array of byte-sized components.
* *
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
*/ */
#define VDP_YCBCR_FORMAT_YV12 (VdpYCbCrFormat)1 #define VDP_YCBCR_FORMAT_YV12 (VdpYCbCrFormat)1
/** /**
* \hideinitializer * \hideinitializer
* \brief The "UYVY" YCbCr surface format. * \brief The "UYVY" YCbCr surface format.
* *
* This format may also be known as Y422, UYNV, HDYC. * This format may also be known as Y422, UYNV, HDYC.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array of interleaved byte-sized Y, U, and V * This plane is an array of interleaved byte-sized Y, U, and V
* components, in the order U, Y, V, Y, U, Y, V, Y. * components, in the order U, Y, V, Y, U, Y, V, Y.
* *
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
*/ */
#define VDP_YCBCR_FORMAT_UYVY (VdpYCbCrFormat)2 #define VDP_YCBCR_FORMAT_UYVY (VdpYCbCrFormat)2
/** /**
* \hideinitializer * \hideinitializer
* \brief The "YUYV" YCbCr surface format. * \brief The "YUYV" YCbCr surface format.
* *
* This format may also be known as YUY2, YUNV, V422. * This format may also be known as YUY2, YUNV, V422.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array of interleaved byte-sized Y, U, and V * This plane is an array of interleaved byte-sized Y, U, and V
* components, in the order Y, U, Y, V, Y, U, Y, V. * components, in the order Y, U, Y, V, Y, U, Y, V.
* *
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
*/ */
#define VDP_YCBCR_FORMAT_YUYV (VdpYCbCrFormat)3 #define VDP_YCBCR_FORMAT_YUYV (VdpYCbCrFormat)3
/** /**
* \hideinitializer * \hideinitializer
* \brief A packed YCbCr format. * \brief A packed YCbCr format.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array packed 32-bit pixel data. Within each * This plane is an array packed 32-bit pixel data. Within each
* 32-bit pixel, bits [31:24] contain A, bits [23:16] contain V, * 32-bit pixel, bits [31:24] contain A, bits [23:16] contain V,
* bits [15:8] contain U, and bits [7:0] contain Y. * bits [15:8] contain U, and bits [7:0] contain Y.
* *
* Applications should access this data via a uint32_t pointer. * Applications should access this data via a uint32_t pointer.
*/ */
#define VDP_YCBCR_FORMAT_Y8U8V8A8 (VdpYCbCrFormat)4 #define VDP_YCBCR_FORMAT_Y8U8V8A8 (VdpYCbCrFormat)4
/** /**
* \hideinitializer * \hideinitializer
* \brief A packed YCbCr format. * \brief A packed YCbCr format.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array packed 32-bit pixel data. Within each * This plane is an array packed 32-bit pixel data. Within each
* 32-bit pixel, bits [31:24] contain A, bits [23:16] contain Y, * 32-bit pixel, bits [31:24] contain A, bits [23:16] contain Y,
* bits [15:8] contain U, and bits [7:0] contain V. * bits [15:8] contain U, and bits [7:0] contain V.
* *
* Applications should access this data via a uint32_t pointer. * Applications should access this data via a uint32_t pointer.
*/ */
#define VDP_YCBCR_FORMAT_V8U8Y8A8 (VdpYCbCrFormat)5 #define VDP_YCBCR_FORMAT_V8U8Y8A8 (VdpYCbCrFormat)5
/** /**
...@@ -896,68 +896,68 @@ typedef uint32_t VdpYCbCrFormat; ...@@ -896,68 +896,68 @@ typedef uint32_t VdpYCbCrFormat;
*/ */
typedef uint32_t VdpRGBAFormat; typedef uint32_t VdpRGBAFormat;
/** /**
* \hideinitializer * \hideinitializer
* \brief A packed RGB format. * \brief A packed RGB format.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array packed 32-bit pixel data. Within each * This plane is an array packed 32-bit pixel data. Within each
* 32-bit pixel, bits [31:24] contain A, bits [23:16] contain R, * 32-bit pixel, bits [31:24] contain A, bits [23:16] contain R,
* bits [15:8] contain G, and bits [7:0] contain B. * bits [15:8] contain G, and bits [7:0] contain B.
* *
* Applications should access this data via a uint32_t pointer. * Applications should access this data via a uint32_t pointer.
*/ */
#define VDP_RGBA_FORMAT_B8G8R8A8 (VdpRGBAFormat)0 #define VDP_RGBA_FORMAT_B8G8R8A8 (VdpRGBAFormat)0
/** /**
* \hideinitializer * \hideinitializer
* \brief A packed RGB format. * \brief A packed RGB format.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array packed 32-bit pixel data. Within each * This plane is an array packed 32-bit pixel data. Within each
* 32-bit pixel, bits [31:24] contain A, bits [23:16] contain B, * 32-bit pixel, bits [31:24] contain A, bits [23:16] contain B,
* bits [15:8] contain G, and bits [7:0] contain R. * bits [15:8] contain G, and bits [7:0] contain R.
* *
* Applications should access this data via a uint32_t pointer. * Applications should access this data via a uint32_t pointer.
*/ */
#define VDP_RGBA_FORMAT_R8G8B8A8 (VdpRGBAFormat)1 #define VDP_RGBA_FORMAT_R8G8B8A8 (VdpRGBAFormat)1
/** /**
* \hideinitializer * \hideinitializer
* \brief A packed RGB format. * \brief A packed RGB format.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array packed 32-bit pixel data. Within each * This plane is an array packed 32-bit pixel data. Within each
* 32-bit pixel, bits [31:30] contain A, bits [29:20] contain B, * 32-bit pixel, bits [31:30] contain A, bits [29:20] contain B,
* bits [19:10] contain G, and bits [9:0] contain R. * bits [19:10] contain G, and bits [9:0] contain R.
* *
* Applications should access this data via a uint32_t pointer. * Applications should access this data via a uint32_t pointer.
*/ */
#define VDP_RGBA_FORMAT_R10G10B10A2 (VdpRGBAFormat)2 #define VDP_RGBA_FORMAT_R10G10B10A2 (VdpRGBAFormat)2
/** /**
* \hideinitializer * \hideinitializer
* \brief A packed RGB format. * \brief A packed RGB format.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array packed 32-bit pixel data. Within each * This plane is an array packed 32-bit pixel data. Within each
* 32-bit pixel, bits [31:30] contain A, bits [29:20] contain R, * 32-bit pixel, bits [31:30] contain A, bits [29:20] contain R,
* bits [19:10] contain G, and bits [9:0] contain B. * bits [19:10] contain G, and bits [9:0] contain B.
* *
* Applications should access this data via a uint32_t pointer. * Applications should access this data via a uint32_t pointer.
*/ */
#define VDP_RGBA_FORMAT_B10G10R10A2 (VdpRGBAFormat)3 #define VDP_RGBA_FORMAT_B10G10R10A2 (VdpRGBAFormat)3
/** /**
* \hideinitializer * \hideinitializer
* \brief An alpha-only surface format. * \brief An alpha-only surface format.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array of byte-sized components. * This plane is an array of byte-sized components.
* *
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
*/ */
#define VDP_RGBA_FORMAT_A8 (VdpRGBAFormat)4 #define VDP_RGBA_FORMAT_A8 (VdpRGBAFormat)4
/** /**
...@@ -965,53 +965,53 @@ typedef uint32_t VdpRGBAFormat; ...@@ -965,53 +965,53 @@ typedef uint32_t VdpRGBAFormat;
*/ */
typedef uint32_t VdpIndexedFormat; typedef uint32_t VdpIndexedFormat;
/** /**
* \hideinitializer * \hideinitializer
* \brief A 4-bit indexed format, with alpha. * \brief A 4-bit indexed format, with alpha.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array of byte-sized components. Within each * This plane is an array of byte-sized components. Within each
* byte, bits [7:4] contain I (index), and bits [3:0] contain A. * byte, bits [7:4] contain I (index), and bits [3:0] contain A.
* *
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
*/ */
#define VDP_INDEXED_FORMAT_A4I4 (VdpIndexedFormat)0 #define VDP_INDEXED_FORMAT_A4I4 (VdpIndexedFormat)0
/** /**
* \hideinitializer * \hideinitializer
* \brief A 4-bit indexed format, with alpha. * \brief A 4-bit indexed format, with alpha.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array of byte-sized components. Within each * This plane is an array of byte-sized components. Within each
* byte, bits [7:4] contain A, and bits [3:0] contain I (index). * byte, bits [7:4] contain A, and bits [3:0] contain I (index).
* *
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
*/ */
#define VDP_INDEXED_FORMAT_I4A4 (VdpIndexedFormat)1 #define VDP_INDEXED_FORMAT_I4A4 (VdpIndexedFormat)1
/** /**
* \hideinitializer * \hideinitializer
* \brief A 8-bit indexed format, with alpha. * \brief A 8-bit indexed format, with alpha.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array of interleaved byte-sized A and I * This plane is an array of interleaved byte-sized A and I
* (index) components, in the order A, I, A, I. * (index) components, in the order A, I, A, I.
* *
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
*/ */
#define VDP_INDEXED_FORMAT_A8I8 (VdpIndexedFormat)2 #define VDP_INDEXED_FORMAT_A8I8 (VdpIndexedFormat)2
/** /**
* \hideinitializer * \hideinitializer
* \brief A 8-bit indexed format, with alpha. * \brief A 8-bit indexed format, with alpha.
* *
* This format has a single plane. * This format has a single plane.
* *
* This plane is an array of interleaved byte-sized A and I * This plane is an array of interleaved byte-sized A and I
* (index) components, in the order I, A, I, A. * (index) components, in the order I, A, I, A.
* *
* Applications should access this data via a uint8_t pointer. * Applications should access this data via a uint8_t pointer.
*/ */
#define VDP_INDEXED_FORMAT_I8A8 (VdpIndexedFormat)3 #define VDP_INDEXED_FORMAT_I8A8 (VdpIndexedFormat)3
/** /**
...@@ -1073,7 +1073,7 @@ typedef struct { ...@@ -1073,7 +1073,7 @@ typedef struct {
*/ */
/** /**
* \hideinitializer * \hideinitializer
* \brief The set of all possible error codes. * \brief The set of all possible error codes.
*/ */
typedef enum { typedef enum {
...@@ -1083,10 +1083,10 @@ typedef enum { ...@@ -1083,10 +1083,10 @@ typedef enum {
* No backend implementation could be loaded. * No backend implementation could be loaded.
*/ */
VDP_STATUS_NO_IMPLEMENTATION, VDP_STATUS_NO_IMPLEMENTATION,
/** /**
* The display was preempted, or a fatal error occurred. * The display was preempted, or a fatal error occurred.
* *
* The application must re-initialize VDPAU. * The application must re-initialize VDPAU.
*/ */
VDP_STATUS_DISPLAY_PREEMPTED, VDP_STATUS_DISPLAY_PREEMPTED,
/** /**
...@@ -1213,7 +1213,7 @@ typedef enum { ...@@ -1213,7 +1213,7 @@ typedef enum {
/** /**
* \brief Retrieve a string describing an error code. * \brief Retrieve a string describing an error code.
* \param[in] status The error code. * \param[in] status The error code.
* \return A pointer to the string. Note that this is a * \return A pointer to the string. Note that this is a
* statically allocated read-only string. As such, the * statically allocated read-only string. As such, the
* application must not free the returned pointer. The * application must not free the returned pointer. The
* pointer is valid as long as the VDPAU implementation is * pointer is valid as long as the VDPAU implementation is
...@@ -1225,24 +1225,24 @@ typedef char const * VdpGetErrorString( ...@@ -1225,24 +1225,24 @@ typedef char const * VdpGetErrorString(
/*@}*/ /*@}*/
/** /**
* \defgroup versioning Versioning * \defgroup versioning Versioning
* *
* *
* @{ * @{
*/ */
/** /**
* \brief The VDPAU version described by this header file. * \brief The VDPAU version described by this header file.
* *
* Note that VDPAU version numbers are simple integers that * Note that VDPAU version numbers are simple integers that
* increase monotonically (typically by value 1) with each VDPAU * increase monotonically (typically by value 1) with each VDPAU
* header revision. * header revision.
*/ */
#define VDPAU_VERSION 0 #define VDPAU_VERSION 0
/** /**
* \brief Retrieve the VDPAU version implemented by the backend. * \brief Retrieve the VDPAU version implemented by the backend.
* \param[out] api_version The API version. * \param[out] api_version The API version.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
...@@ -1252,7 +1252,7 @@ typedef VdpStatus VdpGetApiVersion( ...@@ -1252,7 +1252,7 @@ typedef VdpStatus VdpGetApiVersion(
); );
/** /**
* \brief Retrieve an implementation-specific string description * \brief Retrieve an implementation-specific string description
* of the implementation. This typically includes detailed version * of the implementation. This typically includes detailed version
* information. * information.
* \param[out] information_string A pointer to the information * \param[out] information_string A pointer to the information
...@@ -1261,12 +1261,12 @@ typedef VdpStatus VdpGetApiVersion( ...@@ -1261,12 +1261,12 @@ typedef VdpStatus VdpGetApiVersion(
* free the returned pointer. The pointer is valid as long * free the returned pointer. The pointer is valid as long
* as the implementation is present within the * as the implementation is present within the
* application's address space. * application's address space.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* Note that the returned string is useful for information * Note that the returned string is useful for information
* reporting. It is not intended that the application should * reporting. It is not intended that the application should
* parse this string in order to determine any information about * parse this string in order to determine any information about
* the implementation. * the implementation.
*/ */
typedef VdpStatus VdpGetInformationString( typedef VdpStatus VdpGetInformationString(
/* output parameters follow */ /* output parameters follow */
...@@ -1309,8 +1309,8 @@ typedef VdpStatus VdpDeviceDestroy( ...@@ -1309,8 +1309,8 @@ typedef VdpStatus VdpDeviceDestroy(
* \defgroup VdpCSCMatrix VdpCSCMatrix; CSC Matrix Manipulation * \defgroup VdpCSCMatrix VdpCSCMatrix; CSC Matrix Manipulation
* *
* When converting from YCbCr to RGB data formats, a color space * When converting from YCbCr to RGB data formats, a color space
* conversion operation must be performed. This operation is * conversion operation must be performed. This operation is
* parameterized using a "color space conversion matrix". The * parameterized using a "color space conversion matrix". The
* VdpCSCMatrix is a data structure representing this * VdpCSCMatrix is a data structure representing this
* information. * information.
* *
...@@ -1370,7 +1370,7 @@ typedef struct { ...@@ -1370,7 +1370,7 @@ typedef struct {
float contrast; float contrast;
/** /**
* Saturation adjustment amount. A value clamped between 0.0 and * Saturation adjustment amount. A value clamped between 0.0 and
* 10.0. 1.0 represents no modification. * 10.0. 1.0 represents no modification.
*/ */
float saturation; float saturation;
/** /**
...@@ -1416,7 +1416,7 @@ typedef VdpStatus VdpGenerateCSCMatrix( ...@@ -1416,7 +1416,7 @@ typedef VdpStatus VdpGenerateCSCMatrix(
* \defgroup VdpVideoSurface VdpVideoSurface; Video Surface object * \defgroup VdpVideoSurface VdpVideoSurface; Video Surface object
* *
* A VdpVideoSurface stores YCbCr data in an internal format, * A VdpVideoSurface stores YCbCr data in an internal format,
* with a variety of possible chroma sub-sampling options. * with a variety of possible chroma sub-sampling options.
* *
* A VdpVideoSurface may be filled with: * A VdpVideoSurface may be filled with:
* - Data provided by the CPU via \ref * - Data provided by the CPU via \ref
...@@ -1495,12 +1495,12 @@ typedef uint32_t VdpVideoSurface; ...@@ -1495,12 +1495,12 @@ typedef uint32_t VdpVideoSurface;
* \param[in] width The width of the new surface. * \param[in] width The width of the new surface.
* \param[in] height The height of the new surface. * \param[in] height The height of the new surface.
* \param[out] surface The new surface's handle. * \param[out] surface The new surface's handle.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* The memory backing the surface may not be initialized during * The memory backing the surface may not be initialized during
* creation. Applications are expected to initialize any region * creation. Applications are expected to initialize any region
* that they use, via \ref VdpDecoderRender or \ref * that they use, via \ref VdpDecoderRender or \ref
* VdpVideoSurfacePutBitsYCbCr. * VdpVideoSurfacePutBitsYCbCr.
*/ */
typedef VdpStatus VdpVideoSurfaceCreate( typedef VdpStatus VdpVideoSurfaceCreate(
VdpDevice device, VdpDevice device,
...@@ -1593,7 +1593,7 @@ typedef VdpStatus VdpVideoSurfacePutBitsYCbCr( ...@@ -1593,7 +1593,7 @@ typedef VdpStatus VdpVideoSurfacePutBitsYCbCr(
* \defgroup VdpOutputSurface VdpOutputSurface; Output Surface \ * \defgroup VdpOutputSurface VdpOutputSurface; Output Surface \
* object * object
* *
* A VdpOutputSurface stores RGBA data in a defined format. * A VdpOutputSurface stores RGBA data in a defined format.
* *
* A VdpOutputSurface may be filled with: * A VdpOutputSurface may be filled with:
* - Data provided by the CPU via the various * - Data provided by the CPU via the various
...@@ -1619,22 +1619,22 @@ typedef VdpStatus VdpVideoSurfacePutBitsYCbCr( ...@@ -1619,22 +1619,22 @@ typedef VdpStatus VdpVideoSurfacePutBitsYCbCr(
*/ */
/** /**
* \brief The set of all known color table formats, for use with * \brief The set of all known color table formats, for use with
* \ref VdpOutputSurfacePutBitsIndexed. * \ref VdpOutputSurfacePutBitsIndexed.
*/ */
typedef uint32_t VdpColorTableFormat; typedef uint32_t VdpColorTableFormat;
/** /**
* \hideinitializer * \hideinitializer
* \brief 8-bit per component packed into 32-bits * \brief 8-bit per component packed into 32-bits
* *
* This format is an array of packed 32-bit RGB color values. * This format is an array of packed 32-bit RGB color values.
* Bits [31:24] are unused, bits [23:16] contain R, bits [15:8] * Bits [31:24] are unused, bits [23:16] contain R, bits [15:8]
* contain G, and bits [7:0] contain B. Note: The format is * contain G, and bits [7:0] contain B. Note: The format is
* physically an array of uint32_t values, and should be accessed * physically an array of uint32_t values, and should be accessed
* as such by the application in order to avoid endianness * as such by the application in order to avoid endianness
* issues. * issues.
*/ */
#define VDP_COLOR_TABLE_FORMAT_B8G8R8X8 (VdpColorTableFormat)0 #define VDP_COLOR_TABLE_FORMAT_B8G8R8X8 (VdpColorTableFormat)0
/** /**
...@@ -1685,7 +1685,7 @@ typedef VdpStatus VdpOutputSurfaceQueryGetPutBitsNativeCapabilities( ...@@ -1685,7 +1685,7 @@ typedef VdpStatus VdpOutputSurfaceQueryGetPutBitsNativeCapabilities(
* which information is requested. * which information is requested.
* \param[in] bits_indexed_format The format of the application * \param[in] bits_indexed_format The format of the application
* data buffer. * data buffer.
* \param[in] color_table_format The format of the color lookup * \param[in] color_table_format The format of the color lookup
* table. * table.
* \param[out] is_supported Is this surface format supported? * \param[out] is_supported Is this surface format supported?
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
...@@ -1732,8 +1732,8 @@ typedef uint32_t VdpOutputSurface; ...@@ -1732,8 +1732,8 @@ typedef uint32_t VdpOutputSurface;
* \param[in] width The width of the new surface. * \param[in] width The width of the new surface.
* \param[in] height The height of the new surface. * \param[in] height The height of the new surface.
* \param[out] surface The new surface's handle. * \param[out] surface The new surface's handle.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* The memory backing the surface will be initialized to 0 color * The memory backing the surface will be initialized to 0 color
* and 0 alpha (i.e. black.) * and 0 alpha (i.e. black.)
*/ */
...@@ -1843,10 +1843,10 @@ typedef VdpStatus VdpOutputSurfacePutBitsNative( ...@@ -1843,10 +1843,10 @@ typedef VdpStatus VdpOutputSurfacePutBitsNative(
* \param[in] destination_rect The sub-rectangle of the surface * \param[in] destination_rect The sub-rectangle of the surface
* to fill with application data. If NULL, the entire * to fill with application data. If NULL, the entire
* surface will be updated. * surface will be updated.
* \param[in] color_table_format The format of the color_table. * \param[in] color_table_format The format of the color_table.
* \param[in] color_table A table that maps between source index * \param[in] color_table A table that maps between source index
* and target color data. See \ref VdpColorTableFormat for * and target color data. See \ref VdpColorTableFormat for
* details regarding the memory layout. * details regarding the memory layout.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
typedef VdpStatus VdpOutputSurfacePutBitsIndexed( typedef VdpStatus VdpOutputSurfacePutBitsIndexed(
...@@ -1970,10 +1970,10 @@ typedef uint32_t VdpBitmapSurface; ...@@ -1970,10 +1970,10 @@ typedef uint32_t VdpBitmapSurface;
* Implementations may use this as a hint to determine how * Implementations may use this as a hint to determine how
* to allocate the underlying storage for the surface. * to allocate the underlying storage for the surface.
* \param[out] surface The new surface's handle. * \param[out] surface The new surface's handle.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* The memory backing the surface may not be initialized * The memory backing the surface may not be initialized
* during creation. Applications are expected initialize any * during creation. Applications are expected initialize any
* region that they use, via \ref VdpBitmapSurfacePutBitsNative. * region that they use, via \ref VdpBitmapSurfacePutBitsNative.
*/ */
typedef VdpStatus VdpBitmapSurfaceCreate( typedef VdpStatus VdpBitmapSurfaceCreate(
...@@ -2054,10 +2054,10 @@ typedef VdpStatus VdpBitmapSurfacePutBitsNative( ...@@ -2054,10 +2054,10 @@ typedef VdpStatus VdpBitmapSurfacePutBitsNative(
* @{ * @{
*/ */
/** /**
* \hideinitializer * \hideinitializer
* \brief The blending equation factors. * \brief The blending equation factors.
*/ */
typedef enum { typedef enum {
VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ZERO = 0, VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ZERO = 0,
VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE = 1, VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE = 1,
...@@ -2076,10 +2076,10 @@ typedef enum { ...@@ -2076,10 +2076,10 @@ typedef enum {
VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 14, VDP_OUTPUT_SURFACE_RENDER_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 14,
} VdpOutputSurfaceRenderBlendFactor; } VdpOutputSurfaceRenderBlendFactor;
/** /**
* \hideinitializer * \hideinitializer
* \brief The blending equations. * \brief The blending equations.
*/ */
typedef enum { typedef enum {
VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_SUBTRACT = 0, VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_SUBTRACT = 0,
VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_REVERSE_SUBTRACT = 1, VDP_OUTPUT_SURFACE_RENDER_BLEND_EQUATION_REVERSE_SUBTRACT = 1,
...@@ -2107,35 +2107,35 @@ typedef struct { ...@@ -2107,35 +2107,35 @@ typedef struct {
VdpColor blend_constant; VdpColor blend_constant;
} VdpOutputSurfaceRenderBlendState; } VdpOutputSurfaceRenderBlendState;
/** /**
* \hideinitializer * \hideinitializer
* \brief Do not rotate source_surface prior to compositing. * \brief Do not rotate source_surface prior to compositing.
*/ */
#define VDP_OUTPUT_SURFACE_RENDER_ROTATE_0 0 #define VDP_OUTPUT_SURFACE_RENDER_ROTATE_0 0
/** /**
* \hideinitializer * \hideinitializer
* \brief Rotate source_surface 90 degrees clockwise prior to * \brief Rotate source_surface 90 degrees clockwise prior to
* compositing. * compositing.
*/ */
#define VDP_OUTPUT_SURFACE_RENDER_ROTATE_90 1 #define VDP_OUTPUT_SURFACE_RENDER_ROTATE_90 1
/** /**
* \hideinitializer * \hideinitializer
* \brief Rotate source_surface 180 degrees prior to * \brief Rotate source_surface 180 degrees prior to
* compositing. * compositing.
*/ */
#define VDP_OUTPUT_SURFACE_RENDER_ROTATE_180 2 #define VDP_OUTPUT_SURFACE_RENDER_ROTATE_180 2
/** /**
* \hideinitializer * \hideinitializer
* \brief Rotate source_surface 270 degrees clockwise prior to * \brief Rotate source_surface 270 degrees clockwise prior to
* compositing. * compositing.
*/ */
#define VDP_OUTPUT_SURFACE_RENDER_ROTATE_270 3 #define VDP_OUTPUT_SURFACE_RENDER_ROTATE_270 3
/** /**
* \hideinitializer * \hideinitializer
* \brief A separate color is used for each vertex of the * \brief A separate color is used for each vertex of the
* smooth-shaded quad. Hence, colors array contains 4 * smooth-shaded quad. Hence, colors array contains 4
* elements rather than 1. See description of colors * elements rather than 1. See description of colors
...@@ -2534,14 +2534,14 @@ typedef struct { ...@@ -2534,14 +2534,14 @@ typedef struct {
} VdpBitstreamBuffer; } VdpBitstreamBuffer;
/** /**
* \brief A generic "picture information" pointer type. * \brief A generic "picture information" pointer type.
* *
* This type serves solely to document the expected usage of a * This type serves solely to document the expected usage of a
* generic (void *) function parameter. In actual usage, the * generic (void *) function parameter. In actual usage, the
* application is expected to physically provide a pointer to an * application is expected to physically provide a pointer to an
* instance of one of the "real" VdpPictureInfo* structures, * instance of one of the "real" VdpPictureInfo* structures,
* picking the type appropriate for the decoder object in * picking the type appropriate for the decoder object in
* question. * question.
*/ */
typedef void * VdpPictureInfo; typedef void * VdpPictureInfo;
...@@ -2854,7 +2854,7 @@ typedef VdpStatus VdpDecoderRender( ...@@ -2854,7 +2854,7 @@ typedef VdpStatus VdpDecoderRender(
/** /**
* \defgroup VdpVideoMixer VdpVideoMixer; Video Post-processing \ * \defgroup VdpVideoMixer VdpVideoMixer; Video Post-processing \
* and Compositing object * and Compositing object
* *
* VdpVideoMixer can perform some subset of the following * VdpVideoMixer can perform some subset of the following
* post-processing steps on video: * post-processing steps on video:
* - De-interlacing * - De-interlacing
...@@ -2869,9 +2869,9 @@ typedef VdpStatus VdpDecoderRender( ...@@ -2869,9 +2869,9 @@ typedef VdpStatus VdpDecoderRender(
* processing steps on it (potentially using information from * processing steps on it (potentially using information from
* past or future video surfaces). It scales the video and * past or future video surfaces). It scales the video and
* converts it to RGB, then optionally composites it with * converts it to RGB, then optionally composites it with
* multiple auxiliary \ref VdpOutputSurface "VdpOutputSurface"s * multiple auxiliary \ref VdpOutputSurface "VdpOutputSurface"s
* before writing the result to the destination \ref * before writing the result to the destination \ref
* VdpOutputSurface "VdpOutputSurface". * VdpOutputSurface "VdpOutputSurface".
* *
* The video mixer compositing model is as follows: * The video mixer compositing model is as follows:
* *
...@@ -2882,7 +2882,7 @@ typedef VdpStatus VdpDecoderRender( ...@@ -2882,7 +2882,7 @@ typedef VdpStatus VdpDecoderRender(
* *
* - The first layer is the background color. The background * - The first layer is the background color. The background
* color will fill the entire rectangle. * color will fill the entire rectangle.
* *
* - The second layer is the processed video which has been * - The second layer is the processed video which has been
* converted to RGB. These pixels will overwrite the * converted to RGB. These pixels will overwrite the
* background color of the first layer except where the second * background color of the first layer except where the second
...@@ -2892,7 +2892,7 @@ typedef VdpStatus VdpDecoderRender( ...@@ -2892,7 +2892,7 @@ typedef VdpStatus VdpDecoderRender(
* output rectangle is outside of the output rectangle, those * output rectangle is outside of the output rectangle, those
* portions will be clipped. * portions will be clipped.
* *
* - The third layer contains some number of auxiliary layers * - The third layer contains some number of auxiliary layers
* (in the form of \ref VdpOutputSurface "VdpOutputSurface"s) * (in the form of \ref VdpOutputSurface "VdpOutputSurface"s)
* which will be composited using the alpha value from the * which will be composited using the alpha value from the
* those surfaces. The compositing operations are equivalent * those surfaces. The compositing operations are equivalent
...@@ -2905,28 +2905,28 @@ typedef VdpStatus VdpDecoderRender( ...@@ -2905,28 +2905,28 @@ typedef VdpStatus VdpDecoderRender(
*/ */
/** /**
* \brief A VdpVideoMixer feature that must be requested at * \brief A VdpVideoMixer feature that must be requested at
* creation time to be used. * creation time to be used.
* *
* Certain advanced VdpVideoMixer features are optional, and the * Certain advanced VdpVideoMixer features are optional, and the
* ability to use those features at all must be requested when * ability to use those features at all must be requested when
* the VdpVideoMixer object is created. Each feature is named via * the VdpVideoMixer object is created. Each feature is named via
* a specific VdpVideoMixerFeature value. * a specific VdpVideoMixerFeature value.
* *
* Once requested, these features are permanently available * Once requested, these features are permanently available
* within that specific VdpVideoMixer object. All features that * within that specific VdpVideoMixer object. All features that
* are not explicitly requested at creation time default to * are not explicitly requested at creation time default to
* being permanently unavailable. * being permanently unavailable.
* *
* Even when requested, all features default to being initially * Even when requested, all features default to being initially
* disabled. However, applications can subsequently enable and * disabled. However, applications can subsequently enable and
* disable features at any time. See \ref * disable features at any time. See \ref
* VdpVideoMixerSetFeatureEnables. * VdpVideoMixerSetFeatureEnables.
* *
* Some features allow configuration of their operation. Each * Some features allow configuration of their operation. Each
* configurable item is an \ref VdpVideoMixerAttribute. These * configurable item is an \ref VdpVideoMixerAttribute. These
* attributes may be manipulated at any time using \ref * attributes may be manipulated at any time using \ref
* VdpVideoMixerSetAttributeValues. * VdpVideoMixerSetAttributeValues.
*/ */
typedef uint32_t VdpVideoMixerFeature; typedef uint32_t VdpVideoMixerFeature;
...@@ -2934,25 +2934,25 @@ typedef uint32_t VdpVideoMixerFeature; ...@@ -2934,25 +2934,25 @@ typedef uint32_t VdpVideoMixerFeature;
* \hideinitializer * \hideinitializer
* \brief A VdpVideoMixerFeature. * \brief A VdpVideoMixerFeature.
* *
* When requested and enabled, motion adaptive temporal * When requested and enabled, motion adaptive temporal
* deinterlacing will be used on interlaced content. * deinterlacing will be used on interlaced content.
* *
* When multiple de-interlacing options are requested and * When multiple de-interlacing options are requested and
* enabled, the back-end implementation chooses the best * enabled, the back-end implementation chooses the best
* algorithm to apply. * algorithm to apply.
*/ */
#define VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL (VdpVideoMixerFeature)0 #define VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL (VdpVideoMixerFeature)0
/** /**
* \hideinitializer * \hideinitializer
* \brief A VdpVideoMixerFeature. * \brief A VdpVideoMixerFeature.
* *
* When requested and enabled, this enables a more advanced * When requested and enabled, this enables a more advanced
* version of temporal de-interlacing, that additionally uses * version of temporal de-interlacing, that additionally uses
* edge-guided spatial interpolation. * edge-guided spatial interpolation.
* *
* When multiple de-interlacing options are requested and * When multiple de-interlacing options are requested and
* enabled, the back-end implementation chooses the best * enabled, the back-end implementation chooses the best
* algorithm to apply. * algorithm to apply.
*/ */
#define VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL_SPATIAL (VdpVideoMixerFeature)1 #define VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL_SPATIAL (VdpVideoMixerFeature)1
/** /**
...@@ -2960,148 +2960,148 @@ typedef uint32_t VdpVideoMixerFeature; ...@@ -2960,148 +2960,148 @@ typedef uint32_t VdpVideoMixerFeature;
* \brief A VdpVideoMixerFeature. * \brief A VdpVideoMixerFeature.
* *
* When requested and enabled, cadence detection will be enabled * When requested and enabled, cadence detection will be enabled
* on interlaced content and the video mixer will try to extract * on interlaced content and the video mixer will try to extract
* progressive frames from pull-down material. * progressive frames from pull-down material.
*/ */
#define VDP_VIDEO_MIXER_FEATURE_INVERSE_TELECINE (VdpVideoMixerFeature)2 #define VDP_VIDEO_MIXER_FEATURE_INVERSE_TELECINE (VdpVideoMixerFeature)2
/** /**
* \hideinitializer * \hideinitializer
* \brief A VdpVideoMixerFeature. * \brief A VdpVideoMixerFeature.
* *
* When requested and enabled, a noise reduction algorithm will * When requested and enabled, a noise reduction algorithm will
* be applied to the video. * be applied to the video.
*/ */
#define VDP_VIDEO_MIXER_FEATURE_NOISE_REDUCTION (VdpVideoMixerFeature)3 #define VDP_VIDEO_MIXER_FEATURE_NOISE_REDUCTION (VdpVideoMixerFeature)3
/** /**
* \hideinitializer * \hideinitializer
* \brief A VdpVideoMixerFeature. * \brief A VdpVideoMixerFeature.
* *
* When requested and enabled, a sharpening algorithm will be * When requested and enabled, a sharpening algorithm will be
* applied to the video. * applied to the video.
*/ */
#define VDP_VIDEO_MIXER_FEATURE_SHARPNESS (VdpVideoMixerFeature)4 #define VDP_VIDEO_MIXER_FEATURE_SHARPNESS (VdpVideoMixerFeature)4
/** /**
* \hideinitializer * \hideinitializer
* \brief A VdpVideoMixerFeature. * \brief A VdpVideoMixerFeature.
* *
* When requested and enabled, the alpha of the rendered * When requested and enabled, the alpha of the rendered
* surface, which is normally set to the alpha of the background * surface, which is normally set to the alpha of the background
* color, will be forced to 0.0 on pixels corresponding to * color, will be forced to 0.0 on pixels corresponding to
* source video surface luminance values in the range specified * source video surface luminance values in the range specified
* by attributes \ref VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA * by attributes \ref VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA
* to \ref VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MAX_LUMA. This * to \ref VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MAX_LUMA. This
* keying is performed after scaling and de-interlacing. * keying is performed after scaling and de-interlacing.
*/ */
#define VDP_VIDEO_MIXER_FEATURE_LUMA_KEY (VdpVideoMixerFeature)5 #define VDP_VIDEO_MIXER_FEATURE_LUMA_KEY (VdpVideoMixerFeature)5
/** /**
* \brief A VdpVideoMixer creation parameter. * \brief A VdpVideoMixer creation parameter.
* *
* When a VdpVideoMixer is created, certain parameters may be * When a VdpVideoMixer is created, certain parameters may be
* supplied. Each parameter is named via a specific * supplied. Each parameter is named via a specific
* VdpVideoMixerParameter value. * VdpVideoMixerParameter value.
* *
* Each parameter has a specific type, and specific default * Each parameter has a specific type, and specific default
* value if not specified at VdpVideoMixer creation time. The * value if not specified at VdpVideoMixer creation time. The
* application may query the legal supported range for some * application may query the legal supported range for some
* parameters. * parameters.
*/ */
typedef uint32_t VdpVideoMixerParameter; typedef uint32_t VdpVideoMixerParameter;
/** /**
* \hideinitializer * \hideinitializer
* \brief The exact width of input video surfaces. * \brief The exact width of input video surfaces.
* *
* This parameter's type is uint32_t. * This parameter's type is uint32_t.
* *
* This parameter defaults to 0 if not specified, which entails * This parameter defaults to 0 if not specified, which entails
* that it must be specified. * that it must be specified.
* *
* The application may query this parameter's supported * The application may query this parameter's supported
* range. * range.
*/ */
#define VDP_VIDEO_MIXER_PARAMETER_VIDEO_SURFACE_WIDTH (VdpVideoMixerParameter)0 #define VDP_VIDEO_MIXER_PARAMETER_VIDEO_SURFACE_WIDTH (VdpVideoMixerParameter)0
/** /**
* \hideinitializer * \hideinitializer
* \brief The exact height of input video surfaces. * \brief The exact height of input video surfaces.
* *
* This parameter's type is uint32_t. * This parameter's type is uint32_t.
* *
* This parameter defaults to 0 if not specified, which entails * This parameter defaults to 0 if not specified, which entails
* that it must be specified. * that it must be specified.
* *
* The application may query this parameter's supported * The application may query this parameter's supported
* range. * range.
*/ */
#define VDP_VIDEO_MIXER_PARAMETER_VIDEO_SURFACE_HEIGHT (VdpVideoMixerParameter)1 #define VDP_VIDEO_MIXER_PARAMETER_VIDEO_SURFACE_HEIGHT (VdpVideoMixerParameter)1
/** /**
* \hideinitializer * \hideinitializer
* \brief The chroma type of the input video surfaces the will * \brief The chroma type of the input video surfaces the will
* process. * process.
* *
* This parameter's type is VdpChromaType. * This parameter's type is VdpChromaType.
* *
* If not specified, this parameter defaults to * If not specified, this parameter defaults to
* VDP_CHROMA_TYPE_420. * VDP_CHROMA_TYPE_420.
* *
* The application may not query this application's supported * The application may not query this application's supported
* range, since it is a potentially disjoint enumeration. * range, since it is a potentially disjoint enumeration.
*/ */
#define VDP_VIDEO_MIXER_PARAMETER_CHROMA_TYPE (VdpVideoMixerParameter)2 #define VDP_VIDEO_MIXER_PARAMETER_CHROMA_TYPE (VdpVideoMixerParameter)2
/** /**
* \hideinitializer * \hideinitializer
* \brief The number of auxiliary layers in the mixer's * \brief The number of auxiliary layers in the mixer's
* compositing model. * compositing model.
* *
* Note that this indicates the maximum number of layers that * Note that this indicates the maximum number of layers that
* may be processed by a given \ref VdpVideoMixer "VdpVideoMixer" * may be processed by a given \ref VdpVideoMixer "VdpVideoMixer"
* object. Each individual \ref VdpVideoMixerRender invocation * object. Each individual \ref VdpVideoMixerRender invocation
* may choose to use a different number of actual layers, from 0 * may choose to use a different number of actual layers, from 0
* up to this limit. * up to this limit.
* *
* This attribute's type is uint32_t. * This attribute's type is uint32_t.
* *
* If not specified, this parameter defaults to 0. * If not specified, this parameter defaults to 0.
* *
* The application may query this parameter's supported * The application may query this parameter's supported
* range. * range.
*/ */
#define VDP_VIDEO_MIXER_PARAMETER_LAYERS (VdpVideoMixerParameter)3 #define VDP_VIDEO_MIXER_PARAMETER_LAYERS (VdpVideoMixerParameter)3
/** /**
* \brief An adjustable attribute of VdpVideoMixer operation. * \brief An adjustable attribute of VdpVideoMixer operation.
* *
* Various attributes of VdpVideoMixer operation may be adjusted * Various attributes of VdpVideoMixer operation may be adjusted
* at any time. Each attribute is named via a specific * at any time. Each attribute is named via a specific
* VdpVideoMixerAttribute value. * VdpVideoMixerAttribute value.
* *
* Each attribute has a specific type, and specific default * Each attribute has a specific type, and specific default
* value if not specified at VdpVideoMixer creation time. The * value if not specified at VdpVideoMixer creation time. The
* application may query the legal supported range for some * application may query the legal supported range for some
* attributes. * attributes.
*/ */
typedef uint32_t VdpVideoMixerAttribute; typedef uint32_t VdpVideoMixerAttribute;
/** /**
* \hideinitializer * \hideinitializer
* \brief The background color in the VdpVideoMixer's compositing * \brief The background color in the VdpVideoMixer's compositing
* model. * model.
* *
* This attribute's type is VdpColor. * This attribute's type is VdpColor.
* *
* This parameter defaults to black (all color components 0.0 * This parameter defaults to black (all color components 0.0
* and alpha 1.0). * and alpha 1.0).
* *
* The application may not query this parameter's supported * The application may not query this parameter's supported
* range, since the type is not scalar. * range, since the type is not scalar.
*/ */
#define VDP_VIDEO_MIXER_ATTRIBUTE_BACKGROUND_COLOR (VdpVideoMixerAttribute)0 #define VDP_VIDEO_MIXER_ATTRIBUTE_BACKGROUND_COLOR (VdpVideoMixerAttribute)0
/** /**
* \hideinitializer * \hideinitializer
* \brief The color-space conversion matrix used by the * \brief The color-space conversion matrix used by the
* VdpVideoMixer. * VdpVideoMixer.
* *
* This attribute's type is \ref VdpCSCMatrix. * This attribute's type is \ref VdpCSCMatrix.
* *
* Note: When using \ref VdpVideoMixerGetAttributeValues to retrieve the * Note: When using \ref VdpVideoMixerGetAttributeValues to retrieve the
* current CSC matrix, the attribute_values array must contain a pointer to * current CSC matrix, the attribute_values array must contain a pointer to
...@@ -3109,7 +3109,7 @@ typedef uint32_t VdpVideoMixerAttribute; ...@@ -3109,7 +3109,7 @@ typedef uint32_t VdpVideoMixerAttribute;
* either initialize the referenced CSC matrix to the current value, *or* * either initialize the referenced CSC matrix to the current value, *or*
* clear the supplied pointer to NULL, if the previous set call supplied a * clear the supplied pointer to NULL, if the previous set call supplied a
* value of NULL in parameter_values, to request the default matrix. * value of NULL in parameter_values, to request the default matrix.
* *
* \code * \code
* VdpCSCMatrix matrix; * VdpCSCMatrix matrix;
* VdpCSCMatrix * matrix_ptr; * VdpCSCMatrix * matrix_ptr;
...@@ -3118,83 +3118,83 @@ typedef uint32_t VdpVideoMixerAttribute; ...@@ -3118,83 +3118,83 @@ typedef uint32_t VdpVideoMixerAttribute;
* \endcode * \endcode
* *
* This parameter defaults to a matrix suitable for ITU-R BT.601 * This parameter defaults to a matrix suitable for ITU-R BT.601
* input surfaces, with no procamp adjustments. * input surfaces, with no procamp adjustments.
* *
* The application may not query this parameter's supported * The application may not query this parameter's supported
* range, since the type is not scalar. * range, since the type is not scalar.
*/ */
#define VDP_VIDEO_MIXER_ATTRIBUTE_CSC_MATRIX (VdpVideoMixerAttribute)1 #define VDP_VIDEO_MIXER_ATTRIBUTE_CSC_MATRIX (VdpVideoMixerAttribute)1
/** /**
* \hideinitializer * \hideinitializer
* \brief The amount of noise reduction algorithm to apply. * \brief The amount of noise reduction algorithm to apply.
* *
* This attribute's type is float. * This attribute's type is float.
* *
* This parameter defaults to 0.0, which equates to no noise * This parameter defaults to 0.0, which equates to no noise
* reduction. * reduction.
* *
* The application may query this parameter's supported range. * The application may query this parameter's supported range.
* However, the range is fixed as 0.0...1.0. * However, the range is fixed as 0.0...1.0.
*/ */
#define VDP_VIDEO_MIXER_ATTRIBUTE_NOISE_REDUCTION_LEVEL (VdpVideoMixerAttribute)2 #define VDP_VIDEO_MIXER_ATTRIBUTE_NOISE_REDUCTION_LEVEL (VdpVideoMixerAttribute)2
/** /**
* \hideinitializer * \hideinitializer
* \brief The amount of sharpening, or blurring, to apply. * \brief The amount of sharpening, or blurring, to apply.
* *
* This attribute's type is float. * This attribute's type is float.
* *
* This parameter defaults to 0.0, which equates to no * This parameter defaults to 0.0, which equates to no
* sharpening. * sharpening.
* *
* Positive values request sharpening. Negative values request * Positive values request sharpening. Negative values request
* blurring. * blurring.
* *
* The application may query this parameter's supported range. * The application may query this parameter's supported range.
* However, the range is fixed as -1.0...1.0. * However, the range is fixed as -1.0...1.0.
*/ */
#define VDP_VIDEO_MIXER_ATTRIBUTE_SHARPNESS_LEVEL (VdpVideoMixerAttribute)3 #define VDP_VIDEO_MIXER_ATTRIBUTE_SHARPNESS_LEVEL (VdpVideoMixerAttribute)3
/** /**
* \hideinitializer * \hideinitializer
* \brief The minimum luma value for the luma key algorithm. * \brief The minimum luma value for the luma key algorithm.
* *
* This attribute's type is float. * This attribute's type is float.
* *
* This parameter defaults to 0.0. * This parameter defaults to 0.0.
* *
* The application may query this parameter's supported range. * The application may query this parameter's supported range.
* However, the range is fixed as 0.0...1.0. * However, the range is fixed as 0.0...1.0.
*/ */
#define VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA (VdpVideoMixerAttribute)4 #define VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MIN_LUMA (VdpVideoMixerAttribute)4
/** /**
* \hideinitializer * \hideinitializer
* \brief The maximum luma value for the luma key algorithm. * \brief The maximum luma value for the luma key algorithm.
* *
* This attribute's type is float. * This attribute's type is float.
* *
* This parameter defaults to 1.0. * This parameter defaults to 1.0.
* *
* The application may query this parameter's supported range. * The application may query this parameter's supported range.
* However, the range is fixed as 0.0...1.0. * However, the range is fixed as 0.0...1.0.
*/ */
#define VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MAX_LUMA (VdpVideoMixerAttribute)5 #define VDP_VIDEO_MIXER_ATTRIBUTE_LUMA_KEY_MAX_LUMA (VdpVideoMixerAttribute)5
/** /**
* \hideinitializer * \hideinitializer
* \brief Whether de-interlacers should operate solely on luma, and bob chroma. * \brief Whether de-interlacers should operate solely on luma, and bob chroma.
* *
* Note: This attribute only affects advanced de-interlacing algorithms, not * Note: This attribute only affects advanced de-interlacing algorithms, not
* bob or weave. * bob or weave.
* *
* This attribute's type is uint8_t. * This attribute's type is uint8_t.
* *
* This parameter defaults to 0. * This parameter defaults to 0.
* *
* The application may query this parameter's supported range. * The application may query this parameter's supported range.
* However, the range is fixed as 0 (no/off) ... 1 (yes/on). * However, the range is fixed as 0 (no/off) ... 1 (yes/on).
*/ */
#define VDP_VIDEO_MIXER_ATTRIBUTE_SKIP_CHROMA_DEINTERLACE (VdpVideoMixerAttribute)6 #define VDP_VIDEO_MIXER_ATTRIBUTE_SKIP_CHROMA_DEINTERLACE (VdpVideoMixerAttribute)6
/** /**
* \brief Query the implementation's support for a specific * \brief Query the implementation's support for a specific
* feature. * feature.
* \param[in] device The device to query. * \param[in] device The device to query.
* \param[in] feature The feature for which support is to be * \param[in] feature The feature for which support is to be
...@@ -3210,12 +3210,12 @@ typedef VdpStatus VdpVideoMixerQueryFeatureSupport( ...@@ -3210,12 +3210,12 @@ typedef VdpStatus VdpVideoMixerQueryFeatureSupport(
); );
/** /**
* \brief Query the implementation's support for a specific * \brief Query the implementation's support for a specific
* parameter. * parameter.
* \param[in] device The device to query. * \param[in] device The device to query.
* \param[in] parameter The parameter for which support is to be * \param[in] parameter The parameter for which support is to be
* queried. * queried.
* \param[out] is_supported Is the specified parameter * \param[out] is_supported Is the specified parameter
* supported? * supported?
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
...@@ -3227,7 +3227,7 @@ typedef VdpStatus VdpVideoMixerQueryParameterSupport( ...@@ -3227,7 +3227,7 @@ typedef VdpStatus VdpVideoMixerQueryParameterSupport(
); );
/** /**
* \brief Query the implementation's support for a specific * \brief Query the implementation's support for a specific
* attribute. * attribute.
* \param[in] device The device to query. * \param[in] device The device to query.
* \param[in] feature The feature for which support is to be * \param[in] feature The feature for which support is to be
...@@ -3243,7 +3243,7 @@ typedef VdpStatus VdpVideoMixerQueryAttributeSupport( ...@@ -3243,7 +3243,7 @@ typedef VdpStatus VdpVideoMixerQueryAttributeSupport(
); );
/** /**
* \brief Query the implementation's supported for a specific * \brief Query the implementation's supported for a specific
* parameter. * parameter.
* \param[in] device The device to query. * \param[in] device The device to query.
* \param[in] parameter The parameter for which support is to be * \param[in] parameter The parameter for which support is to be
...@@ -3261,7 +3261,7 @@ typedef VdpStatus VdpVideoMixerQueryParameterValueRange( ...@@ -3261,7 +3261,7 @@ typedef VdpStatus VdpVideoMixerQueryParameterValueRange(
); );
/** /**
* \brief Query the implementation's supported for a specific * \brief Query the implementation's supported for a specific
* attribute. * attribute.
* \param[in] device The device to query. * \param[in] device The device to query.
* \param[in] attribute The attribute for which support is to be * \param[in] attribute The attribute for which support is to be
...@@ -3285,22 +3285,22 @@ typedef uint32_t VdpVideoMixer; ...@@ -3285,22 +3285,22 @@ typedef uint32_t VdpVideoMixer;
/** /**
* \brief Create a VdpVideoMixer. * \brief Create a VdpVideoMixer.
* \param[in] device The device that will contain the mixer. * \param[in] device The device that will contain the mixer.
* \param[in] feature_count The number of features to request. * \param[in] feature_count The number of features to request.
* \param[in] features The list of features to request. * \param[in] features The list of features to request.
* \param[in] parameter_count The number of parameters to set. * \param[in] parameter_count The number of parameters to set.
* \param[in] parameters The list of parameters to set. * \param[in] parameters The list of parameters to set.
* \param[in] parameter_values The values for the parameters. Note that each * \param[in] parameter_values The values for the parameters. Note that each
* entry in the value array is a pointer to the actual value. In other * entry in the value array is a pointer to the actual value. In other
* words, the values themselves are not cast to "void *" and passed * words, the values themselves are not cast to "void *" and passed
* "inside" the array. * "inside" the array.
* \param[out] mixer The new mixer's handle. * \param[out] mixer The new mixer's handle.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* Initially, all requested features will be disabled. They can * Initially, all requested features will be disabled. They can
* be enabled using \ref VdpVideoMixerSetFeatureEnables. * be enabled using \ref VdpVideoMixerSetFeatureEnables.
* *
* Initially, all attributes will have default values. Values * Initially, all attributes will have default values. Values
* can be changed using \ref VdpVideoMixerSetAttributeValues. * can be changed using \ref VdpVideoMixerSetAttributeValues.
*/ */
typedef VdpStatus VdpVideoMixerCreate( typedef VdpStatus VdpVideoMixerCreate(
...@@ -3319,10 +3319,10 @@ typedef VdpStatus VdpVideoMixerCreate( ...@@ -3319,10 +3319,10 @@ typedef VdpStatus VdpVideoMixerCreate(
/** /**
* \brief Enable or disable features. * \brief Enable or disable features.
* \param[in] mixer The mixer to manipulate. * \param[in] mixer The mixer to manipulate.
* \param[in] feature_count The number of features to * \param[in] feature_count The number of features to
* enable/disable. * enable/disable.
* \param[in] features The list of features to enable/disable. * \param[in] features The list of features to enable/disable.
* \param[in] feature_enables The list of new feature enable * \param[in] feature_enables The list of new feature enable
* values. * values.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
...@@ -3340,7 +3340,7 @@ typedef VdpStatus VdpVideoMixerSetFeatureEnables( ...@@ -3340,7 +3340,7 @@ typedef VdpStatus VdpVideoMixerSetFeatureEnables(
* \param[in] attributes The list of attributes to set. * \param[in] attributes The list of attributes to set.
* \param[in] attribute_values The values for the attributes. Note that each * \param[in] attribute_values The values for the attributes. Note that each
* entry in the value array is a pointer to the actual value. In other * entry in the value array is a pointer to the actual value. In other
* words, the values themselves are not cast to "void *" and passed * words, the values themselves are not cast to "void *" and passed
* "inside" the array. A NULL pointer requests that the default value be * "inside" the array. A NULL pointer requests that the default value be
* set for that attribute. * set for that attribute.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
...@@ -3353,12 +3353,12 @@ typedef VdpStatus VdpVideoMixerSetAttributeValues( ...@@ -3353,12 +3353,12 @@ typedef VdpStatus VdpVideoMixerSetAttributeValues(
); );
/** /**
* \brief Retrieve whether features were requested at creation * \brief Retrieve whether features were requested at creation
* time. * time.
* \param[in] mixer The mixer to query. * \param[in] mixer The mixer to query.
* \param[in] feature_count The number of features to query. * \param[in] feature_count The number of features to query.
* \param[in] features The list of features to query. * \param[in] features The list of features to query.
* \param[out] feature_supported A list of values indicating * \param[out] feature_supported A list of values indicating
* whether the feature was requested, and hence is * whether the feature was requested, and hence is
* available. * available.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
...@@ -3376,7 +3376,7 @@ typedef VdpStatus VdpVideoMixerGetFeatureSupport( ...@@ -3376,7 +3376,7 @@ typedef VdpStatus VdpVideoMixerGetFeatureSupport(
* \param[in] mixer The mixer to manipulate. * \param[in] mixer The mixer to manipulate.
* \param[in] feature_count The number of features to query. * \param[in] feature_count The number of features to query.
* \param[in] features The list of features to query. * \param[in] features The list of features to query.
* \param[out] feature_enabled A list of values indicating * \param[out] feature_enabled A list of values indicating
* whether the feature is enabled. * whether the feature is enabled.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
...@@ -3393,7 +3393,7 @@ typedef VdpStatus VdpVideoMixerGetFeatureEnables( ...@@ -3393,7 +3393,7 @@ typedef VdpStatus VdpVideoMixerGetFeatureEnables(
* \param[in] mixer The mixer to manipulate. * \param[in] mixer The mixer to manipulate.
* \param[in] parameter_count The number of parameters to query. * \param[in] parameter_count The number of parameters to query.
* \param[in] parameters The list of parameters to query. * \param[in] parameters The list of parameters to query.
* \param[out] parameter_values The list of current values for * \param[out] parameter_values The list of current values for
* the parameters. Note that each entry in the value array is a pointer to * the parameters. Note that each entry in the value array is a pointer to
* storage that will receive the actual value. If the attribute's type is * storage that will receive the actual value. If the attribute's type is
* a pointer itself, please closely read the documentation for that * a pointer itself, please closely read the documentation for that
...@@ -3413,7 +3413,7 @@ typedef VdpStatus VdpVideoMixerGetParameterValues( ...@@ -3413,7 +3413,7 @@ typedef VdpStatus VdpVideoMixerGetParameterValues(
* \param[in] mixer The mixer to manipulate. * \param[in] mixer The mixer to manipulate.
* \param[in] attribute_count The number of attributes to query. * \param[in] attribute_count The number of attributes to query.
* \param[in] attributes The list of attributes to query. * \param[in] attributes The list of attributes to query.
* \param[out] attribute_values The list of current values for * \param[out] attribute_values The list of current values for
* the attributes. Note that each entry in the value array is a pointer to * the attributes. Note that each entry in the value array is a pointer to
* storage that will receive the actual value. If the attribute's type is * storage that will receive the actual value. If the attribute's type is
* a pointer itself, please closely read the documentation for that * a pointer itself, please closely read the documentation for that
...@@ -3437,62 +3437,62 @@ typedef VdpStatus VdpVideoMixerDestroy( ...@@ -3437,62 +3437,62 @@ typedef VdpStatus VdpVideoMixerDestroy(
VdpVideoMixer mixer VdpVideoMixer mixer
); );
/** /**
* \hideinitializer * \hideinitializer
* \brief The structure of the picture present in a \ref * \brief The structure of the picture present in a \ref
* VdpVideoSurface "VdpVideoSurface". * VdpVideoSurface "VdpVideoSurface".
*/ */
typedef enum { typedef enum {
/** /**
* The picture is a field, and is the top field of the surface. * The picture is a field, and is the top field of the surface.
*/ */
VDP_VIDEO_MIXER_PICTURE_STRUCTURE_TOP_FIELD, VDP_VIDEO_MIXER_PICTURE_STRUCTURE_TOP_FIELD,
/** /**
* The picture is a field, and is the bottom field of the * The picture is a field, and is the bottom field of the
* surface. * surface.
*/ */
VDP_VIDEO_MIXER_PICTURE_STRUCTURE_BOTTOM_FIELD, VDP_VIDEO_MIXER_PICTURE_STRUCTURE_BOTTOM_FIELD,
/** /**
* The picture is a frame, and hence is the entire surface. * The picture is a frame, and hence is the entire surface.
*/ */
VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME, VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME,
} VdpVideoMixerPictureStructure; } VdpVideoMixerPictureStructure;
#define VDP_LAYER_VERSION 0 #define VDP_LAYER_VERSION 0
/** /**
* \brief Definition of an additional \ref VdpOutputSurface * \brief Definition of an additional \ref VdpOutputSurface
* "VdpOutputSurface" layer in the composting model. * "VdpOutputSurface" layer in the composting model.
*/ */
typedef struct { typedef struct {
/** /**
* This field must be filled with VDP_LAYER_VERSION * This field must be filled with VDP_LAYER_VERSION
*/ */
uint32_t struct_version; uint32_t struct_version;
/** /**
* The surface to composite from. * The surface to composite from.
*/ */
VdpOutputSurface source_surface; VdpOutputSurface source_surface;
/** /**
* The sub-rectangle of the source surface to use. If NULL, the * The sub-rectangle of the source surface to use. If NULL, the
* entire source surface will be used. * entire source surface will be used.
*/ */
VdpRect const * source_rect; VdpRect const * source_rect;
/** /**
* The sub-rectangle of the destination surface to map * The sub-rectangle of the destination surface to map
* this layer into. This rectangle is relative to the entire * this layer into. This rectangle is relative to the entire
* destination surface. This rectangle will be clipped by \ref * destination surface. This rectangle will be clipped by \ref
* VdpVideoMixerRender's \b destination_rect. If NULL, the * VdpVideoMixerRender's \b destination_rect. If NULL, the
* destination rectangle will be sized to match the source * destination rectangle will be sized to match the source
* rectangle, and will be located at the origin. * rectangle, and will be located at the origin.
*/ */
VdpRect const * destination_rect; VdpRect const * destination_rect;
} VdpLayer; } VdpLayer;
/** /**
* \brief Perform a video post-processing and compositing * \brief Perform a video post-processing and compositing
* operation. * operation.
* \param[in] mixer The mixer object that will perform the * \param[in] mixer The mixer object that will perform the
* mixing/rendering operation. * mixing/rendering operation.
* \param[in] background_surface A background image. If set to any value other * \param[in] background_surface A background image. If set to any value other
* than VDP_INVALID_HANDLE, the specific surface will be used instead of * than VDP_INVALID_HANDLE, the specific surface will be used instead of
...@@ -3503,7 +3503,7 @@ typedef struct { ...@@ -3503,7 +3503,7 @@ typedef struct {
* be used as the background layer. The specified region will be * be used as the background layer. The specified region will be
* extracted and scaled to match the size of destination_rect. If NULL, * extracted and scaled to match the size of destination_rect. If NULL,
* the entire background_surface will be used. * the entire background_surface will be used.
* \param[in] current_picture_structure The picture structure of * \param[in] current_picture_structure The picture structure of
* the field/frame to be processed. This field/frame is * the field/frame to be processed. This field/frame is
* presented in the \b video_surface_current parameter. If * presented in the \b video_surface_current parameter. If
* frame, then all \b video_surface_* parameters are * frame, then all \b video_surface_* parameters are
...@@ -3511,7 +3511,7 @@ typedef struct { ...@@ -3511,7 +3511,7 @@ typedef struct {
* video_surface_* parameters are assumed to be fields, * video_surface_* parameters are assumed to be fields,
* with alternating top/bottom-ness derived from * with alternating top/bottom-ness derived from
* video_surface_current. * video_surface_current.
* \param[in] video_surfaces_past_count The number of provided * \param[in] video_surfaces_past_count The number of provided
* fields/frames prior to the current picture. * fields/frames prior to the current picture.
* \param[in] video_surfaces_past The fields/frames prior to the * \param[in] video_surfaces_past The fields/frames prior to the
* current field/frame. Note that array index 0 is the * current field/frame. Note that array index 0 is the
...@@ -3519,24 +3519,24 @@ typedef struct { ...@@ -3519,24 +3519,24 @@ typedef struct {
* field/frame, with increasing array indices used for * field/frame, with increasing array indices used for
* older frames. Unavailable entries may be set to * older frames. Unavailable entries may be set to
* \ref VDP_INVALID_HANDLE. * \ref VDP_INVALID_HANDLE.
* \param[in] video_surface_current The field/frame to be * \param[in] video_surface_current The field/frame to be
* processed. * processed.
* \param[in] video_surfaces_future_count The number of provided * \param[in] video_surfaces_future_count The number of provided
* fields/frames following the current picture. * fields/frames following the current picture.
* \param[in] video_surfaces_future The fields/frames that * \param[in] video_surfaces_future The fields/frames that
* follow the current field/frame. Note that array index 0 * follow the current field/frame. Note that array index 0
* is the field/frame temporally nearest to the current * is the field/frame temporally nearest to the current
* field/frame, with increasing array indices used for * field/frame, with increasing array indices used for
* newer frames. Unavailable entries may be set to \ref * newer frames. Unavailable entries may be set to \ref
* VDP_INVALID_HANDLE. * VDP_INVALID_HANDLE.
* \param[in] video_source_rect The sub-rectangle of the source * \param[in] video_source_rect The sub-rectangle of the source
* video surface to extract and process. If NULL, the * video surface to extract and process. If NULL, the
* entire surface will be used. * entire surface will be used.
* \param[in] destination_surface * \param[in] destination_surface
* \param[in] destination_rect The sub-rectangle of the * \param[in] destination_rect The sub-rectangle of the
* destination surface to modify. Note that rectangle clips * destination surface to modify. Note that rectangle clips
* all other actions. * all other actions.
* \param[in] destination_video_rect The sub-rectangle of the * \param[in] destination_video_rect The sub-rectangle of the
* destination surface that will contain the processed * destination surface that will contain the processed
* video. This rectangle is relative to the entire * video. This rectangle is relative to the entire
* destination surface. This rectangle is clipped by \b * destination surface. This rectangle is clipped by \b
...@@ -3547,10 +3547,10 @@ typedef struct { ...@@ -3547,10 +3547,10 @@ typedef struct {
* composite above the video. * composite above the video.
* \param[in] layers The array of additional layers to composite * \param[in] layers The array of additional layers to composite
* above the video. * above the video.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* For a complete discussion of how to use this API, please see * For a complete discussion of how to use this API, please see
* \ref video_mixer_usage. * \ref video_mixer_usage.
*/ */
typedef VdpStatus VdpVideoMixerRender( typedef VdpStatus VdpVideoMixerRender(
VdpVideoMixer mixer, VdpVideoMixer mixer,
...@@ -3581,42 +3581,42 @@ typedef VdpStatus VdpVideoMixerRender( ...@@ -3581,42 +3581,42 @@ typedef VdpStatus VdpVideoMixerRender(
* the associated timestamp is reached, the surface is displayed * the associated timestamp is reached, the surface is displayed
* to the user. This timestamp-based approach yields high * to the user. This timestamp-based approach yields high
* quality video delivery. * quality video delivery.
* *
* The exact location of the displayed content is Window System * The exact location of the displayed content is Window System
* specific. For this reason, the \ref api_winsys provides an * specific. For this reason, the \ref api_winsys provides an
* API to create a \ref VdpPresentationQueueTarget object (e.g. * API to create a \ref VdpPresentationQueueTarget object (e.g.
* via \ref VdpPresentationQueueTargetCreateX11) which * via \ref VdpPresentationQueueTargetCreateX11) which
* encapsulates this information. * encapsulates this information.
* *
* Note that the presentation queue performs no scaling of * Note that the presentation queue performs no scaling of
* surfaces to match the display target's size, aspect ratio, * surfaces to match the display target's size, aspect ratio,
* etc. * etc.
* *
* Surfaces that are too large to fit into the display target * Surfaces that are too large to fit into the display target
* will be clipped. Surfaces that are too small to fill the * will be clipped. Surfaces that are too small to fill the
* display target will be aligned to the top-left corner of the * display target will be aligned to the top-left corner of the
* display target, with the balance of the display target being * display target, with the balance of the display target being
* filled with a constant configurable "background" color. * filled with a constant configurable "background" color.
* *
* Note that the presentation queue operates in a manner that is * Note that the presentation queue operates in a manner that is
* semantically equivalent to an overlay surface, with any * semantically equivalent to an overlay surface, with any
* required color key painting hidden internally. However, * required color key painting hidden internally. However,
* implementations are free to use whatever semantically * implementations are free to use whatever semantically
* equivalent technique they wish. Note that implementations * equivalent technique they wish. Note that implementations
* that actually use color-keyed overlays will typically use * that actually use color-keyed overlays will typically use
* the "background" color as the overlay color key value, so * the "background" color as the overlay color key value, so
* this color should be chosen with care. * this color should be chosen with care.
* *
* @{ * @{
*/ */
/** /**
* \brief The representation of a point in time. * \brief The representation of a point in time.
* *
* VdpTime timestamps are intended to be a high-precision timing * VdpTime timestamps are intended to be a high-precision timing
* system, potentially independent from any other time domain in * system, potentially independent from any other time domain in
* the system. * the system.
* *
* Time is represented in units of nanoseconds. The origin * Time is represented in units of nanoseconds. The origin
* (i.e. the time represented by a value of 0) is implementation * (i.e. the time represented by a value of 0) is implementation
* dependent. * dependent.
...@@ -3624,12 +3624,12 @@ typedef VdpStatus VdpVideoMixerRender( ...@@ -3624,12 +3624,12 @@ typedef VdpStatus VdpVideoMixerRender(
typedef uint64_t VdpTime; typedef uint64_t VdpTime;
/** /**
* \brief An opaque handle representing the location where * \brief An opaque handle representing the location where
* video will be presented. * video will be presented.
* *
* VdpPresentationQueueTarget are created using a \ref api_winsys * VdpPresentationQueueTarget are created using a \ref api_winsys
* specific API, such as \ref * specific API, such as \ref
* VdpPresentationQueueTargetCreateX11. * VdpPresentationQueueTargetCreateX11.
*/ */
typedef uint32_t VdpPresentationQueueTarget; typedef uint32_t VdpPresentationQueueTarget;
...@@ -3643,18 +3643,18 @@ typedef VdpStatus VdpPresentationQueueTargetDestroy( ...@@ -3643,18 +3643,18 @@ typedef VdpStatus VdpPresentationQueueTargetDestroy(
); );
/** /**
* \brief An opaque handle representing a presentation queue * \brief An opaque handle representing a presentation queue
* object. * object.
*/ */
typedef uint32_t VdpPresentationQueue; typedef uint32_t VdpPresentationQueue;
/** /**
* \brief Create a VdpPresentationQueue. * \brief Create a VdpPresentationQueue.
* \param[in] device The device that will contain the queue. * \param[in] device The device that will contain the queue.
* \param[in] presentation_queue_target The location to display * \param[in] presentation_queue_target The location to display
* the content. * the content.
* \param[out] presentation_queue The new queue's handle. * \param[out] presentation_queue The new queue's handle.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* Note: The initial value for the background color will be set to * Note: The initial value for the background color will be set to
* an implementation-defined value. * an implementation-defined value.
...@@ -3677,9 +3677,9 @@ typedef VdpStatus VdpPresentationQueueDestroy( ...@@ -3677,9 +3677,9 @@ typedef VdpStatus VdpPresentationQueueDestroy(
/** /**
* \brief Configure the background color setting. * \brief Configure the background color setting.
* \param[in] presentation_queue The queue to manipulate. * \param[in] presentation_queue The queue to manipulate.
* \param[in] background_color The new background color. * \param[in] background_color The new background color.
* *
* Note: Implementations may choose whether to apply the * Note: Implementations may choose whether to apply the
* new background color value immediately, or defer it until * new background color value immediately, or defer it until
* the next surface is presented. * the next surface is presented.
...@@ -3691,7 +3691,7 @@ typedef VdpStatus VdpPresentationQueueSetBackgroundColor( ...@@ -3691,7 +3691,7 @@ typedef VdpStatus VdpPresentationQueueSetBackgroundColor(
/** /**
* \brief Retrieve the current background color setting. * \brief Retrieve the current background color setting.
* \param[in] presentation_queue The queue to query. * \param[in] presentation_queue The queue to query.
* \param[out] background_color The current background color. * \param[out] background_color The current background color.
*/ */
typedef VdpStatus VdpPresentationQueueGetBackgroundColor( typedef VdpStatus VdpPresentationQueueGetBackgroundColor(
...@@ -3700,11 +3700,11 @@ typedef VdpStatus VdpPresentationQueueGetBackgroundColor( ...@@ -3700,11 +3700,11 @@ typedef VdpStatus VdpPresentationQueueGetBackgroundColor(
); );
/** /**
* \brief Retrieve the presentation queue's "current" time. * \brief Retrieve the presentation queue's "current" time.
* \param[in] presentation_queue The queue to query. * \param[in] presentation_queue The queue to query.
* \param[out] current_time The current time, which may * \param[out] current_time The current time, which may
* represent a point between display VSYNC events. * represent a point between display VSYNC events.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
typedef VdpStatus VdpPresentationQueueGetTime( typedef VdpStatus VdpPresentationQueueGetTime(
VdpPresentationQueue presentation_queue, VdpPresentationQueue presentation_queue,
...@@ -3722,11 +3722,11 @@ typedef VdpStatus VdpPresentationQueueGetTime( ...@@ -3722,11 +3722,11 @@ typedef VdpStatus VdpPresentationQueueGetTime(
* \param[in] clip_height If set to a non-zero value, the presentation queue * \param[in] clip_height If set to a non-zero value, the presentation queue
* will display only clip_height lines of the surface (anchored to the * will display only clip_height lines of the surface (anchored to the
* top-left corner of the surface. * top-left corner of the surface.
* \param[in] earliest_presentation_time The timestamp * \param[in] earliest_presentation_time The timestamp
* associated with the surface. The presentation queue * associated with the surface. The presentation queue
* will not display the surface until the presentation * will not display the surface until the presentation
* queue's current time is at least this value. * queue's current time is at least this value.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* Applications may choose to allow resizing of the presentation queue target * Applications may choose to allow resizing of the presentation queue target
* (which may be e.g. a regular Window when using an X11-based * (which may be e.g. a regular Window when using an X11-based
...@@ -3743,7 +3743,7 @@ typedef VdpStatus VdpPresentationQueueGetTime( ...@@ -3743,7 +3743,7 @@ typedef VdpStatus VdpPresentationQueueGetTime(
* Using this technique, an application's response to window resizing may * Using this technique, an application's response to window resizing may
* simply be to render to, and display, a different region of the surface, * simply be to render to, and display, a different region of the surface,
* rather than de-/re-allocation of surfaces to match the updated window size. * rather than de-/re-allocation of surfaces to match the updated window size.
*/ */
typedef VdpStatus VdpPresentationQueueDisplay( typedef VdpStatus VdpPresentationQueueDisplay(
VdpPresentationQueue presentation_queue, VdpPresentationQueue presentation_queue,
VdpOutputSurface surface, VdpOutputSurface surface,
...@@ -3755,15 +3755,15 @@ typedef VdpStatus VdpPresentationQueueDisplay( ...@@ -3755,15 +3755,15 @@ typedef VdpStatus VdpPresentationQueueDisplay(
/** /**
* \brief Wait for a surface to finish being displayed. * \brief Wait for a surface to finish being displayed.
* \param[in] presentation_queue The queue to query. * \param[in] presentation_queue The queue to query.
* \param[in] surface The surface to wait for. * \param[in] surface The surface to wait for.
* \param[out] first_presentation_time The timestamp of the * \param[out] first_presentation_time The timestamp of the
* VSYNC at which this surface was first displayed. Note * VSYNC at which this surface was first displayed. Note
* that 0 means the surface was never displayed. * that 0 means the surface was never displayed.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* Note that this API will block indefinitely if queried about * Note that this API will block indefinitely if queried about
* the surface most recently added to a presentation queue, * the surface most recently added to a presentation queue,
* since there is no other surface that could possibly replace * since there is no other surface that could possibly replace
* the queried surface. * the queried surface.
*/ */
typedef VdpStatus VdpPresentationQueueBlockUntilSurfaceIdle( typedef VdpStatus VdpPresentationQueueBlockUntilSurfaceIdle(
...@@ -3773,8 +3773,8 @@ typedef VdpStatus VdpPresentationQueueBlockUntilSurfaceIdle( ...@@ -3773,8 +3773,8 @@ typedef VdpStatus VdpPresentationQueueBlockUntilSurfaceIdle(
VdpTime * first_presentation_time VdpTime * first_presentation_time
); );
/** /**
* \hideinitializer * \hideinitializer
* \brief The status of a surface within a presentation queue. * \brief The status of a surface within a presentation queue.
*/ */
typedef enum { typedef enum {
...@@ -3789,13 +3789,13 @@ typedef enum { ...@@ -3789,13 +3789,13 @@ typedef enum {
/** /**
* \brief Poll the current queue status of a surface. * \brief Poll the current queue status of a surface.
* \param[in] presentation_queue The queue to query. * \param[in] presentation_queue The queue to query.
* \param[in] surface The surface to query. * \param[in] surface The surface to query.
* \param[out] status The current status of the surface within * \param[out] status The current status of the surface within
* the queue. * the queue.
* \param[out] first_presentation_time The timestamp of the * \param[out] first_presentation_time The timestamp of the
* VSYNC at which this surface was first displayed. Note * VSYNC at which this surface was first displayed. Note
* that 0 means the surface was never displayed. * that 0 means the surface was never displayed.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
typedef VdpStatus VdpPresentationQueueQuerySurfaceStatus( typedef VdpStatus VdpPresentationQueueQuerySurfaceStatus(
VdpPresentationQueue presentation_queue, VdpPresentationQueue presentation_queue,
...@@ -3808,56 +3808,56 @@ typedef VdpStatus VdpPresentationQueueQuerySurfaceStatus( ...@@ -3808,56 +3808,56 @@ typedef VdpStatus VdpPresentationQueueQuerySurfaceStatus(
/*@}*/ /*@}*/
/** /**
* \defgroup display_preemption Display Preemption * \defgroup display_preemption Display Preemption
* *
* The Window System may operate within a frame-work (such as * The Window System may operate within a frame-work (such as
* Linux's VT switching) where the display is shared between the * Linux's VT switching) where the display is shared between the
* Window System (e.g. X) and some other output mechanism (e.g. * Window System (e.g. X) and some other output mechanism (e.g.
* the VT.) Given this scenario, the Window System's control of * the VT.) Given this scenario, the Window System's control of
* the display could be preempted, and restored, at any time. * the display could be preempted, and restored, at any time.
* *
* VDPAU does not mandate that implementations hide such * VDPAU does not mandate that implementations hide such
* preemptions from VDPAU client applications; doing so may * preemptions from VDPAU client applications; doing so may
* impose extreme burdens upon VDPAU implementations. Equally, * impose extreme burdens upon VDPAU implementations. Equally,
* however, implementations are free to hide such preemptions * however, implementations are free to hide such preemptions
* from client applications. * from client applications.
* *
* VDPAU allows implementations to inform the client application * VDPAU allows implementations to inform the client application
* when such a preemption has occurred, and then refuse to * when such a preemption has occurred, and then refuse to
* continue further operation. * continue further operation.
* *
* Similarly, some form of fatal hardware error could prevent further * Similarly, some form of fatal hardware error could prevent further
* operation of the VDPAU implementation, without a complete * operation of the VDPAU implementation, without a complete
* re-initialization. * re-initialization.
* *
* The following discusses the behavior of implementations that * The following discusses the behavior of implementations that
* choose not to hide preemption from client applications. * choose not to hide preemption from client applications.
* *
* When preemption occurs, VDPAU internally destroys all * When preemption occurs, VDPAU internally destroys all
* objects; the client application need not do this. However, if * objects; the client application need not do this. However, if
* the client application wishes to continue operation, it must * the client application wishes to continue operation, it must
* recreate all objects that it uses. It is probable that this * recreate all objects that it uses. It is probable that this
* recreation will not succeed until the display ownership is * recreation will not succeed until the display ownership is
* restored to the Window System. * restored to the Window System.
* *
* Once preemption has occurred, all VDPAU entry points will * Once preemption has occurred, all VDPAU entry points will
* return the specific error code \ref * return the specific error code \ref
* VDP_STATUS_DISPLAY_PREEMPTED. * VDP_STATUS_DISPLAY_PREEMPTED.
* *
* VDPAU client applications may also be notified of such * VDPAU client applications may also be notified of such
* preemptions and fatal errors via a callback. See \ref * preemptions and fatal errors via a callback. See \ref
* VdpPreemptionCallbackRegister for more details. * VdpPreemptionCallbackRegister for more details.
* *
* @{ * @{
*/ */
/** /**
* \brief A callback to notify the client application that a * \brief A callback to notify the client application that a
* device's display has been preempted. * device's display has been preempted.
* \param[in] device The device that had its display preempted. * \param[in] device The device that had its display preempted.
* \param[in] context The client-supplied callback context * \param[in] context The client-supplied callback context
* information. * information.
* \return void No return value * \return void No return value
*/ */
typedef void VdpPreemptionCallback( typedef void VdpPreemptionCallback(
VdpDevice device, VdpDevice device,
...@@ -3866,13 +3866,13 @@ typedef void VdpPreemptionCallback( ...@@ -3866,13 +3866,13 @@ typedef void VdpPreemptionCallback(
/** /**
* \brief Configure the display preemption callback. * \brief Configure the display preemption callback.
* \param[in] device The device to be monitored for preemption. * \param[in] device The device to be monitored for preemption.
* \param[in] callback The client application's callback * \param[in] callback The client application's callback
* function. If NULL, the callback is unregistered. * function. If NULL, the callback is unregistered.
* \param[in] context The client-supplied callback context * \param[in] context The client-supplied callback context
* information. This information will be passed to the * information. This information will be passed to the
* callback function if/when invoked. * callback function if/when invoked.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
typedef VdpStatus VdpPreemptionCallbackRegister( typedef VdpStatus VdpPreemptionCallbackRegister(
VdpDevice device, VdpDevice device,
...@@ -3884,19 +3884,19 @@ typedef VdpStatus VdpPreemptionCallbackRegister( ...@@ -3884,19 +3884,19 @@ typedef VdpStatus VdpPreemptionCallbackRegister(
/** /**
* \defgroup get_proc_address Entry Point Retrieval * \defgroup get_proc_address Entry Point Retrieval
* *
* In order to facilitate multiple implementations of VDPAU * In order to facilitate multiple implementations of VDPAU
* co-existing within a single process, all functionality is * co-existing within a single process, all functionality is
* available via function pointers. The mechanism to retrieve * available via function pointers. The mechanism to retrieve
* those function pointers is described below. * those function pointers is described below.
* *
* @{ * @{
*/ */
/** /**
* \brief A type suitable for \ref VdpGetProcAddress * \brief A type suitable for \ref VdpGetProcAddress
* "VdpGetProcAddress"'s \b function_id parameter. * "VdpGetProcAddress"'s \b function_id parameter.
*/ */
typedef uint32_t VdpFuncId; typedef uint32_t VdpFuncId;
/** \hideinitializer */ /** \hideinitializer */
...@@ -4024,14 +4024,14 @@ typedef uint32_t VdpFuncId; ...@@ -4024,14 +4024,14 @@ typedef uint32_t VdpFuncId;
#define VDP_FUNC_ID_BASE_WINSYS 0x1000 #define VDP_FUNC_ID_BASE_WINSYS 0x1000
/** /**
* \brief Retrieve a VDPAU function pointer. * \brief Retrieve a VDPAU function pointer.
* \param[in] device The device that the function will operate * \param[in] device The device that the function will operate
* against. * against.
* \param[in] function_id The specific function to retrieve. * \param[in] function_id The specific function to retrieve.
* \param[out] function_pointer The actual pointer for the * \param[out] function_pointer The actual pointer for the
* application to call. * application to call.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
typedef VdpStatus VdpGetProcAddress( typedef VdpStatus VdpGetProcAddress(
VdpDevice device, VdpDevice device,
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* This copyright notice applies to this header file: * This copyright notice applies to this header file:
* *
* Copyright (c) 2008 NVIDIA Corporation * Copyright (c) 2008 NVIDIA Corporation
* *
* Permission is hereby granted, free of charge, to any person * Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation * obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without * files (the "Software"), to deal in the Software without
...@@ -33,11 +33,11 @@ ...@@ -33,11 +33,11 @@
/** /**
* \file vdpau_x11.h * \file vdpau_x11.h
* \brief X11 Window System Integration Layer * \brief X11 Window System Integration Layer
* *
* This file contains the \ref api_winsys_x11 "X11 Window System * This file contains the \ref api_winsys_x11 "X11 Window System
* Integration Layer". * Integration Layer".
*/ */
#ifndef _VDPAU_X11_H #ifndef _VDPAU_X11_H
#define _VDPAU_X11_H #define _VDPAU_X11_H
...@@ -49,74 +49,74 @@ extern "C" { ...@@ -49,74 +49,74 @@ extern "C" {
#endif #endif
/** /**
* \ingroup api_winsys * \ingroup api_winsys
* @{ * @{
*/ */
/** /**
* \defgroup api_winsys_x11 X11 Window System Integration Layer * \defgroup api_winsys_x11 X11 Window System Integration Layer
* *
* The set of VDPAU functionality specific to usage with the X * The set of VDPAU functionality specific to usage with the X
* Window System. * Window System.
* *
* \section Driver Library Layout * \section Driver Library Layout
* *
* An X11-oriented VDPAU installation consists of the following * An X11-oriented VDPAU installation consists of the following
* components: * components:
* *
* - Header files. These files are located in the standard * - Header files. These files are located in the standard
* system header file path. * system header file path.
* - \c vdpau/vdpau.h * - \c vdpau/vdpau.h
* - \c vdpau/vdpau_x11.h * - \c vdpau/vdpau_x11.h
* - The VDPAU wrapper library. These files are located in the * - The VDPAU wrapper library. These files are located in the
* standard system (possibly X11-specific) library path. * standard system (possibly X11-specific) library path.
* - \c libvdpau.so.1 (runtime) * - \c libvdpau.so.1 (runtime)
* - \c libvdpau.so (development) * - \c libvdpau.so (development)
* - Back-end driver files. These files are located in the * - Back-end driver files. These files are located in the
* standard system (possibly X11-specific) library path. * standard system (possibly X11-specific) library path.
* - \c libvdpau_\%s.so * - \c libvdpau_\%s.so
* For example: * For example:
* - \c libvdpau_nvidia.so * - \c libvdpau_nvidia.so
* - \c libvdpau_intel.so * - \c libvdpau_intel.so
* - \c libvdpau_ati.so * - \c libvdpau_ati.so
* *
* The VDPAU wrapper library implements just one function; \ref * The VDPAU wrapper library implements just one function; \ref
* vdp_device_create_x11. The wrapper will implement this function * vdp_device_create_x11. The wrapper will implement this function
* by dynamically loading the appropriate back-end driver file * by dynamically loading the appropriate back-end driver file
* mentioned above. Long-term, the wrapper will use a * mentioned above. Long-term, the wrapper will use a
* VDPAU-specific X extension to determine which back-end driver * VDPAU-specific X extension to determine which back-end driver
* to load. Currently, the wrapper library hard-codes the driver * to load. Currently, the wrapper library hard-codes the driver
* name as "nvidia", although this can be overridden using the * name as "nvidia", although this can be overridden using the
* environment variable VDPAU_DRIVER. * environment variable VDPAU_DRIVER.
* *
* The back-end driver is expected to implement a function named * The back-end driver is expected to implement a function named
* \b vdp_imp_device_create_x11. The wrapper will call this function to * \b vdp_imp_device_create_x11. The wrapper will call this function to
* actually implement the \ref vdp_device_create_x11 application call. * actually implement the \ref vdp_device_create_x11 application call.
* *
* Note that it is theoretically possible for an application to * Note that it is theoretically possible for an application to
* create multiple \ref VdpDevice "VdpDevice" objects. In this * create multiple \ref VdpDevice "VdpDevice" objects. In this
* case, the wrapper library may load multiple back-end drivers * case, the wrapper library may load multiple back-end drivers
* into the same application, and/or invoke a specific back-end * into the same application, and/or invoke a specific back-end
* driver's \b VdpImpDeviceCreateX11 multiple times. The wrapper * driver's \b VdpImpDeviceCreateX11 multiple times. The wrapper
* libray imposes no policy regarding whether the application * libray imposes no policy regarding whether the application
* may instantiate multiple \ref VdpDevice "VdpDevice" objects for * may instantiate multiple \ref VdpDevice "VdpDevice" objects for
* the same display and/or screen. However, back-end drivers are * the same display and/or screen. However, back-end drivers are
* free to limit the number of \ref VdpDevice "VdpDevice" objects * free to limit the number of \ref VdpDevice "VdpDevice" objects
* as required by their implementation. * as required by their implementation.
* *
* @{ * @{
*/ */
/** /**
* \brief Create a VdpDevice object for use with X11. * \brief Create a VdpDevice object for use with X11.
* \param[in] display The X Display that the VdpDevice VdpDevice * \param[in] display The X Display that the VdpDevice VdpDevice
* will operate against. * will operate against.
* \param[in] screen The X screen that the VdpDevice will operate * \param[in] screen The X screen that the VdpDevice will operate
* against. * against.
* \param[out] device The new device's handle. * \param[out] device The new device's handle.
* \param[out] get_proc_address The get_proc_address entry point * \param[out] get_proc_address The get_proc_address entry point
* to use with this device. * to use with this device.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
*/ */
typedef VdpStatus VdpDeviceCreateX11( typedef VdpStatus VdpDeviceCreateX11(
Display * display, Display * display,
...@@ -126,21 +126,21 @@ typedef VdpStatus VdpDeviceCreateX11( ...@@ -126,21 +126,21 @@ typedef VdpStatus VdpDeviceCreateX11(
VdpGetProcAddress * * get_proc_address VdpGetProcAddress * * get_proc_address
); );
/** /**
* \brief Create a VdpDevice object for use with X11. * \brief Create a VdpDevice object for use with X11.
* This is an actual symbol of type \ref VdpDeviceCreateX11 * This is an actual symbol of type \ref VdpDeviceCreateX11
* *
*/ */
VdpDeviceCreateX11 vdp_device_create_x11; VdpDeviceCreateX11 vdp_device_create_x11;
/** /**
* \brief Create a VdpPresentationQueueTarget for use with X11. * \brief Create a VdpPresentationQueueTarget for use with X11.
* \param[in] device The device that will contain the queue * \param[in] device The device that will contain the queue
* target. * target.
* \param[in] drawable The X11 Drawable that the presentation * \param[in] drawable The X11 Drawable that the presentation
* queue will present into. * queue will present into.
* \param[out] target The new queue target's handle. * \param[out] target The new queue target's handle.
* \return VdpStatus The completion status of the operation. * \return VdpStatus The completion status of the operation.
* *
* Note: VDPAU expects to own the entire drawable for the duration of time * Note: VDPAU expects to own the entire drawable for the duration of time
* that the presentation queue target exists. In particular, * that the presentation queue target exists. In particular,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment