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_videodecoder.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 generic proxy init() 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev The proxy wrapper also does some runtime/static time onfig on per proxy basis 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev This is a thin wrapper that is called when componentiit() of the proxy is called 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev static OMX_ERRORTYPE PROXY_Wrapper_init(OMX_HANDLETYPE hComponent, OMX_PTR pAppData); 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev this layer gets called first whenever a proxy's get handle is called 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ************************************************************************************************ 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @path WTSD_DucatiMMSW\omx\omx_il_1_x\omx_proxy_component\src 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @rev 1.0 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*============================================================== 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! Revision History 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! ============================ 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 20-August-2010 Sarthak Aggarwal sarthak@ti.com: Initial Version 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *================================================================*/ 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * INCLUDE FILES 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h> 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h> 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <assert.h> 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_proxy_common.h" 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <timm_osal_interfaces.h> 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_IVCommon.h" 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Video.h" 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "OMX_TI_Index.h" 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 67e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY 68e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#define LOG_TAG "OMXPROXYVIDEODEC" 69e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <fcntl.h> 70e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <cutils/properties.h> 71e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <utils/Log.h> 72e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif 73e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define COMPONENT_NAME "OMX.TI.DUCATI1.VIDEO.DECODER" 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* needs to be specific for every configuration wrapper */ 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef USE_ENHANCED_PORTRECONFIG 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Define port indices in video decoder proxy 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_VIDEODECODER_INPUT_PORT 0 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_VIDEODECODER_OUTPUT_PORT 1 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef SET_STRIDE_PADDING_FROM_PROXY 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LINUX_PAGE_SIZE (4 * 1024) 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define TOTAL_DEC_PORTS 2 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define HAL_NV12_PADDED_PIXEL_FORMAT (OMX_TI_COLOR_FormatYUV420PackedSemiPlanar - OMX_COLOR_FormatVendorStartUnused) 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic OMX_ERRORTYPE RPC_UTIL_SetStrideAndPadding(OMX_COMPONENTTYPE * hRemoteComp, PROXY_COMPONENT_PRIVATE * pCompPrv); 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_SendCommand(OMX_IN OMX_HANDLETYPE hComponent, 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_COMMANDTYPE eCmd, 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_U32 nParam, OMX_IN OMX_PTR pCmdData); 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_EventHandler(OMX_HANDLETYPE hComponent, 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pAppData, OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2, 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pEventData); 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif //SET_STRIDE_PADDING_FROM_PROXY 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1019e964f98a366c756b96a97809b31579fdcc43e97Lakshman GowdaOMX_ERRORTYPE PROXY_VIDDEC_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, 1029e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType); 1039e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda 10455bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct); 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_SetParameter(OMX_IN OMX_HANDLETYPE hComponent, 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct); 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ANDROID_QUIRK_LOCK_BUFFER 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <hardware/gralloc.h> 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <hardware/hardware.h> 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "hal_public.h" 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_FillThisBuffer(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE * pBufferHdr); 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_FillBufferDone(OMX_HANDLETYPE hComponent, 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 remoteBufHdr, OMX_U32 nfilledLen, OMX_U32 nOffset, OMX_U32 nFlags, 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TICKS nTimeStamp, OMX_HANDLETYPE hMarkTargetComponent, 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pMarkData); 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 126e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chenextern OMX_ERRORTYPE PrearrageEmptyThisBuffer(OMX_HANDLETYPE hComponent, 127e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_BUFFERHEADERTYPE * pBufferHdr); 128e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 129e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY 130e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chenextern void DumpVideoFrame(DebugFrame_Dump *frameInfo); 131e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif 132e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 133e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. ChenOMX_ERRORTYPE OMX_ProxyViddecInit(OMX_HANDLETYPE hComponent); 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComponent) 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *pHandle = NULL; 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL; 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle = (OMX_COMPONENTTYPE *) hComponent; 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Component name provided is %s", COMPONENT_NAME); 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->pComponentPrivate = 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (PROXY_COMPONENT_PRIVATE *) 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(sizeof(PROXY_COMPONENT_PRIVATE), TIMM_OSAL_TRUE, 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 0, TIMMOSAL_MEM_SEGMENT_INT); 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(pHandle->pComponentPrivate != NULL, 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "ERROR IN ALLOCATING PROXY COMPONENT PRIVATE STRUCTURE"); 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate = 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memset(pComponentPrivate, 0, 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(PROXY_COMPONENT_PRIVATE)); 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->cCompName = 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Malloc(MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8), 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(pComponentPrivate->cCompName != NULL, 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorInsufficientResources, 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev " Error in Allocating space for proxy component table"); 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 16949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal eError = OMX_ProxyViddecInit(hComponent); 17049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal 171e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY 172e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (eError == OMX_ErrorNone) 173e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 174e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen char value[PROPERTY_VALUE_MAX]; 175e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen property_get("debug.video.dumpframe", value, "0:0"); 176e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen /* -ve value for fromFrame would disable this automatically */ 177e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pComponentPrivate->debugframeInfo.fromFrame = atoi(strtok(value, ":")); 178e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pComponentPrivate->debugframeInfo.toFrame = atoi(strtok(NULL, ":")); 179e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pComponentPrivate->debugframeInfo.runningFrame = pComponentPrivate->debugframeInfo.fromFrame; 180e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 181e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif 18249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal EXIT: 183e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (eError != OMX_ErrorNone) 184e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 185e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_DEBUG("Error in Initializing Proxy"); 186e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pComponentPrivate->cCompName != NULL) 187e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 188e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen TIMM_OSAL_Free(pComponentPrivate->cCompName); 189e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pComponentPrivate->cCompName = NULL; 190e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 191e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pComponentPrivate != NULL) 192e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 193e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen TIMM_OSAL_Free(pComponentPrivate); 194e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pComponentPrivate = NULL; 195e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 196e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 19749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal return eError; 19849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal} 19949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal 20049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak AggarwalOMX_ERRORTYPE OMX_ProxyViddecInit(OMX_HANDLETYPE hComponent) 20149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal{ 20249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal OMX_ERRORTYPE eError = OMX_ErrorNone; 20349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal OMX_COMPONENTTYPE *pHandle = NULL; 20449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL; 20549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal pHandle = (OMX_COMPONENTTYPE *) hComponent; 20649f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal OMX_TI_PARAM_ENHANCEDPORTRECONFIG tParamStruct; 20749f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal 20849f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#ifdef ANDROID_QUIRK_LOCK_BUFFER 20949f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal OMX_U32 err; 21049f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal hw_module_t const* module; 21149f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal#endif 21249f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal DOMX_ENTER(""); 21349f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal 21449f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal DOMX_DEBUG("Component name provided is %s", COMPONENT_NAME); 21549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal 2163cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal pComponentPrivate = 2173cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 2183cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 2193cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal // Copying component Name - this will be picked up in the proxy common 2203cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal PROXY_assert(strlen(COMPONENT_NAME) + 1 < MAX_COMPONENT_NAME_LENGTH, 2213cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal OMX_ErrorInvalidComponentName, 2223cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal "Length of component name is longer than the max allowed"); 2233cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal TIMM_OSAL_Memcpy(pComponentPrivate->cCompName, COMPONENT_NAME, 2243cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal strlen(COMPONENT_NAME) + 1); 22549f42f954f02c39aa4d25520a4caa3f0b459aa40Sarthak Aggarwal 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ProxyCommonInit(hComponent); // Calling Proxy Common Init() 227e005708a4599caa650c653028bea2ccb216fc653Sarthak Aggarwal PROXY_assert(eError == OMX_ErrorNone, eError, "Proxy common init returned error"); 22855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 229e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pHandle->SetParameter = PROXY_VIDDEC_SetParameter; 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->GetParameter = PROXY_VIDDEC_GetParameter; 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 2329e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda pHandle->GetExtensionIndex = PROXY_VIDDEC_GetExtensionIndex; 2339e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef SET_STRIDE_PADDING_FROM_PROXY 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->SendCommand = PROXY_VIDDEC_SendCommand; 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->proxyEventHandler = PROXY_VIDDEC_EventHandler; 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->IsLoadedState = OMX_TRUE; 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ANDROID_QUIRK_LOCK_BUFFER 241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->proxyFillBufferDone = PROXY_VIDDEC_FillBufferDone; 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pHandle->FillThisBuffer = PROXY_VIDDEC_FillThisBuffer; 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module); 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (err == 0) 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pComponentPrivate->grallocModule = (gralloc_module_t const *)module; 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ERROR("FATAL: gralloc api hw_get_module() returned error: Can't find \ 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev %s module err = %x", GRALLOC_HARDWARE_MODULE_ID, err); 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = OMX_ErrorInsufficientResources; 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef USE_ENHANCED_PORTRECONFIG 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Initializing Structure */ 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nSize = sizeof(OMX_TI_PARAM_ENHANCEDPORTRECONFIG); 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nVersion.s.nVersionMinor = OMX_VER_MINOR; 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nVersion.s.nRevision = 0x0; 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nVersion.s.nStep = 0x0; 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nPortIndex = OMX_VIDEODECODER_OUTPUT_PORT; 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.bUsePortReconfigForCrop = OMX_TRUE; 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.bUsePortReconfigForPadding = OMX_TRUE; 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_SetParameter(hComponent,(OMX_INDEXTYPE)OMX_TI_IndexParamUseEnhancedPortReconfig, 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &tParamStruct); 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy SetParameter for Enhanced port reconfig usage"); 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 274e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen /* This is required to handle WMV/VC-1 content */ 275e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pHandle->EmptyThisBuffer = PrearrageEmptyThisBuffer; 276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 2819e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda/* ===========================================================================*/ 2829e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda/** 2839e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @name PROXY_VIDDEC_GetExtensionIndex() 2849e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @brief 2859e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @param void 2869e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @return OMX_ErrorNone = Successful 2879e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * @sa TBD 2889e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda * 2899e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda */ 2909e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda/* ===========================================================================*/ 2919e964f98a366c756b96a97809b31579fdcc43e97Lakshman GowdaOMX_ERRORTYPE PROXY_VIDDEC_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, 2929e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE * pIndexType) 2939e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda{ 2949e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda OMX_ERRORTYPE eError = OMX_ErrorNone; 2959e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 2969e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 2979e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda 2989e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_require((hComp->pComponentPrivate != NULL), OMX_ErrorBadParameter, NULL); 2999e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_require(cParameterName != NULL, OMX_ErrorBadParameter, NULL); 3009e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_require(pIndexType != NULL, OMX_ErrorBadParameter, NULL); 3019e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda 3029e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda DOMX_ENTER("hComponent = %p, cParameterName = %p", hComponent, cParameterName); 3039e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda 3049e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#ifdef ENABLE_GRALLOC_BUFFERS 3059e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda // Ensure that String length is not greater than Max allowed length 3069e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_require(strlen(cParameterName) <= 127, OMX_ErrorBadParameter, NULL); 3079e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda 3089e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda if (strcmp(cParameterName, "OMX.google.android.index.getAndroidNativeBufferUsage") == 0) 3099e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda { 3109e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda *pIndexType = (OMX_INDEXTYPE) OMX_TI_IndexAndroidNativeBufferUsage; 3119e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda } 3129e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda else 3139e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda { 3149e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda eError = PROXY_GetExtensionIndex(hComponent, cParameterName, pIndexType); 3159e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_assert(eError == OMX_ErrorNone, 3169e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda eError," Error in PROXY_GetExtensionIndex"); 3179e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda } 3189e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#else 3199e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda eError = PROXY_GetExtensionIndex(hComponent, cParameterName, pIndexType); 3209e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_assert(eError == OMX_ErrorNone, 3219e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda eError," Error in PROXY_GetExtensionIndex"); 3229e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#endif 3239e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda EXIT: 3249e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda DOMX_EXIT("eError: %d", eError); 3259e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda return eError; 3269e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda} 3279e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda 32855bffd113d7f7356bc21311b17a6a256f4cc1dfbSrinivas Kowtal#ifdef ANDROID_QUIRK_CHANGE_PORT_VALUES 329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_GetParameter() 333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_GetParameter(OMX_IN OMX_HANDLETYPE hComponent, 341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_INDEXTYPE nParamIndex, OMX_INOUT OMX_PTR pParamStruct) 342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 3469e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL; 3479e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParam = NULL; 3489e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda OMX_TI_PARAMNATIVEBUFFERUSAGE *pUsage = NULL; 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL); 351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((hComp->pComponentPrivate != NULL), 352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, NULL); 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, pCompPrv, nParamIndex, pParamStruct); 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 3609e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#ifdef ENABLE_GRALLOC_BUFFERS 3619e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda if( nParamIndex == OMX_TI_IndexAndroidNativeBufferUsage) 3629e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda { 3639e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda pUsage = (OMX_TI_PARAMNATIVEBUFFERUSAGE*)pParamStruct; 3649e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda if(pCompPrv->proxyPortBuffers[pUsage->nPortIndex].proxyBufferType == GrallocPointers) 3659e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda { 3669e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_CHK_VERSION(pParamStruct, OMX_TI_PARAMNATIVEBUFFERUSAGE); 3679e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda pUsage->nUsage = GRALLOC_USAGE_HW_RENDER; 368e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY 369e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pUsage->nUsage |= GRALLOC_USAGE_SW_READ_RARELY; 370e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif 3719e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda goto EXIT; 3729e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda } 3739e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda } 3749e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda#endif 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_GetParameter(hComponent,nParamIndex, pParamStruct); 376e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen PROXY_assert(eError == OMX_ErrorNone, 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy GetParameter"); 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if( nParamIndex == OMX_IndexParamPortDefinition) 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 3819e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_CHK_VERSION(pParamStruct, OMX_PARAM_PORTDEFINITIONTYPE); 3829e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct; 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pPortDef->format.video.eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar) 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pCompPrv->proxyPortBuffers[pPortDef->nPortIndex].proxyBufferType == GrallocPointers) 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortDef->format.video.eColorFormat = HAL_NV12_PADDED_PIXEL_FORMAT; 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortDef->format.video.eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar; 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if ( nParamIndex == OMX_IndexParamVideoPortFormat) 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 3979e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda PROXY_CHK_VERSION(pParamStruct, OMX_VIDEO_PARAM_PORTFORMATTYPE); 3989e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda pPortParam = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct; 399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pPortParam->eColorFormat == OMX_COLOR_FormatYUV420PackedSemiPlanar) 4009e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda { 4019e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda if(pCompPrv->proxyPortBuffers[pPortParam->nPortIndex].proxyBufferType == GrallocPointers) 402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortParam->eColorFormat = HAL_NV12_PADDED_PIXEL_FORMAT; 404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortParam->eColorFormat = OMX_TI_COLOR_FormatYUV420PackedSemiPlanar; 408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 4099e964f98a366c756b96a97809b31579fdcc43e97Lakshman Gowda } 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("eError: %d", eError); 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_SetParameter() 420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_SetParameter(OMX_IN OMX_HANDLETYPE hComponent, 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_INDEXTYPE nParamIndex, OMX_IN OMX_PTR pParamStruct) 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pParamStruct; 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_VIDEO_PARAM_PORTFORMATTYPE* pPortParams = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pParamStruct; 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((pParamStruct != NULL), OMX_ErrorBadParameter, NULL); 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((hComp->pComponentPrivate != NULL), 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, NULL); 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 441c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("hComponent = %p, pCompPrv = %p, nParamIndex = %d, pParamStruct = %p", 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, pCompPrv, nParamIndex, pParamStruct); 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(nParamIndex == OMX_IndexParamPortDefinition) 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pPortDef->format.video.eColorFormat == OMX_TI_COLOR_FormatYUV420PackedSemiPlanar 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev || pPortDef->format.video.eColorFormat == HAL_NV12_PADDED_PIXEL_FORMAT) 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortDef->format.video.eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if(nParamIndex == OMX_IndexParamVideoPortFormat) 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pPortParams->eColorFormat == OMX_TI_COLOR_FormatYUV420PackedSemiPlanar 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev || pPortParams->eColorFormat == HAL_NV12_PADDED_PIXEL_FORMAT) 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPortParams->eColorFormat = OMX_COLOR_FormatYUV420PackedSemiPlanar; 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_SetParameter(hComponent, nParamIndex, pParamStruct); 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy SetParameter"); 464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("eError: %d", eError); 467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef SET_STRIDE_PADDING_FROM_PROXY 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_VIDDEC_SendCommand() 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_SendCommand(OMX_IN OMX_HANDLETYPE hComponent, 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_COMMANDTYPE eCmd, 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_U32 nParam, OMX_IN OMX_PTR pCmdData) 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((hComp->pComponentPrivate != NULL), 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, NULL); 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("hComponent = %p, pCompPrv = %p, eCmd = %d, nParam = %d, pCmdData = %p", 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, pCompPrv, eCmd, nParam, pCmdData); 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(eCmd == OMX_CommandStateSet) 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Set appropriate stride before Loaded to Idle transition. 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if((OMX_STATETYPE)nParam == OMX_StateIdle && pCompPrv->IsLoadedState == OMX_TRUE) 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = RPC_UTIL_SetStrideAndPadding(hComponent, pCompPrv); 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(eError == OMX_ErrorNone, eError, 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Stride and padding setting from proxy returned"); 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv->IsLoadedState = OMX_FALSE; 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 509c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else if(eCmd == OMX_CommandPortEnable) 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(nParam == OMX_ALL || nParam == OMX_VIDEODECODER_OUTPUT_PORT) 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = RPC_UTIL_SetStrideAndPadding(hComponent, pCompPrv); 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(eError == OMX_ErrorNone, eError, 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Stride and padding setting from proxy returned"); 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = 521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_SendCommand(hComponent, eCmd, nParam, pCmdData); 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("eError: %d", eError); 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_EventHandler() 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param void 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_EventHandler(OMX_HANDLETYPE hComponent, 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pAppData, OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2, 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pEventData) 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((hComp->pComponentPrivate != NULL), 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "This is fatal error, processing cant proceed - please debug"); 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ("hComponent=%p, pCompPrv=%p, eEvent=%p, nData1=%p, nData2=%p, pEventData=%p", 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hComponent, pCompPrv, eEvent, nData1, nData2, pEventData); 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if((eEvent == OMX_EventCmdComplete) && ((OMX_COMMANDTYPE)nData1 == OMX_CommandStateSet)) 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if((OMX_STATETYPE)nData2 == OMX_StateLoaded) 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv->IsLoadedState = OMX_TRUE; 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_EventHandler(hComponent, pAppData, eEvent, nData1, nData2, pEventData); 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_UTIL_RPC_UTIL_SetStrideAndPadding() 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Gets stride on this port. Used to set stride on OMX to tell whether buffer is 1D or 2D 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRemoteComp [IN] : Remote component handle. 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return OMX_ErrorNone = Successful 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_UTIL_SetStrideAndPadding(OMX_COMPONENTTYPE * hComponent,PROXY_COMPONENT_PRIVATE * pCompPrv) 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone; 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PARAM_PORTDEFINITIONTYPE sPortDef; 581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CONFIG_RECTTYPE tParamStruct; 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPortIndex = 0; 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev for(nPortIndex=0; nPortIndex < TOTAL_DEC_PORTS ;nPortIndex++ ) 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 586c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Initializing Structure */ 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE); 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nVersionMinor = OMX_VER_MINOR; 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nRevision = 0x0; 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nStep = 0x0; 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nPortIndex = nPortIndex; 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_GetParameter(hComponent,OMX_IndexParamPortDefinition, 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &sPortDef); 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy GetParameter for Port Def"); 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (sPortDef.eDomain == OMX_PortDomainVideo && sPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingUnused) 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pCompPrv->proxyPortBuffers[nPortIndex].IsBuffer2D == OMX_TRUE) 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.format.video.nStride = LINUX_PAGE_SIZE; 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nSize = sizeof(OMX_CONFIG_RECTTYPE); 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nVersion.s.nVersionMinor = OMX_VER_MINOR; 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nVersion.s.nRevision = 0x0; 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nVersion.s.nStep = 0x0; 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev tParamStruct.nPortIndex = nPortIndex; 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_GetParameter(hComponent,(OMX_INDEXTYPE)OMX_TI_IndexParam2DBufferAllocDimension, 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &tParamStruct); 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy GetParameter for 2D index"); 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.format.video.nStride = tParamStruct.nWidth; 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_SetParameter(hComponent,OMX_IndexParamPortDefinition, 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &sPortDef); 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy SetParameter for Port Def"); 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef ANDROID_QUIRK_LOCK_BUFFER 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_VIDDEC_FillThisBuffer() 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Gets stride on this port. Used to set stride on OMX to tell whether buffer is 1D or 2D 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_FillThisBuffer(OMX_HANDLETYPE hComponent, OMX_BUFFERHEADERTYPE * pBufferHdr) 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone; 644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv; 646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 count = 0; 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev IMG_native_handle_t* grallocHandle; 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PARAM_PORTDEFINITIONTYPE sPortDef; 650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(pBufferHdr != NULL, OMX_ErrorBadParameter, NULL); 652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require(hComp->pComponentPrivate != NULL, OMX_ErrorBadParameter, 653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL); 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_CHK_VERSION(pBufferHdr, OMX_BUFFERHEADERTYPE); 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 658e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if(pCompPrv->proxyPortBuffers[OMX_VIDEODECODER_OUTPUT_PORT].proxyBufferType 659e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen == GrallocPointers) 660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Lock the Gralloc buffer till it gets rendered completely */ 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Extract the Gralloc handle from the Header and then call lock on that */ 663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Note# There is no error check for the pBufferHdr here*/ 664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev grallocHandle = (IMG_native_handle_t*)pBufferHdr->pBuffer; 665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Initializing Structure */ 667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE); 668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nVersionMinor = OMX_VER_MINOR; 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nRevision = 0x0; 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nVersion.s.nStep = 0x0; 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sPortDef.nPortIndex = OMX_VIDEODECODER_INPUT_PORT; 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = PROXY_GetParameter(hComponent,OMX_IndexParamPortDefinition, 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev &sPortDef); 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy GetParameter for Port Def"); 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 678e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY 679e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen /* Get the Video frame crop window */ 680e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_CONFIG_RECTTYPE rect; 681e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen rect.nSize = sizeof(rect); 682e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen rect.nVersion.s.nVersionMajor = OMX_VER_MAJOR; 683e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen rect.nVersion.s.nVersionMinor = OMX_VER_MINOR; 684e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen rect.nVersion.s.nRevision = 0x0; 685e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen rect.nVersion.s.nStep = 0x0; 686e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen rect.nPortIndex = OMX_VIDEODECODER_OUTPUT_PORT; 687e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 688e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen eError = PROXY_GetConfig(hComponent, OMX_IndexConfigCommonOutputCrop, &rect); 689e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 690e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen PROXY_assert(eError == OMX_ErrorNone, 691e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen eError," Error while getting output crop"); 692e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.frame_width = rect.nWidth; 693e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.frame_height = rect.nHeight; 694e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.frame_xoffset = rect.nLeft; 695e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.frame_yoffset = rect.nTop; 696e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv->grallocModule->lock((gralloc_module_t const *) pCompPrv->grallocModule, 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (buffer_handle_t)grallocHandle, GRALLOC_USAGE_HW_RENDER, 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 0,0,sPortDef.format.video.nFrameWidth, sPortDef.format.video.nFrameHeight,NULL); 700e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eRPCError = PROXY_FillThisBuffer(hComponent, pBufferHdr); 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in Proxy SetParameter for Port Def"); 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("eError: %d", eError); 709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name PROXY_VIDDEC_FillBufferDone() 715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Gets stride on this port. Used to set stride on OMX to tell whether buffer is 1D or 2D 716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE PROXY_VIDDEC_FillBufferDone(OMX_HANDLETYPE hComponent, 719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 remoteBufHdr, OMX_U32 nfilledLen, OMX_U32 nOffset, OMX_U32 nFlags, 720c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TICKS nTimeStamp, OMX_HANDLETYPE hMarkTargetComponent, 721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pMarkData) 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE eError = OMX_ErrorNone, eCompReturn = OMX_ErrorNone; 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMPONENTTYPE *hComp = (OMX_COMPONENTTYPE *) hComponent; 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 count = 0; 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev IMG_native_handle_t* grallocHandle; 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_require((hComp->pComponentPrivate != NULL), 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "This is fatal error, processing cant proceed - please debug"); 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Lock the Gralloc buffer till it gets rendered completely */ 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Extract the Gralloc handle from the Header and then call lock on that */ 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Note# There is no error check for the pBufferHdr here*/ 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pCompPrv->proxyPortBuffers[OMX_VIDEODECODER_OUTPUT_PORT].proxyBufferType 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev == GrallocPointers) { 742e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen for (count = 0; count < pCompPrv->nTotalBuffers; ++count) 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pCompPrv->tBufList[count].pBufHeaderRemote == remoteBufHdr) 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev grallocHandle = (IMG_native_handle_t*)(pCompPrv->tBufList[count].pBufHeader)->pBuffer; 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert((count != pCompPrv->nTotalBuffers), 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ErrorBadParameter, 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Received invalid-buffer header from OMX component"); 754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pCompPrv->grallocModule->unlock((gralloc_module_t const *) pCompPrv->grallocModule, (buffer_handle_t)grallocHandle); 755e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 756e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef ENABLE_RAW_BUFFERS_DUMP_UTILITY 757e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen ALOGV("frm[%u] to[%u] run[%u]", pCompPrv->debugframeInfo.fromFrame, pCompPrv->debugframeInfo.toFrame, pCompPrv->debugframeInfo.runningFrame); 758e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen /* Fill buffer Done successed, hence start dumping if requested */ 759e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_BUFFERHEADERTYPE *pBufHdr = pCompPrv->tBufList[count].pBufHeader; 760e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if ((pCompPrv->debugframeInfo.fromFrame == 0) && (pCompPrv->debugframeInfo.runningFrame <= pCompPrv->debugframeInfo.toFrame)) 761e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 762e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen /* Lock the buffer for SW read usage and then access it */ 763e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->grallocModule->lock((gralloc_module_t const*) pCompPrv->grallocModule, 764e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen (buffer_handle_t)grallocHandle, 765e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_SW_READ_RARELY, 766e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.frame_xoffset, 767e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.frame_yoffset, 768e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.frame_width, 769e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.frame_height, 770e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen (void*)pCompPrv->debugframeInfo.y_uv); 771e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 772e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DumpVideoFrame(&pCompPrv->debugframeInfo); 773e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 774e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->grallocModule->unlock((gralloc_module_t const *) pCompPrv->grallocModule, 775e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen (buffer_handle_t)grallocHandle); 776e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.runningFrame++; 777e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 778e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen else if (pCompPrv->debugframeInfo.fromFrame > 0) 779e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen { 780e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen pCompPrv->debugframeInfo.fromFrame--; 781e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 782e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif 783e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eRPCError = PROXY_FillBufferDone(hComponent,remoteBufHdr, nfilledLen, nOffset, nFlags, 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nTimeStamp, hMarkTargetComponent, pMarkData); 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev PROXY_assert(eError == OMX_ErrorNone, 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError," Error in PROXY FillBufferDone for Port Def"); 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 791c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevEXIT: 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT("eError: %d", eError); 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eError; 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 797c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 798