FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
mpegvideoenc.h
Go to the documentation of this file.
1 /*
2  * Generic DCT based hybrid video encoder
3  * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4  * Copyright (c) 2002-2004 Michael Niedermayer
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 /**
24  * @file
25  * mpegvideo header.
26  */
27 
28 #ifndef AVCODEC_MPEGVIDEOENC_H
29 #define AVCODEC_MPEGVIDEOENC_H
30 
31 #include <float.h>
32 
33 #include "libavutil/avassert.h"
34 #include "libavutil/opt.h"
35 #include "fdctdsp.h"
36 #include "motion_est.h"
37 #include "mpegvideo.h"
38 #include "mpegvideoencdsp.h"
39 #include "pixblockdsp.h"
40 #include "put_bits.h"
41 #include "ratecontrol.h"
42 
43 #define MPVENC_MAX_B_FRAMES 16
44 
45 typedef struct MPVEncContext {
46  MpegEncContext c; ///< the common base context
47 
48  /** bit output */
50 
51  unsigned int lambda; ///< Lagrange multiplier used in rate distortion
52  unsigned int lambda2; ///< (lambda*lambda) >> FF_LAMBDA_SHIFT
54  int adaptive_quant; ///< use adaptive quantization
55  int dquant; ///< qscale difference to prev qscale
56  int skipdct; ///< skip dct and code zero residual
57 
59 
62 
63  int mpv_flags; ///< flags set by private options
64  /// Bitfield containing information which frames to reconstruct.
66 
67  /**
68  * Reference to the source picture.
69  */
71 
76 
77  int16_t (*p_mv_table)[2]; ///< MV table (1MV per MB) P-frame
78  int16_t (*b_forw_mv_table)[2]; ///< MV table (1MV per MB) forward mode B-frame
79  int16_t (*b_back_mv_table)[2]; ///< MV table (1MV per MB) backward mode B-frame
80  int16_t (*b_bidir_forw_mv_table)[2]; ///< MV table (1MV per MB) bidir mode B-frame
81  int16_t (*b_bidir_back_mv_table)[2]; ///< MV table (1MV per MB) bidir mode B-frame
82  int16_t (*b_direct_mv_table)[2]; ///< MV table (1MV per MB) direct mode B-frame
83  int16_t (*b_field_mv_table[2][2][2])[2];///< MV table (4MV per MB) interlaced B-frame
84  uint8_t (*p_field_select_table[2]); ///< Only the first element is allocated
85  uint8_t (*b_field_select_table[2][2]); ///< allocated jointly with p_field_select_table
86 
87  uint16_t *mb_type; ///< Table for candidate MB types
88  uint16_t *mb_var; ///< Table for MB variances
89  uint16_t *mc_mb_var; ///< Table for motion compensated MB variances
90  uint8_t *mb_mean; ///< Table for MB luminance
92 
93  int intra_quant_bias; ///< bias for the quantizer
94  int inter_quant_bias; ///< bias for the quantizer
95  int min_qcoeff; ///< minimum encodable coefficient
96  int max_qcoeff; ///< maximum encodable coefficient
97  int ac_esc_length; ///< num of bits needed to encode the longest esc
98  const uint8_t *intra_ac_vlc_length;
99  const uint8_t *intra_ac_vlc_last_length;
102  const uint8_t *inter_ac_vlc_length;
103  const uint8_t *inter_ac_vlc_last_length;
104  const uint8_t *luma_dc_vlc_length;
105 
106  int coded_score[12];
107 
108  /** precomputed matrix (combine qscale and DCT renorm) */
109  int (*q_intra_matrix)[64];
111  int (*q_inter_matrix)[64];
112  /** identical to the above but for MMX & these are not permutated, second 64 entries are bias*/
113  uint16_t (*q_intra_matrix16)[2][64];
114  uint16_t (*q_chroma_intra_matrix16)[2][64];
115  uint16_t (*q_inter_matrix16)[2][64];
116 
117  /* noise reduction */
118  void (*denoise_dct)(struct MPVEncContext *s, int16_t *block);
119  int (*dct_error_sum)[64];
120  int dct_count[2];
121  uint16_t (*dct_offset)[64];
122 
123  /* statistics, used for 2-pass encoding */
124  int mv_bits;
127  int i_count;
128  int misc_bits; ///< cbp, mb_type
129  int last_bits; ///< temp var used for calculating the above vars
130 
131  /* H.263 specific */
132  int mb_info; ///< interval for outputting info about mb offsets as side data
135  uint8_t *mb_info_ptr;
136 
137  /* MJPEG specific */
139  int esc_pos;
140 
141  /* MPEG-1 specific */
142  int last_mv_dir; ///< last mv_dir, used for B-frame encoding
143 
144  /* MPEG-4 specific */
145  PutBitContext tex_pb; ///< used for data partitioned VOPs
146  PutBitContext pb2; ///< used for data partitioned VOPs
147 
148  /* MSMPEG4 specific */
150 
151  /* RTP specific */
152  int rtp_mode;
155 
156  uint8_t *ptr_lastgob;
157 
158  void (*encode_mb)(struct MPVEncContext *s, int16_t block[][64],
159  int motion_x, int motion_y);
160 
161  int (*dct_quantize)(struct MPVEncContext *s, int16_t *block/*align 16*/, int n, int qscale, int *overflow);
162 
163  me_cmp_func ildct_cmp[2]; ///< 0 = intra, 1 = non-intra
164  me_cmp_func n_sse_cmp[2]; ///< either SSE or NSSE cmp func
167  int (*sum_abs_dctelem)(const int16_t *block);
168 
170 } MPVEncContext;
171 
172 typedef struct MPVMainEncContext {
173  MPVEncContext s; ///< The main slicecontext
174 
175  int intra_only; ///< if true, only intra pictures are generated
176  int gop_size;
177  int max_b_frames; ///< max number of B-frames
178  int picture_in_gop_number; ///< 0-> first pic in gop, ...
179  int input_picture_number; ///< used to set pic->display_picture_number
180  int coded_picture_number; ///< used to set pic->coded_picture_number
181 
182  MPVPicture *input_picture[MPVENC_MAX_B_FRAMES + 1]; ///< next pictures in display order
183  MPVPicture *reordered_input_picture[MPVENC_MAX_B_FRAMES + 1]; ///< next pictures in coded order
184 
185  int64_t user_specified_pts; ///< last non-zero pts from user-supplied AVFrame
186  /**
187  * pts difference between the first and second input frame, used for
188  * calculating dts of the first frame when there's a delay */
190  /**
191  * reordered pts to be used as dts for the next output frame when there's
192  * a delay */
194 
195  /// temporary frames used by b_frame_strategy = 2
200 
202 
204 
206  int lmin, lmax;
208 
209  /* MPEG-1/2 specific */
210  int vbv_delay_pos; ///< offset of vbv_delay in the bitstream
211 
212  const uint8_t *fcode_tab; ///< smallest fcode needed for each MV
213 
214  /* frame skip options */
220 
222 
223  /* bit rate control */
226  int frame_bits; ///< bits used for the current frame
228  int stuffing_bits; ///< bits used for stuffing
229  int next_lambda; ///< next lambda used for retrying to encode a frame
230  int fixed_qscale; ///< fixed qscale if non zero
231  int last_lambda_for[5]; ///< last lambda for a specific pict type
232  int last_pict_type; //FIXME removes
233  int last_non_b_pict_type; ///< used for MPEG-4 gmc B-frames & ratecontrol
234  RateControlContext rc_context; ///< contains stuff only accessed in ratecontrol.c
235 
237  int me_pre; ///< prepass for motion estimation
238 
239  int64_t mb_var_sum; ///< sum of MB variance for current frame
240  int64_t mc_mb_var_sum; ///< motion compensated MB variance for current frame
241 
242  char *me_map_base; ///< backs MotionEstContext.(map|score_map)
243  char *dct_error_sum_base; ///< backs dct_error_sum
244  int16_t (*mv_table_base)[2];
246 
247 static inline const MPVMainEncContext *slice_to_mainenc(const MPVEncContext *s)
248 {
249 #ifdef NO_SLICE_THREADING_HERE
250  av_assert2(s->c.slice_context_count <= 1 &&
251  !(s->c.avctx->codec->capabilities & AV_CODEC_CAP_SLICE_THREADS));
252  return (const MPVMainEncContext*)s;
253 #else
254  return s->c.encparent;
255 #endif
256 }
257 
258 #define MAX_FCODE 7
259 #define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
260 #define INPLACE_OFFSET 16
261 
262 /* MB types for encoding */
263 #define CANDIDATE_MB_TYPE_INTRA (1 << 0)
264 #define CANDIDATE_MB_TYPE_INTER (1 << 1)
265 #define CANDIDATE_MB_TYPE_INTER4V (1 << 2)
266 #define CANDIDATE_MB_TYPE_SKIPPED (1 << 3)
267 
268 #define CANDIDATE_MB_TYPE_DIRECT (1 << 4)
269 #define CANDIDATE_MB_TYPE_FORWARD (1 << 5)
270 #define CANDIDATE_MB_TYPE_BACKWARD (1 << 6)
271 #define CANDIDATE_MB_TYPE_BIDIR (1 << 7)
272 
273 #define CANDIDATE_MB_TYPE_INTER_I (1 << 8)
274 #define CANDIDATE_MB_TYPE_FORWARD_I (1 << 9)
275 #define CANDIDATE_MB_TYPE_BACKWARD_I (1 << 10)
276 #define CANDIDATE_MB_TYPE_BIDIR_I (1 << 11)
277 
278 #define CANDIDATE_MB_TYPE_DIRECT0 (1 << 12)
279 
280 /* mpegvideo_enc common options */
281 #define FF_MPV_FLAG_SKIP_RD 0x0001
282 #define FF_MPV_FLAG_STRICT_GOP 0x0002
283 #define FF_MPV_FLAG_QP_RD 0x0004
284 #define FF_MPV_FLAG_CBP_RD 0x0008
285 #define FF_MPV_FLAG_NAQ 0x0010
286 #define FF_MPV_FLAG_MV0 0x0020
287 
288 #define FF_MPV_OPT_CMP_FUNC \
289 { "sad", "Sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
290 { "sse", "Sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
291 { "satd", "Sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
292 { "dct", "Sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
293 { "psnr", "Sum of squared quantization errors, low quality", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
294 { "bit", "Number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
295 { "rd", "Rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
296 { "zero", "Zero", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
297 { "vsad", "Sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
298 { "vsse", "Sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
299 { "nsse", "Noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
300 { "dct264", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT264 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
301 { "dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
302 { "chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
303 { "msad", "Sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }
304 
305 #define FF_MPV_OFFSET(x) offsetof(MPVEncContext, x)
306 #define FF_MPV_MAIN_OFFSET(x) offsetof(MPVMainEncContext, x)
307 #define FF_RC_OFFSET(x) offsetof(MPVMainEncContext, rc_context.x)
308 #define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
309 #define FF_MPV_COMMON_OPTS \
310 FF_MPV_OPT_CMP_FUNC, \
311 { "mpv_flags", "Flags common for all mpegvideo-based encoders.", FF_MPV_OFFSET(mpv_flags), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\
312 { "skip_rd", "RD optimal MB level residual skipping", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_SKIP_RD }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\
313 { "strict_gop", "Strictly enforce gop size", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_STRICT_GOP }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\
314 { "qp_rd", "Use rate distortion optimization for qp selection", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_QP_RD }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\
315 { "cbp_rd", "use rate distortion optimization for CBP", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_CBP_RD }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\
316 { "naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_NAQ }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\
317 { "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\
318  FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
319 { "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\
320  FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
321 { "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\
322 { "error_rate", "Simulate errors in the bitstream to test error concealment.", \
323  FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\
324 {"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", \
325  FF_RC_OFFSET(qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \
326 {"rc_qmod_amp", "experimental quantizer modulation", FF_RC_OFFSET(qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \
327 {"rc_qmod_freq", "experimental quantizer modulation", FF_RC_OFFSET(qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, \
328 {"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " \
329  "defined in the section 'Expression Evaluation', the following functions are available: " \
330  "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \
331  "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \
332  FF_RC_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \
333 {"rc_init_cplx", "initial complexity for 1-pass encoding", FF_RC_OFFSET(initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \
334 {"rc_buf_aggressivity", "currently useless", FF_RC_OFFSET(buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \
335 {"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_MAIN_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \
336 {"lmin", "minimum Lagrange factor (VBR)", FF_MPV_MAIN_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \
337 {"lmax", "maximum Lagrange factor (VBR)", FF_MPV_MAIN_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \
338 {"skip_threshold", "Frame skip threshold", FF_MPV_MAIN_OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \
339 {"skip_factor", "Frame skip factor", FF_MPV_MAIN_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \
340 {"skip_exp", "Frame skip exponent", FF_MPV_MAIN_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \
341 {"skip_cmp", "Frame skip compare function", FF_MPV_MAIN_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \
342 {"noise_reduction", "Noise reduction", FF_MPV_MAIN_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \
343 {"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \
344 
345 #define FF_MPV_COMMON_BFRAME_OPTS \
346 {"b_strategy", "Strategy to choose between I/P/B-frames", FF_MPV_MAIN_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS }, \
347 {"b_sensitivity", "Adjust sensitivity of b_frame_strategy 1", FF_MPV_MAIN_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS }, \
348 {"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_MAIN_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS },
349 
350 #define FF_MPV_COMMON_MOTION_EST_OPTS \
351 { "mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\
352 {"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(me.motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \
353 { "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \
354 { "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \
355 { "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \
356 {"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_MAIN_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \
357 {"mepre", "pre motion estimation", FF_MPV_MAIN_OFFSET(me_pre), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \
358 {"intra_penalty", "Penalty for intra blocks in block decision", FF_MPV_OFFSET(intra_penalty), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX/2, FF_MPV_OPT_FLAGS }, \
359 {"sc_threshold", "Scene change threshold", FF_MPV_MAIN_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \
360 
361 extern const AVClass ff_mpv_enc_class;
362 
364 
367  const AVFrame *frame, int *got_packet);
368 int ff_mpv_reallocate_putbitbuffer(MPVEncContext *s, size_t threshold, size_t size_increase);
369 
370 void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
371 
375 
376 void ff_convert_matrix(MPVEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64],
377  const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra);
378 
379 void ff_block_permute(int16_t *block, const uint8_t *permutation,
380  const uint8_t *scantable, int last);
381 
382 static inline int get_bits_diff(MPVEncContext *s)
383 {
384  const int bits = put_bits_count(&s->pb);
385  const int last = s->last_bits;
386 
387  s->last_bits = bits;
388 
389  return bits - last;
390 }
391 
392 #endif
ratecontrol.h
MPV_MAX_PLANES
#define MPV_MAX_PLANES
Definition: mpegpicture.h:31
MPVMainEncContext::me_pre
int me_pre
prepass for motion estimation
Definition: mpegvideoenc.h:237
MPVMainEncContext::fcode_tab
const uint8_t * fcode_tab
smallest fcode needed for each MV
Definition: mpegvideoenc.h:212
MPVMainEncContext::fixed_qscale
int fixed_qscale
fixed qscale if non zero
Definition: mpegvideoenc.h:230
MPVMainEncContext::frame_skip_cmp_fn
me_cmp_func frame_skip_cmp_fn
Definition: mpegvideoenc.h:219
MPVMainEncContext::bit_rate
int64_t bit_rate
Definition: mpegvideoenc.h:224
MPVEncContext::skipdct
int skipdct
skip dct and code zero residual
Definition: mpegvideoenc.h:56
MPVEncContext::misc_bits
int misc_bits
cbp, mb_type
Definition: mpegvideoenc.h:128
MPVEncContext::mpvencdsp
MpegvideoEncDSPContext mpvencdsp
Definition: mpegvideoenc.h:73
MPVEncContext
Definition: mpegvideoenc.h:45
opt.h
MPVEncContext::luma_dc_vlc_length
const uint8_t * luma_dc_vlc_length
Definition: mpegvideoenc.h:104
MPVMainEncContext::dct_error_sum_base
char * dct_error_sum_base
backs dct_error_sum
Definition: mpegvideoenc.h:243
MPVEncContext::inter_ac_vlc_last_length
const uint8_t * inter_ac_vlc_last_length
Definition: mpegvideoenc.h:103
MPVEncContext::max_qcoeff
int max_qcoeff
maximum encodable coefficient
Definition: mpegvideoenc.h:96
MPVEncContext::tex_pb
PutBitContext tex_pb
used for data partitioned VOPs
Definition: mpegvideoenc.h:145
matrix
Definition: vc1dsp.c:43
MPVEncContext::c
MpegEncContext c
the common base context
Definition: mpegvideoenc.h:46
MotionEstContext
Motion estimation context.
Definition: motion_est.h:49
MPVMainEncContext::total_bits
int64_t total_bits
Definition: mpegvideoenc.h:225
int64_t
long long int64_t
Definition: coverity.c:34
MPVMainEncContext::noise_reduction
int noise_reduction
Definition: mpegvideoenc.h:203
MPVMainEncContext::last_lambda_for
int last_lambda_for[5]
last lambda for a specific pict type
Definition: mpegvideoenc.h:231
MPVEncContext::mv_bits
int mv_bits
Definition: mpegvideoenc.h:124
MPVMainEncContext::frame_skip_threshold
int frame_skip_threshold
Definition: mpegvideoenc.h:215
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:410
ff_mpv_reallocate_putbitbuffer
int ff_mpv_reallocate_putbitbuffer(MPVEncContext *s, size_t threshold, size_t size_increase)
Definition: mpegvideo_enc.c:2940
qmat16
static const int32_t qmat16[MAT_SIZE]
Definition: hq_hqadata.h:356
MPVEncContext::lambda
unsigned int lambda
Lagrange multiplier used in rate distortion.
Definition: mpegvideoenc.h:51
MPVEncContext::sum_abs_dctelem
int(* sum_abs_dctelem)(const int16_t *block)
Definition: mpegvideoenc.h:167
MPVMainEncContext::dts_delta
int64_t dts_delta
pts difference between the first and second input frame, used for calculating dts of the first frame ...
Definition: mpegvideoenc.h:189
MPVEncContext::dquant
int dquant
qscale difference to prev qscale
Definition: mpegvideoenc.h:55
MPVEncContext::inter_ac_vlc_length
const uint8_t * inter_ac_vlc_length
Definition: mpegvideoenc.h:102
MPVEncContext::b_field_select_table
uint8_t *[2][2] b_field_select_table
allocated jointly with p_field_select_table
Definition: mpegvideoenc.h:85
float.h
MPVEncContext::intra_ac_vlc_last_length
const uint8_t * intra_ac_vlc_last_length
Definition: mpegvideoenc.h:99
MPVEncContext::mb_type
uint16_t * mb_type
Table for candidate MB types.
Definition: mpegvideoenc.h:87
ff_mpv_encode_init
int ff_mpv_encode_init(AVCodecContext *avctx)
Definition: mpegvideo_enc.c:544
mpegvideo.h
MPVEncContext::lambda_table
int * lambda_table
Definition: mpegvideoenc.h:53
MPVMainEncContext::gop_size
int gop_size
Definition: mpegvideoenc.h:176
MPVMainEncContext::mb_var_sum
int64_t mb_var_sum
sum of MB variance for current frame
Definition: mpegvideoenc.h:239
MPVEncContext::esc3_level_length
int esc3_level_length
Definition: mpegvideoenc.h:149
MPVMainEncContext::encode_picture_header
int(* encode_picture_header)(struct MPVMainEncContext *m)
Definition: mpegvideoenc.h:221
MPVEncContext::last_bits
int last_bits
temp var used for calculating the above vars
Definition: mpegvideoenc.h:129
ff_dct_encode_init
void ff_dct_encode_init(MPVEncContext *s)
Definition: mpegvideo_enc.c:301
MPVMainEncContext::coded_picture_number
int coded_picture_number
used to set pic->coded_picture_number
Definition: mpegvideoenc.h:180
MPVEncContext::mb_info_size
int mb_info_size
Definition: mpegvideoenc.h:134
MPVEncContext::sse_cmp
me_cmp_func sse_cmp[2]
Definition: mpegvideoenc.h:166
MPVEncContext::mb_info
int mb_info
interval for outputting info about mb offsets as side data
Definition: mpegvideoenc.h:132
MPVEncContext::pb2
PutBitContext pb2
used for data partitioned VOPs
Definition: mpegvideoenc.h:146
FDCTDSPContext
Definition: fdctdsp.h:28
MPVMainEncContext::b_sensitivity
int b_sensitivity
Definition: mpegvideoenc.h:198
MPVEncContext::mb_mean
uint8_t * mb_mean
Table for MB luminance.
Definition: mpegvideoenc.h:90
MPVEncContext::b_bidir_forw_mv_table
int16_t(* b_bidir_forw_mv_table)[2]
MV table (1MV per MB) bidir mode B-frame.
Definition: mpegvideoenc.h:80
MPVEncContext::encoding_error
uint64_t encoding_error[MPV_MAX_PLANES]
Definition: mpegvideoenc.h:91
MPVEncContext::intra_penalty
int intra_penalty
Definition: mpegvideoenc.h:169
MPVMainEncContext::input_picture
MPVPicture * input_picture[MPVENC_MAX_B_FRAMES+1]
next pictures in display order
Definition: mpegvideoenc.h:182
MPVEncContext::mb_var
uint16_t * mb_var
Table for MB variances.
Definition: mpegvideoenc.h:88
motion_est.h
MPVMainEncContext::frame_skip_factor
int frame_skip_factor
Definition: mpegvideoenc.h:216
MPVEncContext::q_intra_matrix16
uint16_t(* q_intra_matrix16)[2][64]
identical to the above but for MMX & these are not permutated, second 64 entries are bias
Definition: mpegvideoenc.h:113
MPVMainEncContext::stuffing_bits
int stuffing_bits
bits used for stuffing
Definition: mpegvideoenc.h:228
MPVMainEncContext::picture_in_gop_number
int picture_in_gop_number
0-> first pic in gop, ...
Definition: mpegvideoenc.h:178
avassert.h
RateControlContext
rate control context.
Definition: ratecontrol.h:60
pkt
AVPacket * pkt
Definition: movenc.c:60
me_cmp_func
int(* me_cmp_func)(MPVEncContext *c, const uint8_t *blk1, const uint8_t *blk2, ptrdiff_t stride, int h)
Definition: me_cmp.h:50
MPVEncContext::ptr_lastgob
uint8_t * ptr_lastgob
Definition: mpegvideoenc.h:156
MPVEncContext::q_inter_matrix16
uint16_t(* q_inter_matrix16)[2][64]
Definition: mpegvideoenc.h:115
MPVEncContext::rtp_payload_size
int rtp_payload_size
Definition: mpegvideoenc.h:153
MPVMainEncContext::tmp_frames
AVFrame * tmp_frames[MPVENC_MAX_B_FRAMES+2]
temporary frames used by b_frame_strategy = 2
Definition: mpegvideoenc.h:196
s
#define s(width, name)
Definition: cbs_vp9.c:198
MPVMainEncContext::brd_scale
int brd_scale
Definition: mpegvideoenc.h:199
MPVMainEncContext::reordered_input_picture
MPVPicture * reordered_input_picture[MPVENC_MAX_B_FRAMES+1]
next pictures in coded order
Definition: mpegvideoenc.h:183
MPVMainEncContext::intra_only
int intra_only
if true, only intra pictures are generated
Definition: mpegvideoenc.h:175
MPVMainEncContext::mc_mb_var_sum
int64_t mc_mb_var_sum
motion compensated MB variance for current frame
Definition: mpegvideoenc.h:240
MPVMainEncContext::rc_context
RateControlContext rc_context
contains stuff only accessed in ratecontrol.c
Definition: mpegvideoenc.h:234
MPVEncContext::q_inter_matrix
int(* q_inter_matrix)[64]
Definition: mpegvideoenc.h:111
bits
uint8_t bits
Definition: vp3data.h:128
MPVEncContext::pb
PutBitContext pb
bit output
Definition: mpegvideoenc.h:49
MPVMainEncContext::header_bits
int header_bits
Definition: mpegvideoenc.h:227
MPVMainEncContext::max_b_frames
int max_b_frames
max number of B-frames
Definition: mpegvideoenc.h:177
PutBitContext
Definition: put_bits.h:50
MPVEncContext::q_chroma_intra_matrix
int(* q_chroma_intra_matrix)[64]
Definition: mpegvideoenc.h:110
MPVEncContext::dct_count
int dct_count[2]
Definition: mpegvideoenc.h:120
MPVEncContext::intra_chroma_ac_vlc_last_length
const uint8_t * intra_chroma_ac_vlc_last_length
Definition: mpegvideoenc.h:101
PixblockDSPContext
Definition: pixblockdsp.h:26
MPVEncContext::min_qcoeff
int min_qcoeff
minimum encodable coefficient
Definition: mpegvideoenc.h:95
MPVEncContext::frame_reconstruction_bitfield
int frame_reconstruction_bitfield
Bitfield containing information which frames to reconstruct.
Definition: mpegvideoenc.h:65
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:75
MPVEncContext::esc_pos
int esc_pos
Definition: mpegvideoenc.h:139
MPVEncContext::dct_quantize
int(* dct_quantize)(struct MPVEncContext *s, int16_t *block, int n, int qscale, int *overflow)
Definition: mpegvideoenc.h:161
MPVEncContext::dct_error_sum
int(* dct_error_sum)[64]
Definition: mpegvideoenc.h:119
MPVMainEncContext::lmin
int lmin
Definition: mpegvideoenc.h:206
bias
static int bias(int x, int c)
Definition: vqcdec.c:115
MPVEncContext::i_tex_bits
int i_tex_bits
Definition: mpegvideoenc.h:125
MPVEncContext::lambda2
unsigned int lambda2
(lambda*lambda) >> FF_LAMBDA_SHIFT
Definition: mpegvideoenc.h:52
MPVMainEncContext::me_map_base
char * me_map_base
backs MotionEstContext.(map|score_map)
Definition: mpegvideoenc.h:242
MPVEncContext::quantizer_noise_shaping
int quantizer_noise_shaping
Definition: mpegvideoenc.h:58
MPVEncContext::pdsp
PixblockDSPContext pdsp
Definition: mpegvideoenc.h:74
MPVEncContext::inter_quant_bias
int inter_quant_bias
bias for the quantizer
Definition: mpegvideoenc.h:94
MPVMainEncContext
Definition: mpegvideoenc.h:172
MPVMainEncContext::last_pict_type
int last_pict_type
Definition: mpegvideoenc.h:232
MPVEncContext::intra_quant_bias
int intra_quant_bias
bias for the quantizer
Definition: mpegvideoenc.h:93
MPVMainEncContext::vbv_delay_pos
int vbv_delay_pos
offset of vbv_delay in the bitstream
Definition: mpegvideoenc.h:210
MPVEncContext::chroma_elim_threshold
int chroma_elim_threshold
Definition: mpegvideoenc.h:61
MPVEncContext::prev_mb_info
int prev_mb_info
Definition: mpegvideoenc.h:133
MPVEncContext::error_rate
int error_rate
Definition: mpegvideoenc.h:154
MPVMainEncContext::frame_bits
int frame_bits
bits used for the current frame
Definition: mpegvideoenc.h:226
MPVEncContext::ildct_cmp
me_cmp_func ildct_cmp[2]
0 = intra, 1 = non-intra
Definition: mpegvideoenc.h:163
ff_convert_matrix
void ff_convert_matrix(MPVEncContext *s, int(*qmat)[64], uint16_t(*qmat16)[2][64], const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra)
Definition: mpegvideo_enc.c:111
MPVEncContext::new_pic
AVFrame * new_pic
Reference to the source picture.
Definition: mpegvideoenc.h:70
MPVEncContext::me
MotionEstContext me
Definition: mpegvideoenc.h:75
MPVMainEncContext::input_picture_number
int input_picture_number
used to set pic->display_picture_number
Definition: mpegvideoenc.h:179
AV_CODEC_CAP_SLICE_THREADS
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: codec.h:99
MPVEncContext::ac_esc_length
int ac_esc_length
num of bits needed to encode the longest esc
Definition: mpegvideoenc.h:97
MPVEncContext::i_count
int i_count
Definition: mpegvideoenc.h:127
MPVMainEncContext::me_penalty_compensation
int me_penalty_compensation
Definition: mpegvideoenc.h:236
MPVEncContext::p_field_select_table
uint8_t *[2] p_field_select_table
Only the first element is allocated.
Definition: mpegvideoenc.h:84
MPVEncContext::q_intra_matrix
int(* q_intra_matrix)[64]
precomputed matrix (combine qscale and DCT renorm)
Definition: mpegvideoenc.h:109
MPVEncContext::b_field_mv_table
int16_t(*[2][2][2] b_field_mv_table)[2]
MV table (4MV per MB) interlaced B-frame.
Definition: mpegvideoenc.h:83
get_bits_diff
static int get_bits_diff(MPVEncContext *s)
Definition: mpegvideoenc.h:382
MpegvideoEncDSPContext
Definition: mpegvideoencdsp.h:32
av_assert2
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:67
MPVEncContext::encode_mb
void(* encode_mb)(struct MPVEncContext *s, int16_t block[][64], int motion_x, int motion_y)
Definition: mpegvideoenc.h:158
put_bits_count
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:80
MPVMainEncContext::mv_table_base
int16_t(* mv_table_base)[2]
Definition: mpegvideoenc.h:244
MPVEncContext::dct_offset
uint16_t(* dct_offset)[64]
Definition: mpegvideoenc.h:121
MPVENC_MAX_B_FRAMES
#define MPVENC_MAX_B_FRAMES
Definition: mpegvideoenc.h:43
MPVMainEncContext::next_lambda
int next_lambda
next lambda used for retrying to encode a frame
Definition: mpegvideoenc.h:229
fdctdsp.h
MPVEncContext::b_bidir_back_mv_table
int16_t(* b_bidir_back_mv_table)[2]
MV table (1MV per MB) bidir mode B-frame.
Definition: mpegvideoenc.h:81
MPVMainEncContext::border_masking
float border_masking
Definition: mpegvideoenc.h:205
MPVEncContext::mc_mb_var
uint16_t * mc_mb_var
Table for motion compensated MB variances.
Definition: mpegvideoenc.h:89
MPVEncContext::last_mb_info
int last_mb_info
Definition: mpegvideoenc.h:133
MPVEncContext::intra_chroma_ac_vlc_length
const uint8_t * intra_chroma_ac_vlc_length
Definition: mpegvideoenc.h:100
MPVMainEncContext::last_non_b_pict_type
int last_non_b_pict_type
used for MPEG-4 gmc B-frames & ratecontrol
Definition: mpegvideoenc.h:233
MPVEncContext::mjpeg_ctx
struct MJpegContext * mjpeg_ctx
Definition: mpegvideoenc.h:138
MPVEncContext::adaptive_quant
int adaptive_quant
use adaptive quantization
Definition: mpegvideoenc.h:54
MPVMainEncContext::vbv_ignore_qmax
int vbv_ignore_qmax
Definition: mpegvideoenc.h:207
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
ff_mpv_encode_end
int ff_mpv_encode_end(AVCodecContext *avctx)
Definition: mpegvideo_enc.c:1104
MPVEncContext::fdsp
FDCTDSPContext fdsp
Definition: mpegvideoenc.h:72
ff_mpvenc_dct_init_mips
void ff_mpvenc_dct_init_mips(MPVEncContext *s)
Definition: mpegvideoenc_init_mips.c:26
MPVEncContext::b_direct_mv_table
int16_t(* b_direct_mv_table)[2]
MV table (1MV per MB) direct mode B-frame.
Definition: mpegvideoenc.h:82
MPVMainEncContext::reordered_pts
int64_t reordered_pts
reordered pts to be used as dts for the next output frame when there's a delay
Definition: mpegvideoenc.h:193
MPVMainEncContext::frame_skip_cmp
int frame_skip_cmp
Definition: mpegvideoenc.h:218
AVCodecContext
main external API structure.
Definition: avcodec.h:431
MPVEncContext::mpv_flags
int mpv_flags
flags set by private options
Definition: mpegvideoenc.h:63
MPVEncContext::sad_cmp
me_cmp_func sad_cmp[2]
Definition: mpegvideoenc.h:165
MPVMainEncContext::lmax
int lmax
Definition: mpegvideoenc.h:206
ff_mpv_enc_class
const AVClass ff_mpv_enc_class
Definition: mpegvideo_enc.c:104
mpegvideoencdsp.h
MPVEncContext::p_mv_table
int16_t(* p_mv_table)[2]
MV table (1MV per MB) P-frame.
Definition: mpegvideoenc.h:77
MJpegContext
Holds JPEG frame data and Huffman table data.
Definition: mjpegenc.h:44
MPVEncContext::rtp_mode
int rtp_mode
Definition: mpegvideoenc.h:152
MPVMainEncContext::frame_skip_exp
int frame_skip_exp
Definition: mpegvideoenc.h:217
ff_mpv_encode_picture
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: mpegvideo_enc.c:1926
ff_write_quant_matrix
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix)
Definition: mpegvideo_enc.c:228
MPVEncContext::coded_score
int coded_score[12]
Definition: mpegvideoenc.h:106
overflow
Undefined Behavior In the C some operations are like signed integer overflow
Definition: undefined.txt:3
MPVEncContext::b_forw_mv_table
int16_t(* b_forw_mv_table)[2]
MV table (1MV per MB) forward mode B-frame.
Definition: mpegvideoenc.h:78
MPVMainEncContext::b_frame_strategy
int b_frame_strategy
Definition: mpegvideoenc.h:197
slice_to_mainenc
static const MPVMainEncContext * slice_to_mainenc(const MPVEncContext *s)
Definition: mpegvideoenc.h:247
AVPacket
This structure stores compressed data.
Definition: packet.h:512
MPVEncContext::luma_elim_threshold
int luma_elim_threshold
Definition: mpegvideoenc.h:60
MPVEncContext::mb_info_ptr
uint8_t * mb_info_ptr
Definition: mpegvideoenc.h:135
MPVMainEncContext::scenechange_threshold
int scenechange_threshold
Definition: mpegvideoenc.h:201
ff_dct_encode_init_x86
void ff_dct_encode_init_x86(MPVEncContext *s)
Definition: mpegvideoenc.c:122
MPVEncContext::n_sse_cmp
me_cmp_func n_sse_cmp[2]
either SSE or NSSE cmp func
Definition: mpegvideoenc.h:164
ff_block_permute
void ff_block_permute(int16_t *block, const uint8_t *permutation, const uint8_t *scantable, int last)
Permute an 8x8 block according to permutation.
Definition: mpegvideo_enc.c:4622
MPVEncContext::p_tex_bits
int p_tex_bits
Definition: mpegvideoenc.h:126
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
MPVEncContext::last_mv_dir
int last_mv_dir
last mv_dir, used for B-frame encoding
Definition: mpegvideoenc.h:142
MPVEncContext::denoise_dct
void(* denoise_dct)(struct MPVEncContext *s, int16_t *block)
Definition: mpegvideoenc.h:118
MPVMainEncContext::user_specified_pts
int64_t user_specified_pts
last non-zero pts from user-supplied AVFrame
Definition: mpegvideoenc.h:185
MPVPicture
MPVPicture.
Definition: mpegpicture.h:58
MPVEncContext::q_chroma_intra_matrix16
uint16_t(* q_chroma_intra_matrix16)[2][64]
Definition: mpegvideoenc.h:114
put_bits.h
MpegEncContext
MpegEncContext.
Definition: mpegvideo.h:64
MPVEncContext::intra_ac_vlc_length
const uint8_t * intra_ac_vlc_length
Definition: mpegvideoenc.h:98
MPVMainEncContext::s
MPVEncContext s
The main slicecontext.
Definition: mpegvideoenc.h:173
pixblockdsp.h
MPVEncContext::b_back_mv_table
int16_t(* b_back_mv_table)[2]
MV table (1MV per MB) backward mode B-frame.
Definition: mpegvideoenc.h:79