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******************************************************************************* 228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @file 238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* ih264e_function_selector_sse42.c 248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief 268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* Contains functions to initialize function pointers of codec context 278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @author 298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* Ittiam 308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par List of Functions: 328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* - ih264e_init_function_ptr_sse42 338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks 358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* None 368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* File Includes */ 438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* System Include files */ 478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdio.h> 488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stddef.h> 498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdlib.h> 508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h> 518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* User Include files */ 538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h" 548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "iv2.h" 558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ive2.h" 568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_defs.h" 578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_size_defs.h" 588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_defs.h" 598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_error.h" 608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_bitstream.h" 618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ime_distortion_metrics.h" 623749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ime_defs.h" 638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ime_structs.h" 648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_error.h" 658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_structs.h" 668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_trans_quant_itrans_iquant.h" 678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_inter_pred_filters.h" 688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_mem_fns.h" 698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_padding.h" 708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_intra_pred_filters.h" 718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_deblk_edge_filters.h" 723749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264_cabac_tables.h" 738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_cntrl_param.h" 748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_frame_info_collector.h" 758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_rate_control.h" 763749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_cabac_structs.h" 778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_structs.h" 783749f6f435e79624f72841e866245d84195551cdHarinarayanan K K#include "ih264e_cabac.h" 798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_platform_macros.h" 808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_core_coding.h" 818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_cavlc_tables.h" 828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_cavlc.h" 838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_intra_modes_eval.h" 848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_fmt_conv.h" 858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_half_pel.h" 868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief Initialize the intra/inter/transform/deblk function pointers of 918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* codec context 928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description: the current routine initializes the function pointers of 948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* codec context basing on the architecture in use 958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_codec 978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* Codec context pointer 988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns none 1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks none 1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_init_function_ptr_sse42(codec_t *ps_codec) 1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i; 1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S process_ctxt_t *ps_proc = NULL; 1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S me_ctxt_t *ps_me_ctxt = NULL; 1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Init luma forward transform fn ptr */ 1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->pf_resi_trans_quant_4x4 = ih264_resi_trans_quant_4x4_sse42; 1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->pf_resi_trans_quant_chroma_4x4 = ih264_resi_trans_quant_chroma_4x4_sse42; 1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->pf_hadamard_quant_4x4 = ih264_hadamard_quant_4x4_sse42; 1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->pf_hadamard_quant_2x2_uv = ih264_hadamard_quant_2x2_uv_sse42; 1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Init inverse transform fn ptr */ 1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->pf_iquant_itrans_recon_4x4 = ih264_iquant_itrans_recon_4x4_sse42; 1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->pf_iquant_itrans_recon_chroma_4x4 = ih264_iquant_itrans_recon_chroma_4x4_sse42; 1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->pf_ihadamard_scaling_4x4 = ih264_ihadamard_scaling_4x4_sse42; 1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* sad me level functions */ 1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->apf_compute_sad_16x16[0] = ime_compute_sad_16x16_sse42; 1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->apf_compute_sad_16x16[1] = ime_compute_sad_16x16_fast_sse42; 1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_codec->pf_compute_sad_16x8 = ime_compute_sad_16x8_sse42; 1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* sad me level functions */ 1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for(i = 0; i < (MAX_PROCESS_CTXT); i++) 1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_proc = &ps_codec->as_process[i]; 1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_me_ctxt = &ps_proc->s_me_ctxt; 1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_me_ctxt->pf_ime_compute_sad_16x16[0] = ime_compute_sad_16x16_sse42; 1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_me_ctxt->pf_ime_compute_sad_16x16[1] = ime_compute_sad_16x16_fast_sse42; 1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_me_ctxt->pf_ime_compute_sad_16x8 = ime_compute_sad_16x8_sse42; 1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_me_ctxt->pf_ime_compute_sad4_diamond = ime_calculate_sad4_prog_sse42; 1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_me_ctxt->pf_ime_sub_pel_compute_sad_16x16 = ime_sub_pel_compute_sad_16x16_sse42; 1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_me_ctxt->pf_ime_compute_sad_stat_luma_16x16 = ime_compute_satqd_16x16_lumainter_sse42; 1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 141