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> 68e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <errno.h> 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <timm_osal_interfaces.h> 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <OMX_TI_IVCommon.h> 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <OMX_TI_Index.h> 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_proxy_common.h" 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_mutex.h" 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 7670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 7770ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <unistd.h> 78e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <ion/ion.h> 7970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <sys/ioctl.h> 8070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <sys/mman.h> 8170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <sys/eventfd.h> 8270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#include <fcntl.h> 83e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <errno.h> 8470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define COMPONENT_NAME "OMX.TI.DUCATI1.VIDEO.CAMERA" 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*Needs to be specific for every configuration wrapper*/ 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#undef LOG_TAG 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LOG_TAG "CameraHAL" 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DEFAULT_DCC 1 93e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LINUX_PAGE_SIZE (4 * 1024) 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define _PROXY_OMX_INIT_PARAM(param,type) do { \ 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memset((param), 0, sizeof (type)); \ 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (param)->nSize = sizeof (type); \ 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (param)->nVersion.s.nVersionMajor = 1; \ 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (param)->nVersion.s.nVersionMinor = 1; \ 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 103e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen/* VTC specific changes */ 104e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define MAX_NUM_INTERNAL_BUFFERS 4 105e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define MAX_VTC_WIDTH 1920 106e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define MAX_VTC_HEIGHT 1080 107e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define BORDER_WIDTH 32 108e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define BORDER_HEIGHT 32 109e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define MAX_VTC_WIDTH_WITH_VNF (MAX_VTC_WIDTH + BORDER_WIDTH) 110e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define MAX_VTC_HEIGHT_WITH_VNF (MAX_VTC_HEIGHT + BORDER_HEIGHT) 111e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. ChenOMX_PTR gCamIonHdl[MAX_NUM_INTERNAL_BUFFERS][2]; 112e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 113e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen/* Tiler heap resservation specific */ 114e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define OMAP_ION_HEAP_TILER_ALLOCATION_MASK (1<<4) 115e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen/* store handles for tracking and freeing */ 116e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. ChenOMX_PTR gComponentBufferAllocation[PROXY_MAXNUMOFPORTS][MAX_NUM_INTERNAL_BUFFERS]; 117e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Incase of multiple instance, making sure DCC is initialized only for 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev first instance */ 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_S16 numofInstance = 0; 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevint dcc_flag = 0; 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevTIMM_OSAL_PTR cam_mutex = NULL; 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* To store DCC buffer size */ 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_S32 dccbuf_size = 0; 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* Ducati Mapped Addr */ 12870ff025808c44ce9e01c045d879c5e60605de242Sarthak AggarwalOMX_PTR DCC_Buff = NULL; 12970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal 13070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 13170ff025808c44ce9e01c045d879c5e60605de242Sarthak AggarwalOMX_PTR DCC_Buff_ptr = NULL; 13270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwalint ion_fd; 13370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwalint mmap_fd; 13470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_S32 read_DCCdir(OMX_PTR, OMX_STRING *, OMX_U16); 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE DCC_Init(OMX_HANDLETYPE); 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE send_DCCBufPtr(OMX_HANDLETYPE hComponent); 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid DCC_DeInit(); 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_ComponentDeInit(OMX_HANDLETYPE); 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_SetConfig(OMX_HANDLETYPE, OMX_INDEXTYPE, 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR, OMX_PTR); 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_GetConfig(OMX_HANDLETYPE, OMX_INDEXTYPE, 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR, OMX_PTR); 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_SetParameter(OMX_IN OMX_HANDLETYPE, OMX_INDEXTYPE, 146e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_PTR, OMX_PTR, OMX_U32); 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE __PROXY_GetParameter(OMX_IN OMX_HANDLETYPE, OMX_INDEXTYPE, 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR, OMX_PTR); 149e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. ChenOMX_ERRORTYPE PROXY_SendCommand(OMX_HANDLETYPE, OMX_COMMANDTYPE, 150e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32,OMX_PTR); 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE CameraMaptoTilerDuc(OMX_TI_CONFIG_SHAREDBUFFER *, OMX_PTR *); 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//COREID TARGET_CORE_ID = CORE_APPM3; 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE ComponentPrivateDeInit(OMX_IN OMX_HANDLETYPE hComponent) 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eOsalError = TIMM_OSAL_ERR_NONE; 158e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen PROXY_COMPONENT_PRIVATE *pCompPrv; 159e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 160e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32 i, j; 161e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 162e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (dcc_flag) 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eOsalError = 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_MutexObtain(cam_mutex, TIMM_OSAL_SUSPEND); 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eOsalError != TIMM_OSAL_ERR_NONE) 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Error("Mutex Obtain failed"); 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev numofInstance = numofInstance - 1; 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eOsalError = TIMM_OSAL_MutexRelease(cam_mutex); 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eOsalError == TIMM_OSAL_ERR_NONE, 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, "Mutex release failed"); 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 179e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for(i=0; i < MAX_NUM_INTERNAL_BUFFERS; i++) { 180e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (gCamIonHdl[i][0] != NULL) { 181e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, gCamIonHdl[i][0]); 182e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gCamIonHdl[i][0] = NULL; 183e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 184e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (gCamIonHdl[i][1] != NULL) { 185e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, gCamIonHdl[i][1]); 186e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gCamIonHdl[i][1] = NULL; 187e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 188e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 189e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 190e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 191e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for (i = 0; i < PROXY_MAXNUMOFPORTS; i++) { 192e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for (j = 0; j < MAX_NUM_INTERNAL_BUFFERS; j++) { 193e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (gComponentBufferAllocation[i][j]) { 194e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, gComponentBufferAllocation[i][j]); 195e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 196e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gComponentBufferAllocation[i][j] = NULL; 197e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 198e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_ComponentDeInit(hComponent); 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 206e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chenstatic OMX_ERRORTYPE Camera_SendCommand(OMX_IN OMX_HANDLETYPE hComponent, 207e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_IN OMX_COMMANDTYPE eCmd, 208e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_IN OMX_U32 nParam, OMX_IN OMX_PTR pCmdData) 209e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 210e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen{ 211e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn; 212e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 213e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen PROXY_COMPONENT_PRIVATE *pCompPrv; 214e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 215e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen static OMX_BOOL dcc_loaded = OMX_FALSE; 216e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 217e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_ERRORTYPE dcc_eError = OMX_ErrorNone; 218e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen TIMM_OSAL_ERRORTYPE eOsalError = TIMM_OSAL_ERR_NONE; 219e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32 i; 220e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 221e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 222e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 223e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if ((eCmd == OMX_CommandStateSet) && 224e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen (nParam == (OMX_STATETYPE) OMX_StateIdle)) 225e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 226e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (!dcc_loaded) 227e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 228e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen dcc_eError = DCC_Init(hComponent); 229e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (dcc_eError != OMX_ErrorNone) 230e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 231e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR(" Error in DCC Init"); 232e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 233e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen /* Configure Ducati to use DCC buffer from A9 side 234e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen *ONLY* if DCC_Init is successful. */ 235e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (dcc_eError == OMX_ErrorNone) 236e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 237e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen dcc_eError = send_DCCBufPtr(hComponent); 238e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (dcc_eError != OMX_ErrorNone) 239e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 240e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR(" Error in Sending DCC Buf ptr"); 241e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 242e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DCC_DeInit(); 243e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 244e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen dcc_loaded = OMX_TRUE; 245e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 246e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } else if (eCmd == OMX_CommandPortDisable) { 247e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen int i, j; 248e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for (i = 0; i < MAX_NUM_INTERNAL_BUFFERS; i++) { 249e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for (j = 0; j < PROXY_MAXNUMOFPORTS; j++) { 250e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (((j == nParam) || (nParam == OMX_ALL)) && 251e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gComponentBufferAllocation[i][j]) 252e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 253e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, gComponentBufferAllocation[i][j]); 254e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gComponentBufferAllocation[i][j] = NULL; 255e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 256e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 257e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 258e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 259e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 260e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 261e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 262e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen eError = 263e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen PROXY_SendCommand(hComponent,eCmd,nParam,pCmdData); 264e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 265e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 266e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. ChenEXIT: 267e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 268e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_EXIT("eError: %d", eError); 269e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen return eError; 270e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 271e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen} 272e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name CameraGetConfig() 276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief For some specific indices, buffer allocated on A9 side 277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * needs to be mapped and sent to Ducati. 278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param 279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE CameraGetConfig(OMX_IN OMX_HANDLETYPE 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, OMX_IN OMX_INDEXTYPE nParamIndex, 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INOUT OMX_PTR pComponentParameterStructure) 286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_SHAREDBUFFER *pConfigSharedBuffer = NULL; 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pTempSharedBuff = NULL; 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 status = 0; 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (nParamIndex) 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigAAAskipBuffer: 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigCamCapabilities: 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigExifTags: 297bc0e345c35480fb8036a766f47a7ed65e98947c5Milen Mitkov case OMX_TI_IndexConfigAlgoAreas: 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer = 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_TI_CONFIG_SHAREDBUFFER *) pComponentParameterStructure; 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pTempSharedBuff = pConfigSharedBuffer->pSharedBuff; 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // TODO(XXX): Cache API is not yet available. Client needs to 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // allocate tiler buffer directly and assign to pSharedBuff. 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Ptr allocated by MemMgr_Alloc in uncacheable so there 306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // would be no need to cache API 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = __PROXY_GetConfig(hComponent, 309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nParamIndex, 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer, 311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &(pConfigSharedBuffer->pSharedBuff)); 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((eError == OMX_ErrorNone), eError, 314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Error in GetConfig"); 315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer->pSharedBuff = pTempSharedBuff; 317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; 319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return __PROXY_GetConfig(hComponent, 325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nParamIndex, 326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentParameterStructure, 327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL); 328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name CameraSetConfig() 336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief For some specific indices, buffer allocated on A9 side needs to 337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * be mapped and sent to Ducati. 338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param 339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE CameraSetConfig(OMX_IN OMX_HANDLETYPE 345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, OMX_IN OMX_INDEXTYPE nParamIndex, 346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INOUT OMX_PTR pComponentParameterStructure) 347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_SHAREDBUFFER *pConfigSharedBuffer = NULL; 350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pTempSharedBuff = NULL; 351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 status = 0; 352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev switch (nParamIndex) 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigAAAskipBuffer: 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigCamCapabilities: 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev case OMX_TI_IndexConfigExifTags: 358bc0e345c35480fb8036a766f47a7ed65e98947c5Milen Mitkov case OMX_TI_IndexConfigAlgoAreas: 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer = 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_TI_CONFIG_SHAREDBUFFER *) 361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentParameterStructure; 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pTempSharedBuff = pConfigSharedBuffer->pSharedBuff; 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // TODO(XXX): Cache API is not yet available. Client needs to 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // allocate tiler buffer directly and assign to pSharedBuff. 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // Ptr allocated by MemMgr_Alloc in uncacheable so there 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // would be no need to cache API 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = __PROXY_SetConfig(hComponent, 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nParamIndex, 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer, 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &(pConfigSharedBuffer->pSharedBuff)); 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((eError == OMX_ErrorNone), eError, 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Error in GetConfig"); 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pConfigSharedBuffer->pSharedBuff = pTempSharedBuff; 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev default: 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return __PROXY_SetConfig(hComponent, 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nParamIndex, 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentParameterStructure, 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL); 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 395e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chenstatic OMX_ERRORTYPE CameraSetParam(OMX_IN OMX_HANDLETYPE 396e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen hComponent, OMX_IN OMX_INDEXTYPE nParamIndex, 397e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_INOUT OMX_PTR pComponentParameterStructure) 398e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen{ 399e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_ERRORTYPE eError = OMX_ErrorNone; 400e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen struct ion_handle *handle; 401e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32 i =0; 402e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_S32 ret = 0; 403e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen PROXY_COMPONENT_PRIVATE *pCompPrv; 404e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *)hComponent; 405e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32 stride_Y = 0, stride_UV = 0; 406e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_TI_PARAM_VTCSLICE *pVtcConfig;// = (OMX_TI_PARAM_VTCSLICE *)pComponentParameterStructure; 407e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_TI_PARAM_COMPONENTBUFALLOCTYPE *bufferalloc = NULL; 408e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen int size = 0; 409e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen int fd1 = -1, fd2 = -1; 410e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 411e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv = (PROXY_COMPONENT_PRIVATE *)hComp->pComponentPrivate; 412e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen //fprintf(stdout, "DOMX: CameraSetParam: called!!!\n"); 413e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen switch (nParamIndex) 414e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 415e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen case OMX_TI_IndexParamVtcSlice: 416e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pVtcConfig = (OMX_TI_PARAM_VTCSLICE *)pComponentParameterStructure; 417e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen fprintf(stdout, "DOMX: CameraSetParam: OMX_TI_IndexParamVtcSlice is called!!!\n"); 418e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR("CameraSetParam Called for Vtc Slice index\n"); 419e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 420e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen //fprintf(stdout, "CameraSetParam Called for Vtc Slice height = %d\n", ((OMX_TI_PARAM_VTCSLICE *)pComponentParameterStructure)->nSliceHeight); 421e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen // MAX_NUM_INTERNAL_BUFFERS; 422e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 423e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for(i=0; i < MAX_NUM_INTERNAL_BUFFERS; i++) { 424e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pVtcConfig->nInternalBuffers = i; 425e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ret = ion_alloc_tiler(pCompPrv->ion_fd, MAX_VTC_WIDTH_WITH_VNF, MAX_VTC_HEIGHT_WITH_VNF, TILER_PIXEL_FMT_8BIT, OMAP_ION_HEAP_TILER_MASK, &handle, (size_t *)&stride_Y); 426e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (ret < 0) { 427e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR ("ION allocation failed - %s", strerror(errno)); 428e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen goto EXIT; 429e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 430e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 431e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ret = ion_share(pCompPrv->ion_fd, handle, &fd1); 432e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (ret < 0) { 433e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR("ION share failed"); 434e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, handle); 435e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen goto EXIT; 436e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 437e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 438e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pVtcConfig->IonBufhdl[0] = (OMX_PTR)(fd1); 439e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 440e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen //fprintf(stdout, "DOMX: ION Buffer#%d: Y: 0x%x\n", i, pVtcConfig->IonBufhdl[0]); 441e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 442e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ret = ion_alloc_tiler(pCompPrv->ion_fd, MAX_VTC_WIDTH_WITH_VNF/2, MAX_VTC_HEIGHT_WITH_VNF/2, TILER_PIXEL_FMT_16BIT, OMAP_ION_HEAP_TILER_MASK, &handle, (size_t *)&stride_UV); 443e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (ret < 0) { 444e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR ("ION allocation failed - %s", strerror(errno)); 445e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen goto EXIT; 446e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 447e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 448e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ret = ion_share(pCompPrv->ion_fd, handle, &fd2); 449e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (ret < 0) { 450e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR("ION share failed"); 451e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, handle); 452e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen goto EXIT; 453e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 454e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 455e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pVtcConfig->IonBufhdl[1] = (OMX_PTR)(fd2); 456e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gCamIonHdl[i][0] = pVtcConfig->IonBufhdl[0]; 457e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gCamIonHdl[i][1] = pVtcConfig->IonBufhdl[1]; 458e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen //fprintf(stdout, "DOMX: ION Buffer#%d: UV: 0x%x\n", i, pVtcConfig->IonBufhdl[1]); 459e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen eError = __PROXY_SetParameter(hComponent, 460e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_TI_IndexParamVtcSlice, 461e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pVtcConfig, 462e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pVtcConfig->IonBufhdl, 2); 463e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen close(fd1); 464e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen close(fd2); 465e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 466e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen goto EXIT; 467e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen case OMX_TI_IndexParamComponentBufferAllocation: { 468e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32 port = 0, index = 0; 469e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen int fd; 470e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen bufferalloc = (OMX_TI_PARAM_COMPONENTBUFALLOCTYPE *) 471e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pComponentParameterStructure; 472e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 473e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen port = bufferalloc->nPortIndex; 474e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen index = bufferalloc->nIndex; 475e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 476e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen size = bufferalloc->nAllocWidth * bufferalloc->nAllocLines; 477e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ret = ion_alloc_tiler (pCompPrv->ion_fd, size, 1, 478e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen TILER_PIXEL_FMT_PAGE, 479e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMAP_ION_HEAP_TILER_ALLOCATION_MASK, 480e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen &handle, &stride_Y); 481e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (ret < 0) { 482e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR ("ION allocation failed - %s", strerror(errno)); 483e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen goto EXIT; 484e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 485e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 486e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ret = ion_share(pCompPrv->ion_fd, handle, &fd); 487e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (ret < 0) { 488e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR("ION share failed"); 489e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, handle); 490e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen goto EXIT; 491e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 492e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 493e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen bufferalloc->pBuf[0] = fd; 494e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen eError = __PROXY_SetParameter(hComponent, 495e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_TI_IndexParamComponentBufferAllocation, 496e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen bufferalloc, &bufferalloc->pBuf[0], 1); 497e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (eError != OMX_ErrorNone) { 498e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, handle); 499e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } else { 500e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (gComponentBufferAllocation[port][index]) { 501e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ion_free(pCompPrv->ion_fd, gComponentBufferAllocation[port][index]); 502e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 503e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gComponentBufferAllocation[port][index] = handle; 504e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 505e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen close (fd); 506e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 507e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen goto EXIT; 508e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen break; 509e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen default: 510e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen break; 511e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 512e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen eError = __PROXY_SetParameter(hComponent, 513e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen nParamIndex, 514e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pComponentParameterStructure, 515e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen NULL, 0); 516e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 517e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (eError != OMX_ErrorNone) { 518e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR(" CameraSetParam: Error in SetParam 0x%x", eError); 519e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 520e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. ChenEXIT: 521e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen return eError; 522e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen} 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComponent) 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE dcc_eError = OMX_ErrorNone; 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *pHandle = NULL; 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pComponentPrivate; 529e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32 i = 0, j = 0; 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle = (OMX_COMPONENTTYPE *) hComponent; 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eOsalError = TIMM_OSAL_ERR_NONE; 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("_____________________INSIDE CAMERA PROXY" 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "WRAPPER__________________________\n"); 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->pComponentPrivate = (PROXY_COMPONENT_PRIVATE *) 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(sizeof(PROXY_COMPONENT_PRIVATE), 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate = 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pHandle->pComponentPrivate == NULL) 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR(" ERROR IN ALLOCATING PROXY COMPONENT" 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "PRIVATE STRUCTURE"); 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ErrorInsufficientResources; 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memset(pComponentPrivate, 0, 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(PROXY_COMPONENT_PRIVATE)); 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->cCompName = 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8), 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Copying component Name - this will be picked up in the proxy common */ 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev assert(strlen(COMPONENT_NAME) + 1 < MAX_COMPONENT_NAME_LENGTH); 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memcpy(pComponentPrivate->cCompName, COMPONENT_NAME, 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strlen(COMPONENT_NAME) + 1); 55770ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Calling Proxy Common Init() */ 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ProxyCommonInit(hComponent); 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != OMX_ErrorNone) 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR("\Error in Initializing Proxy"); 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(pComponentPrivate->cCompName); 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(pComponentPrivate); 565e005708a4599caa650c653028bea2ccb216fc653Sarthak Aggarwal goto EXIT; 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 567e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for(i=0; i < MAX_NUM_INTERNAL_BUFFERS; i++) { 568e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gCamIonHdl[i][0] = NULL; 569e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gCamIonHdl[i][1] = NULL; 570e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 571e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 572e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for (i = 0; i < PROXY_MAXNUMOFPORTS; i++) { 573e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for (j = 0; j < MAX_NUM_INTERNAL_BUFFERS; j++) { 574e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen gComponentBufferAllocation[i][j] = NULL; 575e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 576e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->ComponentDeInit = ComponentPrivateDeInit; 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->GetConfig = CameraGetConfig; 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->SetConfig = CameraSetConfig; 581e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pHandle->SendCommand = Camera_SendCommand; 582e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pHandle->SetParameter = CameraSetParam; 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name DCC_Init() 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE DCC_Init(OMX_HANDLETYPE hComponent) 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_PARAM_DCCURIINFO param; 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR ptempbuf; 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U16 nIndex = 0; 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 60470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 60570ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal int ret; 606e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen size_t stride; 60770ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING dcc_dir[200]; 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U16 i; 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev _PROXY_OMX_INIT_PARAM(¶m, OMX_TI_PARAM_DCCURIINFO); 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("ENTER"); 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Read the the DCC URI info */ 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (nIndex = 0; eError != OMX_ErrorNoMore; nIndex++) 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev param.nIndex = nIndex; 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_GetParameter(hComponent, 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_IndexParamDccUriInfo, ¶m); 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((eError == OMX_ErrorNone) || 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (eError == OMX_ErrorNoMore), eError, 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Error in GetParam for Dcc URI info"); 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError == OMX_ErrorNone) 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("DCC URI's %s ", param.sDCCURI); 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_dir[nIndex] = 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(sizeof(OMX_U8) * 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (strlen(DCC_PATH) + MAX_URI_LENGTH + 1), 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(dcc_dir[nIndex] != NULL, 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, "Malloc failed"); 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcpy(dcc_dir[nIndex], DCC_PATH); 63749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal strncat(dcc_dir[nIndex], (OMX_STRING) param.sDCCURI, MAX_URI_LENGTH); 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcat(dcc_dir[nIndex], "/"); 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* setting back errortype OMX_ErrorNone */ 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError == OMX_ErrorNoMore) 644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ErrorNone; 646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dccbuf_size = read_DCCdir(NULL, dcc_dir, nIndex); 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 65073bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman if(dccbuf_size <= 0) 65173bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman { 65273bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman DOMX_DEBUG("No DCC files found, switching back to default DCC"); 65373bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman return OMX_ErrorInsufficientResources; 65473bfc819486d5f632fd113996e6ecdbd647d2085Sundar Raman } 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 65670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 65770ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal ion_fd = ion_open(); 65870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal if(ion_fd == 0) 65970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal { 66070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal DOMX_ERROR("ion_open failed!!!"); 66170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal return OMX_ErrorInsufficientResources; 66270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal } 66370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal dccbuf_size = (dccbuf_size + LINUX_PAGE_SIZE -1) & ~(LINUX_PAGE_SIZE - 1); 664e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ret = ion_alloc(ion_fd, dccbuf_size, 0x1000, 1 << ION_HEAP_TYPE_CARVEOUT, 665e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen (struct ion_handle **)&DCC_Buff); 666e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 667e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (ret || ((int)DCC_Buff == -ENOMEM)) { 668e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ret = ion_alloc_tiler(ion_fd, dccbuf_size, 1, TILER_PIXEL_FMT_PAGE, 669e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMAP_ION_HEAP_TILER_MASK, &DCC_Buff, &stride); 670e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 671e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 672e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (ret || ((int)DCC_Buff == -ENOMEM)) { 673e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR("FAILED to allocate DCC buffer of size=%d. ret=0x%x", 674e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen dccbuf_size, ret); 675e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen return OMX_ErrorInsufficientResources; 676e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 67770ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal 67870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal if (ion_map(ion_fd, DCC_Buff, dccbuf_size, PROT_READ | PROT_WRITE, MAP_SHARED, 0, 679e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen (unsigned char **)&DCC_Buff_ptr, &mmap_fd) < 0) 68070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal { 68170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal DOMX_ERROR("userspace mapping of ION buffers returned error"); 68270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal return OMX_ErrorInsufficientResources; 68370ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal } 68470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal ptempbuf = DCC_Buff_ptr; 68570ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dccbuf_size = read_DCCdir(ptempbuf, dcc_dir, nIndex); 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(dccbuf_size > 0, OMX_ErrorInsufficientResources, 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "ERROR in copy DCC files into buffer"); 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (i = 0; i < nIndex - 1; i++) 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Free(dcc_dir[i]); 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name send_DCCBufPtr() 704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief : Sending the DCC uri buff addr to ducati 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return return = 0 is successful 707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE send_DCCBufPtr(OMX_HANDLETYPE hComponent) 713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_CONFIG_SHAREDBUFFER uribufparam; 715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev _PROXY_OMX_INIT_PARAM(&uribufparam, OMX_TI_CONFIG_SHAREDBUFFER); 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uribufparam.nPortIndex = OMX_ALL; 719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("ENTER"); 721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uribufparam.nSharedBuffSize = dccbuf_size; 723e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef USE_ION 724e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen uribufparam.pSharedBuff = (OMX_PTR) mmap_fd; 725e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#else 726e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen uribufparam.pSharedBuff = (OMX_PTR) DCC_Buff; 727e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("SYSLINK MAPPED ADDR: 0x%x sizeof buffer %d", 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev uribufparam.pSharedBuff, uribufparam.nSharedBuffSize); 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = __PROXY_SetParameter(hComponent, 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_IndexParamDccUriBuffer, 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &uribufparam, 735e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen &(uribufparam.pSharedBuff), 1); 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != OMX_ErrorNone) { 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR(" Error in SetParam for DCC Uri Buffer 0x%x", eError); 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("EXIT"); 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name read_DCCdir() 748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief : copies all the dcc profiles into the allocated 1D-Tiler buffer 749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * and returns the size of the buffer. 750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void : OMX_PTR is null then returns the size of the DCC directory 751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return return = size of the DCC directory or error in case of any failures 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * in file read or open 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_S32 read_DCCdir(OMX_PTR buffer, OMX_STRING * dir_path, OMX_U16 numofURI) 758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev FILE *pFile; 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 lSize; 761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 dcc_buf_size = 0; 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev size_t result; 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING filename; 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char temp[200]; 765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING dotdot = ".."; 766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DIR *d; 767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct dirent *dir; 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U16 i = 0; 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 ret = 0; 770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("ENTER"); 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for (i = 0; i < numofURI - 1; i++) 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev d = opendir(dir_path[i]); 775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (d) 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* read each filename */ 778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while ((dir = readdir(d)) != NULL) 779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev filename = dir->d_name; 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcpy(temp, dir_path[i]); 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev strcat(temp, filename); 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ((*filename != *dotdot)) 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("\n\t DCC Profiles copying into buffer => %s mpu_addr: %p", 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev temp, buffer); 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pFile = fopen(temp, "rb"); 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pFile == NULL) 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR("File open error"); 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fseek(pFile, 0, SEEK_END); 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lSize = ftell(pFile); 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev rewind(pFile); 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* buffer is not NULL then copy all the DCC profiles into buffer 799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else return the size of the DCC directory */ 800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (buffer) 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // copy file into the buffer: 803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev result = 804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fread(buffer, 1, 805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev lSize, pFile); 806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (result != (size_t) lSize) 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("fread: Reading error"); 810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = -1; 811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev buffer = 813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev buffer + lSize; 814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* getting the size of the total dcc files available in FS */ 816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_buf_size = 817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev dcc_buf_size + lSize; 818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // terminate 819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev fclose(pFile); 820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev closedir(d); 824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (ret == 0) 827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ret = dcc_buf_size; 828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("return %d", ret); 830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return ret; 831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name DCC_Deinit() 836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return void 839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid DCC_DeInit() 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER("ENTER"); 846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 84770ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal if (DCC_Buff) 84870ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal { 84970ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#ifdef USE_ION 85070ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal munmap(DCC_Buff_ptr, dccbuf_size); 85170ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal close(mmap_fd); 85270ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal ion_free(ion_fd, DCC_Buff); 853978f3598fee8f7967aecde8d29bf23a7df3b0327Iliyan Malchev ion_close(ion_fd); 85470ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal DCC_Buff = NULL; 85570ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal#endif 85670ff025808c44ce9e01c045d879c5e60605de242Sarthak Aggarwal } 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("EXIT"); 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 862c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*===============================================================*/ 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** @fn Cam_Setup : This function is called when the the OMX Camera library is 865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * loaded. It creates a mutex, which is used during DCC_Init() 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*===============================================================*/ 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid __attribute__ ((constructor)) Cam_Setup(void) 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = TIMM_OSAL_MutexCreate(&cam_mutex); 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != TIMM_OSAL_ERR_NONE) 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Error("Creation of default mutex failed"); 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*===============================================================*/ 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** @fn Cam_Destroy : This function is called when the the OMX Camera library is 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * unloaded. It destroys the mutex which was created by 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Core_Setup(). 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*===============================================================*/ 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid __attribute__ ((destructor)) Cam_Destroy(void) 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = TIMM_OSAL_MutexDelete(cam_mutex); 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eError != TIMM_OSAL_ERR_NONE) 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Error("Destruction of default mutex failed"); 895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 897