Commit | Line | Data |
---|---|---|
ef4d08ac DB |
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 | ||
af28efa2 DB |
21 | #ifndef AVCODEC_XVMC_H |
22 | #define AVCODEC_XVMC_H | |
699b3f99 | 23 | |
c97dffbc | 24 | #include <X11/extensions/XvMC.h> |
7fade368 | 25 | |
5d6c1110 DB |
26 | #include "avcodec.h" |
27 | ||
eb3b2ef9 | 28 | #if LIBAVCODEC_VERSION_MAJOR < 53 |
c1a5aa29 DB |
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 */ | |
1909fade | 31 | #define AV_XVMC_STATE_OSD_SOURCE 4 /** the surface is needed for subpicture rendering */ |
eb3b2ef9 | 32 | #endif |
4e30fa6e | 33 | #define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct |
e98b4755 | 34 | the number is 1337 speak for the letters IDCT MCo (motion compensation) */ |
117f9234 | 35 | |
f602b044 | 36 | struct xvmc_pix_fmt { |
1909fade | 37 | /** Set by the calling application. |
3fff9d92 IK |
38 | Once set these values are not supposed to be modified. |
39 | */ | |
6785e509 | 40 | //@{ |
058bcd7b | 41 | /** The field contains the special constant value AV_XVMC_ID. |
2f953883 | 42 | It is used as a test that the application correctly uses the API, |
ad0405fc IK |
43 | and that there is no corruption caused by pixel routines. |
44 | - application - set during initialization | |
45 | - libavcodec - unchanged | |
46 | */ | |
47 | int xvmc_id; | |
7fade368 | 48 | |
ad0405fc | 49 | /** Pointer to the block array allocated by XvMCCreateBlocks() |
037f13fe | 50 | it contains differential pixel data (in MoCo mode) |
ad0405fc IK |
51 | or coefficients for IDCT. |
52 | - application - set during initialization | |
53 | - libavcodec - unchanged | |
54 | */ | |
6b6ea1df | 55 | short* data_blocks; |
ad0405fc | 56 | |
df9d2e04 DB |
57 | /** Pointer to the macroblock description array allocated by |
58 | XvMCCreateMacroBlocks(). | |
ad0405fc IK |
59 | - application - set during initialization |
60 | - libavcodec - unchanged | |
61 | */ | |
6b6ea1df | 62 | XvMCMacroBlock* mv_blocks; |
ad0405fc | 63 | |
037f13fe DB |
64 | /** Number of macroblock descriptions that can be stored in the mv_blocks |
65 | array. | |
ad0405fc IK |
66 | - application - set during initialization |
67 | - libavcodec - unchanged | |
68 | */ | |
6b6ea1df | 69 | int total_number_of_mv_blocks; |
ad0405fc | 70 | |
037f13fe | 71 | /** Number of blocks that can be stored at once in the data_blocks array. |
ad0405fc IK |
72 | - application - set during initialization |
73 | - libavcodec - unchanged | |
74 | */ | |
6b6ea1df | 75 | int total_number_of_data_blocks; |
ad0405fc | 76 | |
df9d2e04 DB |
77 | /** Indicates that the hardware would interpret data_blocks as IDCT |
78 | coefficients and perform IDCT on them. | |
ad0405fc IK |
79 | - application - set during initialization |
80 | - libavcodec - unchanged | |
81 | */ | |
82 | int idct; | |
83 | ||
037f13fe DB |
84 | /** In MoCo mode it indicates that intra macroblocks are assumed to be in |
85 | unsigned format; same as the XVMC_INTRA_UNSIGNED flag. | |
ad0405fc IK |
86 | - application - set during initialization |
87 | - libavcodec - unchanged | |
88 | */ | |
89 | int unsigned_intra; | |
90 | ||
058bcd7b | 91 | /** Pointer to the surface allocated by XvMCCreateSurface(). |
037f13fe | 92 | It identifies the frame and its state on the video hardware. |
ad0405fc IK |
93 | - application - set during initialization |
94 | - libavcodec - unchanged | |
95 | */ | |
96 | XvMCSurface* p_surface; | |
6785e509 | 97 | //}@ |
7fade368 | 98 | |
8f66518d | 99 | /** Set by the decoder before calling ff_draw_horiz_band(), |
1909fade | 100 | needed by the XvMCRenderSurface function. */ |
6785e509 | 101 | //@{ |
ad0405fc IK |
102 | /** Pointer to the surface used as past reference |
103 | - application - unchanged | |
104 | - libavcodec - set | |
105 | */ | |
106 | XvMCSurface* p_past_surface; | |
107 | ||
058bcd7b | 108 | /** Pointer to the surface used as future reference |
ad0405fc IK |
109 | - application - unchanged |
110 | - libavcodec - set | |
111 | */ | |
112 | XvMCSurface* p_future_surface; | |
7fade368 | 113 | |
ad0405fc IK |
114 | /** top/bottom field or frame |
115 | - application - unchanged | |
116 | - libavcodec - set | |
117 | */ | |
118 | unsigned int picture_structure; | |
119 | ||
058bcd7b | 120 | /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence |
ad0405fc IK |
121 | - application - unchanged |
122 | - libavcodec - set | |
123 | */ | |
124 | unsigned int flags; | |
6785e509 | 125 | //}@ |
7fade368 | 126 | |
ad0405fc | 127 | /** Offset in the mv array for the current slice. |
037f13fe DB |
128 | Macroblocks described before that offset are assumed to have already |
129 | been passed to the hardware. | |
2f953883 | 130 | - application - zeroes it on get_buffer(). |
8f66518d | 131 | A successful ff_draw_horiz_band() may increment it |
72d38a74 IK |
132 | with filled_mb_block_num or zero both. |
133 | - libavcodec - unchanged | |
134 | */ | |
135 | int start_mv_blocks_num; | |
136 | ||
df9d2e04 DB |
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(). | |
72d38a74 IK |
141 | - libavcodec - increment with one of each stored MB |
142 | */ | |
143 | int filled_mv_blocks_num; | |
144 | ||
df9d2e04 DB |
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 | |
648410c1 | 150 | of coded blocks it contains. |
72d38a74 IK |
151 | */ |
152 | int next_free_data_block_num; | |
115329f1 | 153 | |
05c363e9 | 154 | /** extensions may be placed here */ |
3bffe5fc | 155 | #if LIBAVCODEC_VERSION_MAJOR < 53 |
6785e509 | 156 | //@{ |
1909fade DB |
157 | /** State - used to work around limitations in the MPlayer video system. |
158 | 0 - Surface is not used. | |
df9d2e04 DB |
159 | 1 - Surface is still held in application to be displayed or is |
160 | still visible. | |
1909fade | 161 | 2 - Surface is still held in libavcodec buffer for prediction. |
72d38a74 IK |
162 | */ |
163 | int state; | |
df9d2e04 DB |
164 | |
165 | /** pointer to the surface where the subpicture is rendered */ | |
166 | void* p_osd_target_surface_render; | |
6785e509 | 167 | //}@ |
3bffe5fc | 168 | #endif |
c96da3ed | 169 | }; |
699b3f99 | 170 | |
af28efa2 | 171 | #endif /* AVCODEC_XVMC_H */ |