Go to the documentation of this file.
28 #ifndef AVCODEC_MPEGVIDEOENC_H
29 #define AVCODEC_MPEGVIDEOENC_H
43 #define MPVENC_MAX_B_FRAMES 16
159 int motion_x,
int motion_y);
249 #ifdef NO_SLICE_THREADING_HERE
254 return s->c.encparent;
259 #define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level))
260 #define INPLACE_OFFSET 16
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)
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)
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)
278 #define CANDIDATE_MB_TYPE_DIRECT0 (1 << 12)
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
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" }
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 }, \
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 },
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 }, \
377 const uint16_t *quant_matrix,
int bias,
int qmin,
int qmax,
int intra);
380 const uint8_t *scantable,
int last);
385 const int last =
s->last_bits;
int me_pre
prepass for motion estimation
const uint8_t * fcode_tab
smallest fcode needed for each MV
int fixed_qscale
fixed qscale if non zero
me_cmp_func frame_skip_cmp_fn
int skipdct
skip dct and code zero residual
int misc_bits
cbp, mb_type
MpegvideoEncDSPContext mpvencdsp
const uint8_t * luma_dc_vlc_length
char * dct_error_sum_base
backs dct_error_sum
const uint8_t * inter_ac_vlc_last_length
int max_qcoeff
maximum encodable coefficient
PutBitContext tex_pb
used for data partitioned VOPs
MpegEncContext c
the common base context
Motion estimation context.
int last_lambda_for[5]
last lambda for a specific pict type
This structure describes decoded (raw) audio or video data.
int ff_mpv_reallocate_putbitbuffer(MPVEncContext *s, size_t threshold, size_t size_increase)
static const int32_t qmat16[MAT_SIZE]
unsigned int lambda
Lagrange multiplier used in rate distortion.
int(* sum_abs_dctelem)(const int16_t *block)
int64_t dts_delta
pts difference between the first and second input frame, used for calculating dts of the first frame ...
int dquant
qscale difference to prev qscale
const uint8_t * inter_ac_vlc_length
uint8_t *[2][2] b_field_select_table
allocated jointly with p_field_select_table
const uint8_t * intra_ac_vlc_last_length
uint16_t * mb_type
Table for candidate MB types.
int ff_mpv_encode_init(AVCodecContext *avctx)
int64_t mb_var_sum
sum of MB variance for current frame
int(* encode_picture_header)(struct MPVMainEncContext *m)
int last_bits
temp var used for calculating the above vars
void ff_dct_encode_init(MPVEncContext *s)
int coded_picture_number
used to set pic->coded_picture_number
int mb_info
interval for outputting info about mb offsets as side data
PutBitContext pb2
used for data partitioned VOPs
uint8_t * mb_mean
Table for MB luminance.
int16_t(* b_bidir_forw_mv_table)[2]
MV table (1MV per MB) bidir mode B-frame.
uint64_t encoding_error[MPV_MAX_PLANES]
MPVPicture * input_picture[MPVENC_MAX_B_FRAMES+1]
next pictures in display order
uint16_t * mb_var
Table for MB variances.
uint16_t(* q_intra_matrix16)[2][64]
identical to the above but for MMX & these are not permutated, second 64 entries are bias
int stuffing_bits
bits used for stuffing
int picture_in_gop_number
0-> first pic in gop, ...
int(* me_cmp_func)(MPVEncContext *c, const uint8_t *blk1, const uint8_t *blk2, ptrdiff_t stride, int h)
uint16_t(* q_inter_matrix16)[2][64]
AVFrame * tmp_frames[MPVENC_MAX_B_FRAMES+2]
temporary frames used by b_frame_strategy = 2
MPVPicture * reordered_input_picture[MPVENC_MAX_B_FRAMES+1]
next pictures in coded order
int intra_only
if true, only intra pictures are generated
int64_t mc_mb_var_sum
motion compensated MB variance for current frame
RateControlContext rc_context
contains stuff only accessed in ratecontrol.c
int(* q_inter_matrix)[64]
PutBitContext pb
bit output
int max_b_frames
max number of B-frames
int(* q_chroma_intra_matrix)[64]
const uint8_t * intra_chroma_ac_vlc_last_length
int min_qcoeff
minimum encodable coefficient
int frame_reconstruction_bitfield
Bitfield containing information which frames to reconstruct.
Describe the class of an AVClass context structure.
int(* dct_quantize)(struct MPVEncContext *s, int16_t *block, int n, int qscale, int *overflow)
static int bias(int x, int c)
unsigned int lambda2
(lambda*lambda) >> FF_LAMBDA_SHIFT
char * me_map_base
backs MotionEstContext.(map|score_map)
int quantizer_noise_shaping
int inter_quant_bias
bias for the quantizer
int intra_quant_bias
bias for the quantizer
int vbv_delay_pos
offset of vbv_delay in the bitstream
int chroma_elim_threshold
int frame_bits
bits used for the current frame
me_cmp_func ildct_cmp[2]
0 = intra, 1 = non-intra
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)
AVFrame * new_pic
Reference to the source picture.
int input_picture_number
used to set pic->display_picture_number
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
int ac_esc_length
num of bits needed to encode the longest esc
int me_penalty_compensation
uint8_t *[2] p_field_select_table
Only the first element is allocated.
int(* q_intra_matrix)[64]
precomputed matrix (combine qscale and DCT renorm)
int16_t(*[2][2][2] b_field_mv_table)[2]
MV table (4MV per MB) interlaced B-frame.
static int get_bits_diff(MPVEncContext *s)
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
void(* encode_mb)(struct MPVEncContext *s, int16_t block[][64], int motion_x, int motion_y)
static int put_bits_count(PutBitContext *s)
int16_t(* mv_table_base)[2]
uint16_t(* dct_offset)[64]
#define MPVENC_MAX_B_FRAMES
int next_lambda
next lambda used for retrying to encode a frame
int16_t(* b_bidir_back_mv_table)[2]
MV table (1MV per MB) bidir mode B-frame.
uint16_t * mc_mb_var
Table for motion compensated MB variances.
const uint8_t * intra_chroma_ac_vlc_length
int last_non_b_pict_type
used for MPEG-4 gmc B-frames & ratecontrol
struct MJpegContext * mjpeg_ctx
int adaptive_quant
use adaptive quantization
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
int ff_mpv_encode_end(AVCodecContext *avctx)
void ff_mpvenc_dct_init_mips(MPVEncContext *s)
int16_t(* b_direct_mv_table)[2]
MV table (1MV per MB) direct mode B-frame.
int64_t reordered_pts
reordered pts to be used as dts for the next output frame when there's a delay
main external API structure.
int mpv_flags
flags set by private options
const AVClass ff_mpv_enc_class
int16_t(* p_mv_table)[2]
MV table (1MV per MB) P-frame.
Holds JPEG frame data and Huffman table data.
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix)
Undefined Behavior In the C some operations are like signed integer overflow
int16_t(* b_forw_mv_table)[2]
MV table (1MV per MB) forward mode B-frame.
static const MPVMainEncContext * slice_to_mainenc(const MPVEncContext *s)
This structure stores compressed data.
int scenechange_threshold
void ff_dct_encode_init_x86(MPVEncContext *s)
me_cmp_func n_sse_cmp[2]
either SSE or NSSE cmp func
void ff_block_permute(int16_t *block, const uint8_t *permutation, const uint8_t *scantable, int last)
Permute an 8x8 block according to permutation.
The exact code depends on how similar the blocks are and how related they are to the block
int last_mv_dir
last mv_dir, used for B-frame encoding
void(* denoise_dct)(struct MPVEncContext *s, int16_t *block)
int64_t user_specified_pts
last non-zero pts from user-supplied AVFrame
uint16_t(* q_chroma_intra_matrix16)[2][64]
const uint8_t * intra_ac_vlc_length
MPVEncContext s
The main slicecontext.
int16_t(* b_back_mv_table)[2]
MV table (1MV per MB) backward mode B-frame.