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  * Audio encoders can set this flag during init to indicate that they
58  * want the small last frame to be padded to a multiple of pad_samples.
59  */
61 
62  struct FramePool *pool;
63 
64  void *thread_ctx;
65 
66  /**
67  * This packet is used to hold the packet given to decoders
68  * implementing the .decode API; it is unused by the generic
69  * code for decoders implementing the .receive_frame API and
70  * may be freely used (but not freed) by them with the caveat
71  * that the packet will be unreferenced generically in
72  * avcodec_flush_buffers().
73  */
75  struct AVBSFContext *bsf;
76 
77  /**
78  * Properties (timestamps+side data) extracted from the last packet passed
79  * for decoding.
80  */
82 
83  /**
84  * temporary buffer used for encoders to store their bitstream
85  */
86  uint8_t *byte_buffer;
87  unsigned int byte_buffer_size;
88 
90 
91  /**
92  * The input frame is stored here for encoders implementing the simple
93  * encode API.
94  *
95  * Not allocated in other cases.
96  */
98 
99  /**
100  * When the AV_CODEC_FLAG_RECON_FRAME flag is used. the encoder should store
101  * here the reconstructed frame corresponding to the last returned packet.
102  *
103  * Not allocated in other cases.
104  */
106 
107  /**
108  * If this is set, then FFCodec->close (if existing) needs to be called
109  * for the parent AVCodecContext.
110  */
112 
113  /**
114  * Number of audio samples to skip at the start of the next decoded frame
115  */
117 
118  /**
119  * hwaccel-specific private data
120  */
122 
123  /**
124  * checks API usage: after codec draining, flush is required to resume operation
125  */
126  int draining;
127 
128  /**
129  * Temporary buffers for newly received or not yet output packets/frames.
130  */
134 
135 #if FF_API_DROPCHANGED
136  /* used when avctx flag AV_CODEC_FLAG_DROPCHANGED is set */
142 #endif
143 
144 #if CONFIG_LCMS2
145  FFIccContext icc; /* used to read and write embedded ICC profiles */
146 #endif
148 
149 /**
150  * Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
151  * If there is no such matching pair then size is returned.
152  */
153 int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b);
154 
155 unsigned int ff_toupper4(unsigned int x);
156 
158 
160 
161 /**
162  * Check AVFrame for S12M timecode side data and allocate and fill TC SEI message with timecode info
163  *
164  * @param frame Raw frame to get S12M timecode side data from
165  * @param rate The frame rate
166  * @param prefix_len Number of bytes to allocate before SEI message
167  * @param data Pointer to a variable to store allocated memory
168  * Upon return the variable will hold NULL on error or if frame has no S12M timecode info.
169  * Otherwise it will point to prefix_len uninitialized bytes followed by
170  * *sei_size SEI message
171  * @param sei_size Pointer to a variable to store generated SEI message length
172  * @return Zero on success, negative error code on failure
173  */
174 int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len,
175  void **data, size_t *sei_size);
176 
177 /**
178  * Get an estimated video bitrate based on frame size, frame rate and coded
179  * bits per pixel.
180  */
181 int64_t ff_guess_coded_bitrate(AVCodecContext *avctx);
182 
183 #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:1083
AVCodecInternal::initial_sample_rate
int initial_sample_rate
Definition: internal.h:140
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:116
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:340
AVCodecInternal::frame_thread_encoder
void * frame_thread_encoder
Definition: internal.h:89
AVCodecInternal::in_frame
AVFrame * in_frame
The input frame is stored here for encoders implementing the simple encode API.
Definition: internal.h:97
b
#define b
Definition: input.c:41
data
const char data[16]
Definition: mxf.c:148
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
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:852
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:131
AVCodecInternal::pool
struct FramePool * pool
Definition: internal.h:62
frame
static AVFrame * frame
Definition: demux_decode.c:54
AVCodecInternal::changed_frames_dropped
int changed_frames_dropped
Definition: internal.h:137
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVCodecInternal::initial_height
int initial_height
Definition: internal.h:139
AVCodecInternal::draining_done
int draining_done
Definition: internal.h:133
AVCodecInternal::last_pkt_props
AVPacket * last_pkt_props
Properties (timestamps+side data) extracted from the last packet passed for decoding.
Definition: internal.h:81
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:313
AVCodecInternal::hwaccel_priv_data
void * hwaccel_priv_data
hwaccel-specific private data
Definition: internal.h:121
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:1019
AVCodecInternal::initial_format
int initial_format
Definition: internal.h:138
AVCodecInternal::bsf
struct AVBSFContext * bsf
Definition: internal.h:75
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:86
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:87
FFIccContext
Definition: fflcms2.h:34
AVCodecInternal::initial_width
int initial_width
Definition: internal.h:139
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:74
avcodec.h
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:105
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:111
AVCodecContext
main external API structure.
Definition: avcodec.h:445
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:60
AVCodecInternal::buffer_frame
AVFrame * buffer_frame
Definition: internal.h:132
AVCodecInternal::draining
int draining
checks API usage: after codec draining, flush is required to resume operation
Definition: internal.h:126
AVCodecInternal::initial_ch_layout
AVChannelLayout initial_ch_layout
Definition: internal.h:141
AVPacket
This structure stores compressed data.
Definition: packet.h:499
AVCodecInternal::thread_ctx
void * thread_ctx
Definition: internal.h:64
avpriv_h264_has_num_reorder_frames
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264dec.c:60
avpriv_codec_get_cap_skip_frame_fill_param
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition: utils.c:413