]> git.sesse.net Git - ffmpeg/blob - libavcodec/xvmc.h
cosmetics: Keep lines below 80 characters where sensibly possible.
[ffmpeg] / libavcodec / xvmc.h
1 /*
2  * Copyright (C) 2003 Ivan Kalvachev
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20
21 #ifndef AVCODEC_XVMC_H
22 #define AVCODEC_XVMC_H
23
24 #include <X11/extensions/XvMC.h>
25
26 #include "avcodec.h"
27
28 #if LIBAVCODEC_VERSION_MAJOR < 53
29 #define AV_XVMC_STATE_DISPLAY_PENDING          1  /**  the surface should be shown, the video driver manipulates this */
30 #define AV_XVMC_STATE_PREDICTION               2  /**  the surface is needed for prediction, the codec manipulates this */
31 #define AV_XVMC_STATE_OSD_SOURCE               4  /**  the surface is needed for subpicture rendering */
32 #endif
33 #define AV_XVMC_ID                    0x1DC711C0  /**< special value to ensure that regular pixel routines haven't corrupted the struct
34                                                        the number is 1337 speak for the letters IDCT MCo (motion compensation) */
35
36 struct xvmc_pix_fmt {
37 /** Set by the calling application.
38     Once set these values are not supposed to be modified.
39 */
40 //@{
41     /** The field contains the special constant value AV_XVMC_ID.
42         It is used as a test that the application correctly uses the API,
43         and that there is no corruption caused by pixel routines.
44         - application - set during initialization
45         - libavcodec  - unchanged
46     */
47     int             xvmc_id;
48
49     /** Pointer to the block array allocated by XvMCCreateBlocks()
50         it contains differential pixel data (in MoCo mode)
51         or coefficients for IDCT.
52         - application - set during initialization
53         - libavcodec  - unchanged
54     */
55     short*          data_blocks;
56
57     /** Pointer to the macroblock description array allocated by
58         XvMCCreateMacroBlocks().
59         - application - set during initialization
60         - libavcodec  - unchanged
61     */
62     XvMCMacroBlock* mv_blocks;
63
64     /** Number of macroblock descriptions that can be stored in the mv_blocks
65         array.
66         - application - set during initialization
67         - libavcodec  - unchanged
68     */
69     int             total_number_of_mv_blocks;
70
71     /** Number of blocks that can be stored at once in the data_blocks array.
72         - application - set during initialization
73         - libavcodec  - unchanged
74     */
75     int             total_number_of_data_blocks;
76
77     /** Indicates that the hardware would interpret data_blocks as IDCT
78         coefficients and perform IDCT on them.
79         - application - set during initialization
80         - libavcodec  - unchanged
81     */
82     int             idct;
83
84     /** In MoCo mode it indicates that intra macroblocks are assumed to be in
85         unsigned format; same as the XVMC_INTRA_UNSIGNED flag.
86         - application - set during initialization
87         - libavcodec  - unchanged
88     */
89     int             unsigned_intra;
90
91     /** Pointer to the surface allocated by XvMCCreateSurface().
92         It identifies the frame and its state on the video hardware.
93         - application - set during initialization
94         - libavcodec  - unchanged
95     */
96     XvMCSurface*    p_surface;
97 //}@
98
99 /** Set by the decoder before calling ff_draw_horiz_band(),
100     needed by the XvMCRenderSurface function. */
101 //@{
102     /** Pointer to the surface used as past reference
103         - application - unchanged
104         - libavcodec  - set
105     */
106     XvMCSurface*    p_past_surface;
107
108     /** Pointer to the surface used as future reference
109         - application - unchanged
110         - libavcodec  - set
111     */
112     XvMCSurface*    p_future_surface;
113
114     /** top/bottom field or frame
115         - application - unchanged
116         - libavcodec  - set
117     */
118     unsigned int    picture_structure;
119
120     /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence
121         - application - unchanged
122         - libavcodec  - set
123     */
124     unsigned int    flags;
125 //}@
126
127     /** Offset in the mv array for the current slice.
128         Macroblocks described before that offset are assumed to have already
129         been passed to the hardware.
130         - application - zeroes it on get_buffer().
131                         A successful ff_draw_horiz_band() may increment it
132                         with filled_mb_block_num or zero both.
133         - libavcodec  - unchanged
134     */
135     int             start_mv_blocks_num;
136
137     /** Number of mv blocks that are filled by libavcodec and have to be
138         passed to the hardware.
139         - application - zeroes it on get_buffer() or after successful
140                         ff_draw_horiz_band().
141         - libavcodec  - increment with one of each stored MB
142     */
143     int             filled_mv_blocks_num;
144
145     /** Offset to the next free data block. The mv_blocks hold a number
146         pointing to the data blocks.
147         - application - zeroes it on get_buffer() and after successful
148                         ff_draw_horiz_band().
149         - libavcodec  - each macroblock increases it with the number
150                         of coded blocks in it.
151     */
152     int             next_free_data_block_num;
153
154 /** extensions may be placed here */
155 #if LIBAVCODEC_VERSION_MAJOR < 53
156 //@{
157     /** State - used to work around limitations in the MPlayer video system.
158         0   - Surface is not used.
159         1   - Surface is still held in application to be displayed or is
160               still visible.
161         2   - Surface is still held in libavcodec buffer for prediction.
162     */
163     int             state;
164
165     /** pointer to the surface where the subpicture is rendered */
166     void*           p_osd_target_surface_render;
167 //}@
168 #endif
169 };
170
171 #endif /* AVCODEC_XVMC_H */