10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/******************************************************************************
20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License");
60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License.
70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at:
80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0
100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software
120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS,
130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and
150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License.
160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/
180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @file
210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  ihevcd_function_selector.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Contains functions to initialize function pointers used in hevc
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Naveen
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions:
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes                                                             */
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h>
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h>
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h>
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h>
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h"
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h"
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h"
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h"
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h"
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h"
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h"
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_disp_mgr.h"
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_buf_mgr.h"
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_dpb_mgr.h"
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_error.h"
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h"
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h"
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h"
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_init_function_ptr(void *pv_codec)
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)pv_codec;
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    switch(ps_codec->e_processor_arch)
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case ARCH_X86_GENERIC:
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_init_function_ptr_generic(pv_codec);
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case ARCH_X86_SSSE3:
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_init_function_ptr_ssse3(pv_codec);
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case ARCH_X86_SSE42:
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_init_function_ptr_sse42(pv_codec);
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        case ARCH_X86_AVX2:
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef DISABLE_AVX2
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_init_function_ptr_avx2(pv_codec);
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_init_function_ptr_sse42(pv_codec);
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        default:
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ihevcd_init_function_ptr_ssse3(pv_codec);
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            break;
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_init_arch(void *pv_codec)
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec = (codec_t *)pv_codec;
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifdef DEFAULT_ARCH
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#if DEFAULT_ARCH == D_ARCH_X86_GENERIC
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_processor_arch = ARCH_X86_GENERIC;
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#elif DEFAULT_ARCH == D_ARCH_X86_SSE42
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_processor_arch = ARCH_X86_SSE42;
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#elif DEFAULT_ARCH == D_ARCH_X86_AVX2
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_processor_arch = ARCH_X86_AVX2;
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_processor_arch = ARCH_X86_SSSE3;
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#else
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec->e_processor_arch = ARCH_X86_SSSE3;
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
106