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 
30 #include "avcodec.h"
31 #include "config.h"
32 
33 #if CONFIG_LCMS2
34 # include "fflcms2.h"
35 #endif
36 
37 #define FF_SANE_NB_CHANNELS 512U
38 
39 #if HAVE_SIMD_ALIGN_64
40 # define STRIDE_ALIGN 64 /* AVX-512 */
41 #elif HAVE_SIMD_ALIGN_32
42 # define STRIDE_ALIGN 32
43 #elif HAVE_SIMD_ALIGN_16
44 # define STRIDE_ALIGN 16
45 #else
46 # define STRIDE_ALIGN 8
47 #endif
48 
49 typedef struct AVCodecInternal {
50  /**
51  * When using frame-threaded decoding, this field is set for the first
52  * worker thread (e.g. to decode extradata just once).
53  */
54  int is_copy;
55 
56  /**
57  * This field is set to 1 when frame threading is being used and the parent
58  * AVCodecContext of this AVCodecInternal is a worker-thread context (i.e.
59  * one of those actually doing the decoding), 0 otherwise.
60  */
62 
63  /**
64  * Audio encoders can set this flag during init to indicate that they
65  * want the small last frame to be padded to a multiple of pad_samples.
66  */
68 
69  struct FramePool *pool;
70 
72 
73  void *thread_ctx;
74 
75  /**
76  * This packet is used to hold the packet given to decoders
77  * implementing the .decode API; it is unused by the generic
78  * code for decoders implementing the .receive_frame API and
79  * may be freely used (but not freed) by them with the caveat
80  * that the packet will be unreferenced generically in
81  * avcodec_flush_buffers().
82  */
84  struct AVBSFContext *bsf;
85 
86  /**
87  * Properties (timestamps+side data) extracted from the last packet passed
88  * for decoding.
89  */
91 
92  /**
93  * temporary buffer used for encoders to store their bitstream
94  */
95  uint8_t *byte_buffer;
96  unsigned int byte_buffer_size;
97 
99 
100  /**
101  * The input frame is stored here for encoders implementing the simple
102  * encode API.
103  *
104  * Not allocated in other cases.
105  */
107 
108  /**
109  * When the AV_CODEC_FLAG_RECON_FRAME flag is used. the encoder should store
110  * here the reconstructed frame corresponding to the last returned packet.
111  *
112  * Not allocated in other cases.
113  */
115 
116  /**
117  * If this is set, then FFCodec->close (if existing) needs to be called
118  * for the parent AVCodecContext.
119  */
121 
122  /**
123  * Number of audio samples to skip at the start of the next decoded frame
124  */
126 
127  /**
128  * hwaccel-specific private data
129  */
131 
132  /**
133  * decoding: AVERROR_EOF has been returned from ff_decode_get_packet(); must
134  * not be used by decoders that use the decode() callback, as they
135  * do not call ff_decode_get_packet() directly.
136  *
137  * encoding: a flush frame has been submitted to avcodec_send_frame().
138  */
139  int draining;
140 
141  /**
142  * Temporary buffers for newly received or not yet output packets/frames.
143  */
147 
148 #if FF_API_DROPCHANGED
149  /* used when avctx flag AV_CODEC_FLAG_DROPCHANGED is set */
155 #endif
156 
157 #if CONFIG_LCMS2
158  FFIccContext icc; /* used to read and write embedded ICC profiles */
159 #endif
160 
161  /**
162  * Set when the user has been warned about a failed allocation from
163  * a fixed frame pool.
164  */
167 
168 /**
169  * Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
170  * If there is no such matching pair then size is returned.
171  */
172 int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b);
173 
174 unsigned int ff_toupper4(unsigned int x);
175 
177 
179 
180 /**
181  * Check AVFrame for S12M timecode side data and allocate and fill TC SEI message with timecode info
182  *
183  * @param frame Raw frame to get S12M timecode side data from
184  * @param rate The frame rate
185  * @param prefix_len Number of bytes to allocate before SEI message
186  * @param data Pointer to a variable to store allocated memory
187  * Upon return the variable will hold NULL on error or if frame has no S12M timecode info.
188  * Otherwise it will point to prefix_len uninitialized bytes followed by
189  * *sei_size SEI message
190  * @param sei_size Pointer to a variable to store generated SEI message length
191  * @return Zero on success, negative error code on failure
192  */
193 int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len,
194  void **data, size_t *sei_size);
195 
196 /**
197  * Get an estimated video bitrate based on frame size, frame rate and coded
198  * bits per pixel.
199  */
201 
202 #endif /* AVCODEC_INTERNAL_H */
ff_guess_coded_bitrate
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:1057
AVCodecInternal::initial_sample_rate
int initial_sample_rate
Definition: internal.h:153
AVCodec
AVCodec.
Definition: codec.h:187
AVCodecInternal::skip_samples
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
Definition: internal.h:125
int64_t
long long int64_t
Definition: coverity.c:34
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:389
AVCodecInternal::frame_thread_encoder
void * frame_thread_encoder
Definition: internal.h:98
AVCodecInternal::in_frame
AVFrame * in_frame
The input frame is stored here for encoders implementing the simple encode API.
Definition: internal.h:106
b
#define b
Definition: input.c:41
data
const char data[16]
Definition: mxf.c:149
ff_toupper4
unsigned int ff_toupper4(unsigned int x)
Definition: to_upper4.h:29
AVBSFContext
The bitstream filter state.
Definition: bsf.h:68
AVCodecInternal::is_copy
int is_copy
When using frame-threaded decoding, this field is set for the first worker thread (e....
Definition: internal.h:54
AVCodecInternal::progress_frame_pool
struct FFRefStructPool * progress_frame_pool
Definition: internal.h:71
ff_match_2uint16
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:826
tab
static const struct twinvq_data tab
Definition: twinvq_data.h:10345
AVCodecInternal::buffer_pkt
AVPacket * buffer_pkt
Temporary buffers for newly received or not yet output packets/frames.
Definition: internal.h:144
AVCodecInternal::pool
struct FramePool * pool
Definition: internal.h:69
FFRefStructPool
FFRefStructPool is an API for a thread-safe pool of objects managed via the RefStruct API.
Definition: refstruct.c:183
AVCodecInternal::changed_frames_dropped
int changed_frames_dropped
Definition: internal.h:150
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVCodecInternal::initial_height
int initial_height
Definition: internal.h:152
AVCodecInternal::draining_done
int draining_done
Definition: internal.h:146
AVCodecInternal::last_pkt_props
AVPacket * last_pkt_props
Properties (timestamps+side data) extracted from the last packet passed for decoding.
Definition: internal.h:90
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:311
AVCodecInternal::hwaccel_priv_data
void * hwaccel_priv_data
hwaccel-specific private data
Definition: internal.h:130
ff_alloc_timecode_sei
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:993
AVCodecInternal::initial_format
int initial_format
Definition: internal.h:151
AVCodecInternal::bsf
struct AVBSFContext * bsf
Definition: internal.h:84
size
int size
Definition: twinvq_data.h:10344
AVCodecInternal::byte_buffer
uint8_t * byte_buffer
temporary buffer used for encoders to store their bitstream
Definition: internal.h:95
a
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:41
AVCodecInternal
Definition: internal.h:49
AVCodecInternal::byte_buffer_size
unsigned int byte_buffer_size
Definition: internal.h:96
AVCodecInternal::is_frame_mt
int is_frame_mt
This field is set to 1 when frame threading is being used and the parent AVCodecContext of this AVCod...
Definition: internal.h:61
FFIccContext
Definition: fflcms2.h:34
AVCodecInternal::initial_width
int initial_width
Definition: internal.h:152
AVCodecInternal::in_pkt
AVPacket * in_pkt
This packet is used to hold the packet given to decoders implementing the .decode API; it is unused b...
Definition: internal.h:83
avcodec.h
frame
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
Definition: filter_design.txt:264
FramePool
Definition: get_buffer.c:37
AVCodecInternal::recon_frame
AVFrame * recon_frame
When the AV_CODEC_FLAG_RECON_FRAME flag is used.
Definition: internal.h:114
AVCodecInternal::needs_close
int needs_close
If this is set, then FFCodec->close (if existing) needs to be called for the parent AVCodecContext.
Definition: internal.h:120
AVCodecContext
main external API structure.
Definition: avcodec.h:451
channel_layout.h
AVCodecInternal::pad_samples
int pad_samples
Audio encoders can set this flag during init to indicate that they want the small last frame to be pa...
Definition: internal.h:67
AVCodecInternal::buffer_frame
AVFrame * buffer_frame
Definition: internal.h:145
AVCodecInternal::draining
int draining
decoding: AVERROR_EOF has been returned from ff_decode_get_packet(); must not be used by decoders tha...
Definition: internal.h:139
AVCodecInternal::initial_ch_layout
AVChannelLayout initial_ch_layout
Definition: internal.h:154
AVPacket
This structure stores compressed data.
Definition: packet.h:516
AVCodecInternal::thread_ctx
void * thread_ctx
Definition: internal.h:73
avpriv_h264_has_num_reorder_frames
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264dec.c:61
AVCodecInternal::warned_on_failed_allocation_from_fixed_pool
int warned_on_failed_allocation_from_fixed_pool
Set when the user has been warned about a failed allocation from a fixed frame pool.
Definition: internal.h:165
avpriv_codec_get_cap_skip_frame_fill_param
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition: utils.c:405