X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavcodec%2Fmpeg4videoenc.c;h=db7d3ad46ba29d0a30375df4e969e919758b3ef6;hb=e10b7ef2fe56603fb1baac6b20fd6bd0a3fdd0d0;hp=14c9f65ee4932e18e27be5697efff5cfea989e83;hpb=75bd07f732fb575c2b88dc7cd08a6bb12c2e24ea;p=ffmpeg diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index 14c9f65ee49..db7d3ad46ba 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -23,6 +23,7 @@ #include "libavutil/attributes.h" #include "libavutil/log.h" #include "libavutil/opt.h" +#include "mpegutils.h" #include "mpegvideo.h" #include "h263.h" #include "mpeg4video.h" @@ -109,11 +110,11 @@ static inline void restore_ac_coeffs(MpegEncContext *s, int16_t block[6][64], if (dir[n]) { /* top prediction */ for (i = 1; i < 8; i++) - block[n][s->dsp.idct_permutation[i]] = ac_val[i + 8]; + block[n][s->idsp.idct_permutation[i]] = ac_val[i + 8]; } else { /* left prediction */ for (i = 1; i < 8; i++) - block[n][s->dsp.idct_permutation[i << 3]] = ac_val[i]; + block[n][s->idsp.idct_permutation[i << 3]] = ac_val[i]; } } } @@ -151,17 +152,17 @@ static inline int decide_ac_pred(MpegEncContext *s, int16_t block[6][64], if (s->mb_y == 0 || s->qscale == qscale_table[xy] || n == 2 || n == 3) { /* same qscale */ for (i = 1; i < 8; i++) { - const int level = block[n][s->dsp.idct_permutation[i]]; - block[n][s->dsp.idct_permutation[i]] = level - ac_val[i + 8]; - ac_val1[i] = block[n][s->dsp.idct_permutation[i << 3]]; + const int level = block[n][s->idsp.idct_permutation[i]]; + block[n][s->idsp.idct_permutation[i]] = level - ac_val[i + 8]; + ac_val1[i] = block[n][s->idsp.idct_permutation[i << 3]]; ac_val1[i + 8] = level; } } else { /* different qscale, we must rescale */ for (i = 1; i < 8; i++) { - const int level = block[n][s->dsp.idct_permutation[i]]; - block[n][s->dsp.idct_permutation[i]] = level - ROUNDED_DIV(ac_val[i + 8] * qscale_table[xy], s->qscale); - ac_val1[i] = block[n][s->dsp.idct_permutation[i << 3]]; + const int level = block[n][s->idsp.idct_permutation[i]]; + block[n][s->idsp.idct_permutation[i]] = level - ROUNDED_DIV(ac_val[i + 8] * qscale_table[xy], s->qscale); + ac_val1[i] = block[n][s->idsp.idct_permutation[i << 3]]; ac_val1[i + 8] = level; } } @@ -173,18 +174,18 @@ static inline int decide_ac_pred(MpegEncContext *s, int16_t block[6][64], if (s->mb_x == 0 || s->qscale == qscale_table[xy] || n == 1 || n == 3) { /* same qscale */ for (i = 1; i < 8; i++) { - const int level = block[n][s->dsp.idct_permutation[i << 3]]; - block[n][s->dsp.idct_permutation[i << 3]] = level - ac_val[i]; + const int level = block[n][s->idsp.idct_permutation[i << 3]]; + block[n][s->idsp.idct_permutation[i << 3]] = level - ac_val[i]; ac_val1[i] = level; - ac_val1[i + 8] = block[n][s->dsp.idct_permutation[i]]; + ac_val1[i + 8] = block[n][s->idsp.idct_permutation[i]]; } } else { /* different qscale, we must rescale */ for (i = 1; i < 8; i++) { - const int level = block[n][s->dsp.idct_permutation[i << 3]]; - block[n][s->dsp.idct_permutation[i << 3]] = level - ROUNDED_DIV(ac_val[i] * qscale_table[xy], s->qscale); + const int level = block[n][s->idsp.idct_permutation[i << 3]]; + block[n][s->idsp.idct_permutation[i << 3]] = level - ROUNDED_DIV(ac_val[i] * qscale_table[xy], s->qscale); ac_val1[i] = level; - ac_val1[i + 8] = block[n][s->dsp.idct_permutation[i]]; + ac_val1[i + 8] = block[n][s->idsp.idct_permutation[i]]; } } st[n] = s->intra_v_scantable.permutated; @@ -429,7 +430,7 @@ static inline void mpeg4_encode_blocks(MpegEncContext *s, int16_t block[6][64], int i; if (scan_table) { - if (s->flags2 & CODEC_FLAG2_NO_OUTPUT) { + if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) { for (i = 0; i < 6; i++) skip_put_bits(&s->pb, mpeg4_get_block_length(s, block[i], i, @@ -441,7 +442,7 @@ static inline void mpeg4_encode_blocks(MpegEncContext *s, int16_t block[6][64], intra_dc[i], scan_table[i], dc_pb, ac_pb); } } else { - if (s->flags2 & CODEC_FLAG2_NO_OUTPUT) { + if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) { for (i = 0; i < 6; i++) skip_put_bits(&s->pb, mpeg4_get_block_length(s, block[i], i, 0, @@ -484,7 +485,7 @@ static inline int get_b_cbp(MpegEncContext *s, int16_t block[6][64], for (i = 0; i < 6; i++) { if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i)) & 1) == 0) { s->block_last_index[i] = -1; - s->dsp.clear_block(s->block[i]); + s->bdsp.clear_block(s->block[i]); } } } else { @@ -506,7 +507,7 @@ void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], PutBitContext *const pb2 = s->data_partitioning ? &s->pb2 : &s->pb; PutBitContext *const tex_pb = s->data_partitioning && s->pict_type != AV_PICTURE_TYPE_B ? &s->tex_pb : &s->pb; PutBitContext *const dc_pb = s->data_partitioning && s->pict_type != AV_PICTURE_TYPE_I ? &s->pb2 : &s->pb; - const int interleaved_stats = (s->flags & CODEC_FLAG_PASS1) && !s->data_partitioning ? 1 : 0; + const int interleaved_stats = (s->avctx->flags & AV_CODEC_FLAG_PASS1) && !s->data_partitioning ? 1 : 0; if (!s->mb_intra) { int i, cbp; @@ -674,7 +675,7 @@ void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], y = s->height - 16; offset = x + y * s->linesize; - p_pic = s->new_picture.f.data[0] + offset; + p_pic = s->new_picture.f->data[0] + offset; s->mb_skipped = 1; for (i = 0; i < s->max_b_frames; i++) { @@ -682,13 +683,13 @@ void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int diff; Picture *pic = s->reordered_input_picture[i + 1]; - if (!pic || pic->f.pict_type != AV_PICTURE_TYPE_B) + if (!pic || pic->f->pict_type != AV_PICTURE_TYPE_B) break; - b_pic = pic->f.data[0] + offset; + b_pic = pic->f->data[0] + offset; if (!pic->shared) b_pic += INPLACE_OFFSET; - diff = s->dsp.sad[0](NULL, p_pic, b_pic, s->linesize, 16); + diff = s->mecc.sad[0](NULL, p_pic, b_pic, s->linesize, 16); if (diff > s->qscale * 70) { // FIXME check that 70 is optimal s->mb_skipped = 0; break; @@ -821,7 +822,7 @@ void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], for (i = 0; i < 6; i++) dc_diff[i] = ff_mpeg4_pred_dc(s, i, block[i][0], &dir[i], 1); - if (s->flags & CODEC_FLAG_AC_PRED) { + if (s->avctx->flags & AV_CODEC_FLAG_AC_PRED) { s->ac_pred = decide_ac_pred(s, block, dir, scan_table, zigzag_last_index); } else { for (i = 0; i < 6; i++) @@ -905,9 +906,9 @@ static void mpeg4_encode_gop_header(MpegEncContext *s) put_bits(&s->pb, 16, 0); put_bits(&s->pb, 16, GOP_STARTCODE); - time = s->current_picture_ptr->f.pts; + time = s->current_picture_ptr->f->pts; if (s->reordered_input_picture[1]) - time = FFMIN(time, s->reordered_input_picture[1]->f.pts); + time = FFMIN(time, s->reordered_input_picture[1]->f->pts); time = time * s->avctx->time_base.num; seconds = time / s->avctx->time_base.den; @@ -922,7 +923,7 @@ static void mpeg4_encode_gop_header(MpegEncContext *s) put_bits(&s->pb, 1, 1); put_bits(&s->pb, 6, seconds); - put_bits(&s->pb, 1, !!(s->flags & CODEC_FLAG_CLOSED_GOP)); + put_bits(&s->pb, 1, !!(s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP)); put_bits(&s->pb, 1, 0); // broken link == NO s->last_time_base = time / s->avctx->time_base.den; @@ -1054,8 +1055,7 @@ static void mpeg4_encode_vol_header(MpegEncContext *s, if (vo_ver_id != 1) put_bits(&s->pb, 1, s->quarter_sample); put_bits(&s->pb, 1, 1); /* complexity estimation disable */ - s->resync_marker = s->rtp_mode; - put_bits(&s->pb, 1, s->resync_marker ? 0 : 1); /* resync marker disable */ + put_bits(&s->pb, 1, s->rtp_mode ? 0 : 1); /* resync marker disable */ put_bits(&s->pb, 1, s->data_partitioning ? 1 : 0); if (s->data_partitioning) put_bits(&s->pb, 1, 0); /* no rvlc */ @@ -1069,7 +1069,7 @@ static void mpeg4_encode_vol_header(MpegEncContext *s, ff_mpeg4_stuffing(&s->pb); /* user data */ - if (!(s->flags & CODEC_FLAG_BITEXACT)) { + if (!(s->avctx->flags & AV_CODEC_FLAG_BITEXACT)) { put_bits(&s->pb, 16, 0); put_bits(&s->pb, 16, 0x1B2); /* user_data */ avpriv_put_string(&s->pb, LIBAVCODEC_IDENT, 0); @@ -1083,7 +1083,7 @@ void ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number) int time_div, time_mod; if (s->pict_type == AV_PICTURE_TYPE_I) { - if (!(s->flags & CODEC_FLAG_GLOBAL_HEADER)) { + if (!(s->avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)) { if (s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT) // HACK, the reference sw is buggy mpeg4_encode_visual_object_header(s); if (s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT || picture_number == 0) // HACK, the reference sw is buggy @@ -1118,7 +1118,7 @@ void ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number) } put_bits(&s->pb, 3, 0); /* intra dc VLC threshold */ if (!s->progressive_sequence) { - put_bits(&s->pb, 1, s->current_picture_ptr->f.top_field_first); + put_bits(&s->pb, 1, s->current_picture_ptr->f->top_field_first); put_bits(&s->pb, 1, s->alternate_scan); } // FIXME sprite stuff @@ -1287,7 +1287,7 @@ static av_cold int encode_init(AVCodecContext *avctx) int ret; static int done = 0; - if ((ret = ff_MPV_encode_init(avctx)) < 0) + if ((ret = ff_mpv_encode_init(avctx)) < 0) return ret; if (!done) { @@ -1295,7 +1295,7 @@ static av_cold int encode_init(AVCodecContext *avctx) init_uni_dc_tab(); - ff_init_rl(&ff_mpeg4_rl_intra, ff_mpeg4_static_rl_table_store[0]); + ff_rl_init(&ff_mpeg4_rl_intra, ff_mpeg4_static_rl_table_store[0]); init_uni_mpeg4_rl_tab(&ff_mpeg4_rl_intra, uni_mpeg4_intra_rl_bits, uni_mpeg4_intra_rl_len); init_uni_mpeg4_rl_tab(&ff_h263_rl_inter, uni_mpeg4_inter_rl_bits, uni_mpeg4_inter_rl_len); @@ -1312,7 +1312,7 @@ static av_cold int encode_init(AVCodecContext *avctx) s->y_dc_scale_table = ff_mpeg4_y_dc_scale_table; s->c_dc_scale_table = ff_mpeg4_c_dc_scale_table; - if (s->flags & CODEC_FLAG_GLOBAL_HEADER) { + if (s->avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { s->avctx->extradata = av_malloc(1024); init_put_bits(&s->pb, s->avctx->extradata, 1024); @@ -1401,9 +1401,9 @@ AVCodec ff_mpeg4_encoder = { .id = AV_CODEC_ID_MPEG4, .priv_data_size = sizeof(MpegEncContext), .init = encode_init, - .encode2 = ff_MPV_encode_picture, - .close = ff_MPV_encode_end, + .encode2 = ff_mpv_encode_picture, + .close = ff_mpv_encode_end, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, - .capabilities = CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS, + .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS, .priv_class = &mpeg4enc_class, };