Mercurial > libavcodec.hg
annotate xvmc.h @ 11352:6e0af2cfdcfe libavcodec
Do MC and IDCT in coding (hilbert) order
This increases the slice size to 64 pixels, due to having to decode an
entire chroma superblock row per slice.
This can be up to 6% slower depending on clip and CPU, but is necessary
for future optimizations that gain significantly more than was lost.
author | conrad |
---|---|
date | Wed, 03 Mar 2010 23:27:40 +0000 |
parents | b3a081ee40a9 |
children | fdafbcef52f5 |
rev | line source |
---|---|
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
1 /* |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
2 * Copyright (C) 2003 Ivan Kalvachev |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
3 * |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
4 * This file is part of FFmpeg. |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
5 * |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
6 * FFmpeg is free software; you can redistribute it and/or |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
8 * License as published by the Free Software Foundation; either |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
9 * version 2.1 of the License, or (at your option) any later version. |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
10 * |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
11 * FFmpeg is distributed in the hope that it will be useful, |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
14 * Lesser General Public License for more details. |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
15 * |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
17 * License along with FFmpeg; if not, write to the Free Software |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
19 */ |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
20 |
8843 | 21 #ifndef AVCODEC_XVMC_H |
22 #define AVCODEC_XVMC_H | |
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
23 |
8851
a8fdc730936d
Replace useless X11 #includes by the one that actually provides the required
diego
parents:
8850
diff
changeset
|
24 #include <X11/extensions/XvMC.h> |
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
25 |
8899
856ed45c4cfa
Add avcodec.h #include so that LIBAVCODEC_VERSION_MAJOR is not undefined.
diego
parents:
8898
diff
changeset
|
26 #include "avcodec.h" |
856ed45c4cfa
Add avcodec.h #include so that LIBAVCODEC_VERSION_MAJOR is not undefined.
diego
parents:
8898
diff
changeset
|
27 |
8908
ac0ad123e3f0
Remove obsolete display_flags member from xvmc struct
iive
parents:
8907
diff
changeset
|
28 #if LIBAVCODEC_VERSION_MAJOR < 53 |
8854 | 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 */ | |
8929 | 31 #define AV_XVMC_STATE_OSD_SOURCE 4 /** the surface is needed for subpicture rendering */ |
8908
ac0ad123e3f0
Remove obsolete display_flags member from xvmc struct
iive
parents:
8907
diff
changeset
|
32 #endif |
8934
a613cd6b6071
Rename AV_XVMC_RENDER_MAGIC constant to AV_XVMC_ID to reflect a similar
diego
parents:
8931
diff
changeset
|
33 #define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct |
8928
ef4e7c8e322a
Explain how AV_XVMC_RENDER_MAGIC got its seemingly arbitrary value.
diego
parents:
8927
diff
changeset
|
34 the number is 1337 speak for the letters IDCT MCo (motion compensation) */ |
8846 | 35 |
8925
23051e3e9d25
Rename xvmc_pixfmt_render structure to xvmc_pix_fmt.
diego
parents:
8924
diff
changeset
|
36 struct xvmc_pix_fmt { |
8935
c1ee9b462f9e
spelling/grammar/wording/whitespace for Doxygen comments
diego
parents:
8934
diff
changeset
|
37 /** The field contains the special constant value AV_XVMC_ID. |
8937 | 38 It is used as a test that the application correctly uses the API, |
8931 | 39 and that there is no corruption caused by pixel routines. |
40 - application - set during initialization | |
41 - libavcodec - unchanged | |
42 */ | |
43 int xvmc_id; | |
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
44 |
8950 | 45 /** Pointer to the block array allocated by XvMCCreateBlocks(). |
8958
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
46 The array has to be freed by XvMCDestroyBlocks(). |
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
47 Each group of 64 values represents one data block of differential |
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
48 pixel information (in MoCo mode) or coefficients for IDCT. |
8950 | 49 - application - set the pointer during initialization |
50 - libavcodec - fills coefficients/pixel data into the array | |
8931 | 51 */ |
8850 | 52 short* data_blocks; |
8931 | 53 |
8939
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
54 /** Pointer to the macroblock description array allocated by |
8950 | 55 XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks(). |
56 - application - set the pointer during initialization | |
57 - libavcodec - fills description data into the array | |
8931 | 58 */ |
8850 | 59 XvMCMacroBlock* mv_blocks; |
8931 | 60 |
8938 | 61 /** Number of macroblock descriptions that can be stored in the mv_blocks |
62 array. | |
8931 | 63 - application - set during initialization |
64 - libavcodec - unchanged | |
65 */ | |
8941 | 66 int allocated_mv_blocks; |
8931 | 67 |
8938 | 68 /** Number of blocks that can be stored at once in the data_blocks array. |
8931 | 69 - application - set during initialization |
70 - libavcodec - unchanged | |
71 */ | |
8941 | 72 int allocated_data_blocks; |
8931 | 73 |
8939
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
74 /** Indicates that the hardware would interpret data_blocks as IDCT |
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
75 coefficients and perform IDCT on them. |
8931 | 76 - application - set during initialization |
77 - libavcodec - unchanged | |
78 */ | |
79 int idct; | |
80 | |
8938 | 81 /** In MoCo mode it indicates that intra macroblocks are assumed to be in |
82 unsigned format; same as the XVMC_INTRA_UNSIGNED flag. | |
8931 | 83 - application - set during initialization |
84 - libavcodec - unchanged | |
85 */ | |
86 int unsigned_intra; | |
87 | |
8935
c1ee9b462f9e
spelling/grammar/wording/whitespace for Doxygen comments
diego
parents:
8934
diff
changeset
|
88 /** Pointer to the surface allocated by XvMCCreateSurface(). |
8958
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
89 It has to be freed by XvMCDestroySurface() on application exit. |
8938 | 90 It identifies the frame and its state on the video hardware. |
8931 | 91 - application - set during initialization |
92 - libavcodec - unchanged | |
93 */ | |
94 XvMCSurface* p_surface; | |
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
95 |
8936 | 96 /** Set by the decoder before calling ff_draw_horiz_band(), |
8929 | 97 needed by the XvMCRenderSurface function. */ |
8852 | 98 //@{ |
8931 | 99 /** Pointer to the surface used as past reference |
100 - application - unchanged | |
101 - libavcodec - set | |
102 */ | |
103 XvMCSurface* p_past_surface; | |
104 | |
8935
c1ee9b462f9e
spelling/grammar/wording/whitespace for Doxygen comments
diego
parents:
8934
diff
changeset
|
105 /** Pointer to the surface used as future reference |
8931 | 106 - application - unchanged |
107 - libavcodec - set | |
108 */ | |
109 XvMCSurface* p_future_surface; | |
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
110 |
8931 | 111 /** top/bottom field or frame |
112 - application - unchanged | |
113 - libavcodec - set | |
114 */ | |
115 unsigned int picture_structure; | |
116 | |
8935
c1ee9b462f9e
spelling/grammar/wording/whitespace for Doxygen comments
diego
parents:
8934
diff
changeset
|
117 /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence |
8931 | 118 - application - unchanged |
119 - libavcodec - set | |
120 */ | |
121 unsigned int flags; | |
8852 | 122 //}@ |
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
123 |
8958
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
124 /** Number of macroblock descriptions in the mv_blocks array |
8950 | 125 that have already been passed to the hardware. |
8937 | 126 - application - zeroes it on get_buffer(). |
8936 | 127 A successful ff_draw_horiz_band() may increment it |
8907
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
128 with filled_mb_block_num or zero both. |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
129 - libavcodec - unchanged |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
130 */ |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
131 int start_mv_blocks_num; |
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
132 |
8958
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
133 /** Number of new macroblock descriptions in the mv_blocks array (after |
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
134 start_mv_blocks_num) that are filled by libavcodec and have to be |
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
135 passed to the hardware. |
8939
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
136 - application - zeroes it on get_buffer() or after successful |
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
137 ff_draw_horiz_band(). |
8907
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
138 - libavcodec - increment with one of each stored MB |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
139 */ |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
140 int filled_mv_blocks_num; |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
141 |
8958
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
142 /** Number of the the next free data block; one data block consists of |
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
143 64 short values in the data_blocks array. |
9165
b3a081ee40a9
Improve description of next_free_data_block_num struct member.
diego
parents:
8958
diff
changeset
|
144 All blocks before this one have already been claimed by placing their |
b3a081ee40a9
Improve description of next_free_data_block_num struct member.
diego
parents:
8958
diff
changeset
|
145 position into the corresponding block description structure field, |
b3a081ee40a9
Improve description of next_free_data_block_num struct member.
diego
parents:
8958
diff
changeset
|
146 that are part of the mv_blocks array. |
8950 | 147 - application - zeroes it on get_buffer(). |
148 A successful ff_draw_horiz_band() may zero it together | |
149 with start_mb_blocks_num. | |
8958
52c002a02f65
spelling/grammar/wording fixes for the Doxygen comments
diego
parents:
8951
diff
changeset
|
150 - libavcodec - each decoded macroblock increases it by the number |
8940 | 151 of coded blocks it contains. |
8907
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
152 */ |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
153 int next_free_data_block_num; |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
154 |
8900 | 155 /** extensions may be placed here */ |
8898 | 156 #if LIBAVCODEC_VERSION_MAJOR < 53 |
8852 | 157 //@{ |
8950 | 158 /** State flags used to work around limitations in the MPlayer video system. |
8929 | 159 0 - Surface is not used. |
8939
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
160 1 - Surface is still held in application to be displayed or is |
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
161 still visible. |
8929 | 162 2 - Surface is still held in libavcodec buffer for prediction. |
8907
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
163 */ |
c9e8aed08d17
Detailed description of the interesting fields in xvmc struct.
iive
parents:
8906
diff
changeset
|
164 int state; |
8939
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
165 |
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
166 /** pointer to the surface where the subpicture is rendered */ |
752780e31cb6
cosmetics: Keep lines below 80 characters where sensibly possible.
diego
parents:
8938
diff
changeset
|
167 void* p_osd_target_surface_render; |
8852 | 168 //}@ |
8898 | 169 #endif |
8808
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
170 }; |
36f2dabd58c9
Rename xvmc_render.h --> xvmc_pixfmt.h and vdpau.h --> vdpau_pixfmt.h as
diego
parents:
diff
changeset
|
171 |
8843 | 172 #endif /* AVCODEC_XVMC_H */ |