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/mathematics.h"
32 #include "libavutil/pixfmt.h"
33 #include "avcodec.h"
34 #include "config.h"
35 
36 /**
37  * The codec does not modify any global variables in the init function,
38  * allowing to call the init function without locking any global mutexes.
39  */
40 #define FF_CODEC_CAP_INIT_THREADSAFE (1 << 0)
41 /**
42  * The codec allows calling the close function for deallocation even if
43  * the init function returned a failure. Without this capability flag, a
44  * codec does such cleanup internally when returning failures from the
45  * init function and does not expect the close function to be called at
46  * all.
47  */
48 #define FF_CODEC_CAP_INIT_CLEANUP (1 << 1)
49 /**
50  * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set
51  * AVFrame.pkt_dts manually. If the flag is set, decode.c won't overwrite
52  * this field. If it's unset, decode.c tries to guess the pkt_dts field
53  * from the input AVPacket.
54  */
55 #define FF_CODEC_CAP_SETS_PKT_DTS (1 << 2)
56 /**
57  * The decoder extracts and fills its parameters even if the frame is
58  * skipped due to the skip_frame setting.
59  */
60 #define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM (1 << 3)
61 /**
62  * The decoder sets the cropping fields in the output frames manually.
63  * If this cap is set, the generic code will initialize output frame
64  * dimensions to coded rather than display values.
65  */
66 #define FF_CODEC_CAP_EXPORTS_CROPPING (1 << 4)
67 /**
68  * Codec initializes slice-based threading with a main function
69  */
70 #define FF_CODEC_CAP_SLICE_THREAD_HAS_MF (1 << 5)
71 
72 /**
73  * AVCodec.codec_tags termination value
74  */
75 #define FF_CODEC_TAGS_END -1
76 
77 
78 #ifdef TRACE
79 # define ff_tlog(ctx, ...) av_log(ctx, AV_LOG_TRACE, __VA_ARGS__)
80 #else
81 # define ff_tlog(ctx, ...) do { } while(0)
82 #endif
83 
84 
85 #define FF_DEFAULT_QUANT_BIAS 999999
86 
87 #define FF_QSCALE_TYPE_MPEG1 0
88 #define FF_QSCALE_TYPE_MPEG2 1
89 #define FF_QSCALE_TYPE_H264 2
90 #define FF_QSCALE_TYPE_VP56 3
91 
92 #define FF_SANE_NB_CHANNELS 512U
93 
94 #define FF_SIGNBIT(x) ((x) >> CHAR_BIT * sizeof(x) - 1)
95 
96 #if HAVE_SIMD_ALIGN_64
97 # define STRIDE_ALIGN 64 /* AVX-512 */
98 #elif HAVE_SIMD_ALIGN_32
99 # define STRIDE_ALIGN 32
100 #elif HAVE_SIMD_ALIGN_16
101 # define STRIDE_ALIGN 16
102 #else
103 # define STRIDE_ALIGN 8
104 #endif
105 
106 typedef struct FramePool {
107  /**
108  * Pools for each data plane. For audio all the planes have the same size,
109  * so only pools[0] is used.
110  */
112 
113  /*
114  * Pool parameters
115  */
116  int format;
117  int width, height;
119  int linesize[4];
120  int planes;
121  int channels;
122  int samples;
123 } FramePool;
124 
125 typedef struct DecodeSimpleContext {
129 
130 typedef struct DecodeFilterContext {
132  int nb_bsfs;
134 
135 typedef struct AVCodecInternal {
136  /**
137  * Whether the parent AVCodecContext is a copy of the context which had
138  * init() called on it.
139  * This is used by multithreading - shared tables and picture pointers
140  * should be freed from the original context only.
141  */
142  int is_copy;
143 
144  /**
145  * Whether to allocate progress for frame threading.
146  *
147  * The codec must set it to 1 if it uses ff_thread_await/report_progress(),
148  * then progress will be allocated in ff_thread_get_buffer(). The frames
149  * then MUST be freed with ff_thread_release_buffer().
150  *
151  * If the codec does not need to call the progress functions (there are no
152  * dependencies between the frames), it should leave this at 0. Then it can
153  * decode straight to the user-provided frames (which the user will then
154  * free with av_frame_unref()), there is no need to call
155  * ff_thread_release_buffer().
156  */
158 
159  /**
160  * An audio frame with less than required samples has been submitted and
161  * padded with silence. Reject all subsequent frames.
162  */
164 
166 
168 
169  void *thread_ctx;
170 
173 
174  /**
175  * Properties (timestamps+side data) extracted from the last packet passed
176  * for decoding.
177  */
179 
180  /**
181  * temporary buffer used for encoders to store their bitstream
182  */
184  unsigned int byte_buffer_size;
185 
187 
188  /**
189  * Number of audio samples to skip at the start of the next decoded frame
190  */
192 
193  /**
194  * hwaccel-specific private data
195  */
197 
198  /**
199  * checks API usage: after codec draining, flush is required to resume operation
200  */
201  int draining;
202 
203  /**
204  * buffers for using new encode/decode API through legacy API
205  */
207  int buffer_pkt_valid; // encoding: packet without data can be valid
210  /* set to 1 when the caller is using the old decoding API */
213  /* this variable is set by the decoder internals to signal to the old
214  * API compat wrappers the amount of data consumed from the last packet */
216  /* when a partial packet has been consumed, this stores the remaining size
217  * of the packet (that should be submitted in the next decode call */
220 
222 
224 
225  /* to prevent infinite loop on errors when draining */
227 
228  /* used when avctx flag AV_CODEC_FLAG_DROPCHANGED is set */
231  int initial_width, initial_height;
236 
238  const uint8_t *key;
239  const uint8_t *value;
240 };
241 
242 extern const uint8_t ff_log2_run[41];
243 
244 /**
245  * Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
246  * If there is no such matching pair then size is returned.
247  */
248 int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b);
249 
250 unsigned int avpriv_toupper4(unsigned int x);
251 
252 void ff_color_frame(AVFrame *frame, const int color[4]);
253 
254 /**
255  * Maximum size in bytes of extradata.
256  * This value was chosen such that every bit of the buffer is
257  * addressable by a 32-bit signed integer as used by get_bits.
258  */
259 #define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE)
260 
261 /**
262  * Check AVPacket size and/or allocate data.
263  *
264  * Encoders supporting AVCodec.encode2() can use this as a convenience to
265  * ensure the output packet data is large enough, whether provided by the user
266  * or allocated in this function.
267  *
268  * @param avctx the AVCodecContext of the encoder
269  * @param avpkt the AVPacket
270  * If avpkt->data is already set, avpkt->size is checked
271  * to ensure it is large enough.
272  * If avpkt->data is NULL, a new buffer is allocated.
273  * avpkt->size is set to the specified size.
274  * All other AVPacket fields will be reset with av_init_packet().
275  * @param size the minimum required packet size
276  * @param min_size This is a hint to the allocation algorithm, which indicates
277  * to what minimal size the caller might later shrink the packet
278  * to. Encoders often allocate packets which are larger than the
279  * amount of data that is written into them as the exact amount is
280  * not known at the time of allocation. min_size represents the
281  * size a packet might be shrunk to by the caller. Can be set to
282  * 0. setting this roughly correctly allows the allocation code
283  * to choose between several allocation strategies to improve
284  * speed slightly.
285  * @return non negative on success, negative error code on failure
286  */
287 int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size);
288 
290 
291 /**
292  * Rescale from sample rate to AVCodecContext.time_base.
293  */
295  int64_t samples)
296 {
297  if(samples == AV_NOPTS_VALUE)
298  return AV_NOPTS_VALUE;
299  return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate },
300  avctx->time_base);
301 }
302 
303 /**
304  * 2^(x) for integer x
305  * @return correctly rounded float
306  */
307 static av_always_inline float ff_exp2fi(int x) {
308  /* Normal range */
309  if (-126 <= x && x <= 128)
310  return av_int2float((x+127) << 23);
311  /* Too large */
312  else if (x > 128)
313  return INFINITY;
314  /* Subnormal numbers */
315  else if (x > -150)
316  return av_int2float(1 << (x+149));
317  /* Negligibly small */
318  else
319  return 0;
320 }
321 
322 /**
323  * Get a buffer for a frame. This is a wrapper around
324  * AVCodecContext.get_buffer() and should be used instead calling get_buffer()
325  * directly.
326  */
327 int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags);
328 
329 #define FF_REGET_BUFFER_FLAG_READONLY 1 ///< the returned buffer does not need to be writable
330 /**
331  * Identical in function to ff_get_buffer(), except it reuses the existing buffer
332  * if available.
333  */
334 int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags);
335 
337 
339 
340 /**
341  * Call avcodec_open2 recursively by decrementing counter, unlocking mutex,
342  * calling the function and then restoring again. Assumes the mutex is
343  * already locked
344  */
346 
347 /**
348  * Finalize buf into extradata and set its size appropriately.
349  */
350 int avpriv_bprint_to_extradata(AVCodecContext *avctx, struct AVBPrint *buf);
351 
352 const uint8_t *avpriv_find_start_code(const uint8_t *p,
353  const uint8_t *end,
354  uint32_t *state);
355 
357 
358 /**
359  * Check that the provided frame dimensions are valid and set them on the codec
360  * context.
361  */
363 
364 /**
365  * Check that the provided sample aspect ratio is valid and set it on the codec
366  * context.
367  */
368 int ff_set_sar(AVCodecContext *avctx, AVRational sar);
369 
370 /**
371  * Add or update AV_FRAME_DATA_MATRIXENCODING side data.
372  */
374  enum AVMatrixEncoding matrix_encoding);
375 
376 /**
377  * Select the (possibly hardware accelerated) pixel format.
378  * This is a wrapper around AVCodecContext.get_format() and should be used
379  * instead of calling get_format() directly.
380  *
381  * The list of pixel formats must contain at least one valid entry, and is
382  * terminated with AV_PIX_FMT_NONE. If it is possible to decode to software,
383  * the last entry in the list must be the most accurate software format.
384  * If it is not possible to decode to software, AVCodecContext.sw_pix_fmt
385  * must be set before calling this function.
386  */
387 int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt);
388 
389 /**
390  * Set various frame properties from the codec context / packet data.
391  */
392 int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame);
393 
394 /**
395  * Add a CPB properties side data to an encoding context.
396  */
398 
399 int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type);
400 
401 int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp);
402 
403 /**
404  * Check AVFrame for A53 side data and allocate and fill SEI message with A53 info
405  *
406  * @param frame Raw frame to get A53 side data from
407  * @param prefix_len Number of bytes to allocate before SEI message
408  * @param data Pointer to a variable to store allocated memory
409  * Upon return the variable will hold NULL on error or if frame has no A53 info.
410  * Otherwise it will point to prefix_len uninitialized bytes followed by
411  * *sei_size SEI message
412  * @param sei_size Pointer to a variable to store generated SEI message length
413  * @return Zero on success, negative error code on failure
414  */
415 int ff_alloc_a53_sei(const AVFrame *frame, size_t prefix_len,
416  void **data, size_t *sei_size);
417 
418 /**
419  * Get an estimated video bitrate based on frame size, frame rate and coded
420  * bits per pixel.
421  */
422 int64_t ff_guess_coded_bitrate(AVCodecContext *avctx);
423 
424 /**
425  * Check if a value is in the list. If not, return the default value
426  *
427  * @param ctx Context for the log msg
428  * @param val_name Name of the checked value, for log msg
429  * @param array_valid_values Array of valid int, ended with INT_MAX
430  * @param default_value Value return if checked value is not in the array
431  * @return Value or default_value.
432  */
433 int ff_int_from_list_or_default(void *ctx, const char * val_name, int val,
434  const int * array_valid_values, int default_value);
435 
436 void ff_dvdsub_parse_palette(uint32_t *palette, const char *p);
437 
438 #if defined(_WIN32) && CONFIG_SHARED && !defined(BUILDING_avcodec)
439 # define av_export_avcodec __declspec(dllimport)
440 #else
441 # define av_export_avcodec
442 #endif
443 
444 #endif /* AVCODEC_INTERNAL_H */
int nb_draining_errors
Definition: internal.h:226
int ff_thread_can_start_frame(AVCodecContext *avctx)
const char const char void * val
Definition: avisynth_c.h:863
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:2016
#define AV_NUM_DATA_POINTERS
Definition: frame.h:296
This structure describes decoded (raw) audio or video data.
Definition: frame.h:295
int stride_align[AV_NUM_DATA_POINTERS]
Definition: internal.h:118
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
const char * fmt
Definition: avisynth_c.h:861
AVPacket * last_pkt_props
Properties (timestamps+side data) extracted from the last packet passed for decoding.
Definition: internal.h:178
int changed_frames_dropped
Definition: internal.h:229
AVFrame * to_free
Definition: internal.h:165
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition: utils.c:496
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:104
int width
Definition: internal.h:117
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: avcodec.h:5843
int initial_channels
Definition: internal.h:233
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
int samples
Definition: internal.h:122
AVBufferPool * pools[4]
Pools for each data plane.
Definition: internal.h:111
static AVPacket pkt
static void error(const char *err)
AVCodec.
Definition: avcodec.h:3555
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
Definition: avcodec.h:1744
void ff_color_frame(AVFrame *frame, const int color[4])
Definition: utils.c:412
DecodeFilterContext filter
Definition: internal.h:172
int height
Definition: internal.h:117
uint8_t
void * thread_ctx
Definition: internal.h:169
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
Set various frame properties from the codec context / packet data.
Definition: decode.c:1737
int planes
Definition: internal.h:120
void * frame_thread_encoder
Definition: internal.h:186
size_t compat_decode_consumed
Definition: internal.h:215
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:119
ptrdiff_t size
Definition: opengl_enc.c:100
int initial_format
Definition: internal.h:230
int avpriv_bprint_to_extradata(AVCodecContext *avctx, struct AVBPrint *buf)
Finalize buf into extradata and set its size appropriately.
Definition: utils.c:1909
The buffer pool.
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
FramePool * pool
Definition: internal.h:167
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
int ff_codec_open2_recursive(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Call avcodec_open2 recursively by decrementing counter, unlocking mutex, calling the function and the...
Definition: utils.c:536
int is_copy
Whether the parent AVCodecContext is a copy of the context which had init() called on it...
Definition: internal.h:142
AVFrame * buffer_frame
Definition: internal.h:208
static av_always_inline float ff_exp2fi(int x)
2^(x) for integer x
Definition: internal.h:307
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:2226
#define b
Definition: input.c:41
audio channel layout utility functions
int channels
Definition: internal.h:121
AVFrame * compat_decode_frame
Definition: internal.h:219
AVPacket * in_pkt
Definition: internal.h:126
AVFormatContext * ctx
Definition: movenc.c:48
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about quality
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:171
int draining
checks API usage: after codec draining, flush is required to resume operation
Definition: internal.h:201
int linesize[4]
Definition: internal.h:119
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:134
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
Definition: decode.c:1370
This structure describes the bitrate properties of an encoded bitstream.
Definition: avcodec.h:1158
Libavcodec external API header.
int compat_decode_warned
Definition: internal.h:212
int sample_rate
samples per second
Definition: avcodec.h:2281
int initial_sample_rate
Definition: internal.h:232
main external API structure.
Definition: avcodec.h:1621
int skip_samples_multiplier
Definition: internal.h:223
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1969
void * buf
Definition: avisynth_c.h:766
static struct @327 state
int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp)
Definition: avpacket.c:748
int showed_multi_packet_warning
Definition: internal.h:221
unsigned int avpriv_toupper4(unsigned int x)
Definition: utils.c:1819
Rational number (pair of numerator and denominator).
Definition: rational.h:58
int buffer_pkt_valid
Definition: internal.h:207
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
Definition: internal.h:191
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:32
int allocate_progress
Whether to allocate progress for frame threading.
Definition: internal.h:157
#define flags(name, subs,...)
Definition: cbs_av1.c:564
#define attribute_deprecated
Definition: attributes.h:94
const uint8_t * key
Definition: internal.h:238
const uint8_t * value
Definition: internal.h:239
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
Definition: avpacket.c:723
AVPacket * buffer_pkt
buffers for using new encode/decode API through legacy API
Definition: internal.h:206
void ff_dvdsub_parse_palette(uint32_t *palette, const char *p)
Definition: dvdsub.c:26
const OptionDef options[]
Definition: ffmpeg_opt.c:3439
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264dec.c:59
void * hwaccel_priv_data
hwaccel-specific private data
Definition: internal.h:196
uint64_t initial_channel_layout
Definition: internal.h:234
AVCPBProperties * ff_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
Definition: utils.c:1979
AVBSFContext ** bsfs
Definition: internal.h:131
pixel format definitions
attribute_deprecated int ff_alloc_packet(AVPacket *avpkt, int size)
Definition: encode.c:73
static const struct twinvq_data tab
unsigned int byte_buffer_size
Definition: internal.h:184
int ff_alloc_a53_sei(const AVFrame *frame, size_t prefix_len, void **data, size_t *sei_size)
Check AVFrame for A53 side data and allocate and fill SEI message with A53 info.
Definition: utils.c:2183
size_t compat_decode_partial_size
Definition: internal.h:218
#define av_always_inline
Definition: attributes.h:39
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:294
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:2247
AVMatrixEncoding
int format
Definition: internal.h:116
#define INFINITY
Definition: mathematics.h:67
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64
This structure stores compressed data.
Definition: avcodec.h:1510
uint8_t * byte_buffer
temporary buffer used for encoders to store their bitstream
Definition: internal.h:183
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:1783
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:248
AVFrame * out_frame
Definition: internal.h:127
int last_audio_frame
An audio frame with less than required samples has been submitted and padded with silence...
Definition: internal.h:163