[FFmpeg-devel] [PATCH 2/2] avcodec/motion_est: fix penalty_factor for b frames

Michael Niedermayer michael at niedermayer.cc
Mon Mar 23 23:42:26 EET 2020


On Sun, Mar 22, 2020 at 04:55:25PM +0100, Ramiro Polla wrote:
> In ff_estimate_b_frame_motion(), penalty_factor would be used before
> being initialized in estimate_motion_b(). Also, the initialization
> would happen more than once unnecessarily.
> ---
>  libavcodec/motion_est.c                  | 15 ++++++++-------
>  tests/ref/vsynth/vsynth2-mpeg2-422       |  6 +++---
>  tests/ref/vsynth/vsynth2-mpeg2-ivlc-qprd |  6 +++---
>  tests/ref/vsynth/vsynth2-mpeg4-adap      |  6 +++---
>  4 files changed, 17 insertions(+), 16 deletions(-)
> 
> diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c
> index 02c75fd470..1feb46cec3 100644
> --- a/libavcodec/motion_est.c
> +++ b/libavcodec/motion_est.c
> @@ -1123,9 +1123,6 @@ static int estimate_motion_b(MpegEncContext *s, int mb_x, int mb_y,
>      uint8_t * const mv_penalty= c->mv_penalty[f_code] + MAX_DMV;
>      int mv_scale;
>  
> -    c->penalty_factor    = get_penalty_factor(s->lambda, s->lambda2, c->avctx->me_cmp);
> -    c->sub_penalty_factor= get_penalty_factor(s->lambda, s->lambda2, c->avctx->me_sub_cmp);
> -    c->mb_penalty_factor = get_penalty_factor(s->lambda, s->lambda2, c->avctx->mb_cmp);
>      c->current_mv_penalty= mv_penalty;
>  
>      get_limits(s, 16*mb_x, 16*mb_y);



> @@ -1491,7 +1488,6 @@ void ff_estimate_b_frame_motion(MpegEncContext * s,
>                               int mb_x, int mb_y)
>  {
>      MotionEstContext * const c= &s->me;
> -    const int penalty_factor= c->mb_penalty_factor;
>      int fmin, bmin, dmin, fbmin, bimin, fimin;
>      int type=0;
>      const int xy = mb_y*s->mb_stride + mb_x;
> @@ -1517,18 +1513,23 @@ void ff_estimate_b_frame_motion(MpegEncContext * s,
>          dmin= direct_search(s, mb_x, mb_y);
>      else
>          dmin= INT_MAX;
> +
> +    c->penalty_factor    = get_penalty_factor(s->lambda, s->lambda2, c->avctx->me_cmp);
> +    c->sub_penalty_factor= get_penalty_factor(s->lambda, s->lambda2, c->avctx->me_sub_cmp);
> +    c->mb_penalty_factor = get_penalty_factor(s->lambda, s->lambda2, c->avctx->mb_cmp);

If mb_penalty_factor isnt correct in this before this maybe isnt enough
as the direct_search() uses mb_penalty_factor 

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

When you are offended at any man's fault, turn to yourself and study your
own failings. Then you will forget your anger. -- Epictetus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200323/0fbee86c/attachment.sig>


More information about the ffmpeg-devel mailing list