duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

codec.h (13211B)


      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 */