FFmpeg
internal.h
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 /**
20  * @file
21  * common internal api header.
22  */
23 
24 #ifndef AVCODEC_INTERNAL_H
25 #define AVCODEC_INTERNAL_H
26 
27 #include <stdint.h>
28 
29 #include "libavutil/buffer.h"
31 #include "libavutil/fifo.h"
32 #include "libavutil/mathematics.h"
33 #include "libavutil/pixfmt.h"
34 #include "avcodec.h"
35 #include "config.h"
36 
37 /**
38  * The codec does not modify any global variables in the init function,
39  * allowing to call the init function without locking any global mutexes.
40  */
41 #define FF_CODEC_CAP_INIT_THREADSAFE (1 << 0)
42 /**
43  * The codec allows calling the close function for deallocation even if
44  * the init function returned a failure. Without this capability flag, a
45  * codec does such cleanup internally when returning failures from the
46  * init function and does not expect the close function to be called at
47  * all.
48  */
49 #define FF_CODEC_CAP_INIT_CLEANUP (1 << 1)
50 /**
51  * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set
52  * AVFrame.pkt_dts manually. If the flag is set, decode.c won't overwrite
53  * this field. If it's unset, decode.c tries to guess the pkt_dts field
54  * from the input AVPacket.
55  */
56 #define FF_CODEC_CAP_SETS_PKT_DTS (1 << 2)
57 /**
58  * The decoder extracts and fills its parameters even if the frame is
59  * skipped due to the skip_frame setting.
60  */
61 #define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM (1 << 3)
62 /**
63  * The decoder sets the cropping fields in the output frames manually.
64  * If this cap is set, the generic code will initialize output frame
65  * dimensions to coded rather than display values.
66  */
67 #define FF_CODEC_CAP_EXPORTS_CROPPING (1 << 4)
68 /**
69  * Codec initializes slice-based threading with a main function
70  */
71 #define FF_CODEC_CAP_SLICE_THREAD_HAS_MF (1 << 5)
72 /*
73  * The codec supports frame threading and has inter-frame dependencies, so it
74  * uses ff_thread_report/await_progress().
75  */
76 #define FF_CODEC_CAP_ALLOCATE_PROGRESS (1 << 6)
77 /**
78  * Codec handles avctx->thread_count == 0 (auto) internally.
79  */
80 #define FF_CODEC_CAP_AUTO_THREADS (1 << 7)
81 
82 /**
83  * AVCodec.codec_tags termination value
84  */
85 #define FF_CODEC_TAGS_END -1
86 
87 
88 #ifdef TRACE
89 # define ff_tlog(ctx, ...) av_log(ctx, AV_LOG_TRACE, __VA_ARGS__)
90 #else
91 # define ff_tlog(ctx, ...) do { } while(0)
92 #endif
93 
94 
95 #define FF_DEFAULT_QUANT_BIAS 999999
96 
97 #define FF_QSCALE_TYPE_MPEG1 0
98 #define FF_QSCALE_TYPE_MPEG2 1
99 #define FF_QSCALE_TYPE_H264 2
100 #define FF_QSCALE_TYPE_VP56 3
101 
102 #define FF_SANE_NB_CHANNELS 512U
103 
104 #define FF_SIGNBIT(x) ((x) >> CHAR_BIT * sizeof(x) - 1)
105 
106 #if HAVE_SIMD_ALIGN_64
107 # define STRIDE_ALIGN 64 /* AVX-512 */
108 #elif HAVE_SIMD_ALIGN_32
109 # define STRIDE_ALIGN 32
110 #elif HAVE_SIMD_ALIGN_16
111 # define STRIDE_ALIGN 16
112 #else
113 # define STRIDE_ALIGN 8
114 #endif
115 
116 typedef struct DecodeSimpleContext {
119 
120 typedef struct EncodeSimpleContext {
123 
124 typedef struct AVCodecInternal {
125  /**
126  * Whether the parent AVCodecContext is a copy of the context which had
127  * init() called on it.
128  * This is used by multithreading - shared tables and picture pointers
129  * should be freed from the original context only.
130  */
131  int is_copy;
132 
133  /**
134  * An audio frame with less than required samples has been submitted and
135  * padded with silence. Reject all subsequent frames.
136  */
138 
139 #if FF_API_OLD_ENCDEC
141 #endif
142 
144 
145  void *thread_ctx;
146 
149 
150  /**
151  * Properties (timestamps+side data) extracted from the last packet passed
152  * for decoding.
153  */
156 
157  /**
158  * temporary buffer used for encoders to store their bitstream
159  */
161  unsigned int byte_buffer_size;
162 
164 
166 
167  /**
168  * Number of audio samples to skip at the start of the next decoded frame
169  */
171 
172  /**
173  * hwaccel-specific private data
174  */
176 
177  /**
178  * checks API usage: after codec draining, flush is required to resume operation
179  */
180  int draining;
181 
182  /**
183  * buffers for using new encode/decode API through legacy API
184  */
188 
189 #if FF_API_OLD_ENCDEC
191  /* this variable is set by the decoder internals to signal to the old
192  * API compat wrappers the amount of data consumed from the last packet */
194  /* when a partial packet has been consumed, this stores the remaining size
195  * of the packet (that should be submitted in the next decode call */
199 #endif
200 
202 
204 
205  /* to prevent infinite loop on errors when draining */
207 
208  /* used when avctx flag AV_CODEC_FLAG_DROPCHANGED is set */
211  int initial_width, initial_height;
216 
218  const uint8_t *key;
219  const uint8_t *value;
220 };
221 
222 extern const uint8_t ff_log2_run[41];
223 
224 /**
225  * Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
226  * If there is no such matching pair then size is returned.
227  */
228 int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b);
229 
230 unsigned int avpriv_toupper4(unsigned int x);
231 
232 void ff_color_frame(AVFrame *frame, const int color[4]);
233 
234 /**
235  * Maximum size in bytes of extradata.
236  * This value was chosen such that every bit of the buffer is
237  * addressable by a 32-bit signed integer as used by get_bits.
238  */
239 #define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE)
240 
241 /**
242  * Check AVPacket size and/or allocate data.
243  *
244  * Encoders supporting AVCodec.encode2() can use this as a convenience to
245  * ensure the output packet data is large enough, whether provided by the user
246  * or allocated in this function.
247  *
248  * @param avctx the AVCodecContext of the encoder
249  * @param avpkt the AVPacket
250  * If avpkt->data is already set, avpkt->size is checked
251  * to ensure it is large enough.
252  * If avpkt->data is NULL, a new buffer is allocated.
253  * avpkt->size is set to the specified size.
254  * All other AVPacket fields will be reset with av_init_packet().
255  * @param size the minimum required packet size
256  * @param min_size This is a hint to the allocation algorithm, which indicates
257  * to what minimal size the caller might later shrink the packet
258  * to. Encoders often allocate packets which are larger than the
259  * amount of data that is written into them as the exact amount is
260  * not known at the time of allocation. min_size represents the
261  * size a packet might be shrunk to by the caller. Can be set to
262  * 0. setting this roughly correctly allows the allocation code
263  * to choose between several allocation strategies to improve
264  * speed slightly.
265  * @return non negative on success, negative error code on failure
266  */
267 int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size);
268 
269 /**
270  * Rescale from sample rate to AVCodecContext.time_base.
271  */
273  int64_t samples)
274 {
275  if(samples == AV_NOPTS_VALUE)
276  return AV_NOPTS_VALUE;
277  return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate },
278  avctx->time_base);
279 }
280 
281 /**
282  * 2^(x) for integer x
283  * @return correctly rounded float
284  */
285 static av_always_inline float ff_exp2fi(int x) {
286  /* Normal range */
287  if (-126 <= x && x <= 128)
288  return av_int2float((x+127) << 23);
289  /* Too large */
290  else if (x > 128)
291  return INFINITY;
292  /* Subnormal numbers */
293  else if (x > -150)
294  return av_int2float(1 << (x+149));
295  /* Negligibly small */
296  else
297  return 0;
298 }
299 
300 /**
301  * Get a buffer for a frame. This is a wrapper around
302  * AVCodecContext.get_buffer() and should be used instead calling get_buffer()
303  * directly.
304  */
305 int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags);
306 
307 #define FF_REGET_BUFFER_FLAG_READONLY 1 ///< the returned buffer does not need to be writable
308 /**
309  * Identical in function to ff_get_buffer(), except it reuses the existing buffer
310  * if available.
311  */
312 int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags);
313 
315 
317 
318 const uint8_t *avpriv_find_start_code(const uint8_t *p,
319  const uint8_t *end,
320  uint32_t *state);
321 
323 
324 /**
325  * Check that the provided frame dimensions are valid and set them on the codec
326  * context.
327  */
329 
330 /**
331  * Check that the provided sample aspect ratio is valid and set it on the codec
332  * context.
333  */
334 int ff_set_sar(AVCodecContext *avctx, AVRational sar);
335 
336 /**
337  * Add or update AV_FRAME_DATA_MATRIXENCODING side data.
338  */
340  enum AVMatrixEncoding matrix_encoding);
341 
342 /**
343  * Select the (possibly hardware accelerated) pixel format.
344  * This is a wrapper around AVCodecContext.get_format() and should be used
345  * instead of calling get_format() directly.
346  *
347  * The list of pixel formats must contain at least one valid entry, and is
348  * terminated with AV_PIX_FMT_NONE. If it is possible to decode to software,
349  * the last entry in the list must be the most accurate software format.
350  * If it is not possible to decode to software, AVCodecContext.sw_pix_fmt
351  * must be set before calling this function.
352  */
353 int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt);
354 
355 /**
356  * Add a CPB properties side data to an encoding context.
357  */
359 
360 /**
361  * Check AVFrame for S12M timecode side data and allocate and fill TC SEI message with timecode info
362  *
363  * @param frame Raw frame to get S12M timecode side data from
364  * @param rate The frame rate
365  * @param prefix_len Number of bytes to allocate before SEI message
366  * @param data Pointer to a variable to store allocated memory
367  * Upon return the variable will hold NULL on error or if frame has no S12M timecode info.
368  * Otherwise it will point to prefix_len uninitialized bytes followed by
369  * *sei_size SEI message
370  * @param sei_size Pointer to a variable to store generated SEI message length
371  * @return Zero on success, negative error code on failure
372  */
373 int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len,
374  void **data, size_t *sei_size);
375 
376 /**
377  * Get an estimated video bitrate based on frame size, frame rate and coded
378  * bits per pixel.
379  */
380 int64_t ff_guess_coded_bitrate(AVCodecContext *avctx);
381 
382 /**
383  * Check if a value is in the list. If not, return the default value
384  *
385  * @param ctx Context for the log msg
386  * @param val_name Name of the checked value, for log msg
387  * @param array_valid_values Array of valid int, ended with INT_MAX
388  * @param default_value Value return if checked value is not in the array
389  * @return Value or default_value.
390  */
391 int ff_int_from_list_or_default(void *ctx, const char * val_name, int val,
392  const int * array_valid_values, int default_value);
393 
394 void ff_dvdsub_parse_palette(uint32_t *palette, const char *p);
395 
396 #if defined(_WIN32) && CONFIG_SHARED && !defined(BUILDING_avcodec)
397 # define av_export_avcodec __declspec(dllimport)
398 #else
399 # define av_export_avcodec
400 #endif
401 
402 #endif /* AVCODEC_INTERNAL_H */
int nb_draining_errors
Definition: internal.h:206
int ff_thread_can_start_frame(AVCodecContext *avctx)
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Identical in function to ff_get_buffer(), except it reuses the existing buffer if available...
Definition: decode.c:2000
This structure describes decoded (raw) audio or video data.
Definition: frame.h:318
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
AVFifoBuffer * pkt_props
Definition: internal.h:155
AVPacket * last_pkt_props
Properties (timestamps+side data) extracted from the last packet passed for decoding.
Definition: internal.h:154
int changed_frames_dropped
Definition: internal.h:209
AVFrame * to_free
Definition: internal.h:140
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition: utils.c:450
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
Definition: utils.c:84
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float.
Definition: intfloat.h:40
The bitstream filter state.
Definition: bsf.h:49
int initial_channels
Definition: internal.h:213
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:36
AVCodec.
Definition: codec.h:197
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
Definition: avcodec.h:659
void ff_color_frame(AVFrame *frame, const int color[4])
Definition: utils.c:392
uint8_t
void * thread_ctx
Definition: internal.h:145
void * frame_thread_encoder
Definition: internal.h:163
#define height
size_t compat_decode_consumed
Definition: internal.h:193
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context.
Definition: utils.c:99
ptrdiff_t size
Definition: opengl_enc.c:100
int initial_format
Definition: internal.h:210
static struct @321 state
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
Definition: mathematics.c:142
AVBSFContext * bsf
Definition: internal.h:148
int is_copy
Whether the parent AVCodecContext is a copy of the context which had init() called on it...
Definition: internal.h:131
AVFrame * in_frame
Definition: internal.h:121
AVFrame * buffer_frame
Definition: internal.h:186
static av_always_inline float ff_exp2fi(int x)
2^(x) for integer x
Definition: internal.h:285
int64_t ff_guess_coded_bitrate(AVCodecContext *avctx)
Get an estimated video bitrate based on frame size, frame rate and coded bits per pixel...
Definition: utils.c:1131
#define b
Definition: input.c:41
audio channel layout utility functions
#define width
AVFrame * compat_decode_frame
Definition: internal.h:197
AVPacket * in_pkt
Definition: internal.h:117
AVFormatContext * ctx
Definition: movenc.c:48
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
#define s(width, name)
Definition: cbs_vp9.c:257
DecodeSimpleContext ds
Definition: internal.h:147
int draining
checks API usage: after codec draining, flush is required to resume operation
Definition: internal.h:180
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
Definition: utils.c:114
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
Definition: decode.c:1317
This structure describes the bitrate properties of an encoded bitstream.
Definition: avcodec.h:453
Libavcodec external API header.
int compat_decode_warned
Definition: internal.h:190
EncodeSimpleContext es
Definition: internal.h:165
int sample_rate
samples per second
Definition: avcodec.h:1196
int initial_sample_rate
Definition: internal.h:212
main external API structure.
Definition: avcodec.h:536
int skip_samples_multiplier
Definition: internal.h:203
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1893
a very simple circular buffer FIFO implementation
AVPacket * compat_encode_packet
Definition: internal.h:198
int showed_multi_packet_warning
Definition: internal.h:201
unsigned int avpriv_toupper4(unsigned int x)
Definition: utils.c:895
Rational number (pair of numerator and denominator).
Definition: rational.h:58
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
Definition: internal.h:170
refcounted data buffer API
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
Definition: encode.c:33
AVBufferRef * pool
Definition: internal.h:143
#define flags(name, subs,...)
Definition: cbs_av1.c:561
const uint8_t * key
Definition: internal.h:218
const uint8_t * value
Definition: internal.h:219
int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len, void **data, size_t *sei_size)
Check AVFrame for S12M timecode side data and allocate and fill TC SEI message with timecode info...
Definition: utils.c:1067
AVPacket * buffer_pkt
buffers for using new encode/decode API through legacy API
Definition: internal.h:185
A reference to a data buffer.
Definition: buffer.h:84
void ff_dvdsub_parse_palette(uint32_t *palette, const char *p)
Definition: dvdsub.c:26
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264dec.c:61
void * hwaccel_priv_data
hwaccel-specific private data
Definition: internal.h:175
uint64_t initial_channel_layout
Definition: internal.h:214
AVCPBProperties * ff_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
Definition: utils.c:1027
pixel format definitions
static const struct twinvq_data tab
unsigned int byte_buffer_size
Definition: internal.h:161
size_t compat_decode_partial_size
Definition: internal.h:196
Filter the word “frame” indicates either a video frame or a group of audio samples
#define av_always_inline
Definition: attributes.h:45
const uint8_t ff_log2_run[41]
Definition: bitstream.c:39
static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base.
Definition: internal.h:272
int ff_int_from_list_or_default(void *ctx, const char *val_name, int val, const int *array_valid_values, int default_value)
Check if a value is in the list.
Definition: utils.c:1152
AVMatrixEncoding
#define INFINITY
Definition: mathematics.h:67
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
static double val(void *priv, double ch)
Definition: aeval.c:76
This structure stores compressed data.
Definition: packet.h:346
uint8_t * byte_buffer
temporary buffer used for encoders to store their bitstream
Definition: internal.h:160
int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
Definition: utils.c:866
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:248
int last_audio_frame
An audio frame with less than required samples has been submitted and padded with silence...
Definition: internal.h:137