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