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(&param, 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, &param);
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