vdpau.h (5365B)
1 /* 2 * The Video Decode and Presentation API for UNIX (VDPAU) is used for 3 * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. 4 * 5 * Copyright (C) 2008 NVIDIA 6 * 7 * This file is part of Libav. 8 * 9 * Libav is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU Lesser General Public 11 * License as published by the Free Software Foundation; either 12 * version 2.1 of the License, or (at your option) any later version. 13 * 14 * Libav is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public 20 * License along with Libav; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 */ 23 24 #ifndef AVCODEC_VDPAU_H 25 #define AVCODEC_VDPAU_H 26 27 /** 28 * @file 29 * @ingroup lavc_codec_hwaccel_vdpau 30 * Public libavcodec VDPAU header. 31 */ 32 33 34 /** 35 * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer 36 * @ingroup lavc_codec_hwaccel 37 * 38 * VDPAU hardware acceleration has two modules 39 * - VDPAU decoding 40 * - VDPAU presentation 41 * 42 * The VDPAU decoding module parses all headers using Libav 43 * parsing mechanisms and uses VDPAU for the actual decoding. 44 * 45 * As per the current implementation, the actual decoding 46 * and rendering (API calls) are done as part of the VDPAU 47 * presentation (vo_vdpau.c) module. 48 * 49 * @{ 50 */ 51 52 #include <vdpau/vdpau.h> 53 #include <vdpau/vdpau_x11.h> 54 55 #include "libavutil/attributes.h" 56 57 #include "avcodec.h" 58 #include "version.h" 59 60 #if FF_API_BUFS_VDPAU 61 union AVVDPAUPictureInfo { 62 VdpPictureInfoH264 h264; 63 VdpPictureInfoMPEG1Or2 mpeg; 64 VdpPictureInfoVC1 vc1; 65 VdpPictureInfoMPEG4Part2 mpeg4; 66 }; 67 #endif 68 69 /** 70 * This structure is used to share data between the libavcodec library and 71 * the client video application. 72 * The user shall zero-allocate the structure and make it available as 73 * AVCodecContext.hwaccel_context. Members can be set by the user once 74 * during initialization or through each AVCodecContext.get_buffer() 75 * function call. In any case, they must be valid prior to calling 76 * decoding functions. 77 * 78 * The size of this structure is not a part of the public ABI and must not 79 * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an 80 * AVVDPAUContext. 81 */ 82 typedef struct AVVDPAUContext { 83 /** 84 * VDPAU decoder handle 85 * 86 * Set by user. 87 */ 88 VdpDecoder decoder; 89 90 /** 91 * VDPAU decoder render callback 92 * 93 * Set by the user. 94 */ 95 VdpDecoderRender *render; 96 97 #if FF_API_BUFS_VDPAU 98 /** 99 * VDPAU picture information 100 * 101 * Set by libavcodec. 102 */ 103 attribute_deprecated 104 union AVVDPAUPictureInfo info; 105 106 /** 107 * Allocated size of the bitstream_buffers table. 108 * 109 * Set by libavcodec. 110 */ 111 attribute_deprecated 112 int bitstream_buffers_allocated; 113 114 /** 115 * Useful bitstream buffers in the bitstream buffers table. 116 * 117 * Set by libavcodec. 118 */ 119 attribute_deprecated 120 int bitstream_buffers_used; 121 122 /** 123 * Table of bitstream buffers. 124 * The user is responsible for freeing this buffer using av_freep(). 125 * 126 * Set by libavcodec. 127 */ 128 attribute_deprecated 129 VdpBitstreamBuffer *bitstream_buffers; 130 #endif 131 } AVVDPAUContext; 132 133 /** 134 * Allocate an AVVDPAUContext. 135 * 136 * @return Newly-allocated AVVDPAUContext or NULL on failure. 137 */ 138 AVVDPAUContext *av_vdpau_alloc_context(void); 139 140 /** 141 * Get a decoder profile that should be used for initializing a VDPAU decoder. 142 * Should be called from the AVCodecContext.get_format() callback. 143 * 144 * @param avctx the codec context being used for decoding the stream 145 * @param profile a pointer into which the result will be written on success. 146 * The contents of profile are undefined if this function returns 147 * an error. 148 * 149 * @return 0 on success (non-negative), a negative AVERROR on failure. 150 */ 151 int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile); 152 153 #if FF_API_CAP_VDPAU 154 /** @brief The videoSurface is used for rendering. */ 155 #define FF_VDPAU_STATE_USED_FOR_RENDER 1 156 157 /** 158 * @brief The videoSurface is needed for reference/prediction. 159 * The codec manipulates this. 160 */ 161 #define FF_VDPAU_STATE_USED_FOR_REFERENCE 2 162 163 /** 164 * @brief This structure is used as a callback between the Libav 165 * decoder (vd_) and presentation (vo_) module. 166 * This is used for defining a video frame containing surface, 167 * picture parameter, bitstream information etc which are passed 168 * between the Libav decoder and its clients. 169 */ 170 struct vdpau_render_state { 171 VdpVideoSurface surface; ///< Used as rendered surface, never changed. 172 173 int state; ///< Holds FF_VDPAU_STATE_* values. 174 175 /** picture parameter information for all supported codecs */ 176 union AVVDPAUPictureInfo info; 177 178 /** Describe size/location of the compressed video data. 179 Set to 0 when freeing bitstream_buffers. */ 180 int bitstream_buffers_allocated; 181 int bitstream_buffers_used; 182 /** The user is responsible for freeing this buffer using av_freep(). */ 183 VdpBitstreamBuffer *bitstream_buffers; 184 }; 185 #endif 186 187 /* @}*/ 188 189 #endif /* AVCODEC_VDPAU_H */