18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @file
243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  ih264e_mc.c
253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Contains definition of functions for motion compensation
283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @author
303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  ittiam
313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @par List of Functions:
333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  - ih264e_motion_comp_luma()
343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  - ih264e_motion_comp_chroma()
353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks
373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  None
383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *******************************************************************************
403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* File Includes                                                             */
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* System include files */
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdio.h>
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* User include files */
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h"
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_defs.h"
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "iv2.h"
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ive2.h"
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ime_distortion_metrics.h"
553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ime_defs.h"
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ime_structs.h"
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_structs.h"
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_inter_pred_filters.h"
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_mem_fns.h"
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_padding.h"
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_intra_pred_filters.h"
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_deblk_edge_filters.h"
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_trans_quant_itrans_iquant.h"
643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_cabac_tables.h"
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_defs.h"
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_error.h"
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_bitstream.h"
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_cntrl_param.h"
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_frame_info_collector.h"
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_rate_control.h"
713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_cabac_structs.h"
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_structs.h"
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_mc.h"
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_half_pel.h"
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Definitions                                                      */
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K ******************************************************************************
823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  performs motion compensation for a luma mb for the given mv.
853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @par Description
873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  This routine performs motion compensation of an inter mb. When the inter
883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  mb mode is P16x16, there is no need to copy 16x16 unit from reference buffer
893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  to pred buffer. In this case the function returns pointer and stride of the
903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  ref. buffer and this info is used in place of pred buffer else where.
913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  In other cases, the pred buffer is populated via copy / filtering + copy
923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  (q pel cases) and returned.
933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_proc
953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  pointer to current proc ctxt
963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[out] pu1_pseudo_pred
983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  pseudo prediction buffer
993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[out] u4_pseudo_pred_strd
1013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  pseudo pred buffer stride
1023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @return  none
1043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks Assumes half pel buffers for the entire frame are populated.
1063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
1073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K ******************************************************************************
1083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
1093749f6f435e79624f72841e866245d84195551cdHarinarayanan K Kvoid ih264e_motion_comp_luma(process_ctxt_t *ps_proc, UWORD8 **pu1_pseudo_pred,
1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                             WORD32 *pi4_pseudo_pred_strd)
1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* codec context */
1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    codec_t *ps_codec = ps_proc->ps_codec;
1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* me ctxt */
1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    me_ctxt_t *ps_me_ctxt = &ps_proc->s_me_ctxt;
1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Pointer to the structure having motion vectors, size and position of curr partitions */
1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    enc_pu_t *ps_curr_pu;
1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* pointers to full pel, half pel x, half pel y, half pel xy reference buffer */
1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_ref[4];
1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* pred buffer ptr */
1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_pred;
1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* strides of full pel, half pel x, half pel y, half pel xy reference buffer */
1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_ref_strd[4];
1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* pred buffer stride */
1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_pred_strd = ps_proc->i4_pred_strd;
1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* full pel motion vectors */
1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 u4_mv_x_full, u4_mv_y_full;
1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* half pel motion vectors */
1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 u4_mv_x_hpel, u4_mv_y_hpel;
1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* quarter pel motion vectors */
1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 u4_mv_x_qpel, u4_mv_y_qpel;
1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* width & height of the partition */
1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 wd, ht;
1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* partition idx */
1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_num_prtn;
1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* half / qpel coefficient */
1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_subpel_factor;
1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    /* BIPRED Flag */
1523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    WORD32 i4_bipred_flag;
1533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* temp var */
1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_lkup_idx1;
1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Init */
1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    i4_ref_strd[0] = ps_proc->i4_rec_strd;
1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    i4_ref_strd[1] = i4_ref_strd[2] = i4_ref_strd[3] =
1613749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    ps_me_ctxt->u4_subpel_buf_strd;
1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    for (u4_num_prtn = 0; u4_num_prtn < ps_proc->u4_num_sub_partitions;
1643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_num_prtn++)
1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
1663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        mv_t *ps_curr_mv;
1673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* update ptr to curr partition */
1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ps_curr_pu = ps_proc->ps_pu + u4_num_prtn;
1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
1713749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Set no no bipred */
1723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        i4_bipred_flag = 0;
1733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        switch (ps_curr_pu->b2_pred_mode)
1753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
1763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            case PRED_L0:
1773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_mv = &ps_curr_pu->s_me_info[0].s_mv;
1783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                pu1_ref[0] = ps_proc->apu1_ref_buf_luma[0];
1793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                break;
1803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            case PRED_L1:
1823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_mv = &ps_curr_pu->s_me_info[1].s_mv;
1833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                pu1_ref[0] = ps_proc->apu1_ref_buf_luma[1];
1843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                break;
1853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            case PRED_BI:
1873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /*
1883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                 * In case of PRED_BI, we only need to ensure that
1893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                 * the reference buffer that gets selected is
1903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                 * ps_proc->pu1_best_subpel_buf
1913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                 */
1923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* Dummy */
1943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_mv = &ps_curr_pu->s_me_info[0].s_mv;
1953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                pu1_ref[0] = ps_proc->apu1_ref_buf_luma[0];
1963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
1973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                i4_bipred_flag = 1;
1983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                break;
1993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            default:
2013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_mv = &ps_curr_pu->s_me_info[0].s_mv;
2023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                pu1_ref[0] = ps_proc->apu1_ref_buf_luma[0];
2033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                break;
2043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
2053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* get full pel mv's (full pel units) */
2083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_mv_x_full = ps_curr_mv->i2_mvx >> 2;
2093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_mv_y_full = ps_curr_mv->i2_mvy >> 2;
2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* get half pel mv's */
2123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_mv_x_hpel = (ps_curr_mv->i2_mvx & 0x2) >> 1;
2133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_mv_y_hpel = (ps_curr_mv->i2_mvy & 0x2) >> 1;
2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* get quarter pel mv's */
2163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_mv_x_qpel = (ps_curr_mv->i2_mvx & 0x1);
2173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_mv_y_qpel = (ps_curr_mv->i2_mvy & 0x1);
2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* width and height of partition */
2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        wd = (ps_curr_pu->b4_wd + 1) << 2;
2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        ht = (ps_curr_pu->b4_ht + 1) << 2;
2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* decision ? qpel/hpel, fpel */
2243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_subpel_factor = (u4_mv_y_hpel << 3) + (u4_mv_x_hpel << 2)
2253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        + (u4_mv_y_qpel << 1) + (u4_mv_x_qpel);
2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Move ref to position given by MV */
2283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_ref[0] += ((u4_mv_y_full * i4_ref_strd[0]) + u4_mv_x_full);
2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* Sub pel ptrs/ Biperd pointers init */
2313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_ref[1] = ps_proc->pu1_best_subpel_buf;
2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        i4_ref_strd[1] = ps_proc->u4_bst_spel_buf_strd;
2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        /* update pred buff ptr */
2353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        pu1_pred = ps_proc->pu1_pred_mb
2363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        + 4 * ps_curr_pu->b4_pos_y * i4_pred_strd
2373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                        + 4 * ps_curr_pu->b4_pos_x;
2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        /* u4_lkup_idx1 will be non zero for half pel and bipred */
2403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        u4_lkup_idx1 = ((u4_subpel_factor >> 2) != 0) || i4_bipred_flag;
2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        {
2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /********************************************************************/
2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* if the block is P16x16 MB and mv are not quarter pel motion      */
2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* vectors, there is no need to copy 16x16 unit from reference frame*/
2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* to pred buffer. We might as well send the reference frame buffer */
2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* pointer as pred buffer (ofc with updated stride) to fwd transform*/
2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /* and inverse transform unit.                                      */
2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /********************************************************************/
2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            if (ps_proc->u4_num_sub_partitions == 1)
2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *pu1_pseudo_pred = pu1_ref[u4_lkup_idx1];
2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                *pi4_pseudo_pred_strd = i4_ref_strd[u4_lkup_idx1];
2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            /*
2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S             * Copying half pel or full pel to prediction buffer
2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S             * Currently ps_proc->u4_num_sub_partitions will always be 1 as we only support 16x16 in P mbs
2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S             */
2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            else
2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            {
2623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_codec->pf_inter_pred_luma_copy(pu1_ref[u4_lkup_idx1],
2633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  pu1_pred,
2643749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  i4_ref_strd[u4_lkup_idx1],
2653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  i4_pred_strd, ht, wd, NULL,
2663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  0);
2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S            }
2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S        }
2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
2743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K ******************************************************************************
2753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
2763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @brief
2773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  performs motion compensation for chroma mb
2783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
2793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @par   Description
2803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  Copies a MB of data from the reference buffer (Full pel, half pel or q pel)
2813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  according to the motion vectors given
2823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
2833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @param[in] ps_proc
2843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  pointer to current proc ctxt
2853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
2863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @return  none
2873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *
2883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K * @remarks Assumes half pel and quarter pel buffers for the entire frame are
2893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K *  populated.
2903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K ******************************************************************************
2913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K */
2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_motion_comp_chroma(process_ctxt_t *ps_proc)
2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* codec context */
2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    codec_t *ps_codec = ps_proc->ps_codec;
2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* Pointer to the structure having motion vectors, size and position of curr partitions */
2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    enc_pu_t *ps_curr_pu;
2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* pointers to full pel, half pel x, half pel y, half pel xy reference buffer */
3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_ref;
3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* pred buffer ptr */
3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 *pu1_pred;
3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* strides of full pel reference buffer */
3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_ref_strd = ps_proc->i4_rec_strd;
3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* pred buffer stride */
3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_pred_strd = ps_proc->i4_pred_strd;
3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* full pel motion vectors */
3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 u4_mv_x_full, u4_mv_y_full;
3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* half pel motion vectors */
3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 u4_mv_x_hpel, u4_mv_y_hpel;
3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* quarter pel motion vectors */
3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 u4_mv_x_qpel, u4_mv_y_qpel;
3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* width & height of the partition */
3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 wd, ht;
3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /* partition idx */
3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD32 u4_num_prtn;
3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 u4_mv_x;
3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 u4_mv_y;
3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    UWORD8 u1_dx, u1_dy;
3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K    for (u4_num_prtn = 0; u4_num_prtn < ps_proc->u4_num_sub_partitions;
3323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                    u4_num_prtn++)
3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    {
3343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        mv_t *ps_curr_mv;
3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        ps_curr_pu = ps_proc->ps_pu + u4_num_prtn;
3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        if (ps_curr_pu->b2_pred_mode != PRED_BI)
3393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
3403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_curr_mv = &ps_curr_pu->s_me_info[ps_curr_pu->b2_pred_mode].s_mv;
3413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            pu1_ref = ps_proc->apu1_ref_buf_chroma[ps_curr_pu->b2_pred_mode];
3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_mv_x = ps_curr_mv->i2_mvx >> 3;
3443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_mv_y = ps_curr_mv->i2_mvy >> 3;
3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /*  corresponds to full pel motion vector in luma, but in chroma corresponds to pel formed wiith dx, dy =4 */
3473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_mv_x_full = (ps_curr_mv->i2_mvx & 0x4) >> 2;
3483749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_mv_y_full = (ps_curr_mv->i2_mvy & 0x4) >> 2;
3493749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3503749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* get half pel mv's */
3513749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_mv_x_hpel = (ps_curr_mv->i2_mvx & 0x2) >> 1;
3523749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_mv_y_hpel = (ps_curr_mv->i2_mvy & 0x2) >> 1;
3533749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3543749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* get quarter pel mv's */
3553749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_mv_x_qpel = (ps_curr_mv->i2_mvx & 0x1);
3563749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u4_mv_y_qpel = (ps_curr_mv->i2_mvy & 0x1);
3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3583749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* width and height of sub macro block */
3593749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            wd = (ps_curr_pu->b4_wd + 1) << 1;
3603749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ht = (ps_curr_pu->b4_ht + 1) << 1;
3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* move the pointers so that they point to the motion compensated locations */
3633749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            pu1_ref += ((u4_mv_y * i4_ref_strd) + (u4_mv_x << 1));
3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3653749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            pu1_pred = ps_proc->pu1_pred_mb
3663749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            + 4 * ps_curr_pu->b4_pos_y * i4_pred_strd
3673749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                            + 2 * ps_curr_pu->b4_pos_x;
3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3693749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_dx = (u4_mv_x_full << 2) + (u4_mv_x_hpel << 1) + (u4_mv_x_qpel);
3703749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            u1_dy = (u4_mv_y_full << 2) + (u4_mv_y_hpel << 1) + (u4_mv_y_qpel);
3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
3723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* cases where u1_dx = 0 or u1_dy = 0 are dealt separately in neon with
3733749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             * separate functions for better performance
3743749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             *
3753749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             * ih264_inter_pred_chroma_dx_zero_a9q
3763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             * and
3773749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             * ih264_inter_pred_chroma_dy_zero_a9q
3783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             */
3793749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3803749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_codec->pf_inter_pred_chroma(pu1_ref, pu1_pred, i4_ref_strd,
3813749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                           i4_pred_strd, u1_dx, u1_dy, ht, wd);
3823749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
3833749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        else /* If the pred mode is PRED_BI */
3843749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        {
3853749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /*
3863749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             * We need to interpolate the L0 and L1 ref pics with the chorma MV
3873749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             * then use them to average for bilinrar interpred
3883749f6f435e79624f72841e866245d84195551cdHarinarayanan K K             */
3893749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            WORD32 i4_predmode;
3903749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            UWORD8 *pu1_ref_buf[2];
3913749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3923749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            /* Temporary buffers to store the interpolated value from L0 and L1 */
3933749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            pu1_ref_buf[PRED_L0] = ps_proc->apu1_subpel_buffs[0];
3943749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            pu1_ref_buf[PRED_L1] = ps_proc->apu1_subpel_buffs[1];
3953749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3963749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
3973749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            for (i4_predmode = 0; i4_predmode < PRED_BI; i4_predmode++)
3983749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            {
3993749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_curr_mv = &ps_curr_pu->s_me_info[i4_predmode].s_mv;
4003749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                pu1_ref = ps_proc->apu1_ref_buf_chroma[i4_predmode];
4013749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4023749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mv_x = ps_curr_mv->i2_mvx >> 3;
4033749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mv_y = ps_curr_mv->i2_mvy >> 3;
4043749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4053749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /*
4063749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                 * corresponds to full pel motion vector in luma, but in chroma
4073749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                 * corresponds to pel formed wiith dx, dy =4
4083749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                 */
4093749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mv_x_full = (ps_curr_mv->i2_mvx & 0x4) >> 2;
4103749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mv_y_full = (ps_curr_mv->i2_mvy & 0x4) >> 2;
4113749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4123749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* get half pel mv's */
4133749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mv_x_hpel = (ps_curr_mv->i2_mvx & 0x2) >> 1;
4143749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mv_y_hpel = (ps_curr_mv->i2_mvy & 0x2) >> 1;
4153749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4163749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* get quarter pel mv's */
4173749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mv_x_qpel = (ps_curr_mv->i2_mvx & 0x1);
4183749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u4_mv_y_qpel = (ps_curr_mv->i2_mvy & 0x1);
4193749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4203749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* width and height of sub macro block */
4213749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                wd = (ps_curr_pu->b4_wd + 1) << 1;
4223749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ht = (ps_curr_pu->b4_ht + 1) << 1;
4233749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4243749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                /* move the pointers so that they point to the motion compensated locations */
4253749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                pu1_ref += ((u4_mv_y * i4_ref_strd) + (u4_mv_x << 1));
4263749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4273749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                pu1_pred = ps_proc->pu1_pred_mb
4283749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                + 4 * ps_curr_pu->b4_pos_y * i4_pred_strd
4293749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                + 2 * ps_curr_pu->b4_pos_x;
4303749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4313749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_dx = (u4_mv_x_full << 2) + (u4_mv_x_hpel << 1)
4323749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                + (u4_mv_x_qpel);
4333749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                u1_dy = (u4_mv_y_full << 2) + (u4_mv_y_hpel << 1)
4343749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                + (u4_mv_y_qpel);
4353749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4363749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                ps_codec->pf_inter_pred_chroma(pu1_ref,
4373749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                               pu1_ref_buf[i4_predmode],
4383749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                               i4_ref_strd, MB_SIZE, u1_dx,
4393749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                               u1_dy, ht, wd);
4403749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            }
4413749f6f435e79624f72841e866245d84195551cdHarinarayanan K K
4423749f6f435e79624f72841e866245d84195551cdHarinarayanan K K            ps_codec->pf_inter_pred_luma_bilinear(pu1_ref_buf[PRED_L0],
4433749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  pu1_ref_buf[PRED_L1], pu1_pred,
4443749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  MB_SIZE, MB_SIZE,
4453749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  i4_pred_strd, MB_SIZE >> 1,
4463749f6f435e79624f72841e866245d84195551cdHarinarayanan K K                                                  MB_SIZE);
4473749f6f435e79624f72841e866245d84195551cdHarinarayanan K K        }
4488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    }
4498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}
450