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