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 * @defgroup Decoder VDPAU Decoder and Renderer 29 * 30 * VDPAU hardware acceleration has two modules 31 * - VDPAU decoding 32 * - VDPAU presentation 33 * 34 * The VDPAU decoding module parses all headers using Libav 35 * parsing mechanisms and uses VDPAU for the actual decoding. 36 * 37 * As per the current implementation, the actual decoding 38 * and rendering (API calls) are done as part of the VDPAU 39 * presentation (vo_vdpau.c) module. 40 * 41 * @defgroup VDPAU_Decoding VDPAU Decoding 42 * @ingroup Decoder 43 * @{ 44 */ 45 46#include <vdpau/vdpau.h> 47#include <vdpau/vdpau_x11.h> 48 49/** @brief The videoSurface is used for rendering. */ 50#define FF_VDPAU_STATE_USED_FOR_RENDER 1 51 52/** 53 * @brief The videoSurface is needed for reference/prediction. 54 * The codec manipulates this. 55 */ 56#define FF_VDPAU_STATE_USED_FOR_REFERENCE 2 57 58/** 59 * @brief This structure is used as a callback between the Libav 60 * decoder (vd_) and presentation (vo_) module. 61 * This is used for defining a video frame containing surface, 62 * picture parameter, bitstream information etc which are passed 63 * between the Libav decoder and its clients. 64 */ 65struct vdpau_render_state { 66 VdpVideoSurface surface; ///< Used as rendered surface, never changed. 67 68 int state; ///< Holds FF_VDPAU_STATE_* values. 69 70 /** picture parameter information for all supported codecs */ 71 union VdpPictureInfo { 72 VdpPictureInfoH264 h264; 73 VdpPictureInfoMPEG1Or2 mpeg; 74 VdpPictureInfoVC1 vc1; 75 VdpPictureInfoMPEG4Part2 mpeg4; 76 } info; 77 78 /** Describe size/location of the compressed video data. 79 Set to 0 when freeing bitstream_buffers. */ 80 int bitstream_buffers_allocated; 81 int bitstream_buffers_used; 82 /** The user is responsible for freeing this buffer using av_freep(). */ 83 VdpBitstreamBuffer *bitstream_buffers; 84}; 85 86/* @}*/ 87 88#endif /* AVCODEC_VDPAU_H */ 89