From 62330ba619b526ff730457e5f6084b91433425ff Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Date: Wed, 19 Mar 2025 00:48:33 +0100 Subject: [PATCH 61/77] avcodec/mpegvideo: Move motion_est to MotionEstContext Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/motion_est.c | 7 ++++--- libavcodec/motion_est.h | 1 + libavcodec/mpegvideo.h | 1 - libavcodec/mpegvideoenc.h | 2 +- libavcodec/snowenc.c | 2 +- libavcodec/svq1enc.c | 5 +---- 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index 7c08fe53eb..88164de6a5 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -919,7 +919,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, s->mb_var [s->mb_stride * mb_y + mb_x] = (varc+128)>>8; c->mb_var_sum_temp += (varc+128)>>8; - if (s->motion_est != FF_ME_ZERO) { + if (c->motion_est != FF_ME_ZERO) { const int mot_stride = s->b8_stride; const int mot_xy = s->block_index[0]; @@ -1127,7 +1127,7 @@ static int estimate_motion_b(MpegEncContext *s, int mb_x, int mb_y, get_limits(s, 16*mb_x, 16*mb_y, 1); - if (s->motion_est != FF_ME_ZERO) { + if (c->motion_est != FF_ME_ZERO) { P_LEFT[0] = mv_table[mot_xy - 1][0]; P_LEFT[1] = mv_table[mot_xy - 1][1]; @@ -1599,8 +1599,9 @@ void ff_estimate_b_frame_motion(MpegEncContext * s, int ff_get_best_fcode(MPVMainEncContext *const m, const int16_t (*mv_table)[2], int type) { MpegEncContext *const s = &m->s; + MotionEstContext *const c = &s->me; - if (s->motion_est != FF_ME_ZERO) { + if (c->motion_est != FF_ME_ZERO) { int score[8]; int i, y, range= s->avctx->me_range ? s->avctx->me_range : (INT_MAX/2); const uint8_t * fcode_tab = m->fcode_tab; diff --git a/libavcodec/motion_est.h b/libavcodec/motion_est.h index d8a2cab3a0..5fa96161c6 100644 --- a/libavcodec/motion_est.h +++ b/libavcodec/motion_est.h @@ -48,6 +48,7 @@ typedef struct MPVMainEncContext MPVMainEncContext; */ typedef struct MotionEstContext { AVCodecContext *avctx; + int motion_est; ///< ME algorithm int skip; ///< set if ME is skipped for the current MB int co_located_mv[4][2]; ///< mv from last P-frame for direct mode ME int direct_basis_mv[4][2]; diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 1ff2924052..85227fdb8f 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -222,7 +222,6 @@ typedef struct MpegEncContext { uint8_t *mb_mean; ///< Table for MB luminance uint64_t encoding_error[MPV_MAX_PLANES]; - int motion_est; ///< ME algorithm int mv_dir; #define MV_DIR_FORWARD 1 #define MV_DIR_BACKWARD 2 diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 37e1546b50..bc8a3e80d5 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -217,7 +217,7 @@ FF_MPV_OPT_CMP_FUNC, \ #define FF_MPV_COMMON_MOTION_EST_OPTS \ { "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" },\ -{"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \ +{"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" }, \ { "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \ { "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \ { "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \ diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index e6cf2a290c..fc2a56a808 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -1866,7 +1866,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, mpv->b8_stride = 2 * mpv->mb_width + 1; mpv->f_code = 1; mpv->pict_type = pic->pict_type; - mpv->motion_est = enc->motion_est; + mpv->me.motion_est = enc->motion_est; mpv->me.scene_change_score = 0; mpv->me.dia_size = avctx->dia_size; mpv->quarter_sample = (s->avctx->flags & AV_CODEC_FLAG_QPEL)!=0; diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 40e3fd0045..652dc11b03 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -96,8 +96,6 @@ typedef struct SVQ1EncContext { uint8_t *scratchbuf; - int motion_est; - SVQ1EncDSPContext svq1encdsp; } SVQ1EncContext; @@ -339,7 +337,6 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, s->m.b8_stride = 2 * s->m.mb_width + 1; s->m.f_code = 1; s->m.pict_type = s->pict_type; - s->m.motion_est = s->motion_est; s->m.me.scene_change_score = 0; // s->m.out_format = FMT_H263; // s->m.unrestricted_mv = 1; @@ -719,7 +716,7 @@ static int svq1_encode_frame(AVCodecContext *avctx, AVPacket *pkt, #define OFFSET(x) offsetof(struct SVQ1EncContext, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { - { "motion-est", "Motion estimation algorithm", OFFSET(motion_est), AV_OPT_TYPE_INT, { .i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, VE, .unit = "motion-est"}, + { "motion-est", "Motion estimation algorithm", OFFSET(m.me.motion_est), AV_OPT_TYPE_INT, { .i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, VE, .unit = "motion-est"}, { "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion-est" }, { "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion-est" }, { "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion-est" }, -- 2.45.2