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

defs.h (12358B)


      1 /*
      2  *
      3  * This file is part of FFmpeg.
      4  *
      5  * FFmpeg is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Lesser General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2.1 of the License, or (at your option) any later version.
      9  *
     10  * FFmpeg is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Lesser General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Lesser General Public
     16  * License along with FFmpeg; if not, write to the Free Software
     17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     18  */
     19 
     20 #ifndef AVCODEC_DEFS_H
     21 #define AVCODEC_DEFS_H
     22 
     23 /**
     24  * @file
     25  * @ingroup libavc
     26  * Misc types and constants that do not belong anywhere else.
     27  */
     28 
     29 #include <stdint.h>
     30 #include <stdlib.h>
     31 
     32 /**
     33  * @ingroup lavc_decoding
     34  * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
     35  * This is mainly needed because some optimized bitstream readers read
     36  * 32 or 64 bit at once and could read over the end.<br>
     37  * Note: If the first 23 bits of the additional bytes are not 0, then damaged
     38  * MPEG bitstreams could cause overread and segfault.
     39  */
     40 #define AV_INPUT_BUFFER_PADDING_SIZE 64
     41 
     42 /**
     43  * Verify checksums embedded in the bitstream (could be of either encoded or
     44  * decoded data, depending on the format) and print an error message on mismatch.
     45  * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
     46  * decoder/demuxer returning an error.
     47  */
     48 #define AV_EF_CRCCHECK       (1<<0)
     49 #define AV_EF_BITSTREAM      (1<<1)   ///< detect bitstream specification deviations
     50 #define AV_EF_BUFFER         (1<<2)   ///< detect improper bitstream length
     51 #define AV_EF_EXPLODE        (1<<3)   ///< abort decoding on minor error detection
     52 
     53 #define AV_EF_IGNORE_ERR     (1<<15)  ///< ignore errors and continue
     54 #define AV_EF_CAREFUL        (1<<16)  ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
     55 #define AV_EF_COMPLIANT      (1<<17)  ///< consider all spec non compliances as errors
     56 #define AV_EF_AGGRESSIVE     (1<<18)  ///< consider things that a sane encoder/muxer should not do as an error
     57 
     58 #define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to an older more strict version of the spec or reference software.
     59 #define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
     60 #define FF_COMPLIANCE_NORMAL        0
     61 #define FF_COMPLIANCE_UNOFFICIAL   -1 ///< Allow unofficial extensions
     62 #define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
     63 
     64 
     65 #define AV_PROFILE_UNKNOWN        -99
     66 #define AV_PROFILE_RESERVED      -100
     67 
     68 #define AV_PROFILE_AAC_MAIN         0
     69 #define AV_PROFILE_AAC_LOW          1
     70 #define AV_PROFILE_AAC_SSR          2
     71 #define AV_PROFILE_AAC_LTP          3
     72 #define AV_PROFILE_AAC_HE           4
     73 #define AV_PROFILE_AAC_HE_V2       28
     74 #define AV_PROFILE_AAC_LD          22
     75 #define AV_PROFILE_AAC_ELD         38
     76 #define AV_PROFILE_MPEG2_AAC_LOW  128
     77 #define AV_PROFILE_MPEG2_AAC_HE   131
     78 
     79 #define AV_PROFILE_DNXHD         0
     80 #define AV_PROFILE_DNXHR_LB      1
     81 #define AV_PROFILE_DNXHR_SQ      2
     82 #define AV_PROFILE_DNXHR_HQ      3
     83 #define AV_PROFILE_DNXHR_HQX     4
     84 #define AV_PROFILE_DNXHR_444     5
     85 
     86 #define AV_PROFILE_DTS                20
     87 #define AV_PROFILE_DTS_ES             30
     88 #define AV_PROFILE_DTS_96_24          40
     89 #define AV_PROFILE_DTS_HD_HRA         50
     90 #define AV_PROFILE_DTS_HD_MA          60
     91 #define AV_PROFILE_DTS_EXPRESS        70
     92 #define AV_PROFILE_DTS_HD_MA_X        61
     93 #define AV_PROFILE_DTS_HD_MA_X_IMAX   62
     94 
     95 #define AV_PROFILE_EAC3_DDP_ATMOS         30
     96 
     97 #define AV_PROFILE_TRUEHD_ATMOS           30
     98 
     99 #define AV_PROFILE_MPEG2_422           0
    100 #define AV_PROFILE_MPEG2_HIGH          1
    101 #define AV_PROFILE_MPEG2_SS            2
    102 #define AV_PROFILE_MPEG2_SNR_SCALABLE  3
    103 #define AV_PROFILE_MPEG2_MAIN          4
    104 #define AV_PROFILE_MPEG2_SIMPLE        5
    105 
    106 #define AV_PROFILE_H264_CONSTRAINED  (1<<9)  // 8+1; constraint_set1_flag
    107 #define AV_PROFILE_H264_INTRA        (1<<11) // 8+3; constraint_set3_flag
    108 
    109 #define AV_PROFILE_H264_BASELINE             66
    110 #define AV_PROFILE_H264_CONSTRAINED_BASELINE (66|AV_PROFILE_H264_CONSTRAINED)
    111 #define AV_PROFILE_H264_MAIN                 77
    112 #define AV_PROFILE_H264_EXTENDED             88
    113 #define AV_PROFILE_H264_HIGH                 100
    114 #define AV_PROFILE_H264_HIGH_10              110
    115 #define AV_PROFILE_H264_HIGH_10_INTRA        (110|AV_PROFILE_H264_INTRA)
    116 #define AV_PROFILE_H264_MULTIVIEW_HIGH       118
    117 #define AV_PROFILE_H264_HIGH_422             122
    118 #define AV_PROFILE_H264_HIGH_422_INTRA       (122|AV_PROFILE_H264_INTRA)
    119 #define AV_PROFILE_H264_STEREO_HIGH          128
    120 #define AV_PROFILE_H264_HIGH_444             144
    121 #define AV_PROFILE_H264_HIGH_444_PREDICTIVE  244
    122 #define AV_PROFILE_H264_HIGH_444_INTRA       (244|AV_PROFILE_H264_INTRA)
    123 #define AV_PROFILE_H264_CAVLC_444            44
    124 
    125 #define AV_PROFILE_VC1_SIMPLE   0
    126 #define AV_PROFILE_VC1_MAIN     1
    127 #define AV_PROFILE_VC1_COMPLEX  2
    128 #define AV_PROFILE_VC1_ADVANCED 3
    129 
    130 #define AV_PROFILE_MPEG4_SIMPLE                     0
    131 #define AV_PROFILE_MPEG4_SIMPLE_SCALABLE            1
    132 #define AV_PROFILE_MPEG4_CORE                       2
    133 #define AV_PROFILE_MPEG4_MAIN                       3
    134 #define AV_PROFILE_MPEG4_N_BIT                      4
    135 #define AV_PROFILE_MPEG4_SCALABLE_TEXTURE           5
    136 #define AV_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION      6
    137 #define AV_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE     7
    138 #define AV_PROFILE_MPEG4_HYBRID                     8
    139 #define AV_PROFILE_MPEG4_ADVANCED_REAL_TIME         9
    140 #define AV_PROFILE_MPEG4_CORE_SCALABLE             10
    141 #define AV_PROFILE_MPEG4_ADVANCED_CODING           11
    142 #define AV_PROFILE_MPEG4_ADVANCED_CORE             12
    143 #define AV_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
    144 #define AV_PROFILE_MPEG4_SIMPLE_STUDIO             14
    145 #define AV_PROFILE_MPEG4_ADVANCED_SIMPLE           15
    146 
    147 #define AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0   1
    148 #define AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1   2
    149 #define AV_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION  32768
    150 #define AV_PROFILE_JPEG2000_DCINEMA_2K              3
    151 #define AV_PROFILE_JPEG2000_DCINEMA_4K              4
    152 
    153 #define AV_PROFILE_VP9_0                            0
    154 #define AV_PROFILE_VP9_1                            1
    155 #define AV_PROFILE_VP9_2                            2
    156 #define AV_PROFILE_VP9_3                            3
    157 
    158 #define AV_PROFILE_HEVC_MAIN                        1
    159 #define AV_PROFILE_HEVC_MAIN_10                     2
    160 #define AV_PROFILE_HEVC_MAIN_STILL_PICTURE          3
    161 #define AV_PROFILE_HEVC_REXT                        4
    162 #define AV_PROFILE_HEVC_SCC                         9
    163 
    164 #define AV_PROFILE_VVC_MAIN_10                      1
    165 #define AV_PROFILE_VVC_MAIN_10_444                 33
    166 
    167 #define AV_PROFILE_AV1_MAIN                         0
    168 #define AV_PROFILE_AV1_HIGH                         1
    169 #define AV_PROFILE_AV1_PROFESSIONAL                 2
    170 
    171 #define AV_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT            0xc0
    172 #define AV_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1
    173 #define AV_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT         0xc2
    174 #define AV_PROFILE_MJPEG_HUFFMAN_LOSSLESS                0xc3
    175 #define AV_PROFILE_MJPEG_JPEG_LS                         0xf7
    176 
    177 #define AV_PROFILE_SBC_MSBC                         1
    178 
    179 #define AV_PROFILE_PRORES_PROXY     0
    180 #define AV_PROFILE_PRORES_LT        1
    181 #define AV_PROFILE_PRORES_STANDARD  2
    182 #define AV_PROFILE_PRORES_HQ        3
    183 #define AV_PROFILE_PRORES_4444      4
    184 #define AV_PROFILE_PRORES_XQ        5
    185 
    186 #define AV_PROFILE_ARIB_PROFILE_A 0
    187 #define AV_PROFILE_ARIB_PROFILE_C 1
    188 
    189 #define AV_PROFILE_KLVA_SYNC  0
    190 #define AV_PROFILE_KLVA_ASYNC 1
    191 
    192 #define AV_PROFILE_EVC_BASELINE             0
    193 #define AV_PROFILE_EVC_MAIN                 1
    194 
    195 
    196 #define AV_LEVEL_UNKNOWN                  -99
    197 
    198 enum AVFieldOrder {
    199     AV_FIELD_UNKNOWN,
    200     AV_FIELD_PROGRESSIVE,
    201     AV_FIELD_TT,          ///< Top coded_first, top displayed first
    202     AV_FIELD_BB,          ///< Bottom coded first, bottom displayed first
    203     AV_FIELD_TB,          ///< Top coded first, bottom displayed first
    204     AV_FIELD_BT,          ///< Bottom coded first, top displayed first
    205 };
    206 
    207 /**
    208  * @ingroup lavc_decoding
    209  */
    210 enum AVDiscard{
    211     /* We leave some space between them for extensions (drop some
    212      * keyframes for intra-only or drop just some bidir frames). */
    213     AVDISCARD_NONE    =-16, ///< discard nothing
    214     AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
    215     AVDISCARD_NONREF  =  8, ///< discard all non reference
    216     AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
    217     AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
    218     AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
    219     AVDISCARD_ALL     = 48, ///< discard all
    220 };
    221 
    222 enum AVAudioServiceType {
    223     AV_AUDIO_SERVICE_TYPE_MAIN              = 0,
    224     AV_AUDIO_SERVICE_TYPE_EFFECTS           = 1,
    225     AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
    226     AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED  = 3,
    227     AV_AUDIO_SERVICE_TYPE_DIALOGUE          = 4,
    228     AV_AUDIO_SERVICE_TYPE_COMMENTARY        = 5,
    229     AV_AUDIO_SERVICE_TYPE_EMERGENCY         = 6,
    230     AV_AUDIO_SERVICE_TYPE_VOICE_OVER        = 7,
    231     AV_AUDIO_SERVICE_TYPE_KARAOKE           = 8,
    232     AV_AUDIO_SERVICE_TYPE_NB                   , ///< Not part of ABI
    233 };
    234 
    235 /**
    236  * Pan Scan area.
    237  * This specifies the area which should be displayed.
    238  * Note there may be multiple such areas for one frame.
    239  */
    240 typedef struct AVPanScan {
    241     /**
    242      * id
    243      * - encoding: Set by user.
    244      * - decoding: Set by libavcodec.
    245      */
    246     int id;
    247 
    248     /**
    249      * width and height in 1/16 pel
    250      * - encoding: Set by user.
    251      * - decoding: Set by libavcodec.
    252      */
    253     int width;
    254     int height;
    255 
    256     /**
    257      * position of the top left corner in 1/16 pel for up to 3 fields/frames
    258      * - encoding: Set by user.
    259      * - decoding: Set by libavcodec.
    260      */
    261     int16_t position[3][2];
    262 } AVPanScan;
    263 
    264 /**
    265  * This structure describes the bitrate properties of an encoded bitstream. It
    266  * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD
    267  * parameters for H.264/HEVC.
    268  */
    269 typedef struct AVCPBProperties {
    270     /**
    271      * Maximum bitrate of the stream, in bits per second.
    272      * Zero if unknown or unspecified.
    273      */
    274     int64_t max_bitrate;
    275     /**
    276      * Minimum bitrate of the stream, in bits per second.
    277      * Zero if unknown or unspecified.
    278      */
    279     int64_t min_bitrate;
    280     /**
    281      * Average bitrate of the stream, in bits per second.
    282      * Zero if unknown or unspecified.
    283      */
    284     int64_t avg_bitrate;
    285 
    286     /**
    287      * The size of the buffer to which the ratecontrol is applied, in bits.
    288      * Zero if unknown or unspecified.
    289      */
    290     int64_t buffer_size;
    291 
    292     /**
    293      * The delay between the time the packet this structure is associated with
    294      * is received and the time when it should be decoded, in periods of a 27MHz
    295      * clock.
    296      *
    297      * UINT64_MAX when unknown or unspecified.
    298      */
    299     uint64_t vbv_delay;
    300 } AVCPBProperties;
    301 
    302 /**
    303  * Allocate a CPB properties structure and initialize its fields to default
    304  * values.
    305  *
    306  * @param size if non-NULL, the size of the allocated struct will be written
    307  *             here. This is useful for embedding it in side data.
    308  *
    309  * @return the newly allocated struct or NULL on failure
    310  */
    311 AVCPBProperties *av_cpb_properties_alloc(size_t *size);
    312 
    313 /**
    314  * This structure supplies correlation between a packet timestamp and a wall clock
    315  * production time. The definition follows the Producer Reference Time ('prft')
    316  * as defined in ISO/IEC 14496-12
    317  */
    318 typedef struct AVProducerReferenceTime {
    319     /**
    320      * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()).
    321      */
    322     int64_t wallclock;
    323     int flags;
    324 } AVProducerReferenceTime;
    325 
    326 /**
    327  * Encode extradata length to a buffer. Used by xiph codecs.
    328  *
    329  * @param s buffer to write to; must be at least (v/255+1) bytes long
    330  * @param v size of extradata in bytes
    331  * @return number of bytes written to the buffer.
    332  */
    333 unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
    334 
    335 #endif // AVCODEC_DEFS_H