1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (c) 2010, Texas Instruments Incorporated 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * All rights reserved. 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Redistribution and use in source and binary forms, with or without 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * modification, are permitted provided that the following conditions 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * are met: 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Redistributions of source code must retain the above copyright 10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * notice, this list of conditions and the following disclaimer. 11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Redistributions in binary form must reproduce the above copyright 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * notice, this list of conditions and the following disclaimer in the 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * documentation and/or other materials provided with the distribution. 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Neither the name of Texas Instruments Incorporated nor the names of 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * its contributors may be used to endorse or promote products derived 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * from this software without specific prior written permission. 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @file omx_proxy_camera.c 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * This file contains methods that provides the functionality for 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * the OpenMAX1.1 DOMX Framework Tunnel Proxy component. 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ****************************************************************************** 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev This is the proxy specific wrapper that passes the component name to the 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev generic proxy init() The proxy wrapper also does some runtime/static time 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev config on per proxy basis This is a thin wrapper that is called when 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev componentiit() of the proxy is called static OMX_ERRORTYPE PROXY_Wrapper_init 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_HANDLETYPE hComponent, OMX_PTR pAppData); 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev this layer gets called first whenever a proxy s get handle is called 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ****************************************************************************** 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @path WTSD_DucatiMMSW\omx\omx_il_1_x\omx_proxy_component\src 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @rev 1.0 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*============================================================== 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! Revision History 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! ============================ 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 19-August-2009 B Ravi Kiran ravi.kiran@ti.com: Initial Version 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *================================================================*/ 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * INCLUDE FILES 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h> 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h> 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <assert.h> 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <dirent.h> 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h> 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h> 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <pthread.h> 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <sys/time.h> 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdlib.h> 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <timm_osal_interfaces.h> 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <OMX_TI_IVCommon.h> 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <OMX_TI_Index.h> 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_proxy_common.h" 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_mutex.h" 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 7570ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 7670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <unistd.h> 774a35937fcb950ccd05af56c49214b88e393233e3Rebecca Schultz Zavin#include <ion.h> 7870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <sys/ioctl.h> 7970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <sys/mman.h> 8070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <sys/eventfd.h> 8170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <fcntl.h> 8270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal 8370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#else 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Tiler APIs */ 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <memmgr.h> 8670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define COMPONENT_NAME "OMX.TI.DUCATI1.VIDEO.CAMERA" 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*Needs to be specific for every configuration wrapper*/ 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#undef LOG_TAG 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LOG_TAG "CameraHAL" 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DEFAULT_DCC 1 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef _Android 96cb5fe34d2de609f106965eacd4811e0d2f49fbf1Stanimir Varbanov#define DCC_PATH "/data/misc/camera/" 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DCC_PATH "/usr/share/omapcam/" 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LINUX_PAGE_SIZE (4 * 1024) 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define _PROXY_OMX_INIT_PARAM(param,type) do { \ 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memset((param), 0, sizeof (type)); \ 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (param)->nSize = sizeof (type); \ 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (param)->nVersion.s.nVersionMajor = 1; \ 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (param)->nVersion.s.nVersionMinor = 1; \ 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Incase of multiple instance, making sure DCC is initialized only for 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev first instance */ 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_S16 numofInstance = 0; 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint dcc_flag = 0; 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTIMM_OSAL_PTR cam_mutex = NULL; 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* To store DCC buffer size */ 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_S32 dccbuf_size = 0; 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Ducati Mapped Addr */ 11970ff025808c44ce9e01c045d879c5e60605de242Sarthak AggarwalOMX_PTR DCC_Buff = NULL; 12070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal 12170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 12270ff025808c44ce9e01c045d879c5e60605de242Sarthak AggarwalOMX_PTR DCC_Buff_ptr = NULL; 12370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwalint ion_fd; 12470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwalint mmap_fd; 12570ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal 12670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#else 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevMemAllocBlock *MemReqDescTiler; 12870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_S32 read_DCCdir(OMX_PTR, OMX_STRING *, OMX_U16); 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE DCC_Init(OMX_HANDLETYPE); 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE send_DCCBufPtr(OMX_HANDLETYPE hComponent); 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid DCC_DeInit(); 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_ComponentDeInit(OMX_HANDLETYPE); 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_SetConfig(OMX_HANDLETYPE, OMX_INDEXTYPE, 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR, OMX_PTR); 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_GetConfig(OMX_HANDLETYPE, OMX_INDEXTYPE, 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR, OMX_PTR); 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_SetParameter(OMX_IN OMX_HANDLETYPE, OMX_INDEXTYPE, 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR, OMX_PTR); 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_GetParameter(OMX_IN OMX_HANDLETYPE, OMX_INDEXTYPE, 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR, OMX_PTR); 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE CameraMaptoTilerDuc(OMX_TI_CONFIG_SHAREDBUFFER *, OMX_PTR *); 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//COREID TARGET_CORE_ID = CORE_APPM3; 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE ComponentPrivateDeInit(OMX_IN OMX_HANDLETYPE hComponent) 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eOsalError = TIMM_OSAL_ERR_NONE; 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (dcc_flag) 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eOsalError = 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_MutexObtain(cam_mutex, TIMM_OSAL_SUSPEND); 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eOsalError != TIMM_OSAL_ERR_NONE) 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Error("Mutex Obtain failed"); 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev numofInstance = numofInstance - 1; 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eOsalError = TIMM_OSAL_MutexRelease(cam_mutex); 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eOsalError == TIMM_OSAL_ERR_NONE, 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, "Mutex release failed"); 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_ComponentDeInit(hComponent); 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name CameraGetConfig() 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief For some specific indices, buffer allocated on A9 side 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * needs to be mapped and sent to Ducati. 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE CameraGetConfig(OMX_IN OMX_HANDLETYPE 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, OMX_IN OMX_INDEXTYPE nParamIndex, 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INOUT OMX_PTR pComponentParameterStructure) 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_SHAREDBUFFER *pConfigSharedBuffer = NULL; 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pTempSharedBuff = NULL; 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 status = 0; 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (nParamIndex) 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigAAAskipBuffer: 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigCamCapabilities: 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigExifTags: 197bc0e345c35480fb8036a766f47a7ed65e98947c5Milen Mitkov case OMX_TI_IndexConfigAlgoAreas: 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer = 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_TI_CONFIG_SHAREDBUFFER *) pComponentParameterStructure; 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pTempSharedBuff = pConfigSharedBuffer->pSharedBuff; 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // TODO(XXX): Cache API is not yet available. Client needs to 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // allocate tiler buffer directly and assign to pSharedBuff. 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Ptr allocated by MemMgr_Alloc in uncacheable so there 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // would be no need to cache API 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = __PROXY_GetConfig(hComponent, 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nParamIndex, 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer, 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &(pConfigSharedBuffer->pSharedBuff)); 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((eError == OMX_ErrorNone), eError, 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Error in GetConfig"); 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer->pSharedBuff = pTempSharedBuff; 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return __PROXY_GetConfig(hComponent, 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nParamIndex, 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentParameterStructure, 227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL); 228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name CameraSetConfig() 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief For some specific indices, buffer allocated on A9 side needs to 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * be mapped and sent to Ducati. 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE CameraSetConfig(OMX_IN OMX_HANDLETYPE 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, OMX_IN OMX_INDEXTYPE nParamIndex, 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INOUT OMX_PTR pComponentParameterStructure) 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_SHAREDBUFFER *pConfigSharedBuffer = NULL; 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pTempSharedBuff = NULL; 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 status = 0; 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (nParamIndex) 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigAAAskipBuffer: 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigCamCapabilities: 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigExifTags: 258bc0e345c35480fb8036a766f47a7ed65e98947c5Milen Mitkov case OMX_TI_IndexConfigAlgoAreas: 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer = 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_TI_CONFIG_SHAREDBUFFER *) 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentParameterStructure; 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pTempSharedBuff = pConfigSharedBuffer->pSharedBuff; 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // TODO(XXX): Cache API is not yet available. Client needs to 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // allocate tiler buffer directly and assign to pSharedBuff. 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Ptr allocated by MemMgr_Alloc in uncacheable so there 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // would be no need to cache API 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = __PROXY_SetConfig(hComponent, 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nParamIndex, 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer, 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &(pConfigSharedBuffer->pSharedBuff)); 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((eError == OMX_ErrorNone), eError, 276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Error in GetConfig"); 277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer->pSharedBuff = pTempSharedBuff; 279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; 281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return __PROXY_SetConfig(hComponent, 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nParamIndex, 288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentParameterStructure, 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL); 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComponent) 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE dcc_eError = OMX_ErrorNone; 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *pHandle = NULL; 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pComponentPrivate; 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle = (OMX_COMPONENTTYPE *) hComponent; 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eOsalError = TIMM_OSAL_ERR_NONE; 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("_____________________INSIDE CAMERA PROXY" 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "WRAPPER__________________________\n"); 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->pComponentPrivate = (PROXY_COMPONENT_PRIVATE *) 306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(sizeof(PROXY_COMPONENT_PRIVATE), 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate = 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pHandle->pComponentPrivate == NULL) 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR(" ERROR IN ALLOCATING PROXY COMPONENT" 314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "PRIVATE STRUCTURE"); 315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ErrorInsufficientResources; 316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; 317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memset(pComponentPrivate, 0, 319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(PROXY_COMPONENT_PRIVATE)); 320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->cCompName = 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8), 323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Copying component Name - this will be picked up in the proxy common */ 325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev assert(strlen(COMPONENT_NAME) + 1 < MAX_COMPONENT_NAME_LENGTH); 326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memcpy(pComponentPrivate->cCompName, COMPONENT_NAME, 327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strlen(COMPONENT_NAME) + 1); 32870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Calling Proxy Common Init() */ 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ProxyCommonInit(hComponent); 331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != OMX_ErrorNone) 332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR("\Error in Initializing Proxy"); 334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(pComponentPrivate->cCompName); 335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(pComponentPrivate); 336e005708a4599caa650c653028bea2ccb216fc653Sarthak Aggarwal goto EXIT; 337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->ComponentDeInit = ComponentPrivateDeInit; 340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->GetConfig = CameraGetConfig; 341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->SetConfig = CameraSetConfig; 342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *val = getenv("SET_DCC"); 343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_flag = val ? strtol(val, NULL, 0) : DEFAULT_DCC; 344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG(" DCC: 0 - disabled 1 - enabled : val: %d", dcc_flag); 345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (dcc_flag) 347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eOsalError = 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_MutexObtain(cam_mutex, TIMM_OSAL_SUSPEND); 350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eOsalError == TIMM_OSAL_ERR_NONE, 351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, "Mutex lock failed"); 352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (numofInstance == 0) 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_eError = DCC_Init(hComponent); 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (dcc_eError != OMX_ErrorNone) 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG(" Error in DCC Init"); 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Configure Ducati to use DCC buffer from A9 side 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *ONLY* if DCC_Init is successful. */ 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (dcc_eError == OMX_ErrorNone) 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_eError = send_DCCBufPtr(hComponent); 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (dcc_eError != OMX_ErrorNone) 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG(" Error in Sending DCC Buf ptr"); 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DCC_DeInit(); 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev numofInstance = numofInstance + 1; 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eOsalError = TIMM_OSAL_MutexRelease(cam_mutex); 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eOsalError == TIMM_OSAL_ERR_NONE, 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, "Mutex release failed"); 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name DCC_Init() 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE DCC_Init(OMX_HANDLETYPE hComponent) 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_PARAM_DCCURIINFO param; 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR ptempbuf; 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U16 nIndex = 0; 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 39870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 39970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal int ret; 40070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING dcc_dir[200]; 404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U16 i; 405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev _PROXY_OMX_INIT_PARAM(¶m, OMX_TI_PARAM_DCCURIINFO); 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("ENTER"); 408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Read the the DCC URI info */ 409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (nIndex = 0; eError != OMX_ErrorNoMore; nIndex++) 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev param.nIndex = nIndex; 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = 413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_GetParameter(hComponent, 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_IndexParamDccUriInfo, ¶m); 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((eError == OMX_ErrorNone) || 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (eError == OMX_ErrorNoMore), eError, 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Error in GetParam for Dcc URI info"); 419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError == OMX_ErrorNone) 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("DCC URI's %s ", param.sDCCURI); 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_dir[nIndex] = 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(sizeof(OMX_U8) * 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (strlen(DCC_PATH) + MAX_URI_LENGTH + 1), 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(dcc_dir[nIndex] != NULL, 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, "Malloc failed"); 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcpy(dcc_dir[nIndex], DCC_PATH); 43049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal strncat(dcc_dir[nIndex], (OMX_STRING) param.sDCCURI, MAX_URI_LENGTH); 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcat(dcc_dir[nIndex], "/"); 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* setting back errortype OMX_ErrorNone */ 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError == OMX_ErrorNoMore) 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ErrorNone; 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dccbuf_size = read_DCCdir(NULL, dcc_dir, nIndex); 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 44373bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman if(dccbuf_size <= 0) 44473bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman { 44573bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman DOMX_DEBUG("No DCC files found, switching back to default DCC"); 44673bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman return OMX_ErrorInsufficientResources; 44773bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman } 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 44970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 45070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal ion_fd = ion_open(); 45170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal if(ion_fd == 0) 45270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal { 45370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal DOMX_ERROR("ion_open failed!!!"); 45470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal return OMX_ErrorInsufficientResources; 45570ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal } 45670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal dccbuf_size = (dccbuf_size + LINUX_PAGE_SIZE -1) & ~(LINUX_PAGE_SIZE - 1); 45770ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal ret = ion_alloc(ion_fd, dccbuf_size, 0x1000, 1 << ION_HEAP_TYPE_CARVEOUT, &DCC_Buff); 45870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal if (ret) 45970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal return OMX_ErrorInsufficientResources; 46070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal 46170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal if (ion_map(ion_fd, DCC_Buff, dccbuf_size, PROT_READ | PROT_WRITE, MAP_SHARED, 0, 46270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal &DCC_Buff_ptr,&mmap_fd) < 0) 46370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal { 46470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal DOMX_ERROR("userspace mapping of ION buffers returned error"); 46570ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal return OMX_ErrorInsufficientResources; 46670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal } 46770ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal ptempbuf = DCC_Buff_ptr; 46870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#else 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev MemReqDescTiler = 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (MemAllocBlock *) TIMM_OSAL_Malloc((sizeof(MemAllocBlock) * 2), 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_EXT); 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(MemReqDescTiler != NULL, 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, "Malloc failed"); 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Allocate 1D Tiler buffer for 'N'DCC files */ 4761f1f957cc6768d24b09fd96f76aaec3884e1623eIliyan Malchev MemReqDescTiler[0].fmt = PIXEL_FMT_PAGE; 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev MemReqDescTiler[0].dim.len = dccbuf_size; 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev MemReqDescTiler[0].stride = 0; 47970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal DCC_Buff = MemMgr_Alloc(MemReqDescTiler, 1); 48070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal PROXY_assert(DCC_Buff != NULL, 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, "ERROR Allocating 1D TILER BUF"); 48270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal ptempbuf = DCC_Buff; 48370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dccbuf_size = read_DCCdir(ptempbuf, dcc_dir, nIndex); 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(dccbuf_size > 0, OMX_ErrorInsufficientResources, 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "ERROR in copy DCC files into buffer"); 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (i = 0; i < nIndex - 1; i++) 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(dcc_dir[i]); 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name send_DCCBufPtr() 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief : Sending the DCC uri buff addr to ducati 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return return = 0 is successful 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE send_DCCBufPtr(OMX_HANDLETYPE hComponent) 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_SHAREDBUFFER uribufparam; 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev _PROXY_OMX_INIT_PARAM(&uribufparam, OMX_TI_CONFIG_SHAREDBUFFER); 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uribufparam.nPortIndex = OMX_ALL; 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("ENTER"); 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uribufparam.nSharedBuffSize = dccbuf_size; 52170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal uribufparam.pSharedBuff = (OMX_U8 *) DCC_Buff; 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("SYSLINK MAPPED ADDR: 0x%x sizeof buffer %d", 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uribufparam.pSharedBuff, uribufparam.nSharedBuffSize); 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = __PROXY_SetParameter(hComponent, 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_IndexParamDccUriBuffer, 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &uribufparam, 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &(uribufparam.pSharedBuff)); 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != OMX_ErrorNone) { 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR(" Error in SetParam for DCC Uri Buffer 0x%x", eError); 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("EXIT"); 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name read_DCCdir() 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief : copies all the dcc profiles into the allocated 1D-Tiler buffer 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * and returns the size of the buffer. 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void : OMX_PTR is null then returns the size of the DCC directory 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return return = size of the DCC directory or error in case of any failures 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * in file read or open 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_S32 read_DCCdir(OMX_PTR buffer, OMX_STRING * dir_path, OMX_U16 numofURI) 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FILE *pFile; 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 lSize; 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 dcc_buf_size = 0; 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t result; 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING filename; 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char temp[200]; 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING dotdot = ".."; 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DIR *d; 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct dirent *dir; 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U16 i = 0; 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 ret = 0; 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("ENTER"); 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (i = 0; i < numofURI - 1; i++) 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev d = opendir(dir_path[i]); 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (d) 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* read each filename */ 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while ((dir = readdir(d)) != NULL) 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev filename = dir->d_name; 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcpy(temp, dir_path[i]); 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcat(temp, filename); 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ((*filename != *dotdot)) 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("\n\t DCC Profiles copying into buffer => %s mpu_addr: %p", 581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev temp, buffer); 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pFile = fopen(temp, "rb"); 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pFile == NULL) 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR("File open error"); 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fseek(pFile, 0, SEEK_END); 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lSize = ftell(pFile); 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev rewind(pFile); 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* buffer is not NULL then copy all the DCC profiles into buffer 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else return the size of the DCC directory */ 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (buffer) 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // copy file into the buffer: 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev result = 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fread(buffer, 1, 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lSize, pFile); 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (result != (size_t) lSize) 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("fread: Reading error"); 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev buffer = 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev buffer + lSize; 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* getting the size of the total dcc files available in FS */ 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_buf_size = 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_buf_size + lSize; 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // terminate 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fclose(pFile); 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closedir(d); 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (ret == 0) 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = dcc_buf_size; 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("return %d", ret); 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name DCC_Deinit() 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return void 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid DCC_DeInit() 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("ENTER"); 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 64170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal if (DCC_Buff) 64270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal { 64370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 64470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal munmap(DCC_Buff_ptr, dccbuf_size); 64570ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal close(mmap_fd); 64670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal ion_free(ion_fd, DCC_Buff); 647978f3598fee8f7967aecde8d29bf23a7df3b0327Iliyan Malchev ion_close(ion_fd); 64870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal DCC_Buff = NULL; 64970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#else 65070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal MemMgr_Free(DCC_Buff); 65170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 65270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal } 65370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifndef USE_ION 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (MemReqDescTiler) 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(MemReqDescTiler); 65670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 658c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("EXIT"); 659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*===============================================================*/ 664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** @fn Cam_Setup : This function is called when the the OMX Camera library is 665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * loaded. It creates a mutex, which is used during DCC_Init() 666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*===============================================================*/ 668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid __attribute__ ((constructor)) Cam_Setup(void) 669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = TIMM_OSAL_MutexCreate(&cam_mutex); 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != TIMM_OSAL_ERR_NONE) 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Error("Creation of default mutex failed"); 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*===============================================================*/ 681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** @fn Cam_Destroy : This function is called when the the OMX Camera library is 682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * unloaded. It destroys the mutex which was created by 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Core_Setup(). 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*===============================================================*/ 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid __attribute__ ((destructor)) Cam_Destroy(void) 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = TIMM_OSAL_MutexDelete(cam_mutex); 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != TIMM_OSAL_ERR_NONE) 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Error("Destruction of default mutex failed"); 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 697