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, ¤t_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, ¤t_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, ¤t_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, ¤t_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
