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