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" 30#include "libavutil/channel_layout.h" 31#include "libavutil/mathematics.h" 32#include "libavutil/pixfmt.h" 33#include "avcodec.h" 34#include "config.h" 35 36#define FF_SANE_NB_CHANNELS 512U 37 38#if HAVE_SIMD_ALIGN_64 39# define STRIDE_ALIGN 64 /* AVX-512 */ 40#elif HAVE_SIMD_ALIGN_32 41# define STRIDE_ALIGN 32 42#elif HAVE_SIMD_ALIGN_16 43# define STRIDE_ALIGN 16 44#else 45# define STRIDE_ALIGN 8 46#endif 47 48typedef struct AVCodecInternal { 49 /** 50 * When using frame-threaded decoding, this field is set for the first 51 * worker thread (e.g. to decode extradata just once). 52 */ 53 int is_copy; 54 55 /** 56 * An audio frame with less than required samples has been submitted and 57 * padded with silence. Reject all subsequent frames. 58 */ 59 int last_audio_frame; 60 61 AVBufferRef *pool; 62 63 void *thread_ctx; 64 65 /** 66 * This packet is used to hold the packet given to decoders 67 * implementing the .decode API; it is unused by the generic 68 * code for decoders implementing the .receive_frame API and 69 * may be freely used (but not freed) by them with the caveat 70 * that the packet will be unreferenced generically in 71 * avcodec_flush_buffers(). 72 */ 73 AVPacket *in_pkt; 74 struct AVBSFContext *bsf; 75 76 /** 77 * Properties (timestamps+side data) extracted from the last packet passed 78 * for decoding. 79 */ 80 AVPacket *last_pkt_props; 81 struct AVFifo *pkt_props; 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 89 /** 90 * This is set to AV_PKT_FLAG_KEY for encoders that encode intra-only 91 * formats (i.e. whose codec descriptor has AV_CODEC_PROP_INTRA_ONLY set). 92 * This is used to set said flag generically for said encoders. 93 */ 94 int intra_only_flag; 95 96 void *frame_thread_encoder; 97 98 /** 99 * The input frame is stored here for encoders implementing the simple 100 * encode API. 101 * 102 * Not allocated in other cases. 103 */ 104 AVFrame *in_frame; 105 106 /** 107 * If this is set, then FFCodec->close (if existing) needs to be called 108 * for the parent AVCodecContext. 109 */ 110 int needs_close; 111 112 /** 113 * Number of audio samples to skip at the start of the next decoded frame 114 */ 115 int skip_samples; 116 117 /** 118 * hwaccel-specific private data 119 */ 120 void *hwaccel_priv_data; 121 122 /** 123 * checks API usage: after codec draining, flush is required to resume operation 124 */ 125 int draining; 126 127 /** 128 * buffers for using new encode/decode API through legacy API 129 */ 130 AVPacket *buffer_pkt; 131 AVFrame *buffer_frame; 132 int draining_done; 133 134 int showed_multi_packet_warning; 135 136 int skip_samples_multiplier; 137 138 /* to prevent infinite loop on errors when draining */ 139 int nb_draining_errors; 140 141 /* used when avctx flag AV_CODEC_FLAG_DROPCHANGED is set */ 142 int changed_frames_dropped; 143 int initial_format; 144 int initial_width, initial_height; 145 int initial_sample_rate; 146#if FF_API_OLD_CHANNEL_LAYOUT 147 int initial_channels; 148 uint64_t initial_channel_layout; 149#endif 150 AVChannelLayout initial_ch_layout; 151} AVCodecInternal; 152 153/** 154 * Return the index into tab at which {a,b} match elements {[0],[1]} of tab. 155 * If there is no such matching pair then size is returned. 156 */ 157int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b); 158 159unsigned int ff_toupper4(unsigned int x); 160 161void ff_color_frame(AVFrame *frame, const int color[4]); 162 163/** 164 * Maximum size in bytes of extradata. 165 * This value was chosen such that every bit of the buffer is 166 * addressable by a 32-bit signed integer as used by get_bits. 167 */ 168#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE) 169 170/** 171 * Rescale from sample rate to AVCodecContext.time_base. 172 */ 173static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, 174 int64_t samples) 175{ 176 if(samples == AV_NOPTS_VALUE) 177 return AV_NOPTS_VALUE; 178 return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate }, 179 avctx->time_base); 180} 181 182/** 183 * 2^(x) for integer x 184 * @return correctly rounded float 185 */ 186static av_always_inline float ff_exp2fi(int x) { 187 /* Normal range */ 188 if (-126 <= x && x <= 128) 189 return av_int2float((x+127) << 23); 190 /* Too large */ 191 else if (x > 128) 192 return INFINITY; 193 /* Subnormal numbers */ 194 else if (x > -150) 195 return av_int2float(1 << (x+149)); 196 /* Negligibly small */ 197 else 198 return 0; 199} 200 201/** 202 * Get a buffer for a frame. This is a wrapper around 203 * AVCodecContext.get_buffer() and should be used instead calling get_buffer() 204 * directly. 205 */ 206int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); 207 208#define FF_REGET_BUFFER_FLAG_READONLY 1 ///< the returned buffer does not need to be writable 209/** 210 * Identical in function to ff_get_buffer(), except it reuses the existing buffer 211 * if available. 212 */ 213int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); 214 215int ff_thread_can_start_frame(AVCodecContext *avctx); 216 217int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx); 218 219int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec); 220 221/** 222 * Check that the provided frame dimensions are valid and set them on the codec 223 * context. 224 */ 225int ff_set_dimensions(AVCodecContext *s, int width, int height); 226 227/** 228 * Check that the provided sample aspect ratio is valid and set it on the codec 229 * context. 230 */ 231int ff_set_sar(AVCodecContext *avctx, AVRational sar); 232 233/** 234 * Add or update AV_FRAME_DATA_MATRIXENCODING side data. 235 */ 236int ff_side_data_update_matrix_encoding(AVFrame *frame, 237 enum AVMatrixEncoding matrix_encoding); 238 239/** 240 * Select the (possibly hardware accelerated) pixel format. 241 * This is a wrapper around AVCodecContext.get_format() and should be used 242 * instead of calling get_format() directly. 243 * 244 * The list of pixel formats must contain at least one valid entry, and is 245 * terminated with AV_PIX_FMT_NONE. If it is possible to decode to software, 246 * the last entry in the list must be the most accurate software format. 247 * If it is not possible to decode to software, AVCodecContext.sw_pix_fmt 248 * must be set before calling this function. 249 */ 250int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); 251 252/** 253 * Add a CPB properties side data to an encoding context. 254 */ 255AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx); 256 257/** 258 * Check AVFrame for S12M timecode side data and allocate and fill TC SEI message with timecode info 259 * 260 * @param frame Raw frame to get S12M timecode side data from 261 * @param rate The frame rate 262 * @param prefix_len Number of bytes to allocate before SEI message 263 * @param data Pointer to a variable to store allocated memory 264 * Upon return the variable will hold NULL on error or if frame has no S12M timecode info. 265 * Otherwise it will point to prefix_len uninitialized bytes followed by 266 * *sei_size SEI message 267 * @param sei_size Pointer to a variable to store generated SEI message length 268 * @return Zero on success, negative error code on failure 269 */ 270int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len, 271 void **data, size_t *sei_size); 272 273/** 274 * Get an estimated video bitrate based on frame size, frame rate and coded 275 * bits per pixel. 276 */ 277int64_t ff_guess_coded_bitrate(AVCodecContext *avctx); 278 279/** 280 * Check if a value is in the list. If not, return the default value 281 * 282 * @param ctx Context for the log msg 283 * @param val_name Name of the checked value, for log msg 284 * @param array_valid_values Array of valid int, ended with INT_MAX 285 * @param default_value Value return if checked value is not in the array 286 * @return Value or default_value. 287 */ 288int ff_int_from_list_or_default(void *ctx, const char * val_name, int val, 289 const int * array_valid_values, int default_value); 290 291void ff_dvdsub_parse_palette(uint32_t *palette, const char *p); 292 293#endif /* AVCODEC_INTERNAL_H */ 294