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 #if CONFIG_LCMS2
37 # include "fflcms2.h"
38 #endif
39 
40 #define FF_SANE_NB_CHANNELS 512U
41 
42 #if HAVE_SIMD_ALIGN_64
43 # define STRIDE_ALIGN 64 /* AVX-512 */
44 #elif HAVE_SIMD_ALIGN_32
45 # define STRIDE_ALIGN 32
46 #elif HAVE_SIMD_ALIGN_16
47 # define STRIDE_ALIGN 16
48 #else
49 # define STRIDE_ALIGN 8
50 #endif
51 
52 typedef struct AVCodecInternal {
53  /**
54  * When using frame-threaded decoding, this field is set for the first
55  * worker thread (e.g. to decode extradata just once).
56  */
57  int is_copy;
58 
59  /**
60  * Audio encoders can set this flag during init to indicate that they
61  * want the small last frame to be padded to a multiple of pad_samples.
62  */
64 
65  struct FramePool *pool;
66 
67  void *thread_ctx;
68 
69  /**
70  * This packet is used to hold the packet given to decoders
71  * implementing the .decode API; it is unused by the generic
72  * code for decoders implementing the .receive_frame API and
73  * may be freely used (but not freed) by them with the caveat
74  * that the packet will be unreferenced generically in
75  * avcodec_flush_buffers().
76  */
78  struct AVBSFContext *bsf;
79 
80  /**
81  * Properties (timestamps+side data) extracted from the last packet passed
82  * for decoding.
83  */
85 
86  /**
87  * temporary buffer used for encoders to store their bitstream
88  */
89  uint8_t *byte_buffer;
90  unsigned int byte_buffer_size;
91 
93 
94  /**
95  * The input frame is stored here for encoders implementing the simple
96  * encode API.
97  *
98  * Not allocated in other cases.
99  */
101 
102  /**
103  * When the AV_CODEC_FLAG_RECON_FRAME flag is used. the encoder should store
104  * here the reconstructed frame corresponding to the last returned packet.
105  *
106  * Not allocated in other cases.
107  */
109 
110  /**
111  * If this is set, then FFCodec->close (if existing) needs to be called
112  * for the parent AVCodecContext.
113  */
115 
116  /**
117  * Number of audio samples to skip at the start of the next decoded frame
118  */
120 
121  /**
122  * hwaccel-specific private data
123  */
125 
126  /**
127  * checks API usage: after codec draining, flush is required to resume operation
128  */
129  int draining;
130 
131  /**
132  * Temporary buffers for newly received or not yet output packets/frames.
133  */
137 
138 #if FF_API_DROPCHANGED
139  /* used when avctx flag AV_CODEC_FLAG_DROPCHANGED is set */
145 #endif
146 
147 #if CONFIG_LCMS2
148  FFIccContext icc; /* used to read and write embedded ICC profiles */
149 #endif
151 
152 /**
153  * Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
154  * If there is no such matching pair then size is returned.
155  */
156 int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b);
157 
158 unsigned int ff_toupper4(unsigned int x);
159 
160 /**
161  * 2^(x) for integer x
162  * @return correctly rounded float
163  */
164 static av_always_inline float ff_exp2fi(int x) {
165  /* Normal range */
166  if (-126 <= x && x <= 128)
167  return av_int2float((x+127) << 23);
168  /* Too large */
169  else if (x > 128)
170  return INFINITY;
171  /* Subnormal numbers */
172  else if (x > -150)
173  return av_int2float(1 << (x+149));
174  /* Negligibly small */
175  else
176  return 0;
177 }
178 
180 
182 
183 /**
184  * Check AVFrame for S12M timecode side data and allocate and fill TC SEI message with timecode info
185  *
186  * @param frame Raw frame to get S12M timecode side data from
187  * @param rate The frame rate
188  * @param prefix_len Number of bytes to allocate before SEI message
189  * @param data Pointer to a variable to store allocated memory
190  * Upon return the variable will hold NULL on error or if frame has no S12M timecode info.
191  * Otherwise it will point to prefix_len uninitialized bytes followed by
192  * *sei_size SEI message
193  * @param sei_size Pointer to a variable to store generated SEI message length
194  * @return Zero on success, negative error code on failure
195  */
196 int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len,
197  void **data, size_t *sei_size);
198 
199 /**
200  * Get an estimated video bitrate based on frame size, frame rate and coded
201  * bits per pixel.
202  */
203 int64_t ff_guess_coded_bitrate(AVCodecContext *avctx);
204 
205 #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:143
AVCodec
AVCodec.
Definition: codec.h:187
INFINITY
#define INFINITY
Definition: mathematics.h:118
AVCodecInternal::skip_samples
int skip_samples
Number of audio samples to skip at the start of the next decoded frame.
Definition: internal.h:119
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:92
AVCodecInternal::in_frame
AVFrame * in_frame
The input frame is stored here for encoders implementing the simple encode API.
Definition: internal.h:100
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
mathematics.h
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:57
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
av_int2float
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float.
Definition: intfloat.h:40
tab
static const struct twinvq_data tab
Definition: twinvq_data.h:10345
ff_exp2fi
static av_always_inline float ff_exp2fi(int x)
2^(x) for integer x
Definition: internal.h:164
AVCodecInternal::buffer_pkt
AVPacket * buffer_pkt
Temporary buffers for newly received or not yet output packets/frames.
Definition: internal.h:134
AVCodecInternal::pool
struct FramePool * pool
Definition: internal.h:65
frame
static AVFrame * frame
Definition: demux_decode.c:54
AVCodecInternal::changed_frames_dropped
int changed_frames_dropped
Definition: internal.h:140
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
AVCodecInternal::initial_height
int initial_height
Definition: internal.h:142
AVCodecInternal::draining_done
int draining_done
Definition: internal.h:136
AVCodecInternal::last_pkt_props
AVPacket * last_pkt_props
Properties (timestamps+side data) extracted from the last packet passed for decoding.
Definition: internal.h:84
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:307
AVCodecInternal::hwaccel_priv_data
void * hwaccel_priv_data
hwaccel-specific private data
Definition: internal.h:124
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:141
AVCodecInternal::bsf
struct AVBSFContext * bsf
Definition: internal.h:78
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:89
buffer.h
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:52
AVCodecInternal::byte_buffer_size
unsigned int byte_buffer_size
Definition: internal.h:90
FFIccContext
Definition: fflcms2.h:34
AVCodecInternal::initial_width
int initial_width
Definition: internal.h:142
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:77
av_always_inline
#define av_always_inline
Definition: attributes.h:49
avcodec.h
pixfmt.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:108
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:114
AVCodecContext
main external API structure.
Definition: avcodec.h:441
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:63
AVCodecInternal::buffer_frame
AVFrame * buffer_frame
Definition: internal.h:135
AVCodecInternal::draining
int draining
checks API usage: after codec draining, flush is required to resume operation
Definition: internal.h:129
AVCodecInternal::initial_ch_layout
AVChannelLayout initial_ch_layout
Definition: internal.h:144
AVPacket
This structure stores compressed data.
Definition: packet.h:468
AVCodecInternal::thread_ctx
void * thread_ctx
Definition: internal.h:67
avpriv_h264_has_num_reorder_frames
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx)
Definition: h264dec.c:59
avpriv_codec_get_cap_skip_frame_fill_param
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec)
Definition: utils.c:413