Go to the documentation of this file.
62 #define UNI_MPEG4_ENC_INDEX(last, run, level) ((last) * 128 * 64 + (run) * 128 + (level))
79 int block_last_index,
const uint8_t scantable[64])
85 for (j = 1; j <= block_last_index; j++) {
86 const int index = scantable[j];
90 if ((
level & (~127)) == 0) {
91 if (j < block_last_index)
96 rate +=
s->ac_esc_length;
114 const int dir[6],
const uint8_t *st[6],
115 const int zigzag_last_index[6])
118 memcpy(
s->block_last_index, zigzag_last_index,
sizeof(
int) * 6);
120 for (n = 0; n < 6; n++) {
121 int16_t *ac_val = &
s->ac_val[0][0][0] +
s->block_index[n] * 16;
123 st[n] =
s->intra_scantable.permutated;
126 for (
i = 1;
i < 8;
i++)
127 block[n][
s->idsp.idct_permutation[
i]] = ac_val[
i + 8];
130 for (
i = 1;
i < 8;
i++)
131 block[n][
s->idsp.idct_permutation[
i << 3]] = ac_val[
i];
145 const int dir[6],
const uint8_t *st[6],
146 int zigzag_last_index[6])
150 const int8_t *
const qscale_table =
s->cur_pic.qscale_table;
152 memcpy(zigzag_last_index,
s->block_last_index,
sizeof(
int) * 6);
154 for (n = 0; n < 6; n++) {
155 int16_t *ac_val, *ac_val1;
158 s->intra_scantable.permutated);
160 ac_val = &
s->ac_val[0][0][0] +
s->block_index[n] * 16;
163 const int xy =
s->mb_x +
s->mb_y *
s->mb_stride -
s->mb_stride;
165 ac_val -=
s->block_wrap[n] * 16;
166 if (
s->mb_y == 0 ||
s->qscale == qscale_table[xy] || n == 2 || n == 3) {
168 for (
i = 1;
i < 8;
i++) {
169 const int level =
block[n][
s->idsp.idct_permutation[
i]];
170 block[n][
s->idsp.idct_permutation[
i]] =
level - ac_val[
i + 8];
171 ac_val1[
i] =
block[n][
s->idsp.idct_permutation[
i << 3]];
176 for (
i = 1;
i < 8;
i++) {
177 const int level =
block[n][
s->idsp.idct_permutation[
i]];
179 ac_val1[
i] =
block[n][
s->idsp.idct_permutation[
i << 3]];
183 st[n] =
s->permutated_intra_h_scantable;
185 const int xy =
s->mb_x - 1 +
s->mb_y *
s->mb_stride;
188 if (
s->mb_x == 0 ||
s->qscale == qscale_table[xy] || n == 1 || n == 3) {
190 for (
i = 1;
i < 8;
i++) {
191 const int level =
block[n][
s->idsp.idct_permutation[
i << 3]];
192 block[n][
s->idsp.idct_permutation[
i << 3]] =
level - ac_val[
i];
194 ac_val1[
i + 8] =
block[n][
s->idsp.idct_permutation[
i]];
198 for (
i = 1;
i < 8;
i++) {
199 const int level =
block[n][
s->idsp.idct_permutation[
i << 3]];
202 ac_val1[
i + 8] =
block[n][
s->idsp.idct_permutation[
i]];
205 st[n] =
s->permutated_intra_v_scantable;
208 for (
i = 63;
i > 0;
i--)
211 s->block_last_index[n] =
i;
230 int8_t *
const qscale_table =
s->cur_pic.qscale_table;
239 for (
i = 0;
i <
s->mb_num;
i++) {
240 int mb_xy =
s->mb_index2xy[
i];
241 odd += qscale_table[mb_xy] & 1;
244 if (2 * odd >
s->mb_num)
249 for (
i = 0;
i <
s->mb_num;
i++) {
250 int mb_xy =
s->mb_index2xy[
i];
251 if ((qscale_table[mb_xy] & 1) != odd)
252 qscale_table[mb_xy]++;
253 if (qscale_table[mb_xy] > 31)
254 qscale_table[mb_xy] = 31;
257 for (
i = 1;
i <
s->mb_num;
i++) {
258 int mb_xy =
s->mb_index2xy[
i];
259 if (qscale_table[mb_xy] != qscale_table[
s->mb_index2xy[
i - 1]] &&
297 const int16_t *
block,
int n,
int intra_dc,
301 int i, last_non_zero;
302 const uint32_t *bits_tab;
303 const uint8_t *len_tab;
304 const int last_index =
s->block_last_index[n];
323 last_non_zero =
i - 1;
324 for (;
i < last_index;
i++) {
327 int run =
i - last_non_zero - 1;
329 if ((
level & (~127)) == 0) {
334 7 + 2 + 1 + 6 + 1 + 12 + 1,
335 (3 << 23) + (3 << 21) + (0 << 20) + (
run << 14) +
336 (1 << 13) + (((
level - 64) & 0xfff) << 1) + 1);
343 int run =
i - last_non_zero - 1;
345 if ((
level & (~127)) == 0) {
350 7 + 2 + 1 + 6 + 1 + 12 + 1,
351 (3 << 23) + (3 << 21) + (1 << 20) + (
run << 14) +
352 (1 << 13) + (((
level - 64) & 0xfff) << 1) + 1);
358 const int16_t *
block,
int n,
359 int intra_dc,
const uint8_t *scan_table)
361 int i, last_non_zero;
362 const uint8_t *len_tab;
363 const int last_index =
s->block_last_index[n];
381 last_non_zero =
i - 1;
382 for (;
i < last_index;
i++) {
385 int run =
i - last_non_zero - 1;
387 if ((
level & (~127)) == 0) {
391 len += 7 + 2 + 1 + 6 + 1 + 12 + 1;
398 int run =
i - last_non_zero - 1;
400 if ((
level & (~127)) == 0) {
404 len += 7 + 2 + 1 + 6 + 1 + 12 + 1;
412 const int16_t
block[6][64],
413 const int intra_dc[6],
414 const uint8_t *
const *scan_table,
422 for (
i = 0;
i < 6;
i++)
425 intra_dc[
i], scan_table[
i]));
428 for (
i = 0;
i < 6;
i++)
430 intra_dc[
i], scan_table[
i], dc_pb, ac_pb);
434 for (
i = 0;
i < 6;
i++)
437 s->intra_scantable.permutated));
440 for (
i = 0;
i < 6;
i++)
442 s->intra_scantable.permutated, dc_pb, ac_pb);
448 int motion_x,
int motion_y,
int mb_type)
456 for (
i = 0;
i < 6;
i++) {
457 if (
s->coded_score[
i] < 0) {
458 score +=
s->coded_score[
i];
465 if ((motion_x | motion_y |
s->dquant | mb_type) == 0)
468 zero_score *= lambda;
469 if (zero_score <= score)
473 for (
i = 0;
i < 6;
i++) {
474 if (
s->block_last_index[
i] >= 0 && ((cbp >> (5 -
i)) & 1) == 0) {
475 s->block_last_index[
i] = -1;
476 s->bdsp.clear_block(
s->block[
i]);
480 for (
i = 0;
i < 6;
i++) {
481 if (
s->block_last_index[
i] >= 0)
492 int motion_x,
int motion_y)
494 int cbpc, cbpy, pred_x, pred_y;
498 const int interleaved_stats = (
s->avctx->flags &
AV_CODEC_FLAG_PASS1) && !
s->data_partitioning ? 1 : 0;
505 static const int mb_type_table[8] = { -1, 3, 2, 1, -1, -1, -1, 0 };
506 int mb_type = mb_type_table[
s->mv_dir];
509 for (
i = 0;
i < 2;
i++)
510 s->last_mv[
i][0][0] =
511 s->last_mv[
i][0][1] =
512 s->last_mv[
i][1][0] =
513 s->last_mv[
i][1][1] = 0;
521 if (
s->next_pic.mbskip_table[
s->mb_y *
s->mb_stride +
s->mb_x]) {
527 s->qscale -=
s->dquant;
535 if ((cbp | motion_x | motion_y | mb_type) == 0) {
541 if (interleaved_stats) {
554 if (cbp && mb_type) {
560 s->qscale -=
s->dquant;
562 if (!
s->progressive_sequence) {
569 if (interleaved_stats)
580 s->mv[0][0][0] -
s->last_mv[0][0][0],
581 s->mv[0][0][1] -
s->last_mv[0][0][1],
583 s->last_mv[0][0][0] =
584 s->last_mv[0][1][0] =
s->mv[0][0][0];
585 s->last_mv[0][0][1] =
586 s->last_mv[0][1][1] =
s->mv[0][0][1];
590 s->mv[1][0][0] -
s->last_mv[1][0][0],
591 s->mv[1][0][1] -
s->last_mv[1][0][1],
593 s->last_mv[1][0][0] =
594 s->last_mv[1][1][0] =
s->mv[1][0][0];
595 s->last_mv[1][0][1] =
596 s->last_mv[1][1][1] =
s->mv[1][0][1];
608 for (
i = 0;
i < 2;
i++) {
610 s->mv[0][
i][0] -
s->last_mv[0][
i][0],
611 s->mv[0][
i][1] -
s->last_mv[0][
i][1] / 2,
613 s->last_mv[0][
i][0] =
s->mv[0][
i][0];
614 s->last_mv[0][
i][1] =
s->mv[0][
i][1] * 2;
618 for (
i = 0;
i < 2;
i++) {
620 s->mv[1][
i][0] -
s->last_mv[1][
i][0],
621 s->mv[1][
i][1] -
s->last_mv[1][
i][1] / 2,
623 s->last_mv[1][
i][0] =
s->mv[1][
i][0];
624 s->last_mv[1][
i][1] =
s->mv[1][
i][1] * 2;
630 if (interleaved_stats)
635 if (interleaved_stats)
640 if ((cbp | motion_x | motion_y |
s->dquant) == 0 &&
645 if (
s->max_b_frames > 0) {
648 const uint8_t *p_pic;
654 p_pic =
s->new_pic->data[0] +
offset;
657 for (
i = 0;
i <
s->max_b_frames;
i++) {
658 const uint8_t *b_pic;
660 const MPVPicture *pic =
s->reordered_input_picture[
i + 1];
669 if (x + 16 >
s->width || y + 16 >
s->height) {
671 int xe =
FFMIN(16,
s->width - x);
672 int ye =
FFMIN(16,
s->height - y);
674 for (y1 = 0; y1 < ye; y1++) {
675 for (x1 = 0; x1 < xe; x1++) {
676 diff +=
FFABS(p_pic[x1 + y1 *
s->linesize] - b_pic[x1 + y1 *
s->linesize]);
681 diff =
s->sad_cmp[0](
NULL, p_pic, b_pic,
s->linesize, 16);
683 if (
diff >
s->qscale * 70) {
691 if (
s->mb_skipped == 1) {
695 if (interleaved_stats) {
719 if (!
s->progressive_sequence) {
725 if (interleaved_stats)
751 if (interleaved_stats)
762 s->mv[0][0][0] - pred_x,
763 s->mv[0][0][1] - pred_y,
766 s->mv[0][1][0] - pred_x,
767 s->mv[0][1][1] - pred_y,
776 if (!
s->progressive_sequence && cbp)
779 if (interleaved_stats)
782 for (
i = 0;
i < 4;
i++) {
787 s->cur_pic.motion_val[0][
s->block_index[
i]][0] - pred_x,
788 s->cur_pic.motion_val[0][
s->block_index[
i]][1] - pred_y,
793 if (interleaved_stats)
798 if (interleaved_stats)
805 int zigzag_last_index[6];
806 const uint8_t *scan_table[6];
809 for (
int i = 0;
i < 6;
i++) {
811 int scale =
i < 4 ?
s->y_dc_scale :
s->c_dc_scale;
821 for (
i = 0;
i < 6;
i++)
822 scan_table[
i] =
s->intra_scantable.permutated;
827 for (
i = 0;
i < 6;
i++)
828 if (
s->block_last_index[
i] >= 1)
852 if (!
s->progressive_sequence)
855 if (interleaved_stats)
860 if (interleaved_stats)
878 put_bits(pbc, length, (1 << (length - 1)) - 1);
887 s->last_time_base =
s->time_base;
888 s->time_base =
FFUDIV(
s->time,
s->avctx->time_base.den);
894 int64_t hours, minutes, seconds;
899 time =
s->cur_pic.ptr->f->pts;
900 if (
s->reordered_input_picture[1])
901 time =
FFMIN(time,
s->reordered_input_picture[1]->f->pts);
902 time = time *
s->avctx->time_base.num;
903 s->last_time_base =
FFUDIV(time,
s->avctx->time_base.den);
905 seconds =
FFUDIV(time,
s->avctx->time_base.den);
906 minutes =
FFUDIV(seconds, 60); seconds =
FFUMOD(seconds, 60);
907 hours =
FFUDIV(minutes, 60); minutes =
FFUMOD(minutes, 60);
908 hours =
FFUMOD(hours , 24);
923 int profile_and_level_indication;
927 profile_and_level_indication =
s->avctx->profile << 4;
928 }
else if (
s->max_b_frames ||
s->quarter_sample) {
929 profile_and_level_indication = 0xF0;
931 profile_and_level_indication = 0x00;
935 profile_and_level_indication |=
s->avctx->level;
937 profile_and_level_indication |= 1;
939 if (profile_and_level_indication >> 4 == 0xF)
948 put_bits(&
s->pb, 8, profile_and_level_indication);
967 int vo_ver_id, vo_type, aspect_ratio_info;
969 if (
s->max_b_frames ||
s->quarter_sample) {
990 av_reduce(&
s->avctx->sample_aspect_ratio.num, &
s->avctx->sample_aspect_ratio.den,
991 s->avctx->sample_aspect_ratio.num,
s->avctx->sample_aspect_ratio.den, 255);
992 put_bits(&
s->pb, 8,
s->avctx->sample_aspect_ratio.num);
993 put_bits(&
s->pb, 8,
s->avctx->sample_aspect_ratio.den);
1004 put_bits(&
s->pb, 16,
s->avctx->time_base.den);
1005 if (
s->time_increment_bits < 1)
1006 s->time_increment_bits = 1;
1014 put_bits(&
s->pb, 1,
s->progressive_sequence ? 0 : 1);
1024 if (
s->mpeg_quant) {
1033 put_bits(&
s->pb, 1,
s->data_partitioning ? 1 : 0);
1034 if (
s->data_partitioning)
1037 if (vo_ver_id != 1) {
1073 time_div =
FFUDIV(
s->time,
s->avctx->time_base.den);
1074 time_mod =
FFUMOD(
s->time,
s->avctx->time_base.den);
1075 time_incr = time_div -
s->last_time_base;
1078 if (time_incr > 3600*24) {
1088 put_bits(&
s->pb,
s->time_increment_bits, time_mod);
1095 if (!
s->progressive_sequence) {
1113 int level, uni_code, uni_len;
1169 int slevel,
run, last;
1174 for (slevel = -64; slevel < 64; slevel++) {
1178 for (last = 0; last <= 1; last++) {
1180 int level = slevel < 0 ? -slevel : slevel;
1181 int sign = slevel < 0 ? 1 : 0;
1185 len_tab[
index] = 100;
1247 bits =
bits * 4096 + (slevel & 0xfff);
1270 for (
int f_code =
MAX_FCODE; f_code > 0; f_code--) {
1271 for (
int mv = -(16 << f_code);
mv < (16 << f_code);
mv++)
1282 if (avctx->
width >= (1<<13) || avctx->
height >= (1<<13)) {
1294 s->min_qcoeff = -2048;
1295 s->max_qcoeff = 2047;
1301 s->ac_esc_length = 7 + 2 + 1 + 6 + 1 + 12 + 1;
1307 if (!
s->avctx->extradata)
1324 uint8_t *end =
s->pb.buf_end;
1325 int size = end - start;
1326 int pb_size = (((intptr_t)start +
size / 3) & (~3)) - (intptr_t)start;
1327 int tex_size = (
size - 2 * pb_size) & (~3);
1342 s->misc_bits += 19 + pb2_len +
bits -
s->last_bits;
1343 s->i_tex_bits += tex_pb_len;
1346 s->misc_bits += 17 + pb2_len;
1347 s->mv_bits +=
bits -
s->last_bits;
1348 s->p_tex_bits += tex_pb_len;
1362 int mb_num_bits =
av_log2(
s->mb_num - 1) + 1;
1367 put_bits(&
s->pb, mb_num_bits,
s->mb_x +
s->mb_y *
s->mb_width);
1372 #define OFFSET(x) offsetof(MpegEncContext, x)
1373 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1375 {
"data_partitioning",
"Use data partitioning.",
OFFSET(data_partitioning),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
VE },
1376 {
"alternate_scan",
"Enable alternate scantable.",
OFFSET(alternate_scan),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
VE },
1377 {
"mpeg_quant",
"Use MPEG quantizers instead of H.263",
static av_cold void mpeg4_encode_init_static(void)
static int mpeg4_get_dc_length(int level, int n)
#define CODEC_PIXFMTS(...)
#define CANDIDATE_MB_TYPE_BIDIR
#define MV_TYPE_16X16
1 vector for the whole mb
#define FF_ASPECT_EXTENDED
static void mpeg4_encode_vol_header(MpegEncContext *s, int vo_number, int vol_number)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
static int get_bits_diff(MpegEncContext *s)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static void av_unused put_bits32(PutBitContext *s, uint32_t value)
Write exactly 32 bits into a bitstream.
void ff_clean_mpeg4_qscales(MpegEncContext *s)
modify mb_type & qscale so that encoding is actually possible in MPEG-4
static int put_bytes_output(const PutBitContext *s)
static void mpeg4_encode_block(const MpegEncContext *s, const int16_t *block, int n, int intra_dc, const uint8_t *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb)
Encode an 8x8 block.
static const int8_t mv[256][2]
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
av_cold void ff_qpeldsp_init(QpelDSPContext *c)
#define MV_DIRECT
bidirectional mode where the difference equals the MV of the last P/S/I-Frame (MPEG-4)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
static av_cold void init_uni_dc_tab(void)
static void mpeg4_encode_visual_object_header(MpegEncContext *s)
av_cold void ff_mpeg4_init_rl_intra(void)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define AV_CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
static uint32_t uni_mpeg4_intra_rl_bits[64 *64 *2 *2]
#define AV_FRAME_FLAG_TOP_FIELD_FIRST
A flag to mark frames where the top field is displayed first if the content is interlaced.
#define FF_MPV_COMMON_MOTION_EST_OPTS
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet)
#define FF_MPV_COMMON_OPTS
void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream.
static uint8_t uni_mpeg4_intra_rl_len[64 *64 *2 *2]
const uint8_t ff_mpeg4_DCtab_chrom[13][2]
AVCodec p
The public AVCodec.
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s)
static uint32_t uni_mpeg4_inter_rl_bits[64 *64 *2 *2]
static uint8_t uni_DCtab_chrom_len[512]
#define FF_MPV_FLAG_CBP_RD
static void ff_h263_encode_motion_vector(MpegEncContext *s, int x, int y, int f_code)
#define AV_CODEC_FLAG2_NO_OUTPUT
Skip bitstream encoding.
#define FF_CODEC_ENCODE_CB(func)
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
static const int dquant_code[5]
#define CANDIDATE_MB_TYPE_DIRECT
int n
number of entries of table_vlc minus 1
static int ff_thread_once(char *control, void(*routine)(void))
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define AV_PROFILE_UNKNOWN
static void mpeg4_encode_blocks(MpegEncContext *s, const int16_t block[6][64], const int intra_dc[6], const uint8_t *const *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb)
int8_t * max_level[2]
encoding & decoding
static uint8_t uni_mpeg4_inter_rl_len[64 *64 *2 *2]
void ff_mpeg4_stuffing(PutBitContext *pbc)
add MPEG-4 stuffing bits (01...1)
static int get_rl_index(const RLTable *rl, int last, int run, int level)
static int get_p_cbp(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
static void skip_put_bits(PutBitContext *s, int n)
Skip the given number of bits.
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
RLTable ff_mpeg4_rl_intra
static uint16_t uni_DCtab_chrom_bits[512]
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define UNI_MPEG4_ENC_INDEX(last, run, level)
static uint16_t uni_DCtab_lum_bits[512]
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix)
void ff_put_string(PutBitContext *pb, const char *string, int terminate_string)
Put the string string in the bitstream.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
static av_cold void init_uni_mpeg4_rl_tab(RLTable *rl, uint32_t *bits_tab, uint8_t *len_tab)
#define CODEC_LONG_NAME(str)
static void mpeg4_encode_gop_header(MpegEncContext *s)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
const uint8_t ff_mpeg4_DCtab_lum[13][2]
#define LIBAVUTIL_VERSION_INT
void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Describe the class of an AVClass context structure.
#define FF_COMPLIANCE_VERY_STRICT
Strictly conform to an older more strict version of the spec or reference software.
const uint16_t(* table_vlc)[2]
static int ff_mpeg4_pred_dc(MpegEncContext *s, int n, int *dir_ptr)
Predict the dc.
#define ROUNDED_DIV(a, b)
const char * av_default_item_name(void *ptr)
Return the context name.
@ AV_PICTURE_TYPE_I
Intra.
#define AV_CODEC_FLAG_AC_PRED
H.263 advanced intra coding / MPEG-4 AC prediction.
av_cold int ff_mpv_encode_end(AVCodecContext *avctx)
static int get_block_rate(MpegEncContext *s, int16_t block[64], int block_last_index, const uint8_t scantable[64])
Return the number of bits that encoding the 8x8 block in block would need.
void ff_mpeg4_init_partitions(MpegEncContext *s)
#define VISUAL_OBJ_STARTCODE
int ff_mpeg4_encode_picture_header(MpegEncContext *s)
void ff_clean_h263_qscales(MpegEncContext *s)
#define MV_TYPE_8X8
4 vectors (H.263, MPEG-4 4MV)
static void set_put_bits_buffer_size(PutBitContext *s, int size)
Change the end of the buffer.
void ff_mpeg4_merge_partitions(MpegEncContext *s)
#define ADV_SIMPLE_VO_TYPE
enum AVPictureType pict_type
Picture type of the frame.
int(* init)(AVBSFContext *ctx)
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
const uint8_t ff_mpeg4_y_dc_scale_table[32]
static int get_b_cbp(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y, int mb_type)
const uint8_t ff_h263_cbpy_tab[16][2]
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
static uint8_t fcode_tab[MAX_MV *2+1]
Minimal fcode that a motion vector component would need.
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
#define MV_TYPE_FIELD
2 vectors, one per field
const uint8_t ff_h263_inter_MCBPC_bits[28]
#define UNI_AC_ENC_INDEX(run, level)
#define FF_MPEG4_PROFILE_OPTS
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define i(width, name, range_min, range_max)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
static int put_bits_count(PutBitContext *s)
int8_t * max_run[2]
encoding & decoding
static uint8_t uni_DCtab_lum_len[512]
static const AVClass mpeg4enc_class
static const AVOption options[]
const FFCodec ff_mpeg4_encoder
const char * name
Name of the codec implementation.
av_const int ff_h263_aspect_to_info(AVRational aspect)
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
#define AV_CODEC_FLAG_CLOSED_GOP
static const float pred[4]
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
static av_cold int encode_init(AVCodecContext *avctx)
void ff_mpeg4_init_direct_mv(MpegEncContext *s)
void ff_set_mpeg4_time(MpegEncContext *s)
const uint8_t ff_h263_intra_MCBPC_bits[9]
main external API structure.
void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
const uint8_t ff_h263_intra_MCBPC_code[9]
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
static void mpeg4_encode_dc(PutBitContext *s, int level, int n)
Encode the dc value.
@ AV_OPT_TYPE_INT
Underlying C type is int.
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define FF_MPV_COMMON_BFRAME_OPTS
#define USER_DATA_STARTCODE
static int mpeg4_get_block_length(MpegEncContext *s, const int16_t *block, int n, int intra_dc, const uint8_t *scan_table)
static int decide_ac_pred(MpegEncContext *s, int16_t block[6][64], const int dir[6], const uint8_t *st[6], int zigzag_last_index[6])
Return the optimal value (0 or 1) for the ac_pred element for the given MB in MPEG-4.
const uint8_t ff_h263_inter_MCBPC_code[28]
@ AV_PICTURE_TYPE_P
Predicted.
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
const uint8_t ff_mpeg4_c_dc_scale_table[32]
static void scale(int *out, const int *in, const int w, const int h, const int shift)
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
int width
picture width / height.
The exact code depends on how similar the blocks are and how related they are to the block
static void restore_ac_coeffs(MpegEncContext *s, int16_t block[6][64], const int dir[6], const uint8_t *st[6], const int zigzag_last_index[6])
Restore the ac coefficients in block that have been changed by decide_ac_pred().
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.