1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Codec parameters 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_PAR_H
22cabdff1aSopenharmony_ci#define AVCODEC_CODEC_PAR_H
23cabdff1aSopenharmony_ci
24cabdff1aSopenharmony_ci#include <stdint.h>
25cabdff1aSopenharmony_ci
26cabdff1aSopenharmony_ci#include "libavutil/avutil.h"
27cabdff1aSopenharmony_ci#include "libavutil/channel_layout.h"
28cabdff1aSopenharmony_ci#include "libavutil/rational.h"
29cabdff1aSopenharmony_ci#include "libavutil/pixfmt.h"
30cabdff1aSopenharmony_ci
31cabdff1aSopenharmony_ci#include "codec_id.h"
32cabdff1aSopenharmony_ci
33cabdff1aSopenharmony_ci/**
34cabdff1aSopenharmony_ci * @addtogroup lavc_core
35cabdff1aSopenharmony_ci */
36cabdff1aSopenharmony_ci
37cabdff1aSopenharmony_cienum AVFieldOrder {
38cabdff1aSopenharmony_ci    AV_FIELD_UNKNOWN,
39cabdff1aSopenharmony_ci    AV_FIELD_PROGRESSIVE,
40cabdff1aSopenharmony_ci    AV_FIELD_TT,          //< Top coded_first, top displayed first
41cabdff1aSopenharmony_ci    AV_FIELD_BB,          //< Bottom coded first, bottom displayed first
42cabdff1aSopenharmony_ci    AV_FIELD_TB,          //< Top coded first, bottom displayed first
43cabdff1aSopenharmony_ci    AV_FIELD_BT,          //< Bottom coded first, top displayed first
44cabdff1aSopenharmony_ci};
45cabdff1aSopenharmony_ci
46cabdff1aSopenharmony_ci/**
47cabdff1aSopenharmony_ci * This struct describes the properties of an encoded stream.
48cabdff1aSopenharmony_ci *
49cabdff1aSopenharmony_ci * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must
50cabdff1aSopenharmony_ci * be allocated with avcodec_parameters_alloc() and freed with
51cabdff1aSopenharmony_ci * avcodec_parameters_free().
52cabdff1aSopenharmony_ci */
53cabdff1aSopenharmony_citypedef struct AVCodecParameters {
54cabdff1aSopenharmony_ci    /**
55cabdff1aSopenharmony_ci     * General type of the encoded data.
56cabdff1aSopenharmony_ci     */
57cabdff1aSopenharmony_ci    enum AVMediaType codec_type;
58cabdff1aSopenharmony_ci    /**
59cabdff1aSopenharmony_ci     * Specific type of the encoded data (the codec used).
60cabdff1aSopenharmony_ci     */
61cabdff1aSopenharmony_ci    enum AVCodecID   codec_id;
62cabdff1aSopenharmony_ci    /**
63cabdff1aSopenharmony_ci     * Additional information about the codec (corresponds to the AVI FOURCC).
64cabdff1aSopenharmony_ci     */
65cabdff1aSopenharmony_ci    uint32_t         codec_tag;
66cabdff1aSopenharmony_ci
67cabdff1aSopenharmony_ci    /**
68cabdff1aSopenharmony_ci     * Extra binary data needed for initializing the decoder, codec-dependent.
69cabdff1aSopenharmony_ci     *
70cabdff1aSopenharmony_ci     * Must be allocated with av_malloc() and will be freed by
71cabdff1aSopenharmony_ci     * avcodec_parameters_free(). The allocated size of extradata must be at
72cabdff1aSopenharmony_ci     * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding
73cabdff1aSopenharmony_ci     * bytes zeroed.
74cabdff1aSopenharmony_ci     */
75cabdff1aSopenharmony_ci    uint8_t *extradata;
76cabdff1aSopenharmony_ci    /**
77cabdff1aSopenharmony_ci     * Size of the extradata content in bytes.
78cabdff1aSopenharmony_ci     */
79cabdff1aSopenharmony_ci    int      extradata_size;
80cabdff1aSopenharmony_ci
81cabdff1aSopenharmony_ci    /**
82cabdff1aSopenharmony_ci     * - video: the pixel format, the value corresponds to enum AVPixelFormat.
83cabdff1aSopenharmony_ci     * - audio: the sample format, the value corresponds to enum AVSampleFormat.
84cabdff1aSopenharmony_ci     */
85cabdff1aSopenharmony_ci    int format;
86cabdff1aSopenharmony_ci
87cabdff1aSopenharmony_ci    /**
88cabdff1aSopenharmony_ci     * The average bitrate of the encoded data (in bits per second).
89cabdff1aSopenharmony_ci     */
90cabdff1aSopenharmony_ci    int64_t bit_rate;
91cabdff1aSopenharmony_ci
92cabdff1aSopenharmony_ci    /**
93cabdff1aSopenharmony_ci     * The number of bits per sample in the codedwords.
94cabdff1aSopenharmony_ci     *
95cabdff1aSopenharmony_ci     * This is basically the bitrate per sample. It is mandatory for a bunch of
96cabdff1aSopenharmony_ci     * formats to actually decode them. It's the number of bits for one sample in
97cabdff1aSopenharmony_ci     * the actual coded bitstream.
98cabdff1aSopenharmony_ci     *
99cabdff1aSopenharmony_ci     * This could be for example 4 for ADPCM
100cabdff1aSopenharmony_ci     * For PCM formats this matches bits_per_raw_sample
101cabdff1aSopenharmony_ci     * Can be 0
102cabdff1aSopenharmony_ci     */
103cabdff1aSopenharmony_ci    int bits_per_coded_sample;
104cabdff1aSopenharmony_ci
105cabdff1aSopenharmony_ci    /**
106cabdff1aSopenharmony_ci     * This is the number of valid bits in each output sample. If the
107cabdff1aSopenharmony_ci     * sample format has more bits, the least significant bits are additional
108cabdff1aSopenharmony_ci     * padding bits, which are always 0. Use right shifts to reduce the sample
109cabdff1aSopenharmony_ci     * to its actual size. For example, audio formats with 24 bit samples will
110cabdff1aSopenharmony_ci     * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32.
111cabdff1aSopenharmony_ci     * To get the original sample use "(int32_t)sample >> 8"."
112cabdff1aSopenharmony_ci     *
113cabdff1aSopenharmony_ci     * For ADPCM this might be 12 or 16 or similar
114cabdff1aSopenharmony_ci     * Can be 0
115cabdff1aSopenharmony_ci     */
116cabdff1aSopenharmony_ci    int bits_per_raw_sample;
117cabdff1aSopenharmony_ci
118cabdff1aSopenharmony_ci    /**
119cabdff1aSopenharmony_ci     * Codec-specific bitstream restrictions that the stream conforms to.
120cabdff1aSopenharmony_ci     */
121cabdff1aSopenharmony_ci    int profile;
122cabdff1aSopenharmony_ci    int level;
123cabdff1aSopenharmony_ci
124cabdff1aSopenharmony_ci    /**
125cabdff1aSopenharmony_ci     * Video only. The dimensions of the video frame in pixels.
126cabdff1aSopenharmony_ci     */
127cabdff1aSopenharmony_ci    int width;
128cabdff1aSopenharmony_ci    int height;
129cabdff1aSopenharmony_ci
130cabdff1aSopenharmony_ci    /**
131cabdff1aSopenharmony_ci     * Video only. The aspect ratio (width / height) which a single pixel
132cabdff1aSopenharmony_ci     * should have when displayed.
133cabdff1aSopenharmony_ci     *
134cabdff1aSopenharmony_ci     * When the aspect ratio is unknown / undefined, the numerator should be
135cabdff1aSopenharmony_ci     * set to 0 (the denominator may have any value).
136cabdff1aSopenharmony_ci     */
137cabdff1aSopenharmony_ci    AVRational sample_aspect_ratio;
138cabdff1aSopenharmony_ci
139cabdff1aSopenharmony_ci    /**
140cabdff1aSopenharmony_ci     * Video only. The order of the fields in interlaced video.
141cabdff1aSopenharmony_ci     */
142cabdff1aSopenharmony_ci    enum AVFieldOrder                  field_order;
143cabdff1aSopenharmony_ci
144cabdff1aSopenharmony_ci    /**
145cabdff1aSopenharmony_ci     * Video only. Additional colorspace characteristics.
146cabdff1aSopenharmony_ci     */
147cabdff1aSopenharmony_ci    enum AVColorRange                  color_range;
148cabdff1aSopenharmony_ci    enum AVColorPrimaries              color_primaries;
149cabdff1aSopenharmony_ci    enum AVColorTransferCharacteristic color_trc;
150cabdff1aSopenharmony_ci    enum AVColorSpace                  color_space;
151cabdff1aSopenharmony_ci    enum AVChromaLocation              chroma_location;
152cabdff1aSopenharmony_ci
153cabdff1aSopenharmony_ci    /**
154cabdff1aSopenharmony_ci     * Video only. Number of delayed frames.
155cabdff1aSopenharmony_ci     */
156cabdff1aSopenharmony_ci    int video_delay;
157cabdff1aSopenharmony_ci
158cabdff1aSopenharmony_ci#if FF_API_OLD_CHANNEL_LAYOUT
159cabdff1aSopenharmony_ci    /**
160cabdff1aSopenharmony_ci     * Audio only. The channel layout bitmask. May be 0 if the channel layout is
161cabdff1aSopenharmony_ci     * unknown or unspecified, otherwise the number of bits set must be equal to
162cabdff1aSopenharmony_ci     * the channels field.
163cabdff1aSopenharmony_ci     * @deprecated use ch_layout
164cabdff1aSopenharmony_ci     */
165cabdff1aSopenharmony_ci    attribute_deprecated
166cabdff1aSopenharmony_ci    uint64_t channel_layout;
167cabdff1aSopenharmony_ci    /**
168cabdff1aSopenharmony_ci     * Audio only. The number of audio channels.
169cabdff1aSopenharmony_ci     * @deprecated use ch_layout.nb_channels
170cabdff1aSopenharmony_ci     */
171cabdff1aSopenharmony_ci    attribute_deprecated
172cabdff1aSopenharmony_ci    int      channels;
173cabdff1aSopenharmony_ci#endif
174cabdff1aSopenharmony_ci    /**
175cabdff1aSopenharmony_ci     * Audio only. The number of audio samples per second.
176cabdff1aSopenharmony_ci     */
177cabdff1aSopenharmony_ci    int      sample_rate;
178cabdff1aSopenharmony_ci    /**
179cabdff1aSopenharmony_ci     * Audio only. The number of bytes per coded audio frame, required by some
180cabdff1aSopenharmony_ci     * formats.
181cabdff1aSopenharmony_ci     *
182cabdff1aSopenharmony_ci     * Corresponds to nBlockAlign in WAVEFORMATEX.
183cabdff1aSopenharmony_ci     */
184cabdff1aSopenharmony_ci    int      block_align;
185cabdff1aSopenharmony_ci    /**
186cabdff1aSopenharmony_ci     * Audio only. Audio frame size, if known. Required by some formats to be static.
187cabdff1aSopenharmony_ci     */
188cabdff1aSopenharmony_ci    int      frame_size;
189cabdff1aSopenharmony_ci
190cabdff1aSopenharmony_ci    /**
191cabdff1aSopenharmony_ci     * Audio only. The amount of padding (in samples) inserted by the encoder at
192cabdff1aSopenharmony_ci     * the beginning of the audio. I.e. this number of leading decoded samples
193cabdff1aSopenharmony_ci     * must be discarded by the caller to get the original audio without leading
194cabdff1aSopenharmony_ci     * padding.
195cabdff1aSopenharmony_ci     */
196cabdff1aSopenharmony_ci    int initial_padding;
197cabdff1aSopenharmony_ci    /**
198cabdff1aSopenharmony_ci     * Audio only. The amount of padding (in samples) appended by the encoder to
199cabdff1aSopenharmony_ci     * the end of the audio. I.e. this number of decoded samples must be
200cabdff1aSopenharmony_ci     * discarded by the caller from the end of the stream to get the original
201cabdff1aSopenharmony_ci     * audio without any trailing padding.
202cabdff1aSopenharmony_ci     */
203cabdff1aSopenharmony_ci    int trailing_padding;
204cabdff1aSopenharmony_ci    /**
205cabdff1aSopenharmony_ci     * Audio only. Number of samples to skip after a discontinuity.
206cabdff1aSopenharmony_ci     */
207cabdff1aSopenharmony_ci    int seek_preroll;
208cabdff1aSopenharmony_ci
209cabdff1aSopenharmony_ci    /**
210cabdff1aSopenharmony_ci     * Audio only. The channel layout and number of channels.
211cabdff1aSopenharmony_ci     */
212cabdff1aSopenharmony_ci    AVChannelLayout ch_layout;
213cabdff1aSopenharmony_ci} AVCodecParameters;
214cabdff1aSopenharmony_ci
215cabdff1aSopenharmony_ci/**
216cabdff1aSopenharmony_ci * Allocate a new AVCodecParameters and set its fields to default values
217cabdff1aSopenharmony_ci * (unknown/invalid/0). The returned struct must be freed with
218cabdff1aSopenharmony_ci * avcodec_parameters_free().
219cabdff1aSopenharmony_ci */
220cabdff1aSopenharmony_ciAVCodecParameters *avcodec_parameters_alloc(void);
221cabdff1aSopenharmony_ci
222cabdff1aSopenharmony_ci/**
223cabdff1aSopenharmony_ci * Free an AVCodecParameters instance and everything associated with it and
224cabdff1aSopenharmony_ci * write NULL to the supplied pointer.
225cabdff1aSopenharmony_ci */
226cabdff1aSopenharmony_civoid avcodec_parameters_free(AVCodecParameters **par);
227cabdff1aSopenharmony_ci
228cabdff1aSopenharmony_ci/**
229cabdff1aSopenharmony_ci * Copy the contents of src to dst. Any allocated fields in dst are freed and
230cabdff1aSopenharmony_ci * replaced with newly allocated duplicates of the corresponding fields in src.
231cabdff1aSopenharmony_ci *
232cabdff1aSopenharmony_ci * @return >= 0 on success, a negative AVERROR code on failure.
233cabdff1aSopenharmony_ci */
234cabdff1aSopenharmony_ciint avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src);
235cabdff1aSopenharmony_ci
236cabdff1aSopenharmony_ci/**
237cabdff1aSopenharmony_ci * This function is the same as av_get_audio_frame_duration(), except it works
238cabdff1aSopenharmony_ci * with AVCodecParameters instead of an AVCodecContext.
239cabdff1aSopenharmony_ci */
240cabdff1aSopenharmony_ciint av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes);
241cabdff1aSopenharmony_ci
242cabdff1aSopenharmony_ci/**
243cabdff1aSopenharmony_ci * @}
244cabdff1aSopenharmony_ci */
245cabdff1aSopenharmony_ci
246cabdff1aSopenharmony_ci#endif // AVCODEC_CODEC_PAR_H
247