1 /* 2 * Codec descriptors 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_DESC_H 22 #define AVCODEC_CODEC_DESC_H 23 24 #include "libavutil/avutil.h" 25 26 #include "codec_id.h" 27 28 /** 29 * @addtogroup lavc_core 30 * @{ 31 */ 32 33 /** 34 * This struct describes the properties of a single codec described by an 35 * AVCodecID. 36 * @see avcodec_descriptor_get() 37 */ 38 typedef struct AVCodecDescriptor { 39 enum AVCodecID id; 40 enum AVMediaType type; 41 /** 42 * Name of the codec described by this descriptor. It is non-empty and 43 * unique for each codec descriptor. It should contain alphanumeric 44 * characters and '_' only. 45 */ 46 const char *name; 47 /** 48 * A more descriptive name for this codec. May be NULL. 49 */ 50 const char *long_name; 51 /** 52 * Codec properties, a combination of AV_CODEC_PROP_* flags. 53 */ 54 int props; 55 /** 56 * MIME type(s) associated with the codec. 57 * May be NULL; if not, a NULL-terminated array of MIME types. 58 * The first item is always non-NULL and is the preferred MIME type. 59 */ 60 const char *const *mime_types; 61 /** 62 * If non-NULL, an array of profiles recognized for this codec. 63 * Terminated with FF_PROFILE_UNKNOWN. 64 */ 65 const struct AVProfile *profiles; 66 } AVCodecDescriptor; 67 68 /** 69 * Codec uses only intra compression. 70 * Video and audio codecs only. 71 */ 72 #define AV_CODEC_PROP_INTRA_ONLY (1 << 0) 73 /** 74 * Codec supports lossy compression. Audio and video codecs only. 75 * @note a codec may support both lossy and lossless 76 * compression modes 77 */ 78 #define AV_CODEC_PROP_LOSSY (1 << 1) 79 /** 80 * Codec supports lossless compression. Audio and video codecs only. 81 */ 82 #define AV_CODEC_PROP_LOSSLESS (1 << 2) 83 /** 84 * Codec supports frame reordering. That is, the coded order (the order in which 85 * the encoded packets are output by the encoders / stored / input to the 86 * decoders) may be different from the presentation order of the corresponding 87 * frames. 88 * 89 * For codecs that do not have this property set, PTS and DTS should always be 90 * equal. 91 */ 92 #define AV_CODEC_PROP_REORDER (1 << 3) 93 /** 94 * Subtitle codec is bitmap based 95 * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. 96 */ 97 #define AV_CODEC_PROP_BITMAP_SUB (1 << 16) 98 /** 99 * Subtitle codec is text based. 100 * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. 101 */ 102 #define AV_CODEC_PROP_TEXT_SUB (1 << 17) 103 104 /** 105 * @return descriptor for given codec ID or NULL if no descriptor exists. 106 */ 107 const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id); 108 109 /** 110 * Iterate over all codec descriptors known to libavcodec. 111 * 112 * @param prev previous descriptor. NULL to get the first descriptor. 113 * 114 * @return next descriptor or NULL after the last descriptor 115 */ 116 const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev); 117 118 /** 119 * @return codec descriptor with the given name or NULL if no such descriptor 120 * exists. 121 */ 122 const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name); 123 124 /** 125 * @} 126 */ 127 128 #endif // AVCODEC_CODEC_DESC_H 129