OLD | NEW |
1 /*!\page usage Usage | 1 /*!\page usage Usage |
2 | 2 |
3 The vpx multi-format codec SDK provides a unified interface amongst its | 3 The vpx multi-format codec SDK provides a unified interface amongst its |
4 supported codecs. This abstraction allows applications using this SDK to | 4 supported codecs. This abstraction allows applications using this SDK to |
5 easily support multiple video formats with minimal code duplication or | 5 easily support multiple video formats with minimal code duplication or |
6 "special casing." This section describes the interface common to all codecs. | 6 "special casing." This section describes the interface common to all codecs. |
7 For codec-specific details, see the \ref codecs page. | 7 For codec-specific details, see the \ref codecs page. |
8 | 8 |
9 The following sections are common to all codecs: | 9 The following sections are common to all codecs: |
10 - \ref usage_types | 10 - \ref usage_types |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 | 50 |
51 \section usage_features Features | 51 \section usage_features Features |
52 Several "features" are defined that are optionally implemented by codec | 52 Several "features" are defined that are optionally implemented by codec |
53 algorithms. Indeed, the same algorithm may support different features on | 53 algorithms. Indeed, the same algorithm may support different features on |
54 different platforms. The purpose of defining these features is that when | 54 different platforms. The purpose of defining these features is that when |
55 they are implemented, they conform to a common interface. The features, or | 55 they are implemented, they conform to a common interface. The features, or |
56 capabilities, of an algorithm can be queried from it's interface by using | 56 capabilities, of an algorithm can be queried from it's interface by using |
57 the vpx_codec_get_caps() method. Attempts to invoke features not supported | 57 the vpx_codec_get_caps() method. Attempts to invoke features not supported |
58 by an algorithm will generally result in #VPX_CODEC_INCAPABLE. | 58 by an algorithm will generally result in #VPX_CODEC_INCAPABLE. |
59 | 59 |
60 Currently defined features available in both encoders and decoders include: | |
61 - \subpage usage_xma | |
62 | |
63 \if decoder | 60 \if decoder |
64 Currently defined decoder features include: | 61 Currently defined decoder features include: |
65 - \ref usage_cb | 62 - \ref usage_cb |
66 - \ref usage_postproc | 63 - \ref usage_postproc |
67 \endif | 64 \endif |
68 | 65 |
69 \section usage_init Initialization | 66 \section usage_init Initialization |
70 To initialize a codec instance, the address of the codec context | 67 To initialize a codec instance, the address of the codec context |
71 and interface structures are passed to an initialization function. Depending | 68 and interface structures are passed to an initialization function. Depending |
72 on the \ref usage_features that the codec supports, the codec could be | 69 on the \ref usage_features that the codec supports, the codec could be |
73 initialized in different modes. Most notably, the application may choose to | 70 initialized in different modes. |
74 use \ref usage_xma mode to gain fine grained control over how and where | |
75 memory is allocated for the codec. | |
76 | 71 |
77 To prevent cases of confusion where the ABI of the library changes, | 72 To prevent cases of confusion where the ABI of the library changes, |
78 the ABI is versioned. The ABI version number must be passed at | 73 the ABI is versioned. The ABI version number must be passed at |
79 initialization time to ensure the application is using a header file that | 74 initialization time to ensure the application is using a header file that |
80 matches the library. The current ABI version number is stored in the | 75 matches the library. The current ABI version number is stored in the |
81 preprocessor macros #VPX_CODEC_ABI_VERSION, #VPX_ENCODER_ABI_VERSION, and | 76 preprocessor macros #VPX_CODEC_ABI_VERSION, #VPX_ENCODER_ABI_VERSION, and |
82 #VPX_DECODER_ABI_VERSION. For convenience, each initialization function has | 77 #VPX_DECODER_ABI_VERSION. For convenience, each initialization function has |
83 a wrapper macro that inserts the correct version number. These macros are | 78 a wrapper macro that inserts the correct version number. These macros are |
84 named like the initialization methods, but without the _ver suffix. | 79 named like the initialization methods, but without the _ver suffix. |
85 | 80 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 and the semantics of the call are preserved, as before. | 124 and the semantics of the call are preserved, as before. |
130 | 125 |
131 The special value <code>0</code> is reserved to represent an infinite | 126 The special value <code>0</code> is reserved to represent an infinite |
132 deadline. In this case, the codec will perform as much processing as | 127 deadline. In this case, the codec will perform as much processing as |
133 possible to yield the highest quality frame. | 128 possible to yield the highest quality frame. |
134 | 129 |
135 By convention, the value <code>1</code> is used to mean "return as fast as | 130 By convention, the value <code>1</code> is used to mean "return as fast as |
136 possible." | 131 possible." |
137 | 132 |
138 */ | 133 */ |
139 | |
140 | |
141 /*! \page usage_xma External Memory Allocation | |
142 Applications that wish to have fine grained control over how and where | |
143 decoders allocate memory \ref MAY make use of the eXternal Memory Allocation | |
144 (XMA) interface. Not all codecs support the XMA \ref usage_features. | |
145 | |
146 To use a decoder in XMA mode, the decoder \ref MUST be initialized with the | |
147 vpx_codec_xma_init_ver() function. The amount of memory a decoder needs to | |
148 allocate is heavily dependent on the size of the encoded video frames. The | |
149 size of the video must be known before requesting the decoder's memory map. | |
150 This stream information can be obtained with the vpx_codec_peek_stream_info(
) | |
151 function, which does not require a constructed decoder context. If the exact | |
152 stream is not known, a stream info structure can be created that reflects | |
153 the maximum size that the decoder instance is required to support. | |
154 | |
155 Once the decoder instance has been initialized and the stream information | |
156 determined, the application calls the vpx_codec_get_mem_map() iterator | |
157 repeatedly to get a list of the memory segments requested by the decoder. | |
158 The iterator value should be initialized to NULL to request the first | |
159 element, and the function will return #VPX_CODEC_LIST_END to signal the end
of | |
160 the list. | |
161 | |
162 After each segment is identified, it must be passed to the codec through the | |
163 vpx_codec_set_mem_map() function. Segments \ref MUST be passed in the same | |
164 order as they are returned from vpx_codec_get_mem_map(), but there is no | |
165 requirement that vpx_codec_get_mem_map() must finish iterating before | |
166 vpx_codec_set_mem_map() is called. For instance, some applications may choos
e | |
167 to get a list of all requests, construct an optimal heap, and then set all | |
168 maps at once with one call. Other applications may set one map at a time, | |
169 allocating it immediately after it is returned from vpx_codec_get_mem_map(). | |
170 | |
171 After all segments have been set using vpx_codec_set_mem_map(), the codec ma
y | |
172 be used as it would be in normal internal allocation mode. | |
173 | |
174 \section usage_xma_seg_id Segment Identifiers | |
175 Each requested segment is identified by an identifier unique to | |
176 that decoder type. Some of these identifiers are private, while others are | |
177 enumerated for application use. Identifiers not enumerated publicly are | |
178 subject to change. Identifiers are non-consecutive. | |
179 | |
180 \section usage_xma_seg_szalign Segment Size and Alignment | |
181 The sz (size) and align (alignment) parameters describe the required size | |
182 and alignment of the requested segment. Alignment will always be a power of | |
183 two. Applications \ref MUST honor the alignment requested. Failure to do so | |
184 could result in program crashes or may incur a speed penalty. | |
185 | |
186 \section usage_xma_seg_flags Segment Flags | |
187 The flags member of the segment structure indicates any requirements or | |
188 desires of the codec for the particular segment. The #VPX_CODEC_MEM_ZERO fla
g | |
189 indicates that the segment \ref MUST be zeroed by the application prior to | |
190 passing it to the application. The #VPX_CODEC_MEM_WRONLY flag indicates that | |
191 the segment will only be written into by the decoder, not read. If this flag | |
192 is not set, the application \ref MUST insure that the memory segment is | |
193 readable. On some platforms, framebuffer memory is writable but not | |
194 readable, for example. The #VPX_CODEC_MEM_FAST flag indicates that the segme
nt | |
195 will be frequently accessed, and that it should be placed into fast memory, | |
196 if any is available. The application \ref MAY choose to place other segments | |
197 in fast memory as well, but the most critical segments will be identified by | |
198 this flag. | |
199 | |
200 \section usage_xma_seg_basedtor Segment Base Address and Destructor | |
201 For each requested memory segment, the application must determine the | |
202 address of a memory segment that meets the requirements of the codec. This | |
203 address is set in the <code>base</code> member of the #vpx_codec_mmap | |
204 structure. If the application requires processing when the segment is no | |
205 longer used by the codec (for instance to deallocate it or close an | |
206 associated file descriptor) the <code>dtor</code> and <code>priv</code> | |
207 members can be set. | |
208 */ | |
OLD | NEW |