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