1*a97c2a1fSXin Li /****************************************************************************** 2*a97c2a1fSXin Li * 3*a97c2a1fSXin Li * Copyright (C) 2015 The Android Open Source Project 4*a97c2a1fSXin Li * 5*a97c2a1fSXin Li * Licensed under the Apache License, Version 2.0 (the "License"); 6*a97c2a1fSXin Li * you may not use this file except in compliance with the License. 7*a97c2a1fSXin Li * You may obtain a copy of the License at: 8*a97c2a1fSXin Li * 9*a97c2a1fSXin Li * http://www.apache.org/licenses/LICENSE-2.0 10*a97c2a1fSXin Li * 11*a97c2a1fSXin Li * Unless required by applicable law or agreed to in writing, software 12*a97c2a1fSXin Li * distributed under the License is distributed on an "AS IS" BASIS, 13*a97c2a1fSXin Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*a97c2a1fSXin Li * See the License for the specific language governing permissions and 15*a97c2a1fSXin Li * limitations under the License. 16*a97c2a1fSXin Li * 17*a97c2a1fSXin Li ***************************************************************************** 18*a97c2a1fSXin Li * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*a97c2a1fSXin Li */ 20*a97c2a1fSXin Li #include <stdio.h> 21*a97c2a1fSXin Li #include "iv_datatypedef.h" 22*a97c2a1fSXin Li #include "iv.h" 23*a97c2a1fSXin Li 24*a97c2a1fSXin Li #include "impeg2_buf_mgr.h" 25*a97c2a1fSXin Li #include "impeg2_disp_mgr.h" 26*a97c2a1fSXin Li #include "impeg2_defs.h" 27*a97c2a1fSXin Li #include "impeg2_platform_macros.h" 28*a97c2a1fSXin Li #include "impeg2_inter_pred.h" 29*a97c2a1fSXin Li #include "impeg2_idct.h" 30*a97c2a1fSXin Li #include "impeg2_globals.h" 31*a97c2a1fSXin Li #include "impeg2_mem_func.h" 32*a97c2a1fSXin Li #include "impeg2_format_conv.h" 33*a97c2a1fSXin Li #include "impeg2_macros.h" 34*a97c2a1fSXin Li 35*a97c2a1fSXin Li #include "impeg2d.h" 36*a97c2a1fSXin Li #include "impeg2d_bitstream.h" 37*a97c2a1fSXin Li #include "impeg2d_structs.h" 38*a97c2a1fSXin Li #include "impeg2d_globals.h" 39*a97c2a1fSXin Li #include "impeg2d_mc.h" 40*a97c2a1fSXin Li 41*a97c2a1fSXin Li /*****************************************************************************/ 42*a97c2a1fSXin Li /* MC params table */ 43*a97c2a1fSXin Li /*****************************************************************************/ 44*a97c2a1fSXin Li const mc_type_consts_t gas_impeg2d_mc_params_luma[][2] = 45*a97c2a1fSXin Li { 46*a97c2a1fSXin Li /* frame prediction in P frame picture */ 47*a97c2a1fSXin Li {{1,0,1,1,MB_SIZE,MB_SIZE,0}, 48*a97c2a1fSXin Li {1,0,1,1,MB_SIZE,MB_SIZE,0}}, 49*a97c2a1fSXin Li /* field prediction in P frame picture */ 50*a97c2a1fSXin Li {{2,0,1,2,MB_SIZE/2,MB_SIZE*2,0}, 51*a97c2a1fSXin Li {2,0,1,2,MB_SIZE/2,MB_SIZE*2,1}}, 52*a97c2a1fSXin Li /* frame prediction in B frame picture */ 53*a97c2a1fSXin Li {{1,0,1,1,MB_SIZE,MB_SIZE,0}, 54*a97c2a1fSXin Li {1,0,1,1,MB_SIZE,MB_SIZE,0}}, 55*a97c2a1fSXin Li /* field prediction in B frame picture */ 56*a97c2a1fSXin Li {{2,0,1,2,MB_SIZE/2,MB_SIZE*2,0}, 57*a97c2a1fSXin Li {2,0,1,2,MB_SIZE/2,MB_SIZE*2,1}}, 58*a97c2a1fSXin Li /* dual prime prediction in P frame picture */ 59*a97c2a1fSXin Li {{2,0,1,2,MB_SIZE/2,MB_SIZE*2,0}, 60*a97c2a1fSXin Li {2,0,1,2,MB_SIZE/2,MB_SIZE*2,1}}, 61*a97c2a1fSXin Li 62*a97c2a1fSXin Li /* field prediction in P field picture */ 63*a97c2a1fSXin Li {{1,0,2,2,MB_SIZE,MB_SIZE,0},{1,0,2,2,MB_SIZE,MB_SIZE,0}}, 64*a97c2a1fSXin Li /* 16x8 prediction in P field picture */ 65*a97c2a1fSXin Li {{1,0,2,2,MB_SIZE/2,MB_SIZE,0},{1,8,2,2,MB_SIZE/2,MB_SIZE,(1*MB_SIZE/2)}}, 66*a97c2a1fSXin Li /* field prediction in B field picture */ 67*a97c2a1fSXin Li {{1,0,2,2,MB_SIZE,MB_SIZE,0},{1,0,2,2,MB_SIZE,MB_SIZE,0}}, 68*a97c2a1fSXin Li /* 16x8 prediction in B field picture */ 69*a97c2a1fSXin Li {{1,0,2,2,MB_SIZE/2,MB_SIZE,0},{1,8,2,2,MB_SIZE/2,MB_SIZE,(1*MB_SIZE/2)}}, 70*a97c2a1fSXin Li /* dual prime prediction in P field picture */ 71*a97c2a1fSXin Li {{1,0,2,2,MB_SIZE,MB_SIZE,0},{1,0,2,2,MB_SIZE,MB_SIZE,0}} 72*a97c2a1fSXin Li 73*a97c2a1fSXin Li }; 74*a97c2a1fSXin Li 75*a97c2a1fSXin Li const mc_type_consts_t gas_impeg2d_mc_params_chroma[10][2] = 76*a97c2a1fSXin Li { 77*a97c2a1fSXin Li /* frame prediction in P frame picture */ 78*a97c2a1fSXin Li {{1,0,1,1,MB_CHROMA_SIZE,MB_CHROMA_SIZE,0},{1,0,1,1,MB_CHROMA_SIZE,MB_CHROMA_SIZE,0}}, 79*a97c2a1fSXin Li /* field prediction in P frame picture */ 80*a97c2a1fSXin Li {{2,0,1,2,MB_CHROMA_SIZE/2,MB_CHROMA_SIZE*2,0},{2,0,1,2,MB_CHROMA_SIZE/2, 81*a97c2a1fSXin Li MB_CHROMA_SIZE*2,1}}, 82*a97c2a1fSXin Li /* frame prediction in B frame picture */ 83*a97c2a1fSXin Li {{1,0,1,1,MB_CHROMA_SIZE,MB_CHROMA_SIZE,0},{1,0,1,1,MB_CHROMA_SIZE, 84*a97c2a1fSXin Li MB_CHROMA_SIZE,0}}, 85*a97c2a1fSXin Li /* field prediction in B frame picture */ 86*a97c2a1fSXin Li {{2,0,1,2,MB_CHROMA_SIZE/2,MB_CHROMA_SIZE*2,0},{2,0,1,2,MB_CHROMA_SIZE/2, 87*a97c2a1fSXin Li MB_CHROMA_SIZE*2,1}}, 88*a97c2a1fSXin Li /* dual prime prediction in P frame picture */ 89*a97c2a1fSXin Li {{2,0,1,2,MB_CHROMA_SIZE/2,MB_CHROMA_SIZE*2,0},{2,0,1,2,MB_CHROMA_SIZE/2, 90*a97c2a1fSXin Li MB_CHROMA_SIZE*2,1}}, 91*a97c2a1fSXin Li 92*a97c2a1fSXin Li /* field prediction in P field picture */ 93*a97c2a1fSXin Li {{1,0,2,2,MB_CHROMA_SIZE,MB_CHROMA_SIZE,0},{1,0,2,2,MB_CHROMA_SIZE, 94*a97c2a1fSXin Li MB_CHROMA_SIZE,0}}, 95*a97c2a1fSXin Li /* 16x8 prediction in P field picture */ 96*a97c2a1fSXin Li {{1,0,2,2,MB_CHROMA_SIZE/2,MB_CHROMA_SIZE,0},{1,4,2,2,MB_CHROMA_SIZE/2, 97*a97c2a1fSXin Li MB_CHROMA_SIZE,(1*MB_CHROMA_SIZE/2)}}, 98*a97c2a1fSXin Li /* field prediction in B field picture */ 99*a97c2a1fSXin Li {{1,0,2,2,MB_CHROMA_SIZE,MB_CHROMA_SIZE,0},{1,0,2,2,MB_CHROMA_SIZE, 100*a97c2a1fSXin Li MB_CHROMA_SIZE,0}}, 101*a97c2a1fSXin Li /* 16x8 prediction in B field picture */ 102*a97c2a1fSXin Li {{1,0,2,2,MB_CHROMA_SIZE/2,MB_CHROMA_SIZE,0},{1,4,2,2,MB_CHROMA_SIZE/2, 103*a97c2a1fSXin Li MB_CHROMA_SIZE,(1*MB_CHROMA_SIZE/2)}}, 104*a97c2a1fSXin Li /* dual prime prediction in P field picture */ 105*a97c2a1fSXin Li {{1,0,2,2,MB_CHROMA_SIZE,MB_CHROMA_SIZE,0},{1,0,2,2,MB_CHROMA_SIZE, 106*a97c2a1fSXin Li MB_CHROMA_SIZE,0}} 107*a97c2a1fSXin Li 108*a97c2a1fSXin Li }; 109*a97c2a1fSXin Li 110*a97c2a1fSXin Li /*****************************************************************************/ 111*a97c2a1fSXin Li /* MC function pointer table */ 112*a97c2a1fSXin Li /*****************************************************************************/ 113*a97c2a1fSXin Li const dec_mb_params_t gas_impeg2d_func_frm_fw_or_bk[4] = 114*a97c2a1fSXin Li { 115*a97c2a1fSXin Li /*0MV*/ 116*a97c2a1fSXin Li {impeg2d_dec_1mv_mb,MC_FRM_FW_OR_BK_1MV,impeg2d_mc_1mv}, 117*a97c2a1fSXin Li /* motion_type Field based */ 118*a97c2a1fSXin Li {impeg2d_dec_2mv_fw_or_bk_mb,MC_FRM_FW_OR_BK_2MV,impeg2d_mc_fw_or_bk_mb}, 119*a97c2a1fSXin Li /* motion_type Frame based */ 120*a97c2a1fSXin Li {impeg2d_dec_1mv_mb,MC_FRM_FW_OR_BK_1MV,impeg2d_mc_1mv}, 121*a97c2a1fSXin Li /* motion_type Dual prime based */ 122*a97c2a1fSXin Li {impeg2d_dec_frm_dual_prime,MC_FRM_FW_DUAL_PRIME_1MV,impeg2d_mc_frm_dual_prime}, 123*a97c2a1fSXin Li }; 124*a97c2a1fSXin Li 125*a97c2a1fSXin Li const dec_mb_params_t gas_impeg2d_func_fld_fw_or_bk[4] = 126*a97c2a1fSXin Li { 127*a97c2a1fSXin Li /*0MV*/ 128*a97c2a1fSXin Li {impeg2d_dec_1mv_mb,MC_FRM_FW_OR_BK_1MV,impeg2d_mc_1mv}, 129*a97c2a1fSXin Li /* motion_type Field based */ 130*a97c2a1fSXin Li {impeg2d_dec_1mv_mb,MC_FLD_FW_OR_BK_1MV,impeg2d_mc_1mv}, 131*a97c2a1fSXin Li /* motion_type 16x8 MC */ 132*a97c2a1fSXin Li {impeg2d_dec_2mv_fw_or_bk_mb,MC_FLD_FW_OR_BK_2MV,impeg2d_mc_fw_or_bk_mb}, 133*a97c2a1fSXin Li /* motion_type Dual prime based */ 134*a97c2a1fSXin Li {impeg2d_dec_fld_dual_prime,MC_FLD_FW_DUAL_PRIME_1MV,impeg2d_mc_fld_dual_prime}, 135*a97c2a1fSXin Li }; 136*a97c2a1fSXin Li 137*a97c2a1fSXin Li 138*a97c2a1fSXin Li const dec_mb_params_t gas_impeg2d_func_frm_bi_direct[4] = 139*a97c2a1fSXin Li { 140*a97c2a1fSXin Li {NULL,MC_FRM_FW_OR_BK_1MV,NULL}, 141*a97c2a1fSXin Li /* motion_type Field based */ 142*a97c2a1fSXin Li {impeg2d_dec_4mv_mb,MC_FRM_FW_AND_BK_4MV,impeg2d_mc_4mv}, 143*a97c2a1fSXin Li /* motion_type Frame based */ 144*a97c2a1fSXin Li {impeg2d_dec_2mv_interp_mb,MC_FRM_FW_AND_BK_2MV,impeg2d_mc_2mv}, 145*a97c2a1fSXin Li /* Reserved not applicable */ 146*a97c2a1fSXin Li {NULL,MC_FRM_FW_OR_BK_1MV,NULL}, 147*a97c2a1fSXin Li }; 148*a97c2a1fSXin Li 149*a97c2a1fSXin Li const dec_mb_params_t gas_impeg2d_func_fld_bi_direct[4] = 150*a97c2a1fSXin Li { 151*a97c2a1fSXin Li {NULL,MC_FRM_FW_OR_BK_1MV,NULL}, 152*a97c2a1fSXin Li /* motion_type Field based */ 153*a97c2a1fSXin Li {impeg2d_dec_2mv_interp_mb,MC_FLD_FW_AND_BK_2MV,impeg2d_mc_2mv}, 154*a97c2a1fSXin Li /* motion_type 16x8 MC */ 155*a97c2a1fSXin Li {impeg2d_dec_4mv_mb,MC_FLD_FW_AND_BK_4MV,impeg2d_mc_4mv}, 156*a97c2a1fSXin Li /* Reserved not applicable */ 157*a97c2a1fSXin Li {NULL,MC_FRM_FW_OR_BK_1MV,NULL}, 158*a97c2a1fSXin Li }; 159