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