On Sun, Nov 16, 2014 at 11:29 AM, Luca Barbato <[email protected]> wrote:
> ---
>  libavcodec/hevc.c | 86 
> +++++++++++++++++++++++++++++--------------------------
>  1 file changed, 46 insertions(+), 40 deletions(-)
>
> diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c
> index 3dcbe60..08bed86 100644
> --- a/libavcodec/hevc.c
> +++ b/libavcodec/hevc.c
> @@ -1621,6 +1621,50 @@ static void hevc_await_progress(HEVCContext *s, 
> HEVCFrame *ref,
>      ff_thread_await_progress(&ref->tf, y, 0);
>  }
>
> +static void hevc_luma_mv_mpv_mode(HEVCContext *s, int x0, int y0, int nPbW,
> +                                  int nPbH, int log2_cb_size, int part_idx,
> +                                  int merge_idx, MvField *mv)
> +{
> +    HEVCLocalContext *lc             = &s->HEVClc;
> +    enum InterPredIdc inter_pred_idc = PRED_L0;
> +    int mvp_flag;
> +
> +    ff_hevc_set_neighbour_available(s, x0, y0, nPbW, nPbH);
> +    if (s->sh.slice_type == B_SLICE)
> +        inter_pred_idc = ff_hevc_inter_pred_idc_decode(s, nPbW, nPbH);
> +
> +    if (inter_pred_idc != PRED_L1) {
> +        if (s->sh.nb_refs[L0])
> +            mv->ref_idx[0]= ff_hevc_ref_idx_lx_decode(s, s->sh.nb_refs[L0]);
> +
> +        mv->pred_flag[0] = 1;
> +        hls_mvd_coding(s, x0, y0, 0);
> +        mvp_flag = ff_hevc_mvp_lx_flag_decode(s);
> +        ff_hevc_luma_mv_mvp_mode(s, x0, y0, nPbW, nPbH, log2_cb_size,
> +                                 part_idx, merge_idx, mv, mvp_flag, 0);
> +        mv->mv[0].x += lc->pu.mvd.x;
> +        mv->mv[0].y += lc->pu.mvd.y;
> +    }
> +
> +    if (inter_pred_idc != PRED_L0) {
> +        if (s->sh.nb_refs[L1])
> +            mv->ref_idx[1]= ff_hevc_ref_idx_lx_decode(s, s->sh.nb_refs[L1]);
> +
> +        if (s->sh.mvd_l1_zero_flag == 1 && inter_pred_idc == PRED_BI) {
> +            AV_ZERO32(&lc->pu.mvd);
> +        } else {
> +            hls_mvd_coding(s, x0, y0, 1);
> +        }
> +
> +        mv->pred_flag[1] = 1;
> +        mvp_flag = ff_hevc_mvp_lx_flag_decode(s);
> +        ff_hevc_luma_mv_mvp_mode(s, x0, y0, nPbW, nPbH, log2_cb_size,
> +                                 part_idx, merge_idx, mv, mvp_flag, 1);
> +        mv->mv[1].x += lc->pu.mvd.x;
> +        mv->mv[1].y += lc->pu.mvd.y;
> +    }
> +}
> +
>  static void hls_prediction_unit(HEVCContext *s, int x0, int y0,
>                                  int nPbW, int nPbH,
>                                  int log2_cb_size, int partIdx)
> @@ -1664,46 +1708,8 @@ static void hls_prediction_unit(HEVCContext *s, int 
> x0, int y0,
>          ff_hevc_luma_mv_merge_mode(s, x0, y0, nPbW, nPbH, log2_cb_size,
>                                     partIdx, merge_idx, &current_mv);
>      } else {
> -        enum InterPredIdc inter_pred_idc = PRED_L0;
> -        int mvp_flag;
> -
> -        ff_hevc_set_neighbour_available(s, x0, y0, nPbW, nPbH);
> -        if (s->sh.slice_type == B_SLICE)
> -            inter_pred_idc = ff_hevc_inter_pred_idc_decode(s, nPbW, nPbH);
> -
> -        if (inter_pred_idc != PRED_L1) {
> -            if (s->sh.nb_refs[L0]) {
> -                current_mv.ref_idx[0]= ff_hevc_ref_idx_lx_decode(s, 
> s->sh.nb_refs[L0]);
> -            }
> -            current_mv.pred_flag[0] = 1;
> -            hls_mvd_coding(s, x0, y0, 0);
> -            mvp_flag = ff_hevc_mvp_lx_flag_decode(s);
> -            ff_hevc_luma_mv_mvp_mode(s, x0, y0, nPbW, nPbH, log2_cb_size,
> -                                     partIdx, merge_idx, &current_mv,
> -                                     mvp_flag, 0);
> -            current_mv.mv[0].x += lc->pu.mvd.x;
> -            current_mv.mv[0].y += lc->pu.mvd.y;
> -        }
> -
> -        if (inter_pred_idc != PRED_L0) {
> -            if (s->sh.nb_refs[L1]) {
> -                current_mv.ref_idx[1]= ff_hevc_ref_idx_lx_decode(s, 
> s->sh.nb_refs[L1]);
> -            }
> -
> -            if (s->sh.mvd_l1_zero_flag == 1 && inter_pred_idc == PRED_BI) {
> -                AV_ZERO32(&lc->pu.mvd);
> -            } else {
> -                hls_mvd_coding(s, x0, y0, 1);
> -            }
> -
> -            current_mv.pred_flag[1] = 1;
> -            mvp_flag = ff_hevc_mvp_lx_flag_decode(s);
> -            ff_hevc_luma_mv_mvp_mode(s, x0, y0, nPbW, nPbH, log2_cb_size,
> -                                     partIdx, merge_idx, &current_mv,
> -                                     mvp_flag, 1);
> -            current_mv.mv[1].x += lc->pu.mvd.x;
> -            current_mv.mv[1].y += lc->pu.mvd.y;
> -        }
> +        hevc_luma_mv_mpv_mode(s, x0, y0, nPbW, nPbH, log2_cb_size,
> +                              partIdx, merge_idx, &current_mv);
>      }
>
>      x_pu = x0 >> s->sps->log2_min_pu_size;
> --

Looks ok

-- 
Vittorio
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to