codec.h (12998B)
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 105 * container 106 */ 107 #define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) 108 /** 109 * Codec supports frame-level multithreading. 110 */ 111 #define AV_CODEC_CAP_FRAME_THREADS (1 << 12) 112 /** 113 * Codec supports slice-based (or partition-based) multithreading. 114 */ 115 #define AV_CODEC_CAP_SLICE_THREADS (1 << 13) 116 /** 117 * Codec supports changed parameters at any point. 118 */ 119 #define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) 120 /** 121 * Codec supports multithreading through a method other than slice- or 122 * frame-level multithreading. Typically this marks wrappers around 123 * multithreading-capable external libraries. 124 */ 125 #define AV_CODEC_CAP_OTHER_THREADS (1 << 15) 126 /** 127 * Audio encoder supports receiving a different number of samples in each call. 128 */ 129 #define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) 130 /** 131 * Decoder is not a preferred choice for probing. 132 * This indicates that the decoder is not a good choice for probing. 133 * It could for example be an expensive to spin up hardware decoder, 134 * or it could simply not provide a lot of useful information about 135 * the stream. 136 * A decoder marked with this flag should only be used as last resort 137 * choice for probing. 138 */ 139 #define AV_CODEC_CAP_AVOID_PROBING (1 << 17) 140 141 /** 142 * Codec is backed by a hardware implementation. Typically used to 143 * identify a non-hwaccel hardware decoder. For information about hwaccels, use 144 * avcodec_get_hw_config() instead. 145 */ 146 #define AV_CODEC_CAP_HARDWARE (1 << 18) 147 148 /** 149 * Codec is potentially backed by a hardware implementation, but not 150 * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the 151 * implementation provides some sort of internal fallback. 152 */ 153 #define AV_CODEC_CAP_HYBRID (1 << 19) 154 155 /** 156 * This encoder can reorder user opaque values from input AVFrames and return 157 * them with corresponding output packets. 158 * @see AV_CODEC_FLAG_COPY_OPAQUE 159 */ 160 #define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) 161 162 /** 163 * This encoder can be flushed using avcodec_flush_buffers(). If this flag is 164 * not set, the encoder must be closed and reopened to ensure that no frames 165 * remain pending. 166 */ 167 #define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) 168 169 /** 170 * The encoder is able to output reconstructed frame data, i.e. raw frames that 171 * would be produced by decoding the encoded bitstream. 172 * 173 * Reconstructed frame output is enabled by the AV_CODEC_FLAG_RECON_FRAME flag. 174 */ 175 #define AV_CODEC_CAP_ENCODER_RECON_FRAME (1 << 22) 176 177 /** 178 * AVProfile. 179 */ 180 typedef struct AVProfile { 181 int profile; 182 const char* name; ///< short name for the profile 183 } AVProfile; 184 185 /** 186 * AVCodec. 187 */ 188 typedef struct AVCodec { 189 /** 190 * Name of the codec implementation. 191 * The name is globally unique among encoders and among decoders (but an 192 * encoder and a decoder can share the same name). 193 * This is the primary way to find a codec from the user perspective. 194 */ 195 const char* name; 196 /** 197 * Descriptive name for the codec, meant to be more human readable than name. 198 * You should use the NULL_IF_CONFIG_SMALL() macro to define it. 199 */ 200 const char* long_name; 201 enum AVMediaType type; 202 enum AVCodecID id; 203 /** 204 * Codec capabilities. 205 * see AV_CODEC_CAP_* 206 */ 207 int capabilities; 208 uint8_t max_lowres; ///< maximum value for lowres supported by the decoder 209 const AVRational* 210 supported_framerates; ///< array of supported framerates, or NULL if any, 211 ///< array is terminated by {0,0} 212 const enum AVPixelFormat* 213 pix_fmts; ///< array of supported pixel formats, or NULL if unknown, 214 ///< array is terminated by -1 215 const int* 216 supported_samplerates; ///< array of supported audio samplerates, or NULL 217 ///< if unknown, array is terminated by 0 218 const enum AVSampleFormat* 219 sample_fmts; ///< array of supported sample formats, or NULL if unknown, 220 ///< array is terminated by -1 221 const AVClass* priv_class; ///< AVClass for the private context 222 const AVProfile* 223 profiles; ///< array of recognized profiles, or NULL if unknown, array is 224 ///< terminated by {AV_PROFILE_UNKNOWN} 225 226 /** 227 * Group name of the codec implementation. 228 * This is a short symbolic name of the wrapper backing this codec. A 229 * wrapper uses some kind of external implementation for the codec, such 230 * as an external library, or a codec implementation provided by the OS or 231 * the hardware. 232 * If this field is NULL, this is a builtin, libavcodec native codec. 233 * If non-NULL, this will be the suffix in AVCodec.name in most cases 234 * (usually AVCodec.name will be of the form "<codec_name>_<wrapper_name>"). 235 */ 236 const char* wrapper_name; 237 238 /** 239 * Array of supported channel layouts, terminated with a zeroed layout. 240 */ 241 const AVChannelLayout* ch_layouts; 242 } AVCodec; 243 244 /** 245 * Iterate over all registered codecs. 246 * 247 * @param opaque a pointer where libavcodec will store the iteration state. Must 248 * point to NULL to start the iteration. 249 * 250 * @return the next registered codec or NULL when the iteration is 251 * finished 252 */ 253 const AVCodec* av_codec_iterate(void** opaque); 254 255 /** 256 * Find a registered decoder with a matching codec ID. 257 * 258 * @param id AVCodecID of the requested decoder 259 * @return A decoder if one was found, NULL otherwise. 260 */ 261 const AVCodec* avcodec_find_decoder(enum AVCodecID id); 262 263 /** 264 * Find a registered decoder with the specified name. 265 * 266 * @param name name of the requested decoder 267 * @return A decoder if one was found, NULL otherwise. 268 */ 269 const AVCodec* avcodec_find_decoder_by_name(const char* name); 270 271 /** 272 * Find a registered encoder with a matching codec ID. 273 * 274 * @param id AVCodecID of the requested encoder 275 * @return An encoder if one was found, NULL otherwise. 276 */ 277 const AVCodec* avcodec_find_encoder(enum AVCodecID id); 278 279 /** 280 * Find a registered encoder with the specified name. 281 * 282 * @param name name of the requested encoder 283 * @return An encoder if one was found, NULL otherwise. 284 */ 285 const AVCodec* avcodec_find_encoder_by_name(const char* name); 286 /** 287 * @return a non-zero number if codec is an encoder, zero otherwise 288 */ 289 int av_codec_is_encoder(const AVCodec* codec); 290 291 /** 292 * @return a non-zero number if codec is a decoder, zero otherwise 293 */ 294 int av_codec_is_decoder(const AVCodec* codec); 295 296 /** 297 * Return a name for the specified profile, if available. 298 * 299 * @param codec the codec that is searched for the given profile 300 * @param profile the profile value for which a name is requested 301 * @return A name for the profile if found, NULL otherwise. 302 */ 303 const char* av_get_profile_name(const AVCodec* codec, int profile); 304 305 enum { 306 /** 307 * The codec supports this format via the hw_device_ctx interface. 308 * 309 * When selecting this format, AVCodecContext.hw_device_ctx should 310 * have been set to a device of the specified type before calling 311 * avcodec_open2(). 312 */ 313 AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, 314 /** 315 * The codec supports this format via the hw_frames_ctx interface. 316 * 317 * When selecting this format for a decoder, 318 * AVCodecContext.hw_frames_ctx should be set to a suitable frames 319 * context inside the get_format() callback. The frames context 320 * must have been created on a device of the specified type. 321 * 322 * When selecting this format for an encoder, 323 * AVCodecContext.hw_frames_ctx should be set to the context which 324 * will be used for the input frames before calling avcodec_open2(). 325 */ 326 AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, 327 /** 328 * The codec supports this format by some internal method. 329 * 330 * This format can be selected without any additional configuration - 331 * no device or frames context is required. 332 */ 333 AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, 334 /** 335 * The codec supports this format by some ad-hoc method. 336 * 337 * Additional settings and/or function calls are required. See the 338 * codec-specific documentation for details. (Methods requiring 339 * this sort of configuration are deprecated and others should be 340 * used in preference.) 341 */ 342 AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, 343 }; 344 345 typedef struct AVCodecHWConfig { 346 /** 347 * For decoders, a hardware pixel format which that decoder may be 348 * able to decode to if suitable hardware is available. 349 * 350 * For encoders, a pixel format which the encoder may be able to 351 * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel 352 * formats supported by the codec. 353 */ 354 enum AVPixelFormat pix_fmt; 355 /** 356 * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible 357 * setup methods which can be used with this configuration. 358 */ 359 int methods; 360 /** 361 * The device type associated with the configuration. 362 * 363 * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and 364 * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. 365 */ 366 enum AVHWDeviceType device_type; 367 } AVCodecHWConfig; 368 369 /** 370 * Retrieve supported hardware configurations for a codec. 371 * 372 * Values of index from zero to some maximum return the indexed configuration 373 * descriptor; all other values return NULL. If the codec does not support 374 * any hardware configurations then it will always return NULL. 375 */ 376 const AVCodecHWConfig* avcodec_get_hw_config(const AVCodec* codec, int index); 377 378 /** 379 * @} 380 */ 381 382 #endif /* AVCODEC_CODEC_H */