1 | /* |
2 | * AVCodec public API |
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_CODEC_H |
22 | #define AVCODEC_CODEC_H |
23 | |
24 | #include <stdint.h> |
25 | |
26 | #include "libavutil/avutil.h" |
27 | #include "libavutil/hwcontext.h" |
28 | #include "libavutil/log.h" |
29 | #include "libavutil/pixfmt.h" |
30 | #include "libavutil/rational.h" |
31 | #include "libavutil/samplefmt.h" |
32 | |
33 | #include "libavcodec/codec_id.h" |
34 | #include "libavcodec/version_major.h" |
35 | |
36 | /** |
37 | * @addtogroup lavc_core |
38 | * @{ |
39 | */ |
40 | |
41 | /** |
42 | * Decoder can use draw_horiz_band callback. |
43 | */ |
44 | #define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) |
45 | /** |
46 | * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and |
47 | * supports custom allocators. |
48 | * If not set, it might not use get_buffer() or get_encode_buffer() at all, or |
49 | * use operations that assume the buffer was allocated by |
50 | * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. |
51 | */ |
52 | #define AV_CODEC_CAP_DR1 (1 << 1) |
53 | /** |
54 | * Encoder or decoder requires flushing with NULL input at the end in order to |
55 | * give the complete and correct output. |
56 | * |
57 | * NOTE: If this flag is not set, the codec is guaranteed to never be fed with |
58 | * with NULL data. The user can still send NULL data to the public encode |
59 | * or decode function, but libavcodec will not pass it along to the codec |
60 | * unless this flag is set. |
61 | * |
62 | * Decoders: |
63 | * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, |
64 | * avpkt->size=0 at the end to get the delayed data until the decoder no longer |
65 | * returns frames. |
66 | * |
67 | * Encoders: |
68 | * The encoder needs to be fed with NULL data at the end of encoding until the |
69 | * encoder no longer returns data. |
70 | * |
71 | * NOTE: For encoders implementing the AVCodec.encode2() function, setting this |
72 | * flag also means that the encoder must set the pts and duration for |
73 | * each output packet. If this flag is not set, the pts and duration will |
74 | * be determined by libavcodec from the input frame. |
75 | */ |
76 | #define AV_CODEC_CAP_DELAY (1 << 5) |
77 | /** |
78 | * Codec can be fed a final frame with a smaller size. |
79 | * This can be used to prevent truncation of the last audio samples. |
80 | */ |
81 | #define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) |
82 | |
83 | #if FF_API_SUBFRAMES |
84 | /** |
85 | * Codec can output multiple frames per AVPacket |
86 | * Normally demuxers return one frame at a time, demuxers which do not do |
87 | * are connected to a parser to split what they return into proper frames. |
88 | * This flag is reserved to the very rare category of codecs which have a |
89 | * bitstream that cannot be split into frames without timeconsuming |
90 | * operations like full decoding. Demuxers carrying such bitstreams thus |
91 | * may return multiple frames in a packet. This has many disadvantages like |
92 | * prohibiting stream copy in many cases thus it should only be considered |
93 | * as a last resort. |
94 | */ |
95 | #define AV_CODEC_CAP_SUBFRAMES (1 << 8) |
96 | #endif |
97 | |
98 | /** |
99 | * Codec is experimental and is thus avoided in favor of non experimental |
100 | * encoders |
101 | */ |
102 | #define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) |
103 | /** |
104 | * Codec should fill in channel configuration and samplerate instead of container |
105 | */ |
106 | #define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) |
107 | /** |
108 | * Codec supports frame-level multithreading. |
109 | */ |
110 | #define AV_CODEC_CAP_FRAME_THREADS (1 << 12) |
111 | /** |
112 | * Codec supports slice-based (or partition-based) multithreading. |
113 | */ |
114 | #define AV_CODEC_CAP_SLICE_THREADS (1 << 13) |
115 | /** |
116 | * Codec supports changed parameters at any point. |
117 | */ |
118 | #define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) |
119 | /** |
120 | * Codec supports multithreading through a method other than slice- or |
121 | * frame-level multithreading. Typically this marks wrappers around |
122 | * multithreading-capable external libraries. |
123 | */ |
124 | #define AV_CODEC_CAP_OTHER_THREADS (1 << 15) |
125 | /** |
126 | * Audio encoder supports receiving a different number of samples in each call. |
127 | */ |
128 | #define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) |
129 | /** |
130 | * Decoder is not a preferred choice for probing. |
131 | * This indicates that the decoder is not a good choice for probing. |
132 | * It could for example be an expensive to spin up hardware decoder, |
133 | * or it could simply not provide a lot of useful information about |
134 | * the stream. |
135 | * A decoder marked with this flag should only be used as last resort |
136 | * choice for probing. |
137 | */ |
138 | #define AV_CODEC_CAP_AVOID_PROBING (1 << 17) |
139 | |
140 | /** |
141 | * Codec is backed by a hardware implementation. Typically used to |
142 | * identify a non-hwaccel hardware decoder. For information about hwaccels, use |
143 | * avcodec_get_hw_config() instead. |
144 | */ |
145 | #define AV_CODEC_CAP_HARDWARE (1 << 18) |
146 | |
147 | /** |
148 | * Codec is potentially backed by a hardware implementation, but not |
149 | * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the |
150 | * implementation provides some sort of internal fallback. |
151 | */ |
152 | #define AV_CODEC_CAP_HYBRID (1 << 19) |
153 | |
154 | /** |
155 | * This encoder can reorder user opaque values from input AVFrames and return |
156 | * them with corresponding output packets. |
157 | * @see AV_CODEC_FLAG_COPY_OPAQUE |
158 | */ |
159 | #define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) |
160 | |
161 | /** |
162 | * This encoder can be flushed using avcodec_flush_buffers(). If this flag is |
163 | * not set, the encoder must be closed and reopened to ensure that no frames |
164 | * remain pending. |
165 | */ |
166 | #define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) |
167 | |
168 | /** |
169 | * The encoder is able to output reconstructed frame data, i.e. raw frames that |
170 | * would be produced by decoding the encoded bitstream. |
171 | * |
172 | * Reconstructed frame output is enabled by the AV_CODEC_FLAG_RECON_FRAME flag. |
173 | */ |
174 | #define AV_CODEC_CAP_ENCODER_RECON_FRAME (1 << 22) |
175 | |
176 | /** |
177 | * AVProfile. |
178 | */ |
179 | typedef struct AVProfile { |
180 | int profile; |
181 | const char *name; ///< short name for the profile |
182 | } AVProfile; |
183 | |
184 | /** |
185 | * AVCodec. |
186 | */ |
187 | typedef struct AVCodec { |
188 | /** |
189 | * Name of the codec implementation. |
190 | * The name is globally unique among encoders and among decoders (but an |
191 | * encoder and a decoder can share the same name). |
192 | * This is the primary way to find a codec from the user perspective. |
193 | */ |
194 | const char *name; |
195 | /** |
196 | * Descriptive name for the codec, meant to be more human readable than name. |
197 | * You should use the NULL_IF_CONFIG_SMALL() macro to define it. |
198 | */ |
199 | const char *long_name; |
200 | enum AVMediaType type; |
201 | enum AVCodecID id; |
202 | /** |
203 | * Codec capabilities. |
204 | * see AV_CODEC_CAP_* |
205 | */ |
206 | int capabilities; |
207 | uint8_t max_lowres; ///< maximum value for lowres supported by the decoder |
208 | const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} |
209 | const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 |
210 | const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 |
211 | const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 |
212 | const AVClass *priv_class; ///< AVClass for the private context |
213 | const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {AV_PROFILE_UNKNOWN} |
214 | |
215 | /** |
216 | * Group name of the codec implementation. |
217 | * This is a short symbolic name of the wrapper backing this codec. A |
218 | * wrapper uses some kind of external implementation for the codec, such |
219 | * as an external library, or a codec implementation provided by the OS or |
220 | * the hardware. |
221 | * If this field is NULL, this is a builtin, libavcodec native codec. |
222 | * If non-NULL, this will be the suffix in AVCodec.name in most cases |
223 | * (usually AVCodec.name will be of the form "<codec_name>_<wrapper_name>"). |
224 | */ |
225 | const char *wrapper_name; |
226 | |
227 | /** |
228 | * Array of supported channel layouts, terminated with a zeroed layout. |
229 | */ |
230 | const AVChannelLayout *ch_layouts; |
231 | } AVCodec; |
232 | |
233 | /** |
234 | * Iterate over all registered codecs. |
235 | * |
236 | * @param opaque a pointer where libavcodec will store the iteration state. Must |
237 | * point to NULL to start the iteration. |
238 | * |
239 | * @return the next registered codec or NULL when the iteration is |
240 | * finished |
241 | */ |
242 | const AVCodec *av_codec_iterate(void **opaque); |
243 | |
244 | /** |
245 | * Find a registered decoder with a matching codec ID. |
246 | * |
247 | * @param id AVCodecID of the requested decoder |
248 | * @return A decoder if one was found, NULL otherwise. |
249 | */ |
250 | const AVCodec *avcodec_find_decoder(enum AVCodecID id); |
251 | |
252 | /** |
253 | * Find a registered decoder with the specified name. |
254 | * |
255 | * @param name name of the requested decoder |
256 | * @return A decoder if one was found, NULL otherwise. |
257 | */ |
258 | const AVCodec *avcodec_find_decoder_by_name(const char *name); |
259 | |
260 | /** |
261 | * Find a registered encoder with a matching codec ID. |
262 | * |
263 | * @param id AVCodecID of the requested encoder |
264 | * @return An encoder if one was found, NULL otherwise. |
265 | */ |
266 | const AVCodec *avcodec_find_encoder(enum AVCodecID id); |
267 | |
268 | /** |
269 | * Find a registered encoder with the specified name. |
270 | * |
271 | * @param name name of the requested encoder |
272 | * @return An encoder if one was found, NULL otherwise. |
273 | */ |
274 | const AVCodec *avcodec_find_encoder_by_name(const char *name); |
275 | /** |
276 | * @return a non-zero number if codec is an encoder, zero otherwise |
277 | */ |
278 | int av_codec_is_encoder(const AVCodec *codec); |
279 | |
280 | /** |
281 | * @return a non-zero number if codec is a decoder, zero otherwise |
282 | */ |
283 | int av_codec_is_decoder(const AVCodec *codec); |
284 | |
285 | /** |
286 | * Return a name for the specified profile, if available. |
287 | * |
288 | * @param codec the codec that is searched for the given profile |
289 | * @param profile the profile value for which a name is requested |
290 | * @return A name for the profile if found, NULL otherwise. |
291 | */ |
292 | const char *av_get_profile_name(const AVCodec *codec, int profile); |
293 | |
294 | enum { |
295 | /** |
296 | * The codec supports this format via the hw_device_ctx interface. |
297 | * |
298 | * When selecting this format, AVCodecContext.hw_device_ctx should |
299 | * have been set to a device of the specified type before calling |
300 | * avcodec_open2(). |
301 | */ |
302 | AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, |
303 | /** |
304 | * The codec supports this format via the hw_frames_ctx interface. |
305 | * |
306 | * When selecting this format for a decoder, |
307 | * AVCodecContext.hw_frames_ctx should be set to a suitable frames |
308 | * context inside the get_format() callback. The frames context |
309 | * must have been created on a device of the specified type. |
310 | * |
311 | * When selecting this format for an encoder, |
312 | * AVCodecContext.hw_frames_ctx should be set to the context which |
313 | * will be used for the input frames before calling avcodec_open2(). |
314 | */ |
315 | AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, |
316 | /** |
317 | * The codec supports this format by some internal method. |
318 | * |
319 | * This format can be selected without any additional configuration - |
320 | * no device or frames context is required. |
321 | */ |
322 | AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, |
323 | /** |
324 | * The codec supports this format by some ad-hoc method. |
325 | * |
326 | * Additional settings and/or function calls are required. See the |
327 | * codec-specific documentation for details. (Methods requiring |
328 | * this sort of configuration are deprecated and others should be |
329 | * used in preference.) |
330 | */ |
331 | AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, |
332 | }; |
333 | |
334 | typedef struct AVCodecHWConfig { |
335 | /** |
336 | * For decoders, a hardware pixel format which that decoder may be |
337 | * able to decode to if suitable hardware is available. |
338 | * |
339 | * For encoders, a pixel format which the encoder may be able to |
340 | * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel |
341 | * formats supported by the codec. |
342 | */ |
343 | enum AVPixelFormat pix_fmt; |
344 | /** |
345 | * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible |
346 | * setup methods which can be used with this configuration. |
347 | */ |
348 | int methods; |
349 | /** |
350 | * The device type associated with the configuration. |
351 | * |
352 | * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and |
353 | * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. |
354 | */ |
355 | enum AVHWDeviceType device_type; |
356 | } AVCodecHWConfig; |
357 | |
358 | /** |
359 | * Retrieve supported hardware configurations for a codec. |
360 | * |
361 | * Values of index from zero to some maximum return the indexed configuration |
362 | * descriptor; all other values return NULL. If the codec does not support |
363 | * any hardware configurations then it will always return NULL. |
364 | */ |
365 | const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index); |
366 | |
367 | /** |
368 | * @} |
369 | */ |
370 | |
371 | #endif /* AVCODEC_CODEC_H */ |
372 | |