147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*-------------------------------------------------------------------------- 2f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh BeharaCopyright (c) 2010-2017, Linux Foundation. All rights reserved. 347e37c4428509524ee576920a98381f3e4872493Nick Pelly 447e37c4428509524ee576920a98381f3e4872493Nick PellyRedistribution and use in source and binary forms, with or without 547e37c4428509524ee576920a98381f3e4872493Nick Pellymodification, are permitted provided that the following conditions are met: 647e37c4428509524ee576920a98381f3e4872493Nick Pelly * Redistributions of source code must retain the above copyright 747e37c4428509524ee576920a98381f3e4872493Nick Pelly notice, this list of conditions and the following disclaimer. 847e37c4428509524ee576920a98381f3e4872493Nick Pelly * Redistributions in binary form must reproduce the above copyright 947e37c4428509524ee576920a98381f3e4872493Nick Pelly notice, this list of conditions and the following disclaimer in the 1047e37c4428509524ee576920a98381f3e4872493Nick Pelly documentation and/or other materials provided with the distribution. 116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal * Neither the name of The Linux Foundation nor 1247e37c4428509524ee576920a98381f3e4872493Nick Pelly the names of its contributors may be used to endorse or promote 1347e37c4428509524ee576920a98381f3e4872493Nick Pelly products derived from this software without specific prior written 1447e37c4428509524ee576920a98381f3e4872493Nick Pelly permission. 1547e37c4428509524ee576920a98381f3e4872493Nick Pelly 1647e37c4428509524ee576920a98381f3e4872493Nick PellyTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1747e37c4428509524ee576920a98381f3e4872493Nick PellyAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1847e37c4428509524ee576920a98381f3e4872493Nick PellyIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 1947e37c4428509524ee576920a98381f3e4872493Nick PellyNON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2047e37c4428509524ee576920a98381f3e4872493Nick PellyCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2147e37c4428509524ee576920a98381f3e4872493Nick PellyEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2247e37c4428509524ee576920a98381f3e4872493Nick PellyPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2347e37c4428509524ee576920a98381f3e4872493Nick PellyOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2447e37c4428509524ee576920a98381f3e4872493Nick PellyWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2547e37c4428509524ee576920a98381f3e4872493Nick PellyOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2647e37c4428509524ee576920a98381f3e4872493Nick PellyADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2747e37c4428509524ee576920a98381f3e4872493Nick Pelly--------------------------------------------------------------------------*/ 2847e37c4428509524ee576920a98381f3e4872493Nick Pelly/*============================================================================ 2947e37c4428509524ee576920a98381f3e4872493Nick Pelly O p e n M A X w r a p p e r s 3047e37c4428509524ee576920a98381f3e4872493Nick Pelly O p e n M A X C o r e 3147e37c4428509524ee576920a98381f3e4872493Nick Pelly 3247e37c4428509524ee576920a98381f3e4872493Nick Pelly*//** @file omx_video_base.cpp 3347e37c4428509524ee576920a98381f3e4872493Nick Pelly This module contains the implementation of the OpenMAX core & component. 3447e37c4428509524ee576920a98381f3e4872493Nick Pelly 3547e37c4428509524ee576920a98381f3e4872493Nick Pelly*//*========================================================================*/ 3647e37c4428509524ee576920a98381f3e4872493Nick Pelly 3747e37c4428509524ee576920a98381f3e4872493Nick Pelly////////////////////////////////////////////////////////////////////////////// 3847e37c4428509524ee576920a98381f3e4872493Nick Pelly// Include Files 3947e37c4428509524ee576920a98381f3e4872493Nick Pelly////////////////////////////////////////////////////////////////////////////// 4047e37c4428509524ee576920a98381f3e4872493Nick Pelly 41f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#define __STDC_FORMAT_MACROS //enables the format specifiers in inttypes.h 42f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan#include <inttypes.h> 4347e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <string.h> 4447e37c4428509524ee576920a98381f3e4872493Nick Pelly#include "omx_video_base.h" 4547e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <stdlib.h> 4647e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <errno.h> 4747e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <fcntl.h> 4847e37c4428509524ee576920a98381f3e4872493Nick Pelly#include <unistd.h> 49826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <sys/prctl.h> 50826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 51826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <media/hardware/HardwareAPI.h> 52826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <gralloc_priv.h> 53826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 54826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifndef _ANDROID_ 55826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#include <glib.h> 56826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#define strlcpy g_strlcpy 57826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 5847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define H264_SUPPORTED_WIDTH (480) 5947e37c4428509524ee576920a98381f3e4872493Nick Pelly#define H264_SUPPORTED_HEIGHT (368) 6047e37c4428509524ee576920a98381f3e4872493Nick Pelly 6147e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_SUPPORTED_WIDTH (480) 6247e37c4428509524ee576920a98381f3e4872493Nick Pelly#define MPEG4_SUPPORTED_HEIGHT (368) 6347e37c4428509524ee576920a98381f3e4872493Nick Pelly 6447e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SP_MP_START_CODE 0xC5000000 6547e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SP_MP_START_CODE_MASK 0xFF000000 6647e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_AP_START_CODE 0x00000100 6747e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_AP_START_CODE_MASK 0xFFFFFF00 6847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_C_PROFILE_MASK 0xF0 6947e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_B_LEVEL_MASK 0xE0000000 7047e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SIMPLE_PROFILE 0 7147e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_MAIN_PROFILE 1 7247e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_ADVANCE_PROFILE 3 7347e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SIMPLE_PROFILE_LOW_LEVEL 0 7447e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SIMPLE_PROFILE_MED_LEVEL 2 7547e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_C_LEN 4 7647e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_C_POS 8 7747e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_A_POS 12 7847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_STRUCT_B_POS 24 7947e37c4428509524ee576920a98381f3e4872493Nick Pelly#define VC1_SEQ_LAYER_SIZE 36 8047e37c4428509524ee576920a98381f3e4872493Nick Pelly 818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define SZ_4K 0x1000 828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define SZ_1M 0x100000 838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 84e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifndef ION_FLAG_CP_BITSTREAM 85e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define ION_FLAG_CP_BITSTREAM 0 86e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 87e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 88e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifndef ION_FLAG_CP_PIXEL 89e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define ION_FLAG_CP_PIXEL 0 90e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 91e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 92e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#undef MEM_HEAP_ID 93e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 94e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef MASTER_SIDE_CP 95e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 96e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MEM_HEAP_ID ION_SECURE_HEAP_ID 97e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_ALIGN SZ_4K 98e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_FLAGS_INPUT_BUFFER (ION_SECURE | ION_FLAG_CP_PIXEL) 99e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_FLAGS_OUTPUT_BUFFER (ION_SECURE | ION_FLAG_CP_BITSTREAM) 100e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 101e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else //SLAVE_SIDE_CP 102e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 103e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define MEM_HEAP_ID ION_CP_MM_HEAP_ID 104e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_ALIGN SZ_1M 105e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_FLAGS_INPUT_BUFFER ION_SECURE 106e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#define SECURE_FLAGS_OUTPUT_BUFFER ION_SECURE 107e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 108e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 109e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavantypedef struct OMXComponentCapabilityFlagsType { 11147e37c4428509524ee576920a98381f3e4872493Nick Pelly ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS 11216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan OMX_U32 nSize; 11316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan OMX_VERSIONTYPE nVersion; 11447e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iIsOMXComponentMultiThreaded; 11547e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc; 11647e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc; 11747e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentSupportsMovableInputBuffers; 11847e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentSupportsPartialFrames; 11947e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentUsesNALStartCodes; 12047e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentCanHandleIncompleteFrames; 12147e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentUsesFullAVCFrames; 12247e37c4428509524ee576920a98381f3e4872493Nick Pelly 12347e37c4428509524ee576920a98381f3e4872493Nick Pelly} OMXComponentCapabilityFlagsType; 12447e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347 125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 12647e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid* message_thread(void *input) 12747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 12861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video* omx = reinterpret_cast<omx_video*>(input); 12961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char id; 13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int n; 13161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 132e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin fd_set readFds; 133e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int res = 0; 134e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin struct timeval tv; 135e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 136e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("omx_venc: message thread start"); 13761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan prctl(PR_SET_NAME, (unsigned long)"VideoEncMsgThread", 0, 0, 0); 138e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin while (!omx->msg_thread_stop) { 139e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 140e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin tv.tv_sec = 2; 141e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin tv.tv_usec = 0; 142e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 143e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin FD_ZERO(&readFds); 144e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin FD_SET(omx->m_pipe_in, &readFds); 145e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 146e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin res = select(omx->m_pipe_in + 1, &readFds, NULL, NULL, &tv); 147e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (res < 0) { 148e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("select() ERROR: %s", strerror(errno)); 149e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin continue; 150e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else if (res == 0 /*timeout*/ || omx->msg_thread_stop) { 151e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin continue; 152e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 153e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan n = read(omx->m_pipe_in, &id, 1); 15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (0 == n) { 15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 15847e37c4428509524ee576920a98381f3e4872493Nick Pelly 15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (1 == n) { 16061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->process_event_cb(omx, id); 16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 16247e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef QLE_BUILD 16361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (n < 0) break; 16447e37c4428509524ee576920a98381f3e4872493Nick Pelly#else 165e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if ((n < 0) && (errno != EINTR)) { 166e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("ERROR: read from pipe failed, ret %d errno %d", n, errno); 167e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 168e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 16947e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif 17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 171e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("omx_venc: message thread stop"); 17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 17347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 17447e37c4428509524ee576920a98381f3e4872493Nick Pelly 17547e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid post_message(omx_video *omx, unsigned char id) 17647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 1778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("omx_venc: post_message %d", id); 178e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int ret_value; 179e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ret_value = write(omx->m_pipe_out, &id, 1); 180e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (ret_value <= 0) { 181e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("post_message to pipe failed : %s", strerror(errno)); 182e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else { 183e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("post_message to pipe done %d",ret_value); 184e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 18547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 18647e37c4428509524ee576920a98381f3e4872493Nick Pelly 18747e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx_cmd_queue destructor 18847e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::omx_cmd_queue::~omx_cmd_queue() 18947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 19061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Nothing to do 19147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 19247e37c4428509524ee576920a98381f3e4872493Nick Pelly 19347e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue constructor 19447e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::omx_cmd_queue::omx_cmd_queue(): m_read(0),m_write(0),m_size(0) 19547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(m_q,0,sizeof(omx_event)*OMX_CORE_CONTROL_CMDQ_SIZE); 19747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 19847e37c4428509524ee576920a98381f3e4872493Nick Pelly 19947e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue insert 2008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::omx_cmd_queue::insert_entry(unsigned long p1, unsigned long p2, unsigned long id) 20147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 20261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ret = true; 20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_size < OMX_CORE_CONTROL_CMDQ_SIZE) { 20461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_q[m_write].id = id; 20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_q[m_write].param1 = p1; 20661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_q[m_write].param2 = p2; 20761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_write++; 20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_size ++; 20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_write >= OMX_CORE_CONTROL_CMDQ_SIZE) { 21061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_write = 0; 21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = false; 2148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR!!! Command Queue Full"); 21561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 21661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 21747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 21847e37c4428509524ee576920a98381f3e4872493Nick Pelly 21947e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue pop 2208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::omx_cmd_queue::pop_entry(unsigned long *p1, unsigned long *p2, unsigned long *id) 22147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 22261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ret = true; 22361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_size > 0) { 22461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *id = m_q[m_read].id; 22561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *p1 = m_q[m_read].param1; 22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *p2 = m_q[m_read].param2; 22761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Move the read pointer ahead 22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ++m_read; 22961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan --m_size; 23061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_read >= OMX_CORE_CONTROL_CMDQ_SIZE) { 23161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_read = 0; 23261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 23361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = false; 23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 23661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 23747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 23847e37c4428509524ee576920a98381f3e4872493Nick Pelly 23947e37c4428509524ee576920a98381f3e4872493Nick Pelly// Retrieve the first mesg type in the queue 24047e37c4428509524ee576920a98381f3e4872493Nick Pellyunsigned omx_video::omx_cmd_queue::get_q_msg_type() 24147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 24261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return m_q[m_read].id; 24347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 24447e37c4428509524ee576920a98381f3e4872493Nick Pelly 24547e37c4428509524ee576920a98381f3e4872493Nick Pelly 24647e37c4428509524ee576920a98381f3e4872493Nick Pelly 24747e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_ 24847e37c4428509524ee576920a98381f3e4872493Nick PellyVideoHeap::VideoHeap(int fd, size_t size, void* base) 24947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 25061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // dup file descriptor, map once, use pmem 25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan init(dup(fd), base, size, 0 , MEM_DEVICE); 25247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 25347e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_ 25447e37c4428509524ee576920a98381f3e4872493Nick Pelly 25547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 25661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 25761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::omx_venc 25847e37c4428509524ee576920a98381f3e4872493Nick Pelly 25961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 26061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Constructor 26147e37c4428509524ee576920a98381f3e4872493Nick Pelly 26261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 26361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None 26447e37c4428509524ee576920a98381f3e4872493Nick Pelly 26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 26661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 2686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalomx_video::omx_video(): 2698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan c2d_opened(false), 2708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan psource_frame(NULL), 2718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pdest_frame(NULL), 2728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan secure_session(false), 2738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan mEmptyEosBuffer(NULL), 2742162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan m_pipe_in(-1), 2752162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan m_pipe_out(-1), 27661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem(NULL), 27761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem(NULL), 278826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 27961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion(NULL), 28061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion(NULL), 281826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_error_propogated(false), 28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_state(OMX_StateInvalid), 28461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_app_data(NULL), 28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem(OMX_FALSE), 28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_output_pmem(OMX_FALSE), 287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_sExtraData(0), 2888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_input_msg_id(OMX_COMPONENT_GENERATE_ETB), 28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr(NULL), 29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr(NULL), 29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_flush_progress (false), 29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_flush_progress (false), 29361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_use_buffer (false), 29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_use_buffer (false), 29561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_input_buffers(0), 29661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers(0), 29761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_bm_count(0), 29831cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara m_client_out_bm_count(0), 2999f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara m_client_in_bm_count(0), 30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_bm_count(0), 30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_flags(0), 30261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_count(0), 30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_fbd_count(0), 304f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_event_port_settings_sent(false), 305e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin hw_overload(false), 306e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_graphicBufferSize(0) 30747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 3088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_video(): Inside Constructor()"); 30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&m_cmp,0,sizeof(m_cmp)); 31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&m_pCallbacks,0,sizeof(m_pCallbacks)); 31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan async_thread_created = false; 31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan msg_thread_created = false; 313e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin msg_thread_stop = false; 31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 315f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan mUsesColorConversion = false; 31661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_init(&m_lock, NULL); 31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_init(&m_cmd_lock,0,0); 318f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("meta_buffer_hdr = %p", meta_buffer_hdr); 319f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara 320f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara pthread_mutex_init(&m_buf_lock, NULL); 32147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 32247e37c4428509524ee576920a98381f3e4872493Nick Pelly 32347e37c4428509524ee576920a98381f3e4872493Nick Pelly 32447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 32561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::~omx_venc 32747e37c4428509524ee576920a98381f3e4872493Nick Pelly 32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Destructor 33047e37c4428509524ee576920a98381f3e4872493Nick Pelly 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None 33347e37c4428509524ee576920a98381f3e4872493Nick Pelly 33461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 33747e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::~omx_video() 33847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 3398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("~omx_video(): Inside Destructor()"); 340e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (msg_thread_created) { 341e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin msg_thread_stop = true; 342e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin post_message(this, OMX_COMPONENT_CLOSE_MSG); 343e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("omx_video: Waiting on Msg Thread exit"); 34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_join(msg_thread_id,NULL); 345e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 346e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin close(m_pipe_in); 347e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin close(m_pipe_out); 348e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_pipe_in = -1; 349e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_pipe_out = -1; 3508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_video: Waiting on Async Thread exit"); 35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*For V4L2 based drivers, pthread_join is done in device_close 35261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * so no need to do it here*/ 35361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifndef _MSM8974_ 35461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (async_thread_created) 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_join(async_thread_id,NULL); 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_destroy(&m_lock); 35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_destroy(&m_cmd_lock); 359f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("m_etb_count = %" PRIu64 ", m_fbd_count = %" PRIu64, m_etb_count, 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_fbd_count); 361f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara 362f56db36a42e50bfca7dd0e8d80cee8233daf61d2Santhosh Behara pthread_mutex_destroy(&m_buf_lock); 3638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_video: Destructor exit"); 364f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("Exiting OMX Video Encoder ..."); 36547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 36647e37c4428509524ee576920a98381f3e4872493Nick Pelly 36747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::OMXCntrlProcessMsgCb 37047e37c4428509524ee576920a98381f3e4872493Nick Pelly 37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 37261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan IL Client callbacks are generated through this routine. The decoder 37361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan provides the thread context for this routine. 37447e37c4428509524ee576920a98381f3e4872493Nick Pelly 37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ctxt -- Context information related to the self. 37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan id -- Event identifier. This could be any of the following: 37861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1. Command completion event 37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2. Buffer done callback event 38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3. Frame done callback event 38147e37c4428509524ee576920a98381f3e4872493Nick Pelly 38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 38447e37c4428509524ee576920a98381f3e4872493Nick Pelly 38561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 38647e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid omx_video::process_event_cb(void *ctxt, unsigned char id) 38747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 3888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1; // Parameter - 1 3898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2; // Parameter - 2 3908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident; 39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned qsize=0; // qsize 39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video *pThis = (omx_video *) ctxt; 39347e37c4428509524ee576920a98381f3e4872493Nick Pelly 39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pThis) { 3958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ProcessMsgCb:Context is incorrect; bailing out"); 39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return; 39761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 39847e37c4428509524ee576920a98381f3e4872493Nick Pelly 39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Protect the shared queue data structure 40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan do { 40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Read the message id's from the queue*/ 40247e37c4428509524ee576920a98381f3e4872493Nick Pelly 40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&pThis->m_lock); 40461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qsize = pThis->m_cmd_q.m_size; 40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize) { 40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_cmd_q.pop_entry(&p1,&p2,&ident); 40747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 40847e37c4428509524ee576920a98381f3e4872493Nick Pelly 40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize == 0) { 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qsize = pThis->m_ftb_q.m_size; 41161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize) { 41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_ftb_q.pop_entry(&p1,&p2,&ident); 413826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 41447e37c4428509524ee576920a98381f3e4872493Nick Pelly } 41547e37c4428509524ee576920a98381f3e4872493Nick Pelly 41661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize == 0) { 41761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qsize = pThis->m_etb_q.m_size; 41861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize) { 41961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_etb_q.pop_entry(&p1,&p2,&ident); 420826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 42147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 42247e37c4428509524ee576920a98381f3e4872493Nick Pelly 42361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&pThis->m_lock); 42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*process message if we have one*/ 42661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize > 0) { 42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan id = ident; 42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (id) { 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EVENT: 43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (p1) { 43261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_CommandStateSet: 43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = (OMX_STATETYPE) p2; 4348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Process -> state set to %d", pThis->m_state); 43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete, p1, p2, NULL); 43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_EventError: 4408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_EventError: p2 = %lu", p2); 4418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (p2 == (unsigned)OMX_ErrorHardware) { 44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventError,OMX_ErrorHardware,0,NULL); 44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 44561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 4468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_EventError, p2, 0, 0); 44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_CommandPortDisable: 4528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Process -> Port %lu set to PORT_STATE_DISABLED" \ 4538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "state", p2); 45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete, p1, p2, NULL ); 45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_CommandPortEnable: 4588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Process ->Port %lu set PORT_STATE_ENABLED state" \ 45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan , p2); 46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,\ 46161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete, p1, p2, NULL ); 46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 4658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("process_event_cb forwarding EventCmdComplete %lu", p1); 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete, p1, p2, NULL ); 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 4728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ProcessMsgCb NULL callbacks"); 47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_ETB_OPQ: 4768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_ETB_OPQ"); 47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->empty_this_buffer_opaque((OMX_HANDLETYPE)p1,\ 47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) { 4798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy() failed!"); 48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 483f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case OMX_COMPONENT_GENERATE_ETB: { 484f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_ERRORTYPE iret; 485e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_ETB"); 486f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan iret = pThis->empty_this_buffer_proxy((OMX_HANDLETYPE)p1, (OMX_BUFFERHEADERTYPE *)p2); 487f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (iret == OMX_ErrorInsufficientResources) { 488f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("empty_this_buffer_proxy failure due to HW overload"); 489f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan pThis->omx_report_hw_overload (); 490f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (iret != OMX_ErrorNone) { 491f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("empty_this_buffer_proxy failure"); 492e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pThis->omx_report_error (); 493e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 494f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_FTB: 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( pThis->fill_this_buffer_proxy((OMX_HANDLETYPE)p1,\ 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) { 5008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: FTBProxy() failed!"); 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 50361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_COMMAND: 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->send_command_proxy(&pThis->m_cmp,(OMX_COMMANDTYPE)p1,\ 50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_U32)p2,(OMX_PTR)NULL); 50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EBD: 51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( pThis->empty_buffer_done(&pThis->m_cmp, 51261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone) { 5138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: empty_buffer_done() failed!"); 51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 51561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 51761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_FBD: 51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( pThis->fill_buffer_done(&pThis->m_cmp, 52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone ) { 5218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: fill_buffer_done() failed!"); 52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH: 52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 52861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->input_flush_progress = false; 529f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("m_etb_count at i/p flush = %" PRIu64, m_etb_count); 53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_count = 0; 53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if we need generate event for Flush done*/ 53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags, 53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_INPUT_FLUSH_PENDING)) { 53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_INPUT_FLUSH_PENDING); 53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandFlush, 53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN,NULL ); 53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags, 54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_IDLE_PENDING)) { 54161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pThis->output_flush_progress) { 5428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("dev_stop called after input flush complete"); 54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_stop() != 0) { 5448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_stop() failed in i/p flush!"); 54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 54961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH: 55461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->output_flush_progress = false; 556f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("m_fbd_count at o/p flush = %" PRIu64, m_fbd_count); 55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_fbd_count = 0; 55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if we need generate event for Flush done*/ 56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags, 56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_FLUSH_PENDING)) { 56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_OUTPUT_FLUSH_PENDING); 56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandFlush, 56661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_OUT,NULL ); 56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags ,OMX_COMPONENT_IDLE_PENDING)) { 5688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("dev_stop called after Output flush complete"); 56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pThis->input_flush_progress) { 57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_stop() != 0) { 5718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_stop() failed in o/p flush!"); 57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_START_DONE: 5808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE msg"); 58161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 5838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE Success"); 58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_EXECUTE_PENDING)) { 5858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE Move to \ 58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan executing"); 58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_EXECUTE_PENDING); 58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = OMX_StateExecuting; 59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandStateSet, 59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_StateExecuting, NULL); 59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags, 59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_PAUSE_PENDING)) { 59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_pause()) { 5968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_pause() failed in Start Done!"); 59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags, 60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_LOADED_START_PENDING)) { 60161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_loaded_start_done()) { 60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("successful loaded Start Done!"); 60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: failed in loaded Start Done!"); 60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_LOADED_START_PENDING); 60861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 609f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("ERROR: unknown flags=%" PRIx64, pThis->m_flags); 61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 61161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 6128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Event Handler callback is NULL"); 61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_PAUSE_DONE: 6178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_PAUSE_DONE msg"); 61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_PAUSE_PENDING)) { 62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Send the callback now 62161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->complete_pending_buffer_done_cbs(); 6228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("omx_video::process_event_cb() Sending PAUSE complete after all pending EBD/FBD"); 62361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_PAUSE_PENDING); 62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = OMX_StatePause; 62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandStateSet, 62761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_StatePause, NULL); 62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 63161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 63361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_RESUME_DONE: 6348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_RESUME_DONE msg"); 63561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 63661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_EXECUTE_PENDING)) { 63761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 63861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_EXECUTE_PENDING); 63961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = OMX_StateExecuting; 64061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 64161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandStateSet, 64261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_StateExecuting,NULL); 64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 64561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 64861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_STOP_DONE: 6498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_STOP_DONE msg"); 65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 65161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->complete_pending_buffer_done_cbs(); 65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_IDLE_PENDING)) { 65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 65461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_IDLE_PENDING); 65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = OMX_StateIdle; 65661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp,pThis->m_app_data, 65761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandStateSet, 65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_StateIdle,NULL); 65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags, 66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_LOADED_STOP_PENDING)) { 66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_loaded_stop_done()) { 66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("successful loaded Stop Done!"); 66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 66461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: failed in loaded Stop Done!"); 66561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 66661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 66761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_LOADED_STOP_PENDING); 66861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 669f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("ERROR: unknown flags=%" PRIx64, pThis->m_flags); 67061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_HARDWARE_ERROR: 6768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_COMPONENT_GENERATE_HARDWARE_ERROR!"); 67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 67861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 6796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_LTRUSE_FAILED: 68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_COMPONENT_GENERATE_LTRUSE_FAILED!"); 68261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Sending QOMX_ErrorLTRUseFailed, p2 = 0x%x", p2); 68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler( 68561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &pThis->m_cmp, pThis->m_app_data, 68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventError, QOMX_ErrorLTRUseFailed, NULL, NULL); 68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 68861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 6896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 690e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING: 691e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("OMX_COMPONENT_GENERATE_UNSUPPORTED_SETTING"); 692e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pThis->omx_report_unsupported_setting(); 693e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 694e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 695e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD: 696e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("OMX_COMPONENT_GENERATE_HARDWARE_OVERLOAD"); 697e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pThis->omx_report_hw_overload(); 698e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 699e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 7018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("process_event_cb unknown msg id 0x%02x", id); 70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 70547e37c4428509524ee576920a98381f3e4872493Nick Pelly 70661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&pThis->m_lock); 70761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qsize = pThis->m_cmd_q.m_size + pThis->m_ftb_q.m_size +\ 70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_etb_q.m_size; 70947e37c4428509524ee576920a98381f3e4872493Nick Pelly 71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&pThis->m_lock); 71147e37c4428509524ee576920a98381f3e4872493Nick Pelly 71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } while (qsize>0); 7138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("exited the while loop"); 71447e37c4428509524ee576920a98381f3e4872493Nick Pelly 71547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 71647e37c4428509524ee576920a98381f3e4872493Nick Pelly 71747e37c4428509524ee576920a98381f3e4872493Nick Pelly 71847e37c4428509524ee576920a98381f3e4872493Nick Pelly 71947e37c4428509524ee576920a98381f3e4872493Nick Pelly 72047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 72261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::GetComponentVersion 72347e37c4428509524ee576920a98381f3e4872493Nick Pelly 72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 72561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns the component version. 72647e37c4428509524ee576920a98381f3e4872493Nick Pelly 72761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan TBD. 72947e37c4428509524ee576920a98381f3e4872493Nick Pelly 73061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ErrorNone. 73247e37c4428509524ee576920a98381f3e4872493Nick Pelly 73361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 73447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_component_version 73547e37c4428509524ee576920a98381f3e4872493Nick Pelly( 73661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_STRING componentName, 73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_VERSIONTYPE* componentVersion, 73961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_VERSIONTYPE* specVersion, 74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_UUIDTYPE* componentUUID 74161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) 74247e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 7438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 7448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)componentName; 7458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)componentVersion; 7468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)componentUUID; 74761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 7488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Comp Version in Invalid State"); 74961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* TBD -- Return the proper version */ 75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (specVersion) { 75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan specVersion->nVersion = OMX_SPEC_VERSION; 75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 75647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 75747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::SendCommand 76047e37c4428509524ee576920a98381f3e4872493Nick Pelly 76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns zero if all the buffers released.. 76347e37c4428509524ee576920a98381f3e4872493Nick Pelly 76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 76561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 76647e37c4428509524ee576920a98381f3e4872493Nick Pelly 76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 76947e37c4428509524ee576920a98381f3e4872493Nick Pelly 77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 77147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::send_command(OMX_IN OMX_HANDLETYPE hComp, 77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_COMMANDTYPE cmd, 77361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 param1, 77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR cmdData 77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) 77647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 7778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 7798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Send Command in Invalid State"); 78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (cmd == OMX_CommandFlush || cmd == OMX_CommandPortDisable || cmd == OMX_CommandPortEnable) { 7848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if ((param1 != (OMX_U32)PORT_INDEX_IN) && (param1 != (OMX_U32)PORT_INDEX_OUT) && (param1 != (OMX_U32)PORT_INDEX_BOTH)) { 7858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->bad port index"); 78661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (cmd == OMX_CommandMarkBuffer) { 79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 != PORT_INDEX_IN) { 7918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->bad port index"); 79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 79361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!cmdData) { 79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->param is null"); 79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 8008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event((unsigned long)cmd,(unsigned long)param1,OMX_COMPONENT_GENERATE_COMMAND); 80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_wait(&m_cmd_lock); 80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 80347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 80447e37c4428509524ee576920a98381f3e4872493Nick Pelly 80547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::SendCommand 80847e37c4428509524ee576920a98381f3e4872493Nick Pelly 80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns zero if all the buffers released.. 81147e37c4428509524ee576920a98381f3e4872493Nick Pelly 81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 81447e37c4428509524ee576920a98381f3e4872493Nick Pelly 81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 81747e37c4428509524ee576920a98381f3e4872493Nick Pelly 81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 81947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::send_command_proxy(OMX_IN OMX_HANDLETYPE hComp, 82061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_COMMANDTYPE cmd, 82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 param1, 82261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR cmdData 82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) 82447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 8258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 8268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)cmdData; 8278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STATETYPE eState = (OMX_STATETYPE) param1; 83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int bFlag = 1; 83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (cmd == OMX_CommandStateSet) { 83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is Loaded */ 83561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateLoaded) { 83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateIdle) { 83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //if all buffers are allocated or all ports disabled 83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocate_done() || 84061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ( m_sInPortDef.bEnabled == OMX_FALSE && m_sOutPortDef.bEnabled == OMX_FALSE)) { 8418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->Idle"); 84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->Idle-Pending"); 84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_IDLE_PENDING); 84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to Loaded */ 85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateLoaded) { 8518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Loaded"); 85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState,\ 85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 85561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to WaitForResources */ 85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Since error is None , we will post an event 85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan at the end of this function definition */ 8608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->WaitForResources"); 86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to Executing */ 86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateExecuting) { 8648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Executing"); 86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 86961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to Pause */ 87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 8718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Pause"); 87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 87561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to Invalid */ 87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 8788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Invalid"); 87961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->%d Not Handled",\ 88361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eState); 88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is IDLE */ 89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StateIdle) { 89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateLoaded) { 89361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_done()) { 89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* 89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Since error is None , we will post an event at the end 89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan of this function definition 89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan */ 8988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Loaded"); 89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_stop() != 0) { 9008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_stop() failed at Idle --> Loaded"); 90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Loaded-Pending"); 90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_LOADING_PENDING); 90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 90961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to Executing */ 91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateExecuting) { 91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( dev_start() ) { 9138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_start() failed in SCP on Idle --> Exe"); 91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_error (); 91561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_EXECUTE_PENDING); 9188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Executing"); 91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 92261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_start_done(); 92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to Idle */ 92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateIdle) { 9268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->Idle"); 92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState,\ 92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 92961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to WaitForResources */ 93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 9338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->WaitForResources"); 93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 93661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to Pause */ 93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 94061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*To pause the Video core we need to start the driver*/ 94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( dev_start() ) { 9428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_start() failed in SCP on Idle --> Pause"); 94361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_error (); 94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_PAUSE_PENDING); 9478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Pause"); 94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 95061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to Invalid */ 95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 9538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->Invalid"); 95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle --> %d Not Handled",eState); 95861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 96147e37c4428509524ee576920a98381f3e4872493Nick Pelly 96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /******************************/ 96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is Executing */ 96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /******************************/ 96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StateExecuting) { 96661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Idle */ 96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateIdle) { 96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Since error is None , we will post an event 96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan at the end of this function definition 97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan */ 9718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Executing --> Idle"); 97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //here this should be Pause-Idle pending and should be cleared when flush is complete and change the state to Idle 97361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_IDLE_PENDING); 97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(OMX_ALL); 97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 97661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Paused */ 97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 97961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 98061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_pause()) { 9818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_pause() failed in SCP on Exe --> Pause"); 98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorHardware,\ 98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_PAUSE_PENDING); 9878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Executing-->Pause"); 98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Loaded */ 99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateLoaded) { 9938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Loaded"); 99461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to WaitForResources */ 99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 10008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> WaitForResources"); 100161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Executing */ 100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateExecuting) { 10078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Executing"); 100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState,\ 100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 101061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Invalid */ 101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 10148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Invalid"); 101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> %d Not Handled",eState); 101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 102147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is Pause */ 102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StatePause) { 102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to Executing */ 102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateExecuting) { 10288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Pause --> Executing"); 102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( dev_resume() ) { 103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorHardware,\ 103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_EXECUTE_PENDING); 10358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Pause-->Executing"); 10368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event (0, 0, OMX_COMPONENT_GENERATE_RESUME_DONE); 103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to Idle */ 104161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateIdle) { 104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Since error is None , we will post an event 104361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan at the end of this function definition */ 10448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Pause --> Idle"); 104561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_IDLE_PENDING); 104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(OMX_ALL); 104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to loaded */ 105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateLoaded) { 10518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Pause --> loaded"); 105261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 105561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to WaitForResources */ 105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 10588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Pause --> WaitForResources"); 105961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 106361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to Pause */ 106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 10658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Pause --> Pause"); 106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState,\ 106761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 106861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 107061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to Invalid */ 107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 10728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Pause --> Invalid"); 107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Paused --> %d Not Handled",eState); 107761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 107947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 108161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is WaitForResources */ 108261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StateWaitForResources) { 108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Loaded */ 108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateLoaded) { 108661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Since error is None , we will post an event 108761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan at the end of this function definition */ 10888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: WaitForResources-->Loaded"); 108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 109061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to WaitForResources */ 109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 10928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->WaitForResources"); 109361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState, 109461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 109761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Executing */ 109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateExecuting) { 10998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Executing"); 110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 110261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Pause */ 110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 11068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Pause"); 110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Invalid */ 111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 11138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Invalid"); 111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Loaded - 111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan is NOT tested by Khronos TS */ 111947e37c4428509524ee576920a98381f3e4872493Nick Pelly 112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 11218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: %d --> %d(Not Handled)",m_state,eState); 112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 112347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /********************************/ 112661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is Invalid */ 112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*******************************/ 112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StateInvalid) { 112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* State Transition from Inavlid to any state */ 113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == (OMX_StateLoaded || OMX_StateWaitForResources 113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || OMX_StateIdle || OMX_StateExecuting 113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || OMX_StatePause || OMX_StateInvalid)) { 11338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Invalid -->Loaded"); 113461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorInvalidState,\ 113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 113747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 113861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (cmd == OMX_CommandFlush) { 113961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (0 == param1 || OMX_ALL == param1) { 114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_FLUSH_PENDING); 114147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (1 == param1 || OMX_ALL == param1) { 114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //generate output flush event only. 114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_FLUSH_PENDING); 114547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 114647e37c4428509524ee576920a98381f3e4872493Nick Pelly 114761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(param1); 114847e37c4428509524ee576920a98381f3e4872493Nick Pelly bFlag = 0; 114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ( cmd == OMX_CommandPortEnable) { 115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 == PORT_INDEX_IN || param1 == OMX_ALL) { 115161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bEnabled = OMX_TRUE; 115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( (m_state == OMX_StateLoaded && 115461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) 115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || allocate_input_done()) { 115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable,PORT_INDEX_IN, 115761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 11598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Disabled-->Enabled Pending"); 116061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_ENABLE_PENDING); 116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 116261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 116361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 116447e37c4428509524ee576920a98381f3e4872493Nick Pelly } 116561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 == PORT_INDEX_OUT || param1 == OMX_ALL) { 116661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bEnabled = OMX_TRUE; 116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( (m_state == OMX_StateLoaded && 116961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) 117061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || (allocate_output_done())) { 117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable,PORT_INDEX_OUT, 117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 117361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 117461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 11758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Disabled-->Enabled Pending"); 117661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_ENABLE_PENDING); 117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 118161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (cmd == OMX_CommandPortDisable) { 118261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 == PORT_INDEX_IN || param1 == OMX_ALL) { 118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bEnabled = OMX_FALSE; 118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((m_state == OMX_StateLoaded || m_state == OMX_StateIdle) 118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && release_input_done()) { 118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortDisable,PORT_INDEX_IN, 118761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 118961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_DISABLE_PENDING); 119061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StatePause ||m_state == OMX_StateExecuting) { 119161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(PORT_INDEX_IN); 119261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 119361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 119461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 119561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 119661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 119761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 119861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 == PORT_INDEX_OUT || param1 == OMX_ALL) { 119961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bEnabled = OMX_FALSE; 120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 120161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((m_state == OMX_StateLoaded || m_state == OMX_StateIdle) 120261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && release_output_done()) { 120361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortDisable,PORT_INDEX_OUT,\ 120461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 120561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 120661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_DISABLE_PENDING); 120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StatePause ||m_state == OMX_StateExecuting) { 120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(PORT_INDEX_OUT); 120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 121247e37c4428509524ee576920a98381f3e4872493Nick Pelly 121361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 12168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Command received other than StateSet (%d)",cmd); 121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNotImplemented; 121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone && bFlag) { 122061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(cmd,eState,OMX_COMPONENT_GENERATE_EVENT); 122161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_post(&m_cmd_lock); 122361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 122447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 122547e37c4428509524ee576920a98381f3e4872493Nick Pelly 122647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 122761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 122861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ExecuteOmxFlush 122947e37c4428509524ee576920a98381f3e4872493Nick Pelly 123061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 123161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Executes the OMX flush. 123247e37c4428509524ee576920a98381f3e4872493Nick Pelly 123361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 123461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan flushtype - input flush(1)/output flush(0)/ both. 123547e37c4428509524ee576920a98381f3e4872493Nick Pelly 123661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 123761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 123847e37c4428509524ee576920a98381f3e4872493Nick Pelly 123961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 124047e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_omx_flush(OMX_U32 flushType) 124147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 12438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_omx_flush - %u", (unsigned int)flushType); 12446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 124561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* XXX: The driver/hardware does not support flushing of individual ports 124661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * in all states. So we pretty much need to flush both ports internally, 124761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * but client should only get the FLUSH_(INPUT|OUTPUT)_DONE for the one it 124861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * requested. Since OMX_COMPONENT_(OUTPUT|INPUT)_FLUSH_PENDING isn't set, 124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * we automatically omit sending the FLUSH done for the "opposite" port. */ 125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 12516eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal input_flush_progress = true; 12526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal output_flush_progress = true; 12536eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal bRet = execute_flush_all(); 12546eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (flushType == 0 || flushType == OMX_ALL) { 125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_flush_progress = true; 125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //flush input only 125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = execute_input_flush(); 125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (flushType == 1 || flushType == OMX_ALL) { 126161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //flush output only 126261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_flush_progress = true; 126361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = execute_output_flush(); 126461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 12656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 126661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 126747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 126847e37c4428509524ee576920a98381f3e4872493Nick Pelly/*========================================================================= 126947e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION : execute_output_flush 127047e37c4428509524ee576920a98381f3e4872493Nick Pelly 127147e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION 127261a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at OUTPUT PORT. 127347e37c4428509524ee576920a98381f3e4872493Nick Pelly 127447e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS 127561a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone. 127647e37c4428509524ee576920a98381f3e4872493Nick Pelly 127747e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE 127861a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false 127947e37c4428509524ee576920a98381f3e4872493Nick Pelly==========================================================================*/ 128047e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_output_flush(void) 128147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 12828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1 = 0; // Parameter - 1 12838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2 = 0; // Parameter - 2 12848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident = 0; 128561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = true; 128661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 128761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate FBD for all Buffers in the FTBq*/ 12888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_output_flush"); 128961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 129061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_ftb_q.m_size) { 129161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.pop_entry(&p1,&p2,&ident); 129261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 129361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_FTB ) { 129461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers++; 129561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2); 129661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_FBD) { 129761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1); 129861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 129961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 130061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 130161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 130261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if there are buffers with the Driver*/ 130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_flush(PORT_INDEX_OUT)) { 13048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: o/p dev_flush() Failed"); 130561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 130661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 130761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 130861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 130947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 131047e37c4428509524ee576920a98381f3e4872493Nick Pelly/*========================================================================= 131147e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION : execute_input_flush 131247e37c4428509524ee576920a98381f3e4872493Nick Pelly 131347e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION 131461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at INPUT PORT. 131547e37c4428509524ee576920a98381f3e4872493Nick Pelly 131647e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS 131761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone. 131847e37c4428509524ee576920a98381f3e4872493Nick Pelly 131947e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE 132061a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false 132147e37c4428509524ee576920a98381f3e4872493Nick Pelly==========================================================================*/ 132247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_input_flush(void) 132347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 13248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1 = 0; // Parameter - 1 13258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2 = 0; // Parameter - 2 13268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident = 0; 132761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = true; 132861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 132961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate EBD for all Buffers in the ETBq*/ 13308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_input_flush"); 133161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 133261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 133361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_etb_q.m_size) { 133461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.pop_entry(&p1,&p2,&ident); 133561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_ETB) { 133661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_input_buffers++; 133761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2); 133861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_EBD) { 133961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1); 134061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_ETB_OPQ) { 134161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,(OMX_BUFFERHEADERTYPE *)p2); 134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mUseProxyColorFormat) { 134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (psource_frame) { 134661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,psource_frame); 134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = NULL; 134861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_opq_meta_q.m_size) { 13508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1,p2,id; 135161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_meta_q.pop_entry(&p1,&p2,&id); 135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data, 135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p1); 135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 135561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pdest_frame) { 13568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_opq_pmem_q.insert_entry((unsigned long)pdest_frame,0,0); 135761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = NULL; 135861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 135961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 136061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 136161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if there are buffers with the Driver*/ 136261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_flush(PORT_INDEX_IN)) { 13638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: i/p dev_flush() Failed"); 136461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 136561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 136661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 136761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 13686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 13696eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 13706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 13716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal/*========================================================================= 13726eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalFUNCTION : execute_flush 13736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 13746eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalDESCRIPTION 137561a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at INPUT & OUTPUT PORT. 13766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 13776eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalPARAMETERS 137861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone. 13796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 13806eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalRETURN VALUE 138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false 13826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal==========================================================================*/ 13836eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 13846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_video::execute_flush_all(void) 13856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 13868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1 = 0; // Parameter - 1 13878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2 = 0; // Parameter - 2 13888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident = 0; 138961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = true; 139061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 13918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_flush_all"); 139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate EBD for all Buffers in the ETBq*/ 139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_etb_q.m_size) { 139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.pop_entry(&p1,&p2,&ident); 139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_ETB) { 139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_input_buffers++; 139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2); 140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_EBD) { 140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1); 14028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(ident == OMX_COMPONENT_GENERATE_ETB_OPQ) { 14038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,(OMX_BUFFERHEADERTYPE *)p2); 14048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 14058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 14068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(mUseProxyColorFormat) { 14078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(psource_frame) { 14088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,psource_frame); 14098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan psource_frame = NULL; 14108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 14118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan while(m_opq_meta_q.m_size) { 14128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1,p2,id; 14138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_opq_meta_q.pop_entry(&p1,&p2,&id); 14148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data, 14158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_BUFFERHEADERTYPE *)p1); 14168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 14178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(pdest_frame){ 14188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_opq_pmem_q.insert_entry((unsigned long)pdest_frame,0,0); 14198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pdest_frame = NULL; 142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 142261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate FBD for all Buffers in the FTBq*/ 14248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_output_flush"); 142561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_ftb_q.m_size) { 142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.pop_entry(&p1,&p2,&ident); 142761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_FTB ) { 142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers++; 143061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2); 143161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_FBD) { 143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1); 143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 143461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 143561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 143661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 143761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 143861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if there are buffers with the Driver*/ 143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_flush(PORT_INDEX_BOTH)) { 14408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_flush() Failed"); 144161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 144261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 144361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 144447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 144547e37c4428509524ee576920a98381f3e4872493Nick Pelly 14466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 144747e37c4428509524ee576920a98381f3e4872493Nick Pelly 144847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 144961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 145061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::SendCommandEvent 145147e37c4428509524ee576920a98381f3e4872493Nick Pelly 145261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 145361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Send the event to decoder pipe. This is needed to generate the callbacks 145461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan in decoder thread context. 145547e37c4428509524ee576920a98381f3e4872493Nick Pelly 145661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 145761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 145847e37c4428509524ee576920a98381f3e4872493Nick Pelly 145961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 146061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 146147e37c4428509524ee576920a98381f3e4872493Nick Pelly 146261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 14638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::post_event(unsigned long p1, 14648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2, 14658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long id) 146647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 14678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool bRet = false; 146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 146961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 147061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 147161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((id == OMX_COMPONENT_GENERATE_FTB) || 147261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (id == OMX_COMPONENT_GENERATE_FBD) || 147361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (id == OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH)) { 147461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.insert_entry(p1,p2,id); 147561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ((id == OMX_COMPONENT_GENERATE_ETB) || 147661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (id == OMX_COMPONENT_GENERATE_EBD) || 147761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (id == OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH)) { 147861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.insert_entry(p1,p2,id); 147961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 148061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cmd_q.insert_entry(p1,p2,id); 148161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 148261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 148361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 14848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Value of this pointer in post_event %p",this); 148561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_message(this, id); 148661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 148761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 148861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 148947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 149047e37c4428509524ee576920a98381f3e4872493Nick Pelly 149147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 149261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 149361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::GetParameter 149447e37c4428509524ee576920a98381f3e4872493Nick Pelly 149561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 149661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Get Parameter method implementation 149747e37c4428509524ee576920a98381f3e4872493Nick Pelly 149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 149961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 150047e37c4428509524ee576920a98381f3e4872493Nick Pelly 150161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 150261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Error None if successful. 150347e37c4428509524ee576920a98381f3e4872493Nick Pelly 150461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 150547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_parameter(OMX_IN OMX_HANDLETYPE hComp, 150661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_INDEXTYPE paramIndex, 150761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_PTR paramData) 150847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 15098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 151061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 151161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int height=0,width = 0; 15126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 15138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter:"); 151461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 15158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid State"); 151661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 151761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 151861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (paramData == NULL) { 15198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData"); 152061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 152161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 15228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan switch ((int)paramIndex) { 152361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPortDefinition: 152461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 152516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_PORTDEFINITIONTYPE); 152661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_PORTDEFINITIONTYPE *portDefn; 152761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData; 152861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 15298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamPortDefinition"); 153061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portDefn->nPortIndex == (OMX_U32) PORT_INDEX_IN) { 15318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan dev_get_buf_req (&m_sInPortDef.nBufferCountMin, 15328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan &m_sInPortDef.nBufferCountActual, 15338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan &m_sInPortDef.nBufferSize, 15348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sInPortDef.nPortIndex); 15358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("m_sInPortDef: size = %u, min cnt = %u, actual cnt = %u", 15368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.nBufferSize, (unsigned int)m_sInPortDef.nBufferCountMin, 15378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.nBufferCountActual); 153861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portDefn, &m_sInPortDef, sizeof(m_sInPortDef)); 153961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_ 154061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_mode_enable) { 154161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn->nBufferSize = sizeof(encoder_media_buffer_type); 154261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 154361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mUseProxyColorFormat) { 154461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn->format.video.eColorFormat = 154561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque; 154661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1547826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 154861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (portDefn->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 1549f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (m_state != OMX_StateExecuting) { 1550e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin dev_get_buf_req (&m_sOutPortDef.nBufferCountMin, 155161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 155261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 155361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 1554f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 15558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("m_sOutPortDef: size = %u, min cnt = %u, actual cnt = %u", 15568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferSize, (unsigned int)m_sOutPortDef.nBufferCountMin, 15578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferCountActual); 155861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portDefn, &m_sOutPortDef, sizeof(m_sOutPortDef)); 155961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 156061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index"); 156161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 156261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 156361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 156461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 156561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoInit: 156661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 156716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE); 156861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PORT_PARAM_TYPE *portParamType = 156961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_PORT_PARAM_TYPE *) paramData; 15708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoInit"); 157161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 157261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portParamType, &m_sPortParam, sizeof(m_sPortParam)); 157361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 15746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } 157561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoPortFormat: 157661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 157716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PORTFORMATTYPE); 157861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt = 157961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData; 15808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoPortFormat"); 158161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 158261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_IN) { 15838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned index = portFmt->nIndex; 1584e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 1585e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _UBWC_ 1586e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //we support following formats 1587e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //index 0 - Compressed (UBWC) Venus flavour of YUV420SP 1588e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //index 1 - Venus flavour of YUV420SP 1589e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //index 2 - Compressed (UBWC) Venus flavour of RGBA8888 1590e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //index 3 - Venus flavour of RGBA8888 1591e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //index 4 - opaque which internally maps to YUV420SP. 1592e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //index 5 - vannilla YUV420SP 1593e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //this can be extended in the future 1594e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int supportedFormats[] = { 1595e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin [0] = QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed, 1596e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin [1] = QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m, 1597e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin [2] = QOMX_COLOR_Format32bitRGBA8888Compressed, 1598e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin [3] = QOMX_COLOR_Format32bitRGBA8888, 1599e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin [4] = QOMX_COLOR_FormatAndroidOpaque, 1600e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin [5] = OMX_COLOR_FormatYUV420SemiPlanar, 1601e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin }; 1602e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#else 16030b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //we support two formats 16040b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //index 0 - Venus flavour of YUV420SP 16050b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //index 1 - opaque which internally maps to YUV420SP. 16060b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //index 2 - vannilla YUV420SP 16070b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //this can be extended in the future 16080b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan int supportedFormats[] = { 16090b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan [0] = QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m, 16100b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan [1] = QOMX_COLOR_FormatAndroidOpaque, 16110b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan [2] = OMX_COLOR_FormatYUV420SemiPlanar, 16120b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan }; 1613e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 1614f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (index > (sizeof(supportedFormats)/sizeof(*supportedFormats) - 1)) 161561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 161661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 161761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portFmt, &m_sInPortFormat, sizeof(m_sInPortFormat)); 16180b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan portFmt->nIndex = index; //restore index set from client 16190b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan portFmt->eColorFormat = (OMX_COLOR_FORMATTYPE)supportedFormats[index]; 162061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 162161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 162261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portFmt, &m_sOutPortFormat, sizeof(m_sOutPortFormat)); 162361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 162461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index"); 162561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 162661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 162761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 162861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 162961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoBitrate: 163061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 163116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_BITRATETYPE); 163261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData; 16338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoBitrate"); 163461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 163561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamBitrate, sizeof(m_sParamBitrate)); 163761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 163861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index"); 163961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 164061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 164161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 164261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 164361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 164461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoMpeg4: 164561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 164616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_MPEG4TYPE); 164761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData; 16488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoMpeg4"); 164961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamMPEG4, sizeof(m_sParamMPEG4)); 165061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 165161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 165261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoH263: 165361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 165416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_H263TYPE); 165561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData; 16568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoH263"); 165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamH263, sizeof(m_sParamH263)); 165861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 166061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoAvc: 166161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 166216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_AVCTYPE); 166361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData; 16648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoAvc"); 166561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamAVC, sizeof(m_sParamAVC)); 166661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 166761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 16687beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano case (OMX_INDEXTYPE)OMX_IndexParamVideoVp8: 16697beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano { 167016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_VP8TYPE); 16717beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_VIDEO_PARAM_VP8TYPE* pParam = (OMX_VIDEO_PARAM_VP8TYPE*)paramData; 16728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoVp8"); 16737beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano memcpy(pParam, &m_sParamVP8, sizeof(m_sParamVP8)); 16747beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano break; 16757beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 1676f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case (OMX_INDEXTYPE)OMX_IndexParamVideoHevc: 1677f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 167816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_HEVCTYPE); 1679f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_VIDEO_PARAM_HEVCTYPE* pParam = (OMX_VIDEO_PARAM_HEVCTYPE*)paramData; 1680f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoHevc"); 1681f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(pParam, &m_sParamHEVC, sizeof(m_sParamHEVC)); 1682f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 1683f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 168461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoProfileLevelQuerySupported: 168561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 168616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE); 168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData; 16888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported"); 168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = get_supported_profile_level(pParam); 16908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (eRet && eRet != OMX_ErrorNoMore) 16918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_supported_profile_level %u, %u", 16928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->eProfile, (unsigned int)pParam->eLevel); 169361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 169461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoProfileLevelCurrent: 169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 169716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE); 169861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData; 16998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelCurrent"); 170061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamProfileLevel, sizeof(m_sParamProfileLevel)); 170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 170261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 170361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Component should support this port definition*/ 170461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamAudioInit: 170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 170616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE); 170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PORT_PARAM_TYPE *audioPortParamType = (OMX_PORT_PARAM_TYPE *) paramData; 17088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamAudioInit"); 170961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(audioPortParamType, &m_sPortParam_audio, sizeof(m_sPortParam_audio)); 171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 171161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Component should support this port definition*/ 171361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamImageInit: 171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 171516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE); 171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PORT_PARAM_TYPE *imagePortParamType = (OMX_PORT_PARAM_TYPE *) paramData; 17178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamImageInit"); 171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(imagePortParamType, &m_sPortParam_img, sizeof(m_sPortParam_img)); 171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 172161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 172261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Component should support this port definition*/ 172361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamOtherInit: 172461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 17258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: get_parameter: OMX_IndexParamOtherInit %08x", paramIndex); 172661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedIndex; 172761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 172861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 172961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamStandardComponentRole: 173061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 173116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_COMPONENTROLETYPE); 173261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_COMPONENTROLETYPE *comp_role; 173361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData; 173461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role->nVersion.nVersion = OMX_SPEC_VERSION; 173561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role->nSize = sizeof(*comp_role); 173661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 17378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Getparameter: OMX_IndexParamStandardComponentRole %d",paramIndex); 1738ce256dab580d6601e34cf59642f642bd496952aePatrick Tjin strlcpy((char*)comp_role->cRole,(const char*)m_cRole,OMX_MAX_STRINGNAME_SIZE); 173961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 174061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 174161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Added for parameter test */ 174261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPriorityMgmt: 174361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 174416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PRIORITYMGMTTYPE); 174561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PRIORITYMGMTTYPE *priorityMgmType = (OMX_PRIORITYMGMTTYPE *) paramData; 17468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamPriorityMgmt"); 174761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(priorityMgmType, &m_sPriorityMgmt, sizeof(m_sPriorityMgmt)); 174861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 174961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 175061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Added for parameter test */ 175161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamCompBufferSupplier: 175261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 175316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_BUFFERSUPPLIERTYPE); 175461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData; 17558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamCompBufferSupplier"); 175661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bufferSupplierType->nPortIndex ==(OMX_U32) PORT_INDEX_IN) { 175761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(bufferSupplierType, &m_sInBufSupplier, sizeof(m_sInBufSupplier)); 175861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (bufferSupplierType->nPortIndex ==(OMX_U32) PORT_INDEX_OUT) { 175961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(bufferSupplierType, &m_sOutBufSupplier, sizeof(m_sOutBufSupplier)); 176061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 176161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index"); 176261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 176361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 176461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 176561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 176661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 176761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoQuantization: 176861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 176916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_QUANTIZATIONTYPE); 177061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData; 17718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoQuantization"); 177261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(session_qp, &m_sSessionQuantization, sizeof(m_sSessionQuantization)); 177361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 177461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 177561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 177661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamVideoQPRange: 177761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 177816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_QPRANGETYPE); 177961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE*) paramData; 17808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamVideoQPRange"); 178161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(qp_range, &m_sSessionQPRange, sizeof(m_sSessionQPRange)); 178261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 178361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 178461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 178561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoErrorCorrection: 178661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 178716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE); 178861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* errorresilience = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData; 17898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection"); 179061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan errorresilience->bEnableHEC = m_sErrorCorrection.bEnableHEC; 179161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan errorresilience->bEnableResync = m_sErrorCorrection.bEnableResync; 179261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan errorresilience->nResynchMarkerSpacing = m_sErrorCorrection.nResynchMarkerSpacing; 179361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 179461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 179561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoIntraRefresh: 179661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 179716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_INTRAREFRESHTYPE); 179861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_INTRAREFRESHTYPE* intrarefresh = (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData; 17998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_IndexParamVideoIntraRefresh"); 18008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("OMX_IndexParamVideoIntraRefresh GET"); 180161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intrarefresh->eRefreshMode = m_sIntraRefresh.eRefreshMode; 180261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intrarefresh->nCirMBs = m_sIntraRefresh.nCirMBs; 180361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 180461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 180561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexPortDefn: 180661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //TODO 180761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 180861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_CAPABILITY_TYPE_INDEX: 180961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 181016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMXComponentCapabilityFlagsType); 181161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMXComponentCapabilityFlagsType *pParam = reinterpret_cast<OMXComponentCapabilityFlagsType*>(paramData); 18128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_COMPONENT_CAPABILITY_TYPE_INDEX"); 181361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iIsOMXComponentMultiThreaded = OMX_TRUE; 181461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE; 181561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE; 181661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentSupportsMovableInputBuffers = OMX_TRUE; 181761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentUsesNALStartCodes = OMX_TRUE; 181861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentSupportsPartialFrames = OMX_FALSE; 181961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentCanHandleIncompleteFrames = OMX_FALSE; 182061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentUsesFullAVCFrames = OMX_FALSE; 182161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem = OMX_TRUE; 182261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Supporting capability index in encoder node"); 182361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 182461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 18256eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if !defined(MAX_RES_720P) || defined(_MSM8974_) 182661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamIndexExtraDataType: 182761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 182816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_INDEXEXTRADATATYPE); 182961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamIndexExtraDataType"); 183061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData; 183161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) { 183261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 183361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->bEnabled = 1834e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_BOOL)(m_sExtraData & VENC_EXTRADATA_SLICEINFO); 183561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Slice Info extradata %d", pParam->bEnabled); 183661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 183761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: slice information is " 183861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "valid for output port only"); 1839e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin eRet = OMX_ErrorUnsupportedIndex; 184061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 18418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderMBInfo) { 18428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 18438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->bEnabled = 1844e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_BOOL)(m_sExtraData & VENC_EXTRADATA_MBINFO); 18458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("MB Info extradata %d", pParam->bEnabled); 18468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 18478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: MB information is " 18488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "valid for output port only"); 18498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 18508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 1851e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataFrameDimension) { 1852e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (pParam->nPortIndex == PORT_INDEX_IN) { 1853e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pParam->bEnabled = 1854e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (OMX_BOOL)((m_sExtraData & VENC_EXTRADATA_FRAMEDIMENSION) ? 1 : 0); 1855e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_HIGH("Frame dimension extradata %d", pParam->bEnabled); 1856e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else { 1857e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("get_parameter: frame dimension is " 1858e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "valid for input port only"); 1859e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin eRet = OMX_ErrorUnsupportedIndex; 1860e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 186161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 18626eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 186361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) { 186461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 186561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->bEnabled = 18668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_BOOL)(m_sExtraData & VEN_EXTRADATA_LTRINFO); 186761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("LTR Info extradata %d", pParam->bEnabled); 186861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 186961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: LTR information is " 187061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "valid for output port only"); 187161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 187261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 187361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 18746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 187561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 187661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: unsupported extradata index (0x%x)", 187761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nIndex); 187861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 187961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 188061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 188161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 188261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRCountRangeSupported: 188361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 188416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_RANGETYPE); 188561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("get_parameter: QOMX_IndexParamVideoLTRCountRangeSupported"); 188661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_RANGETYPE *pParam = (QOMX_EXTNINDEX_RANGETYPE *)paramData; 188761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 188861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 min = 0, max = 0, step_size = 0; 188961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_get_capability_ltrcount(&min, &max, &step_size)) { 189061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nMin = min; 189161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nMax = max; 189261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nStepSize = step_size; 189361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 189461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: get_capability_ltrcount failed"); 189561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUndefined; 189661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 189761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 189861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("LTR count range is valid for output port only"); 189961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 190061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 190161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 190261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 1903f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case OMX_QcomIndexParamVideoLTRCount: 1904f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 190516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE); 1906f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamVideoLTRCount"); 1907f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE *pParam = 1908f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE*>(paramData); 1909f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(pParam, &m_sParamLTRCount, sizeof(m_sParamLTRCount)); 1910f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 1911f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1912826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 191361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoSyntaxHdr: 191461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 191516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE); 191661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("QOMX_IndexParamVideoSyntaxHdr"); 191761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 191861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<QOMX_EXTNINDEX_PARAMTYPE*>(paramData); 191961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->pData == NULL) { 192061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Error: Data buffer is NULL"); 192161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 192261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 192361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 192461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (get_syntaxhdr_enable == false) { 192561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: get_parameter: Get syntax header disabled"); 192661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 192761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 192861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 192961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_LOADED_START_PENDING); 193061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_loaded_start()) { 193161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("device start successful"); 193261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 193361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("device start failed"); 193461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR(&m_flags, OMX_COMPONENT_LOADED_START_PENDING); 193561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorHardware; 193661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 193761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_get_seq_hdr(pParam->pData, 193861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned)(pParam->nSize - sizeof(QOMX_EXTNINDEX_PARAMTYPE)), 1939f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (unsigned *)(void *)&pParam->nDataSize)) { 19408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("get syntax header successful (hdrlen = %u)", 19418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->nDataSize); 194261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (unsigned i = 0; i < pParam->nDataSize; i++) { 194361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Header[%d] = %x", i, *((char *)pParam->pData + i)); 194461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 194561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 194661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Error returned from GetSyntaxHeader()"); 194761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 194861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 194961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_LOADED_STOP_PENDING); 195061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_loaded_stop()) { 195161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("device stop successful"); 195261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 195361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("device stop failed"); 195461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR(&m_flags, OMX_COMPONENT_LOADED_STOP_PENDING); 195561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 195661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 195761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 195861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 19598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexHierarchicalStructure: 19608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 196116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_HIERARCHICALLAYERS); 19628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan QOMX_VIDEO_HIERARCHICALLAYERS* hierp = (QOMX_VIDEO_HIERARCHICALLAYERS*) paramData; 19638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexHierarchicalStructure"); 19648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(hierp, &m_sHierLayers, sizeof(m_sHierLayers)); 19658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 19668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 1967e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexParamMBIStatisticsMode: 1968e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 196916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QOMX_VIDEO_MBI_STATISTICS); 1970e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_QOMX_VIDEO_MBI_STATISTICS* mbi_mode = (OMX_QOMX_VIDEO_MBI_STATISTICS*) paramData; 1971e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamMBIStatisticsMode"); 1972e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(mbi_mode, &m_sMBIStatistics, sizeof(m_sMBIStatistics)); 1973e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 1974e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 19758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamPerfLevel: 19768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 197716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PERF_LEVEL); 19788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 perflevel; 19798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_QCOM_VIDEO_PARAM_PERF_LEVEL *pParam = 19808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_PARAM_PERF_LEVEL*>(paramData); 19818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamPerfLevel"); 19828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!dev_get_performance_level(&perflevel)) { 19838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_performance_level %d", 19848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->ePerfLevel); 19858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 19868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->ePerfLevel = (QOMX_VIDEO_PERF_LEVEL)perflevel; 19878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 19888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 19898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 19908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamH264VUITimingInfo: 19918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 199216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO); 19938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 enabled; 19948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO *pParam = 19958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO*>(paramData); 19968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamH264VUITimingInfo"); 19978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!dev_get_vui_timing_info(&enabled)) { 19988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_vui_Timing_info %d", 19998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->bEnable); 20008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 20018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->bEnable = (OMX_BOOL)enabled; 20028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 20038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 20048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2005e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QTIIndexParamVQZIPSEIType: 2006e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 200716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE); 2008e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_U32 enabled; 2009e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE *pParam = 2010e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin reinterpret_cast<OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE*>(paramData); 2011e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("get_parameter: OMX_QTIIndexParamVQZIPSEIType"); 2012e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!dev_get_vqzip_sei_info(&enabled)) { 2013e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Invalid entry returned from get_vqzip_sei_type %d", 2014e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pParam->bEnable); 2015e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else { 2016e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pParam->bEnable = (OMX_BOOL)enabled; 2017e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2018e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2019e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 20208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamPeakBitrate: 20218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 202216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE); 20238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 peakbitrate; 20248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE *pParam = 20258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE*>(paramData); 20268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamPeakBitrate"); 20278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!dev_get_peak_bitrate(&peakbitrate)) { 20288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_peak_bitrate %u", 20298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->nPeakBitrate); 20308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 20318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->nPeakBitrate = peakbitrate; 20328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 20338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 20348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 20358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case QOMX_IndexParamVideoInitialQp: 20368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 203716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_INITIALQP); 20388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan QOMX_EXTNINDEX_VIDEO_INITIALQP* initqp = 20398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<QOMX_EXTNINDEX_VIDEO_INITIALQP *>(paramData); 20408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(initqp, &m_sParamInitqp, sizeof(m_sParamInitqp)); 20418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 20428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2043e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexParamBatchSize: 2044e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 204516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_U32TYPE); 2046e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_PARAM_U32TYPE* batch = 2047e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin reinterpret_cast<OMX_PARAM_U32TYPE *>(paramData); 2048e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2049e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamBatchSize"); 2050e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!dev_get_batch_size(&batch->nU32)) { 2051e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Invalid entry returned from dev_get_batch_size %u", 2052e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (unsigned int)batch->nSize); 2053e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin eRet = OMX_ErrorUnsupportedIndex; 2054e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2055e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2056e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2057e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin batch->nPortIndex = PORT_INDEX_IN; 2058e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2059e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2060e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexParamSequenceHeaderWithIDR: 2061e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 206216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, PrependSPSPPSToIDRFramesParams); 2063e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin PrependSPSPPSToIDRFramesParams * pParam = 2064e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin reinterpret_cast<PrependSPSPPSToIDRFramesParams *>(paramData); 2065e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamSequenceHeaderWithIDR"); 2066e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(pParam, &m_sPrependSPSPPS, sizeof(m_sPrependSPSPPS)); 2067e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2068e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2069e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexParamVencAspectRatio: 2070e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 207116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_VENC_SAR); 2072e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin QOMX_EXTNINDEX_VIDEO_VENC_SAR * pParam = 2073e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin reinterpret_cast<QOMX_EXTNINDEX_VIDEO_VENC_SAR *>(paramData); 2074e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(pParam, &m_sSar, sizeof(m_sSar)); 2075e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2076e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 20778a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar case OMX_IndexParamAndroidVideoTemporalLayering: 2078bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch { 20798a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE); 20808a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE *pLayerInfo = 20818a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar reinterpret_cast<OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE*>(paramData); 20828a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar if (!dev_get_temporal_layer_caps(&m_sParamTemporalLayers.nLayerCountMax, 20838a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar &m_sParamTemporalLayers.nBLayerCountMax)) { 2084bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch DEBUG_PRINT_ERROR("Failed to get temporal layer capabilities"); 2085bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch eRet = OMX_ErrorHardware; 2086bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch } 2087bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch memcpy(pLayerInfo, &m_sParamTemporalLayers, sizeof(m_sParamTemporalLayers)); 2088bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch break; 2089bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch } 209061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoSliceFMO: 209161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 209261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 20938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: get_parameter: unknown param %08x", paramIndex); 209461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedIndex; 209561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 209661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 209761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 209861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 209961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 210061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 210147e37c4428509524ee576920a98381f3e4872493Nick Pelly 210247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 210347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 210461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 210561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::GetConfig 210647e37c4428509524ee576920a98381f3e4872493Nick Pelly 210761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 210861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Get Config Method implementation. 210947e37c4428509524ee576920a98381f3e4872493Nick Pelly 211061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 211161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 211247e37c4428509524ee576920a98381f3e4872493Nick Pelly 211361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 211461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if successful. 211547e37c4428509524ee576920a98381f3e4872493Nick Pelly 211661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 211747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_config(OMX_IN OMX_HANDLETYPE hComp, 211861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_INDEXTYPE configIndex, 211961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_PTR configData) 212047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 21218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 212261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //////////////////////////////////////////////////////////////// 212361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Supported Config Index Type 212461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // ============================================================= 212561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // OMX_IndexConfigVideoBitrate OMX_VIDEO_CONFIG_BITRATETYPE 212661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // OMX_IndexConfigVideoFramerate OMX_CONFIG_FRAMERATETYPE 212761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // OMX_IndexConfigCommonRotate OMX_CONFIG_ROTATIONTYPE 212861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //////////////////////////////////////////////////////////////// 212961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 213061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (configData == NULL) { 213161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: param is null"); 213261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 213361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 213461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 213561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 213661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: can't be in invalid state"); 213761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 213861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 213961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 214061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //@todo need to validate params 21418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan switch ((int)configIndex) { 214261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoBitrate: 214361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 214416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_BITRATETYPE); 214561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_BITRATETYPE* pParam = reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData); 214661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sConfigBitrate, sizeof(m_sConfigBitrate)); 214761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 214861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 214961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoFramerate: 215061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 215116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_FRAMERATETYPE); 215261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_FRAMERATETYPE* pParam = reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData); 215361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sConfigFramerate, sizeof(m_sConfigFramerate)); 215461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 215561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 215661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigCommonRotate: 215761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 215816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ROTATIONTYPE); 215961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_ROTATIONTYPE* pParam = reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData); 216061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sConfigFrameRotation, sizeof(m_sConfigFrameRotation)); 216161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 216261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 216361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoIntraperiod: 216461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 21658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_config:QOMX_IndexConfigVideoIntraperiod"); 216616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_INTRAPERIODTYPE); 216761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_INTRAPERIODTYPE* pParam = reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData); 216861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sIntraperiod, sizeof(m_sIntraperiod)); 216961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 217061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 217161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoAVCIntraPeriod: 217261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 217316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_AVCINTRAPERIOD); 217461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pParam = 217561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_VIDEO_CONFIG_AVCINTRAPERIOD*>(configData); 217661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("get_config: OMX_IndexConfigVideoAVCIntraPeriod"); 217761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sConfigAVCIDRPeriod, sizeof(m_sConfigAVCIDRPeriod)); 217861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 217961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 21808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_IndexConfigCommonDeinterlace: 21818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 218216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_DEINTERLACE); 21838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_VIDEO_CONFIG_DEINTERLACE *pParam = 21848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_VIDEO_CONFIG_DEINTERLACE*>(configData); 21858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_config: OMX_IndexConfigCommonDeinterlace"); 21868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(pParam, &m_sConfigDeinterlace, sizeof(m_sConfigDeinterlace)); 21878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 21888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 21898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_IndexConfigVideoVp8ReferenceFrame: 21908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 219116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_VP8REFERENCEFRAMETYPE); 21928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_VIDEO_VP8REFERENCEFRAMETYPE* pParam = 21938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_VIDEO_VP8REFERENCEFRAMETYPE*>(configData); 21948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_config: OMX_IndexConfigVideoVp8ReferenceFrame"); 21958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(pParam, &m_sConfigVp8ReferenceFrame, sizeof(m_sConfigVp8ReferenceFrame)); 21968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 21978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2198f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case OMX_QcomIndexConfigPerfLevel: 2199f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 220016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL); 2201f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_U32 perflevel; 2202f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL *pParam = 2203f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL*>(configData); 2204f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigPerfLevel"); 2205f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!dev_get_performance_level(&perflevel)) { 2206f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_performance_level %d", 2207f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan pParam->ePerfLevel); 2208f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 2209f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan pParam->ePerfLevel = (QOMX_VIDEO_PERF_LEVEL)perflevel; 2210f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 2211f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 2212f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 2213bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch case OMX_QcomIndexConfigNumHierPLayers: 2214e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 2215bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch VALIDATE_OMX_PARAM_DATA(configData, QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS); 2216bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS* pParam = 2217bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch reinterpret_cast<QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS*>(configData); 2218bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigNumHierPLayers"); 2219bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch memcpy(pParam, &m_sHPlayers, sizeof(m_sHPlayers)); 2220e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2221e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2222e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexConfigQp: 2223e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 222416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_QP); 2225e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SKYPE_VIDEO_CONFIG_QP* pParam = 2226e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin reinterpret_cast<OMX_SKYPE_VIDEO_CONFIG_QP*>(configData); 2227e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigQp"); 2228e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(pParam, &m_sConfigQP, sizeof(m_sConfigQP)); 2229e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2230e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2231e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin case OMX_QcomIndexConfigBaseLayerId: 2232e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin { 223316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID); 2234e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID* pParam = 2235e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin reinterpret_cast<OMX_SKYPE_VIDEO_CONFIG_BASELAYERPID*>(configData); 2236e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigBaseLayerId"); 2237e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin memcpy(pParam, &m_sBaseLayerID, sizeof(m_sBaseLayerID)); 2238e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin break; 2239e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2240f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon case OMX_IndexConfigAndroidIntraRefresh: 2241f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon { 2242f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE); 2243f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE* pParam = 2244f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon reinterpret_cast<OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE*>(configData); 2245f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon DEBUG_PRINT_LOW("get_config: OMX_IndexConfigAndroidIntraRefresh"); 2246f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon memcpy(pParam, &m_sConfigIntraRefresh, sizeof(m_sConfigIntraRefresh)); 2247f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon break; 2248f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon } 22498a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar case OMX_IndexParamAndroidVideoTemporalLayering: 2250bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch { 22518a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE); 22528a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE *layerConfig = 22538a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar (OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE *)configData; 22548a54976f56d2a2d7770f78e7bff7bdbbdf47744aLajos Molnar DEBUG_PRINT_LOW("get_config: OMX_IndexConfigAndroidVideoTemporalLayering"); 2255bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch memcpy(configData, &m_sConfigTemporalLayers, sizeof(m_sConfigTemporalLayers)); 2256bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch break; 2257bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch } 2258ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan case OMX_QTIIndexConfigDescribeColorAspects: 2259ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan { 2260ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, DescribeColorAspectsParams); 2261ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan DescribeColorAspectsParams* pParam = 2262ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan reinterpret_cast<DescribeColorAspectsParams*>(configData); 2263ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan DEBUG_PRINT_LOW("get_config: OMX_QTIIndexConfigDescribeColorAspects"); 2264c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan if (pParam->bRequestingDataSpace) { 2265c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan DEBUG_PRINT_ERROR("Does not handle dataspace request"); 2266c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan return OMX_ErrorUnsupportedSetting; 2267c8dc4a1e8fb2cc3509afecfbb64c2500174e0248Praveen Chavan } 2268939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan if (pParam->bDataSpaceChanged == OMX_TRUE) { 2269939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan 2270939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan print_debug_color_aspects(&(pParam->sAspects), "get_config (dataspace changed) Client says"); 2271939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan // If the dataspace says RGB, recommend 601-limited; 2272939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan // since that is the destination colorspace that C2D or Venus will convert to. 2273939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan if (pParam->nPixelFormat == HAL_PIXEL_FORMAT_RGBA_8888) { 2274939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan DEBUG_PRINT_INFO("get_config (dataspace changed): ColorSpace: Recommend 601-limited for RGBA8888"); 2275939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan pParam->sAspects.mPrimaries = ColorAspects::PrimariesBT601_6_625; 2276939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan pParam->sAspects.mRange = ColorAspects::RangeLimited; 2277939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan pParam->sAspects.mTransfer = ColorAspects::TransferSMPTE170M; 2278939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan pParam->sAspects.mMatrixCoeffs = ColorAspects::MatrixBT601_6; 2279939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan } else { 2280939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan // For IMPLEMENTATION_DEFINED (or anything else), stick to client's defaults. 2281939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan DEBUG_PRINT_INFO("get_config (dataspace changed): ColorSpace: use client-default for format=%x", 2282939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan pParam->nPixelFormat); 2283939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan } 2284939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan print_debug_color_aspects(&(pParam->sAspects), "get_config (dataspace changed) recommended"); 2285939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan } else { 2286939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan memcpy(pParam, &m_sConfigColorAspects, sizeof(m_sConfigColorAspects)); 2287939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan print_debug_color_aspects(&(pParam->sAspects), "get_config"); 2288939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan } 2289ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan break; 2290ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan } 2291b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan case OMX_IndexConfigAndroidVendorExtension: 2292b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan { 2293b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE); 2294b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 2295b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *ext = 2296b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan reinterpret_cast<OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *>(configData); 2297b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan VALIDATE_OMX_VENDOR_EXTENSION_PARAM_DATA(ext); 2298b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan return get_vendor_extension_config(ext); 2299b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan } 2300b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 230161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 230261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex); 230361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedIndex; 230461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 230561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 230647e37c4428509524ee576920a98381f3e4872493Nick Pelly 230747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 230847e37c4428509524ee576920a98381f3e4872493Nick Pelly 2309c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan#define extn_equals(param, extn) (!strcmp(param, extn)) 2310c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan 231147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 231261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 231361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::GetExtensionIndex 231447e37c4428509524ee576920a98381f3e4872493Nick Pelly 231561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 231661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX GetExtensionIndex method implementaion. <TBD> 231747e37c4428509524ee576920a98381f3e4872493Nick Pelly 231861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 231961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 232047e37c4428509524ee576920a98381f3e4872493Nick Pelly 232161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 232261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything successful. 232347e37c4428509524ee576920a98381f3e4872493Nick Pelly 232461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 232547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_extension_index(OMX_IN OMX_HANDLETYPE hComp, 232661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_STRING paramName, 232761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_INDEXTYPE* indexType) 232847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 23298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 233061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 23318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Extension Index in Invalid State"); 233261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 233361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2334826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 2335c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.param.SliceDeliveryMode")) { 233661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *indexType = (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode; 233761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 233861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2339826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 2340826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 2341c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.google.android.index.storeMetaDataInBuffers")) { 23428e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVideoMetaBufferMode; 2343826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev return OMX_ErrorNone; 234461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2345826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 2346c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.google.android.index.prependSPSPPSToIDRFrames")) { 23478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamSequenceHeaderWithIDR; 23488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorNone; 23498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2350e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2351c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.param.video.HierStructure")) { 2352e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QcomIndexHierarchicalStructure; 2353e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2354e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2355e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2356c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.param.video.LTRCount")) { 2357e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVideoLTRCount; 2358e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2359e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2360e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2361c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.param.video.LTRPeriod")) { 2362e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)QOMX_IndexConfigVideoLTRPeriod; 2363e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2364e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2365e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2366c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.config.video.LTRUse")) { 2367e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoLTRUse; 2368e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2369e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2370e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2371c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.config.video.LTRMark")) { 2372e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigVideoLTRMark; 2373e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2374e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2375e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2376c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.config.video.hierplayers")) { 2377bb6e2c659c093ccb6266b679b07513cbeeb9fb24Steve Pfetsch *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigNumHierPLayers; 2378e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2379e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2380e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2381c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.param.video.baselayerid")) { 2382e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigBaseLayerId; 2383e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2384e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2385e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2386c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.config.video.qp")) { 2387e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QcomIndexConfigQp; 2388e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2389e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2390e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2391c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.param.video.sar")) { 2392e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVencAspectRatio; 2393e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2394e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2395e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 2396c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.param.video.InputBatch")) { 2397e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamBatchSize; 2398e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2399e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2400c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan 2401c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, OMX_QTI_INDEX_PARAM_VIDEO_ENABLE_ROIINFO)) { 2402e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QTIIndexParamVideoEnableRoiInfo; 2403e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2404e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2405ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan 2406c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, OMX_QTI_INDEX_CONFIG_VIDEO_ROIINFO)) { 2407e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin *indexType = (OMX_INDEXTYPE)OMX_QTIIndexConfigVideoRoiInfo; 2408e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorNone; 2409e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 2410c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan 2411ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan if (extn_equals(paramName, "OMX.google.android.index.describeColorAspects")) { 2412ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan *indexType = (OMX_INDEXTYPE)OMX_QTIIndexConfigDescribeColorAspects; 2413ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan return OMX_ErrorNone; 2414ebe3411770bc467e978eacd66ebc1495a16d4a56Praveen Chavan } 241561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNotImplemented; 241647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 241747e37c4428509524ee576920a98381f3e4872493Nick Pelly 241847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 241961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 242061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::GetState 242147e37c4428509524ee576920a98381f3e4872493Nick Pelly 242261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 242361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns the state information back to the caller.<TBD> 242447e37c4428509524ee576920a98381f3e4872493Nick Pelly 242561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 242661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 242747e37c4428509524ee576920a98381f3e4872493Nick Pelly 242861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 242961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Error None if everything is successful. 243061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 243147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_state(OMX_IN OMX_HANDLETYPE hComp, 243261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_STATETYPE* state) 243347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 24348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 243561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *state = m_state; 24368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_state: Returning the state %d",*state); 243761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 243847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 243947e37c4428509524ee576920a98381f3e4872493Nick Pelly 244047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 244161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 244261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::ComponentTunnelRequest 244347e37c4428509524ee576920a98381f3e4872493Nick Pelly 244461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 244561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Component Tunnel Request method implementation. <TBD> 244647e37c4428509524ee576920a98381f3e4872493Nick Pelly 244761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 244861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 244947e37c4428509524ee576920a98381f3e4872493Nick Pelly 245061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 245161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything successful. 245247e37c4428509524ee576920a98381f3e4872493Nick Pelly 245361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 24548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE omx_video::component_tunnel_request(OMX_IN OMX_HANDLETYPE hComp, 245561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 245661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE peerComponent, 245761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 peerPort, 245861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_TUNNELSETUPTYPE* tunnelSetup) 245947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 24608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void) hComp, (void) port, (void) peerComponent, (void) peerPort, (void) tunnelSetup; 24618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: component_tunnel_request Not Implemented"); 246261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNotImplemented; 246347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 246447e37c4428509524ee576920a98381f3e4872493Nick Pelly 246547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 246661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 246761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::UseInputBuffer 246847e37c4428509524ee576920a98381f3e4872493Nick Pelly 246961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 247061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Helper function for Use buffer in the input pin 247147e37c4428509524ee576920a98381f3e4872493Nick Pelly 247261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 247361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 247447e37c4428509524ee576920a98381f3e4872493Nick Pelly 247561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 247661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 247747e37c4428509524ee576920a98381f3e4872493Nick Pelly 247861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 247947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::use_input_buffer( 248061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 248161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 248261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 248361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 248461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes, 248561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U8* buffer) 248647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 24878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void) hComp; 248861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 248947e37c4428509524ee576920a98381f3e4872493Nick Pelly 249061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i = 0; 249161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *buf_addr = NULL; 249247e37c4428509524ee576920a98381f3e4872493Nick Pelly 24938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("use_input_buffer: port = %u appData = %p bytes = %u buffer = %p",(unsigned int)port,appData,(unsigned int)bytes,buffer); 2494e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (bytes < m_sInPortDef.nBufferSize) { 24958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: use_input_buffer: Size Mismatch!! " 2496e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "bytes[%u] < Port.nBufferSize[%u]", (unsigned int)bytes, (unsigned int)m_sInPortDef.nBufferSize); 249761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 249847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 249947e37c4428509524ee576920a98381f3e4872493Nick Pelly 250061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_inp_mem_ptr) { 250161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_use_buffer = true; 250261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = (OMX_BUFFERHEADERTYPE*) \ 250361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan calloc( (sizeof(OMX_BUFFERHEADERTYPE)), m_sInPortDef.nBufferCountActual); 250461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr == NULL) { 25058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_inp_mem_ptr"); 250661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 250761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2508f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("Successfully allocated m_inp_mem_ptr = %p", m_inp_mem_ptr); 250961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2510826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 251161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sInPortDef.nBufferCountActual); 251261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem == NULL) { 25138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_pmem"); 251461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 251561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2516826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 251761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sInPortDef.nBufferCountActual); 251861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion == NULL) { 25198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_ion"); 252061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 252161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2522826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 2523826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 252461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sInPortDef.nBufferCountActual; i++) { 252561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = -1; 2526826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 252761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd =-1; 252861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].fd_ion_data.fd =-1; 25298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_ion[i].ion_alloc_data.handle = 0; 2530826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 253161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 253247e37c4428509524ee576920a98381f3e4872493Nick Pelly 253361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 253447e37c4428509524ee576920a98381f3e4872493Nick Pelly 253561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sInPortDef.nBufferCountActual; i++) { 253661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_inp_bm_count,i)) { 253761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 253861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 253947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 254047e37c4428509524ee576920a98381f3e4872493Nick Pelly 254161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i < m_sInPortDef.nBufferCountActual) { 254247e37c4428509524ee576920a98381f3e4872493Nick Pelly 254361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = (m_inp_mem_ptr + i); 254461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_inp_bm_count,i); 25459f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara BITMASK_SET(&m_client_in_bm_count,i); 254647e37c4428509524ee576920a98381f3e4872493Nick Pelly 254761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pBuffer = (OMX_U8 *)buffer; 254861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nSize = sizeof(OMX_BUFFERHEADERTYPE); 254961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nVersion.nVersion = OMX_SPEC_VERSION; 255061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nAllocLen = m_sInPortDef.nBufferSize; 255161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pAppPrivate = appData; 255261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nInputPortIndex = PORT_INDEX_IN; 255347e37c4428509524ee576920a98381f3e4872493Nick Pelly 255461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_use_input_pmem) { 2555826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 25566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 255761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize, 255861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].ion_alloc_data, 2559e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_pInput_ion[i].fd_ion_data, 2560e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin secure_session ? SECURE_FLAGS_INPUT_BUFFER : 0); 25616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 256261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize, 256361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].ion_alloc_data, 2564e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_pInput_ion[i].fd_ion_data, ION_FLAG_CACHED); 25656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 256661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion[i].ion_device_fd < 0) { 25678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ION device open() Failed"); 256861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 256961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 257061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = m_pInput_ion[i].fd_ion_data.fd; 2571826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 257261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 257361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i].fd == 0) { 257461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 257561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 257647e37c4428509524ee576920a98381f3e4872493Nick Pelly 257761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i] .fd < 0) { 25788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed"); 257961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 258061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2581826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 258261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].size = m_sInPortDef.nBufferSize; 258361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].offset = 0; 25848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2585d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pInput_pmem[i].buffer = NULL; 25868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 25878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_pmem[i].buffer = (unsigned char *)mmap( 25888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan NULL,m_pInput_pmem[i].size,PROT_READ|PROT_WRITE, 258961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pInput_pmem[i].fd,0); 259061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2591e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_pInput_pmem[i].buffer == MAP_FAILED) { 25928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: mmap() Failed"); 2593d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pInput_pmem[i].buffer = NULL; 2594e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin close(m_pInput_pmem[i].fd); 2595826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 2596e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin free_ion_memory(&m_pInput_ion[i]); 2597826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 2598e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorInsufficientResources; 2599e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 26008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 26018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 260261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 260361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pParam = reinterpret_cast<OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *>((*bufferHdr)->pAppPrivate); 26048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside qcom_ext with luma:(fd:%lu,offset:0x%x)", pParam->pmem_fd, (unsigned)pParam->offset); 260561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 260661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam) { 260761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = pParam->pmem_fd; 260861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].offset = pParam->offset; 260961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].size = m_sInPortDef.nBufferSize; 261061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].buffer = (unsigned char *)buffer; 26118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("DBG:: pParam->pmem_fd = %u, pParam->offset = %u", 26128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->pmem_fd, (unsigned int)pParam->offset); 261361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 261461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid AppData given for PMEM i/p UseBuffer case"); 261561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 261661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 261761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 261847e37c4428509524ee576920a98381f3e4872493Nick Pelly 26198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("use_inp:: bufhdr = %p, pBuffer = %p, m_pInput_pmem[i].buffer = %p", 262047e37c4428509524ee576920a98381f3e4872493Nick Pelly (*bufferHdr), (*bufferHdr)->pBuffer, m_pInput_pmem[i].buffer); 262161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( dev_use_buf(&m_pInput_pmem[i],PORT_INDEX_IN,i) != true) { 26228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_use_buf() Failed for i/p buf"); 262361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 262461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 262561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 26268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: All buffers are already used, invalid use_buf call for " 262761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "index = %u", i); 262861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 262961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 263061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 263161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 263247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 263347e37c4428509524ee576920a98381f3e4872493Nick Pelly 263447e37c4428509524ee576920a98381f3e4872493Nick Pelly 263547e37c4428509524ee576920a98381f3e4872493Nick Pelly 263647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 263761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 263861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::UseOutputBuffer 263947e37c4428509524ee576920a98381f3e4872493Nick Pelly 264061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 264161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Helper function for Use buffer in the input pin 264247e37c4428509524ee576920a98381f3e4872493Nick Pelly 264361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 264461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 264547e37c4428509524ee576920a98381f3e4872493Nick Pelly 264661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 264761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 264847e37c4428509524ee576920a98381f3e4872493Nick Pelly 264961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 265047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::use_output_buffer( 265161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 265261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 265361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 265461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 265561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes, 265661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U8* buffer) 265747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 26588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp, (void)port; 265961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 266061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *bufHdr= NULL; // buffer header 266161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i= 0; // Temporary counter 266261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *buf_addr = NULL; 26636eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 266461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int align_size; 26656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 266647e37c4428509524ee576920a98381f3e4872493Nick Pelly 26678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Inside use_output_buffer()"); 2668e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (bytes < m_sOutPortDef.nBufferSize) { 26698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: use_output_buffer: Size Mismatch!! " 2670e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin "bytes[%u] < Port.nBufferSize[%u]", (unsigned int)bytes, (unsigned int)m_sOutPortDef.nBufferSize); 267161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 267247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 267361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 267461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_out_mem_ptr) { 267561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_use_buffer = true; 267661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int nBufHdrSize = 0; 267761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 26788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Allocating First Output Buffer(%u)",(unsigned int)m_sOutPortDef.nBufferCountActual); 267961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nBufHdrSize = m_sOutPortDef.nBufferCountActual * sizeof(OMX_BUFFERHEADERTYPE); 268061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* 268161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Memory for output side involves the following: 268261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * 1. Array of Buffer Headers 268361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * 2. Bitmask array to hold the buffer allocation details 268461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * In order to minimize the memory management entire allocation 268561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * is done in one step. 268661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan */ 268761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //OMX Buffer header 268861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr = (OMX_BUFFERHEADERTYPE *)calloc(nBufHdrSize,1); 268961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr == NULL) { 26908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_out_mem_ptr"); 269161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 269261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 269361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 269461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sOutPortDef.nBufferCountActual); 269561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem == NULL) { 26968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_pmem"); 269761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 269861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2699826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 270061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sOutPortDef.nBufferCountActual); 270161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion == NULL) { 27028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_ion"); 270361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 270461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2705826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 270661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr) { 270761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr = m_out_mem_ptr; 27088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Memory Allocation Succeeded for OUT port%p",m_out_mem_ptr); 270961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Settting the entire storage nicely 271061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i < m_sOutPortDef.nBufferCountActual ; i++) { 271161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE); 271261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nVersion.nVersion = OMX_SPEC_VERSION; 271361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nAllocLen = bytes; 271461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nFilledLen = 0; 271561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->pAppPrivate = appData; 271661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nOutputPortIndex = PORT_INDEX_OUT; 271761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->pBuffer = NULL; 271861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr++; 271961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = -1; 2720826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 272161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd =-1; 272261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].fd_ion_data.fd=-1; 27238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_ion[i].ion_alloc_data.handle = 0; 2724826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 272561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 272661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 27278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Output buf mem alloc failed[0x%p]",m_out_mem_ptr); 272861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 272961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 273061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 273161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 273261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sOutPortDef.nBufferCountActual; i++) { 273361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_out_bm_count,i)) { 273461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 273561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 273661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 273761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 273861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 273961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i < m_sOutPortDef.nBufferCountActual) { 274061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = (m_out_mem_ptr + i ); 274161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pBuffer = (OMX_U8 *)buffer; 274261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pAppPrivate = appData; 274361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 274461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_use_output_pmem) { 2745826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 27466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 27478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan align_size = (m_sOutPortDef.nBufferSize + (SZ_4K - 1)) & ~(SZ_4K - 1); 274861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size, 274961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].ion_alloc_data, 2750e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_pOutput_ion[i].fd_ion_data, 2751e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin secure_session ? SECURE_FLAGS_OUTPUT_BUFFER : 0); 27526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 275361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory( 275461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferSize, 275561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].ion_alloc_data, 2756e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_pOutput_ion[i].fd_ion_data, ION_FLAG_CACHED); 27576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 275861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion[i].ion_device_fd < 0) { 27598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ION device open() Failed"); 276061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 276161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 276261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = m_pOutput_ion[i].fd_ion_data.fd; 2763826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 276461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 276547e37c4428509524ee576920a98381f3e4872493Nick Pelly 276661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].fd == 0) { 276761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 276861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 276947e37c4428509524ee576920a98381f3e4872493Nick Pelly 277061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].fd < 0) { 27718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed"); 277261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 277361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2774826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 277561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize; 277661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].offset = 0; 27778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2778d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pOutput_pmem[i].buffer = NULL; 27798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 27806eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 27818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL, 27828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan align_size,PROT_READ|PROT_WRITE, 278361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pOutput_pmem[i].fd,0); 27846eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 27858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL, 27868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].size,PROT_READ|PROT_WRITE, 278761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pOutput_pmem[i].fd,0); 27886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 2789e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_pOutput_pmem[i].buffer == MAP_FAILED) { 27908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: mmap() Failed"); 2791d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pOutput_pmem[i].buffer = NULL; 2792e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin close(m_pOutput_pmem[i].fd); 2793826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 2794e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin free_ion_memory(&m_pOutput_ion[i]); 2795826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 2796e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorInsufficientResources; 2797e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 27988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 279961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 280061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pParam = reinterpret_cast<OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO*>((*bufferHdr)->pAppPrivate); 28018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside qcom_ext pParam: %p", pParam); 280261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 280361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam) { 28048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside qcom_ext with luma:(fd:%lu,offset:0x%x)", pParam->pmem_fd, (int)pParam->offset); 280561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = pParam->pmem_fd; 280661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].offset = pParam->offset; 280761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize; 280861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)buffer; 280961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 281061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid AppData given for PMEM o/p UseBuffer case"); 281161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 281261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 281361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_addr = (unsigned char *)buffer; 281461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 281547e37c4428509524ee576920a98381f3e4872493Nick Pelly 28168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("use_out:: bufhdr = %p, pBuffer = %p, m_pOutput_pmem[i].buffer = %p", 281761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr), (*bufferHdr)->pBuffer, m_pOutput_pmem[i].buffer); 281861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_use_buf(&m_pOutput_pmem[i],PORT_INDEX_OUT,i) != true) { 281961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_use_buf Failed for o/p buf"); 282061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 282161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2822417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan 2823417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan BITMASK_SET(&m_out_bm_count,i); 282431cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara BITMASK_SET(&m_client_out_bm_count,i); 282561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 282661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: All o/p Buffers have been Used, invalid use_buf call for " 282761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "index = %u", i); 282861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 282947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 283061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 283161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 283247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 283347e37c4428509524ee576920a98381f3e4872493Nick Pelly 283447e37c4428509524ee576920a98381f3e4872493Nick Pelly 283547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 283661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 283761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::UseBuffer 283847e37c4428509524ee576920a98381f3e4872493Nick Pelly 283961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 284061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Use Buffer method implementation. 284147e37c4428509524ee576920a98381f3e4872493Nick Pelly 284261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 284361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 284447e37c4428509524ee576920a98381f3e4872493Nick Pelly 284561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 284661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None , if everything successful. 284747e37c4428509524ee576920a98381f3e4872493Nick Pelly 284861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 284947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::use_buffer( 285061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 285161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 285261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 285361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 285461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes, 285561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U8* buffer) 285647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 285761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 285861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 28598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Use Buffer in Invalid State"); 286061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 286161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 286231cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara 286331cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara auto_lock l(m_buf_lock); 286461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 2865f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara auto_lock l(m_lock); 286661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = use_input_buffer(hComp,bufferHdr,port,appData,bytes,buffer); 286761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 286861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = use_output_buffer(hComp,bufferHdr,port,appData,bytes,buffer); 286961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 28708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index received %d",(int)port); 287161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 287261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 287361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 287461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 287561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocate_done()) { 287661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) { 287761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 287861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_IDLE_PENDING); 287961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandStateSet,OMX_StateIdle, 288061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 288161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 288261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 288361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN && m_sInPortDef.bPopulated) { 288461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_INPUT_ENABLE_PENDING)) { 288561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_ENABLE_PENDING); 288661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable, 288761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN, 288861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 288961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 289061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 289161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT && m_sOutPortDef.bPopulated) { 289261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) { 289361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_ENABLE_PENDING); 289461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable, 289561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_OUT, 289661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 289761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_event_port_settings_sent = false; 289861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 289961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 290061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 290161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 290247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 290347e37c4428509524ee576920a98381f3e4872493Nick Pelly 290447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr) 290547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 290661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int index = 0; 290761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *temp_buff ; 290847e37c4428509524ee576920a98381f3e4872493Nick Pelly 290961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bufferHdr == NULL || m_inp_mem_ptr == NULL) { 291061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: free_input: Invalid bufferHdr[%p] or m_inp_mem_ptr[%p]", 291161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferHdr, m_inp_mem_ptr); 291261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 291361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 291447e37c4428509524ee576920a98381f3e4872493Nick Pelly 2915f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan index = bufferHdr - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr); 2916826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 291761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_mode_enable) { 291861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sInPortDef.nBufferCountActual) { 291961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&meta_buffer_hdr[index], 0, sizeof(meta_buffer_hdr[index])); 292061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&meta_buffers[index], 0, sizeof(meta_buffers[index])); 292161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 292261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mUseProxyColorFormat) 292361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 29243b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan else { 292561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2d_conv.close(); 29263b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan opaque_buffer_hdr[index] = NULL; 29273b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 2928826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 2929826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 293061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sInPortDef.nBufferCountActual && !mUseProxyColorFormat && 293161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_free_buf(&m_pInput_pmem[index],PORT_INDEX_IN) != true) { 29328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: dev_free_buf() Failed for i/p buf"); 293361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 293461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 293561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sInPortDef.nBufferCountActual && m_pInput_pmem) { 293614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan 29370e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan if (mUseProxyColorFormat) { 29380e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan if (m_opq_pmem_q.m_size) { 29390e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan unsigned long addr, p1, id; 29400e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan m_opq_pmem_q.pop_entry(&addr, &p1, &id); 29410e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan DEBUG_PRINT_LOW("Removed entry in m_opq_pmem_q: address %lu", addr); 29420e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan } 29430e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan } 29440e28b961b6f556ff41e7bc2379a14692723b7093Praveen Chavan 294561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[index].fd > 0 && input_use_buffer == false) { 29468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: i/p AllocateBuffer case"); 29478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 2948e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin munmap (m_pInput_pmem[index].buffer,m_pInput_pmem[index].size); 29498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 29508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan free(m_pInput_pmem[index].buffer); 29518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 295214a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_pInput_pmem[index].buffer = NULL; 295361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pInput_pmem[index].fd); 2954826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 295561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pInput_ion[index]); 2956826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 295761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[index].fd = -1; 295861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_pInput_pmem[index].fd > 0 && (input_use_buffer == true && 295961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem == OMX_FALSE)) { 29608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: i/p Heap UseBuffer case"); 296161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_free_buf(&m_pInput_pmem[index],PORT_INDEX_IN) != true) { 29628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_free_buf() Failed for i/p buf"); 296361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 29648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 2965e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin munmap (m_pInput_pmem[index].buffer,m_pInput_pmem[index].size); 296614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_pInput_pmem[index].buffer = NULL; 29678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 296861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pInput_pmem[index].fd); 2969826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 297061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pInput_ion[index]); 2971826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 297261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[index].fd = -1; 297361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 29748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("FreeBuffer:: fd is invalid or i/p PMEM UseBuffer case"); 297561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 297647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 297761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 297847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 297947e37c4428509524ee576920a98381f3e4872493Nick Pelly 298047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr) 298147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 298261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int index = 0; 298361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *temp_buff ; 298461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 298561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bufferHdr == NULL || m_out_mem_ptr == NULL) { 298661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: free_output: Invalid bufferHdr[%p] or m_out_mem_ptr[%p]", 298761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferHdr, m_out_mem_ptr); 298861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 298961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 299061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan index = bufferHdr - m_out_mem_ptr; 299161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 299261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sOutPortDef.nBufferCountActual && 299361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_free_buf(&m_pOutput_pmem[index],PORT_INDEX_OUT) != true) { 299461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_free_buf Failed for o/p buf"); 299561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 299661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 299761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sOutPortDef.nBufferCountActual && m_pOutput_pmem) { 299861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[index].fd > 0 && output_use_buffer == false ) { 29998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: o/p AllocateBuffer case"); 30008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 30018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan munmap (m_pOutput_pmem[index].buffer, 30028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[index].size); 30038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 30048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char *data = (char*) m_pOutput_pmem[index].buffer; 3005f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan native_handle_t *handle = NULL; 3006f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(&handle, data + sizeof(OMX_U32), sizeof(native_handle_t*)); 30078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan native_handle_delete(handle); 30088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan free(m_pOutput_pmem[index].buffer); 30098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 301061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pOutput_pmem[index].fd); 3011826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 301261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pOutput_ion[index]); 3013826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 301461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[index].fd = -1; 301561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ( m_pOutput_pmem[index].fd > 0 && (output_use_buffer == true 301661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && m_use_output_pmem == OMX_FALSE)) { 30178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: o/p Heap UseBuffer case"); 301861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_free_buf(&m_pOutput_pmem[index],PORT_INDEX_OUT) != true) { 301961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_free_buf Failed for o/p buf"); 302061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 30218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 30228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan munmap (m_pOutput_pmem[index].buffer, 30238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[index].size); 30248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 302561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pOutput_pmem[index].fd); 3026826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 302761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pOutput_ion[index]); 3028826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 302961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[index].fd = -1; 303061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 30318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: fd is invalid or o/p PMEM UseBuffer case"); 303261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 303347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 303461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 303547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 3036826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 3037826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::allocate_input_meta_buffer( 303861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 303961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 304061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 304161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes) 3042826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 304361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned index = 0; 30447d6e61888e010bbe79878827a3a593699e9a2595Praveen Chavan if (!bufferHdr || bytes < sizeof(encoder_media_buffer_type)) { 30458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("wrong params allocate_input_meta_buffer Hdr %p len %u", 30468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bufferHdr, (unsigned int)bytes); 304761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 304861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 304961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3050f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!m_inp_mem_ptr && !mUseProxyColorFormat) { 305161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = meta_buffer_hdr; 3052f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("use meta_buffer_hdr (%p) as m_inp_mem_ptr = %p", 3053f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan meta_buffer_hdr, m_inp_mem_ptr); 3054f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 305561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (index = 0; ((index < m_sInPortDef.nBufferCountActual) && 3056f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara meta_buffer_hdr[index].pBuffer && 3057f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara BITMASK_PRESENT(&m_inp_bm_count, index)); index++); 3058f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara 305961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index == m_sInPortDef.nBufferCountActual) { 306061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("All buffers are allocated input_meta_buffer"); 306161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 306261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 306361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mUseProxyColorFormat) { 306461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (opaque_buffer_hdr[index]) { 306561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("All buffers are allocated opaque_buffer_hdr"); 306661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 306761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 306861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocate_input_buffer(hComp,&opaque_buffer_hdr[index], 306961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN,appData,m_sInPortDef.nBufferSize) != OMX_ErrorNone) { 307061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("All buffers are allocated opaque_buffer_hdr"); 307161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 307261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 307361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 307461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_inp_bm_count,index); 307561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = &meta_buffer_hdr[index]; 307661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&meta_buffer_hdr[index], 0, sizeof(meta_buffer_hdr[index])); 307761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].nSize = sizeof(meta_buffer_hdr[index]); 30783957953f027b784f2d55d96d388c8107371eb9dbWonsik Kim meta_buffer_hdr[index].nAllocLen = sizeof(meta_buffers[index]); 307961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].nVersion.nVersion = OMX_SPEC_VERSION; 308061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].nInputPortIndex = PORT_INDEX_IN; 308161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].pBuffer = (OMX_U8*)&meta_buffers[index]; 308261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].pAppPrivate = appData; 308361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mUseProxyColorFormat) { 30848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_opq_pmem_q.insert_entry((unsigned long)opaque_buffer_hdr[index],0,0); 30858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("opaque_buffer_hdr insert %p", opaque_buffer_hdr[index]); 308661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 308761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 3088826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 3089826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 309047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 309161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 309261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateInputBuffer 309347e37c4428509524ee576920a98381f3e4872493Nick Pelly 309461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 309561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Helper function for allocate buffer in the input pin 309647e37c4428509524ee576920a98381f3e4872493Nick Pelly 309761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 309861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 309947e37c4428509524ee576920a98381f3e4872493Nick Pelly 310061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 310161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 310247e37c4428509524ee576920a98381f3e4872493Nick Pelly 310361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 310447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::allocate_input_buffer( 310561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 310661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 310761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 310861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 310961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes) 311047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 31118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp, (void)port; 311261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 311361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i = 0; 311447e37c4428509524ee576920a98381f3e4872493Nick Pelly 31158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("allocate_input_buffer()::"); 3116e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (bytes < m_sInPortDef.nBufferSize) { 3117e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("ERROR: Buffer size mismatch error: bytes[%u] < nBufferSize[%u]", 31188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)bytes, (unsigned int)m_sInPortDef.nBufferSize); 311961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 312047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 312147e37c4428509524ee576920a98381f3e4872493Nick Pelly 312261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_inp_mem_ptr) { 31238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s: size = %u, actual cnt %u", __FUNCTION__, 31248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.nBufferSize, (unsigned int)m_sInPortDef.nBufferCountActual); 312561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = (OMX_BUFFERHEADERTYPE*) \ 312661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan calloc( (sizeof(OMX_BUFFERHEADERTYPE)), m_sInPortDef.nBufferCountActual); 312761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr == NULL) { 31288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_inp_mem_ptr"); 312961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 313061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 313161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3132f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("Successfully allocated m_inp_mem_ptr = %p", m_inp_mem_ptr); 313361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sInPortDef.nBufferCountActual); 313447e37c4428509524ee576920a98381f3e4872493Nick Pelly 313561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem == NULL) { 31368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_pmem"); 313761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 313861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3139826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 314061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sInPortDef.nBufferCountActual); 314161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion == NULL) { 31428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_ion"); 314361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 314461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3145826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 314661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sInPortDef.nBufferCountActual; i++) { 314761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = -1; 3148826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 314961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd =-1; 315061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].fd_ion_data.fd =-1; 31518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_ion[i].ion_alloc_data.handle = 0; 3152826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 315361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 315447e37c4428509524ee576920a98381f3e4872493Nick Pelly } 315547e37c4428509524ee576920a98381f3e4872493Nick Pelly 315661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sInPortDef.nBufferCountActual; i++) { 315761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_inp_bm_count,i)) { 315861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 315961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 316047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 316161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i < m_sInPortDef.nBufferCountActual) { 316247e37c4428509524ee576920a98381f3e4872493Nick Pelly 316361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = (m_inp_mem_ptr + i); 316461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nSize = sizeof(OMX_BUFFERHEADERTYPE); 316561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nVersion.nVersion = OMX_SPEC_VERSION; 316661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nAllocLen = m_sInPortDef.nBufferSize; 316761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pAppPrivate = appData; 316861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nInputPortIndex = PORT_INDEX_IN; 31698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan // make fd available to app layer, help with testing 31708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (*bufferHdr)->pInputPortPrivate = (OMX_PTR)&m_pInput_pmem[i]; 317147e37c4428509524ee576920a98381f3e4872493Nick Pelly 3172826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 31736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 317461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize, 317561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].ion_alloc_data, 3176e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_pInput_ion[i].fd_ion_data, 3177e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin secure_session ? SECURE_FLAGS_INPUT_BUFFER : 0); 31786eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 317961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize, 318061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].ion_alloc_data, 3181e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_pInput_ion[i].fd_ion_data, ION_FLAG_CACHED); 31826eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 318361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion[i].ion_device_fd < 0) { 31848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ION device open() Failed"); 318561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 318661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3187826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 318861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = m_pInput_ion[i].fd_ion_data.fd; 3189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 319061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 319147e37c4428509524ee576920a98381f3e4872493Nick Pelly 319261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i].fd == 0) { 319361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 319461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 319547e37c4428509524ee576920a98381f3e4872493Nick Pelly 319661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i].fd < 0) { 31978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed"); 319861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 319961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3200826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 320161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].size = m_sInPortDef.nBufferSize; 320261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].offset = 0; 320361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3204d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pInput_pmem[i].buffer = NULL; 32058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 32068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_pmem[i].buffer = (unsigned char *)mmap(NULL, 32078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_pmem[i].size,PROT_READ|PROT_WRITE, 320861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pInput_pmem[i].fd,0); 3209e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_pInput_pmem[i].buffer == MAP_FAILED) { 32108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: mmap FAILED= %d", errno); 3211d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pInput_pmem[i].buffer = NULL; 3212e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin close(m_pInput_pmem[i].fd); 3213826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 3214e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin free_ion_memory(&m_pInput_ion[i]); 3215826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 3216e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorInsufficientResources; 3217e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 32188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 32198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //This should only be used for passing reference to source type and 32208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //secure handle fd struct native_handle_t* 32218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_pmem[i].buffer = malloc(sizeof(OMX_U32) + sizeof(native_handle_t*)); 3222d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan if (m_pInput_pmem[i].buffer == NULL) { 3223d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan DEBUG_PRINT_ERROR("%s: failed to allocate native-handle", __func__); 3224d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan return OMX_ErrorInsufficientResources; 3225d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan } 32268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 32276eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 322861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pBuffer = (OMX_U8 *)m_pInput_pmem[i].buffer; 32298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Virtual address in allocate buffer is %p", m_pInput_pmem[i].buffer); 323061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_inp_bm_count,i); 323161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //here change the I/P param here from buf_adr to pmem 323261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mUseProxyColorFormat && (dev_use_buf(&m_pInput_pmem[i],PORT_INDEX_IN,i) != true)) { 32338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_use_buf FAILED for i/p buf"); 323461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 323561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 323661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 32378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: All i/p buffers are allocated, invalid allocate buf call" 32388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "for index [%d]", i); 323961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 324047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 324147e37c4428509524ee576920a98381f3e4872493Nick Pelly 324261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 324347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 324447e37c4428509524ee576920a98381f3e4872493Nick Pelly 324547e37c4428509524ee576920a98381f3e4872493Nick Pelly 324647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 324761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 324861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateOutputBuffer 324947e37c4428509524ee576920a98381f3e4872493Nick Pelly 325061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 325161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Helper fn for AllocateBuffer in the output pin 325247e37c4428509524ee576920a98381f3e4872493Nick Pelly 325361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 325461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 325547e37c4428509524ee576920a98381f3e4872493Nick Pelly 325661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 325761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything went well. 325847e37c4428509524ee576920a98381f3e4872493Nick Pelly 325961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 326047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::allocate_output_buffer( 326161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 326261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 326361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 326461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 326561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes) 326647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 32678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp, (void)port; 326861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 326961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *bufHdr= NULL; // buffer header 327061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i= 0; // Temporary counter 32716eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 327261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int align_size; 32736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 32748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("allocate_output_buffer()for %u bytes", (unsigned int)bytes); 327561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_out_mem_ptr) { 327661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int nBufHdrSize = 0; 32778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s: size = %u, actual cnt %u", __FUNCTION__, 32788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferSize, (unsigned int)m_sOutPortDef.nBufferCountActual); 327961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nBufHdrSize = m_sOutPortDef.nBufferCountActual * sizeof(OMX_BUFFERHEADERTYPE); 328061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 328161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* 328261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Memory for output side involves the following: 328361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * 1. Array of Buffer Headers 328461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * 2. Bitmask array to hold the buffer allocation details 328561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * In order to minimize the memory management entire allocation 328661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * is done in one step. 328761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan */ 328861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr = (OMX_BUFFERHEADERTYPE *)calloc(nBufHdrSize,1); 328947e37c4428509524ee576920a98381f3e4872493Nick Pelly 3290826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 329161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sOutPortDef.nBufferCountActual); 329261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion == NULL) { 32938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_ion"); 329461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 329561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3296826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 329761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem = (struct pmem *) calloc(sizeof(struct pmem), m_sOutPortDef.nBufferCountActual); 329861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem == NULL) { 32998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_pmem"); 330061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 330161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 330261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr && m_pOutput_pmem) { 330361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr = m_out_mem_ptr; 330461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 330561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i < m_sOutPortDef.nBufferCountActual ; i++) { 330661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE); 330761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nVersion.nVersion = OMX_SPEC_VERSION; 330861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Set the values when we determine the right HxW param 33093957953f027b784f2d55d96d388c8107371eb9dbWonsik Kim bufHdr->nAllocLen = m_sOutPortDef.nBufferSize; 331061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nFilledLen = 0; 331161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->pAppPrivate = appData; 331261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nOutputPortIndex = PORT_INDEX_OUT; 33138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan // make fd available to app layer, help with testing 33148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bufHdr->pOutputPortPrivate = (OMX_PTR)&m_pOutput_pmem[i]; 331561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->pBuffer = NULL; 331661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr++; 331761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = -1; 3318826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 331961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd =-1; 332061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].fd_ion_data.fd=-1; 33218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_ion[i].ion_alloc_data.handle = 0; 3322826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 332361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 332461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 332561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() failed for m_out_mem_ptr/m_pOutput_pmem"); 332661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 332761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 332861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 332961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("actual cnt = %u", (unsigned int)m_sOutPortDef.nBufferCountActual); 333161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sOutPortDef.nBufferCountActual; i++) { 333261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_out_bm_count,i)) { 33338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Found a Free Output Buffer %d",i); 333461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 333561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 333661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 333761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 333861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i < m_sOutPortDef.nBufferCountActual) { 3339826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 33406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 334161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan align_size = ((m_sOutPortDef.nBufferSize + 4095)/4096) * 4096; 334261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size, 334361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].ion_alloc_data, 3344e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_pOutput_ion[i].fd_ion_data, 3345e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin secure_session ? SECURE_FLAGS_OUTPUT_BUFFER : ION_FLAG_CACHED); 33466eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 334761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sOutPortDef.nBufferSize, 334861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].ion_alloc_data, 3349e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin &m_pOutput_ion[i].fd_ion_data, ION_FLAG_CACHED); 33506eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 335161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion[i].ion_device_fd < 0) { 33528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ION device open() Failed"); 335361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 335461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 33556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 335661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = m_pOutput_ion[i].fd_ion_data.fd; 3357826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 335861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 335961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].fd == 0) { 336061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 336161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 336261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 336361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].fd < 0) { 33648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() failed"); 336561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 336661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3367826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 336861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize; 336961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].offset = 0; 33708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 3371d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pOutput_pmem[i].buffer = NULL; 33728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 33736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 33748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL, 33758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan align_size,PROT_READ|PROT_WRITE, 337661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pOutput_pmem[i].fd,0); 33776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 33788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL, 33798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].size,PROT_READ|PROT_WRITE, 338061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pOutput_pmem[i].fd,0); 33816eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 3382e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_pOutput_pmem[i].buffer == MAP_FAILED) { 33838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: MMAP_FAILED in o/p alloc buffer"); 3384d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pOutput_pmem[i].buffer = NULL; 3385e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin close (m_pOutput_pmem[i].fd); 3386826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 3387e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin free_ion_memory(&m_pOutput_ion[i]); 3388826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 3389e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorInsufficientResources; 3390e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 33918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 33928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan else { 33938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //This should only be used for passing reference to source type and 33948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //secure handle fd struct native_handle_t* 33958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = malloc(sizeof(OMX_U32) + sizeof(native_handle_t*)); 3396d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan if (m_pOutput_pmem[i].buffer == NULL) { 3397d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan DEBUG_PRINT_ERROR("%s: failed to allocate native-handle", __func__); 3398d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan return OMX_ErrorInsufficientResources; 3399d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan } 34008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan native_handle_t *handle = native_handle_create(1, 0); 34018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan handle->data[0] = m_pOutput_pmem[i].fd; 34028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char *data = (char*) m_pOutput_pmem[i].buffer; 34038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 type = 1; 3404f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(data, &type, sizeof(OMX_U32)); 3405f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(data + sizeof(OMX_U32), &handle, sizeof(native_handle_t*)); 34068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 340747e37c4428509524ee576920a98381f3e4872493Nick Pelly 340861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = (m_out_mem_ptr + i ); 340961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pBuffer = (OMX_U8 *)m_pOutput_pmem[i].buffer; 341061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pAppPrivate = appData; 341147e37c4428509524ee576920a98381f3e4872493Nick Pelly 341261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_out_bm_count,i); 341347e37c4428509524ee576920a98381f3e4872493Nick Pelly 341461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_use_buf(&m_pOutput_pmem[i],PORT_INDEX_OUT,i) != true) { 34158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_use_buf FAILED for o/p buf"); 341661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 341761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 341861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 34198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: All o/p buffers are allocated, invalid allocate buf call" 34208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "for index [%d] actual: %u", i, (unsigned int)m_sOutPortDef.nBufferCountActual); 342161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 342247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 342347e37c4428509524ee576920a98381f3e4872493Nick Pelly 342461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 342547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 342647e37c4428509524ee576920a98381f3e4872493Nick Pelly 342747e37c4428509524ee576920a98381f3e4872493Nick Pelly 342847e37c4428509524ee576920a98381f3e4872493Nick Pelly// AllocateBuffer -- API Call 342947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 343061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 343161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::AllocateBuffer 343247e37c4428509524ee576920a98381f3e4872493Nick Pelly 343361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 343461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns zero if all the buffers released.. 343547e37c4428509524ee576920a98381f3e4872493Nick Pelly 343661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 343761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 343847e37c4428509524ee576920a98381f3e4872493Nick Pelly 343961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 344061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 344147e37c4428509524ee576920a98381f3e4872493Nick Pelly 344261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 344347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::allocate_buffer(OMX_IN OMX_HANDLETYPE hComp, 344461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 344561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 344661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 344761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes) 344847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 344947e37c4428509524ee576920a98381f3e4872493Nick Pelly 345061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; // OMX return type 345147e37c4428509524ee576920a98381f3e4872493Nick Pelly 34528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Allocate buffer of size = %u on port %d", (unsigned int)bytes, (int)port); 345361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 34548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Allocate Buf in Invalid State"); 345561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 345661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 345731cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara auto_lock l(m_buf_lock); 345861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // What if the client calls again. 345961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 3460f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara auto_lock l(m_lock); 3461826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 346261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_mode_enable) 346361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = allocate_input_meta_buffer(hComp,bufferHdr,appData,bytes); 346461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 3465826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 346661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = allocate_input_buffer(hComp,bufferHdr,port,appData,bytes); 346761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 346861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = allocate_output_buffer(hComp,bufferHdr,port,appData,bytes); 346961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 34708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index received %d",(int)port); 347161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 347261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 347361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Checking for Output Allocate buffer Done"); 347461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 347561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocate_done()) { 347661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) { 347761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 347861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_IDLE_PENDING); 347961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandStateSet,OMX_StateIdle, 348061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 348161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 348261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 348361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN && m_sInPortDef.bPopulated) { 348461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_INPUT_ENABLE_PENDING)) { 348561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_ENABLE_PENDING); 348661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable, 348761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN, 348861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 348961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 349061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 349161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_OUT && m_sOutPortDef.bPopulated) { 349261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) { 349361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_ENABLE_PENDING); 349461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable, 349561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_OUT, 349661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 349761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_event_port_settings_sent = false; 349861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 349961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 350061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 35018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Allocate Buffer exit with ret Code %d",eRet); 350261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 350347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 350447e37c4428509524ee576920a98381f3e4872493Nick Pelly 350547e37c4428509524ee576920a98381f3e4872493Nick Pelly 350647e37c4428509524ee576920a98381f3e4872493Nick Pelly// Free Buffer - API call 350747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 350861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 350961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::FreeBuffer 351047e37c4428509524ee576920a98381f3e4872493Nick Pelly 351161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 351247e37c4428509524ee576920a98381f3e4872493Nick Pelly 351361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 351461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 351547e37c4428509524ee576920a98381f3e4872493Nick Pelly 351661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 351761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 351847e37c4428509524ee576920a98381f3e4872493Nick Pelly 351961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 352047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_buffer(OMX_IN OMX_HANDLETYPE hComp, 352161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 352261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 352347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 35248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 352561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 352661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int nPortIndex; 352761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("In for encoder free_buffer"); 352931cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara auto_lock l(m_buf_lock); 353031cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara if (port == PORT_INDEX_OUT) { //client called freebuffer, clearing client buffer bitmask right away to avoid use after free 353131cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara nPortIndex = buffer - (OMX_BUFFERHEADERTYPE*)m_out_mem_ptr; 353231cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara if(BITMASK_PRESENT(&m_client_out_bm_count, nPortIndex)) 353331cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara BITMASK_CLEAR(&m_client_out_bm_count,nPortIndex); 35349f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara } else if (port == PORT_INDEX_IN) { 35359f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara nPortIndex = buffer - (meta_mode_enable?meta_buffer_hdr:m_inp_mem_ptr); 35369f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara if(BITMASK_PRESENT(&m_client_in_bm_count, nPortIndex)) 35379f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara BITMASK_CLEAR(&m_client_in_bm_count,nPortIndex); 353831cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara } 353961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateIdle && 354061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) { 35418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW(" free buffer while Component in Loading pending"); 354261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ((m_sInPortDef.bEnabled == OMX_FALSE && port == PORT_INDEX_IN)|| 354361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (m_sOutPortDef.bEnabled == OMX_FALSE && port == PORT_INDEX_OUT)) { 35448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Free Buffer while port %u disabled", (unsigned int)port); 354561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_state == OMX_StateExecuting || m_state == OMX_StatePause) { 35468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,ports need to be disabled"); 354761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError, 354861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ErrorPortUnpopulated, 354961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 355061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 355161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 35528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,port lost Buffers"); 355361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError, 355461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ErrorPortUnpopulated, 355561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 355661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 355761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 355861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 355961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // check if the buffer is valid 3560f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan nPortIndex = buffer - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr); 356161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("free_buffer on i/p port - Port idx %u, actual cnt %u", 35638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan nPortIndex, (unsigned int)m_sInPortDef.nBufferCountActual); 3564f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara pthread_mutex_lock(&m_lock); 3565417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (nPortIndex < m_sInPortDef.nBufferCountActual && 3566417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan BITMASK_PRESENT(&m_inp_bm_count, nPortIndex)) { 356761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Clear the bit associated with it. 356861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR(&m_inp_bm_count,nPortIndex); 3569f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara pthread_mutex_unlock(&m_lock); 357061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_input_buffer (buffer); 357161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bPopulated = OMX_FALSE; 357261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 357361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Free the Buffer Header*/ 3574b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan if (release_input_done()) { 357561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_use_buffer = false; 3576b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan // "m_inp_mem_ptr" may point to "meta_buffer_hdr" in some modes, 3577b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan // in which case, it was not explicitly allocated 3578b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan if (m_inp_mem_ptr && m_inp_mem_ptr != meta_buffer_hdr) { 35798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_inp_mem_ptr"); 358061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free (m_inp_mem_ptr); 358161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3582b7b6466da41081776b21ab4d4955a706d7f6b7caPraveen Chavan m_inp_mem_ptr = NULL; 358361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem) { 35848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_pInput_pmem"); 358561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_pInput_pmem); 358661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem = NULL; 358761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3588826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 358961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion) { 35908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_pInput_ion"); 359161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_pInput_ion); 359261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion = NULL; 359361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3594826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 359561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 359661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 3597f8c8a4eb4ee607a502fdc656e38ebe483bf2c570Santhosh Behara pthread_mutex_unlock(&m_lock); 35988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: free_buffer ,Port Index Invalid"); 359961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 360047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 360161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 360261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT((&m_flags),OMX_COMPONENT_INPUT_DISABLE_PENDING) 360361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && release_input_done()) { 36048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MOVING TO DISABLED STATE"); 360561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_DISABLE_PENDING); 360661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortDisable, 360761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN, 360861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 360947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 361061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 361161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // check if the buffer is valid 361261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nPortIndex = buffer - (OMX_BUFFERHEADERTYPE*)m_out_mem_ptr; 361361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("free_buffer on o/p port - Port idx %u, actual cnt %u", 36158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan nPortIndex, (unsigned int)m_sOutPortDef.nBufferCountActual); 3616417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (nPortIndex < m_sOutPortDef.nBufferCountActual && 3617417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan BITMASK_PRESENT(&m_out_bm_count, nPortIndex)) { 361861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Clear the bit associated with it. 361961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR(&m_out_bm_count,nPortIndex); 362061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bPopulated = OMX_FALSE; 362161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_output_buffer (buffer); 362261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 362361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_output_done()) { 362461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_use_buffer = false; 362561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr) { 36268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_out_mem_ptr"); 362761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free (m_out_mem_ptr); 362861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr = NULL; 362961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 363061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem) { 36318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_pOutput_pmem"); 363261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_pOutput_pmem); 363361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem = NULL; 363461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3635826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 363661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion) { 36378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_pOutput_ion"); 363861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_pOutput_ion); 363961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion = NULL; 364061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3641826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 364261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 364361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 36448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: free_buffer , Port Index Invalid"); 364561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 364661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 364761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT((&m_flags),OMX_COMPONENT_OUTPUT_DISABLE_PENDING) 364861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && release_output_done() ) { 36498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer : If any Disable event pending,post it"); 365061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MOVING TO DISABLED STATE"); 365261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_DISABLE_PENDING); 365361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortDisable, 365461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_OUT, 365561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 365661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 365761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 36586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } else { 365961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 366061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 366161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((eRet == OMX_ErrorNone) && 366261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) { 366361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_done()) { 366461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_stop() != 0) { 36658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_stop() FAILED"); 366661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 366761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 366861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 366961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_LOADING_PENDING); 367061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandStateSet, OMX_StateLoaded, 367161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 367261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 3673f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("in free buffer, release not done, need to free more buffers input %" PRIx64" output %" PRIx64, 367461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_bm_count, m_inp_bm_count); 367561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 367647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 367747e37c4428509524ee576920a98381f3e4872493Nick Pelly 367861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 367947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 368047e37c4428509524ee576920a98381f3e4872493Nick Pelly 368147e37c4428509524ee576920a98381f3e4872493Nick Pelly 368247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 368361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 368461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::EmptyThisBuffer 368547e37c4428509524ee576920a98381f3e4872493Nick Pelly 368661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 368761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan This routine is used to push the encoded video frames to 368861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan the video decoder. 368947e37c4428509524ee576920a98381f3e4872493Nick Pelly 369061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 369161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 369247e37c4428509524ee576920a98381f3e4872493Nick Pelly 369361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 369461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything went successful. 369547e37c4428509524ee576920a98381f3e4872493Nick Pelly 369661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 369747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::empty_this_buffer(OMX_IN OMX_HANDLETYPE hComp, 369861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 369947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 370061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret1 = OMX_ErrorNone; 370161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int nBufferIndex ; 370261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3703e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin dev_set_extradata_cookie((void *)buffer); 37048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ETB: buffer = %p, buffer->pBuffer[%p]", buffer, buffer->pBuffer); 370514a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan if (m_state != OMX_StateExecuting && 370614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_state != OMX_StatePause && 370714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_state != OMX_StateIdle) { 37088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Empty this buffer in Invalid State"); 370961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 371061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 37116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 371261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL || (buffer->nSize != sizeof(OMX_BUFFERHEADERTYPE))) { 37138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::etb--> buffer is null or buffer size is invalid"); 371461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 371561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 37166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 371761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nVersion.nVersion != OMX_SPEC_VERSION) { 37188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::etb--> OMX Version Invalid"); 371961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorVersionMismatch; 372061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 372161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 372261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nInputPortIndex != (OMX_U32)PORT_INDEX_IN) { 37238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Bad port index to call empty_this_buffer"); 372461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 372561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 372661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_sInPortDef.bEnabled) { 37278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Cannot call empty_this_buffer while I/P port is disabled"); 372861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 372961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 373061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3731f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan nBufferIndex = buffer - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr); 373261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 373361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nBufferIndex > m_sInPortDef.nBufferCountActual ) { 37348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETB: Invalid buffer index[%d]", nBufferIndex); 373561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 373661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 373761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 373861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_count++; 37398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("DBG: i/p nTimestamp = %u", (unsigned)buffer->nTimeStamp); 37408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)hComp,(unsigned long)buffer,m_input_msg_id); 374161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 374261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 374347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 374461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 374561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::empty_this_buffer_proxy 374647e37c4428509524ee576920a98381f3e4872493Nick Pelly 374761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 374861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan This routine is used to push the encoded video frames to 374961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan the video decoder. 375047e37c4428509524ee576920a98381f3e4872493Nick Pelly 375161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 375261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 375347e37c4428509524ee576920a98381f3e4872493Nick Pelly 375461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 375561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything went successful. 375647e37c4428509524ee576920a98381f3e4872493Nick Pelly 375761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 37588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE omx_video::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp, 375961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 376047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 37618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 376261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *pmem_data_buf = NULL; 376361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int push_cnt = 0; 37649ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan unsigned nBufIndex = 0; 376561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 37669ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan encoder_media_buffer_type *media_buffer = NULL; 376761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 376961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int fd = 0; 37706eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 37718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ETBProxy: buffer->pBuffer[%p]", buffer->pBuffer); 377261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL) { 37738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid buffer[%p]", buffer); 377461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 377561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 37769ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan 37779ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // Buffer sanity checks 37789ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (meta_mode_enable && !mUsesColorConversion) { 37799ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan //For color-conversion case, we have an internal buffer and not a meta buffer 378061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool met_error = false; 37819ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan nBufIndex = buffer - meta_buffer_hdr; 37829ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (nBufIndex >= m_sInPortDef.nBufferCountActual) { 37838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid meta-bufIndex = %u", nBufIndex); 37849ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan return OMX_ErrorBadParameter; 37859ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 37869ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan media_buffer = (encoder_media_buffer_type *)meta_buffer_hdr[nBufIndex].pBuffer; 378761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer) { 378861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->buffer_type != kMetadataBufferTypeCameraSource && 37899ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan media_buffer->buffer_type != kMetadataBufferTypeGrallocSource) { 379061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan met_error = true; 37919ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } else { 379261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) { 379361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->meta_handle == NULL) 379461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan met_error = true; 3795e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin else { 3796e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin int nFds = media_buffer->meta_handle->numFds, 3797e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin nInt = media_buffer->meta_handle->numInts; 3798e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin met_error = ((nFds == 1 && nInt >= 2) /*normal*/ || 3799e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin (nFds < 16 && nInt >= nFds*3) /*batch*/) ? false : true; 3800e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (met_error) { 3801e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Unbalanced fds in handle: fds=%d ints=%d", 3802e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin nFds, nInt); 3803e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 3804e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 380561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 380661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 380761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 3808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev met_error = true; 380961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (met_error) { 38108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unkown source/metahandle in ETB call"); 38118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD); 381261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 3813826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 38149ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } else { 38159ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan nBufIndex = buffer - ((OMX_BUFFERHEADERTYPE *)m_inp_mem_ptr); 38169ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (nBufIndex >= m_sInPortDef.nBufferCountActual) { 38178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid bufIndex = %u", nBufIndex); 38189ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan return OMX_ErrorBadParameter; 38199ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 38209ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 38219ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan 38229ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan pending_input_buffers++; 38239ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (input_flush_progress == true) { 38248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0, 38259ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan OMX_COMPONENT_GENERATE_EBD); 38268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Input flush in progress"); 38279ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan return OMX_ErrorNone; 38289ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 38299ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#ifdef _MSM8974_ 38309ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (!meta_mode_enable) { 38319ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan fd = m_pInput_pmem[nBufIndex].fd; 38329ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 38339ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#endif 38349ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#ifdef _ANDROID_ICS_ 3835e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (meta_mode_enable && !mUsesColorConversion) { 3836e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin // Camera or Gralloc-source meta-buffers queued with encodeable color-format 383761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem Input_pmem_info; 3838f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!media_buffer) { 3839f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("%s: invalid media_buffer",__FUNCTION__); 3840f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorBadParameter; 3841f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 384261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) { 384361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.buffer = media_buffer; 384461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.fd = media_buffer->meta_handle->data[0]; 38456eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 384661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fd = Input_pmem_info.fd; 38476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 384861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset = media_buffer->meta_handle->data[1]; 384961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size = media_buffer->meta_handle->data[2]; 38509ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan DEBUG_PRINT_LOW("ETB (meta-Camera) fd = %d, offset = %d, size = %d", 38519ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan Input_pmem_info.fd, Input_pmem_info.offset, 385261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size); 385361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 385461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle; 385561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.buffer = media_buffer; 385661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.fd = handle->fd; 38576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 385861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fd = Input_pmem_info.fd; 38596eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 386061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset = 0; 386161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size = handle->size; 38629ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan DEBUG_PRINT_LOW("ETB (meta-gralloc) fd = %d, offset = %d, size = %d", 38639ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan Input_pmem_info.fd, Input_pmem_info.offset, 38649ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan Input_pmem_info.size); 386561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3866e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (dev_use_buf(&Input_pmem_info,PORT_INDEX_IN,nBufIndex) != true) { 38678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_use_buf"); 38688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD); 386961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 387061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3871d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan } else if (input_use_buffer && !m_use_input_pmem && m_pInput_pmem[nBufIndex].buffer) 3872826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 3873d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan if (input_use_buffer && !m_use_input_pmem && m_pInput_pmem[nBufIndex].buffer) 3874826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 3875c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan { 38768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Heap UseBuffer case, so memcpy the data"); 387714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan 387831cc990c1a8b4d2a25634a5275e85bb20ca34447Santhosh Behara auto_lock l(m_buf_lock); 3879c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan pmem_data_buf = (OMX_U8 *)m_pInput_pmem[nBufIndex].buffer; 38809f1dee37d43e3af1f21a846080f5a6a86944ff01Santhosh Behara if (pmem_data_buf && BITMASK_PRESENT(&m_client_in_bm_count, nBufIndex)) { 388114a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan memcpy (pmem_data_buf, (buffer->pBuffer + buffer->nOffset), 388214a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan buffer->nFilledLen); 388314a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan } 3884c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan DEBUG_PRINT_LOW("memcpy() done in ETBProxy for i/p Heap UseBuf"); 3885c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan } else if (mUseProxyColorFormat) { 38869ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // Gralloc-source buffers with color-conversion 3887c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan fd = m_pInput_pmem[nBufIndex].fd; 38888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ETB (color-converted) fd = %d, size = %u", 38898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fd, (unsigned int)buffer->nFilledLen); 3890c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan } else if (m_sInPortDef.format.video.eColorFormat == 38910b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan OMX_COLOR_FormatYUV420SemiPlanar) { 3892c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan //For the case where YUV420SP buffers are qeueued to component 3893c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan //by sources other than camera (Apps via MediaCodec), conversion 3894c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan //to vendor flavoured NV12 color format is required. 3895c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan if (!dev_color_align(buffer, m_sInPortDef.format.video.nFrameWidth, 3896c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan m_sInPortDef.format.video.nFrameHeight)) { 3897c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan DEBUG_PRINT_ERROR("Failed to adjust buffer color"); 38988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event((unsigned long)buffer, 0, OMX_COMPONENT_GENERATE_EBD); 3899c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan return OMX_ErrorUndefined; 3900c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan } 3901c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan } 3902e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (m_sExtraData && !dev_handle_input_extradata((void *)buffer, fd)) { 3903e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Failed to parse input extradata\n"); 3904e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _ANDROID_ICS_ 3905e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin omx_release_meta_buffer(buffer); 3906e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 3907e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD); 3908e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /*Generate an async error and move to invalid state*/ 3909e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pending_input_buffers--; 3910e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return OMX_ErrorBadParameter; 3911e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 39126eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 391361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_empty_buf(buffer, pmem_data_buf,nBufIndex,fd) != true) 3914826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 39150b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan if (dev_empty_buf(buffer, pmem_data_buf,0,0) != true) 3916826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 39170b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan { 39188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: dev_empty_buf failed"); 3919826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 39200b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan omx_release_meta_buffer(buffer); 3921826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 39228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD); 39230b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan /*Generate an async error and move to invalid state*/ 39240b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan pending_input_buffers--; 3925f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (hw_overload) { 3926f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorInsufficientResources; 3927f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 39280b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan return OMX_ErrorBadParameter; 39290b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan } 393061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 393147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 393247e37c4428509524ee576920a98381f3e4872493Nick Pelly 393347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 393461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 393561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::FillThisBuffer 393647e37c4428509524ee576920a98381f3e4872493Nick Pelly 393761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 393861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan IL client uses this method to release the frame buffer 393961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan after displaying them. 394047e37c4428509524ee576920a98381f3e4872493Nick Pelly 394161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 394261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 394347e37c4428509524ee576920a98381f3e4872493Nick Pelly 394461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 394561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 394647e37c4428509524ee576920a98381f3e4872493Nick Pelly 394761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 394847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::fill_this_buffer(OMX_IN OMX_HANDLETYPE hComp, 394961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 395047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 39518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FTB: buffer->pBuffer[%p]", buffer->pBuffer); 395214a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan if (m_state != OMX_StateExecuting && 395314a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_state != OMX_StatePause && 395414a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_state != OMX_StateIdle) { 39558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: FTB in Invalid State"); 395661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 395761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 395861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 395961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL ||(buffer->nSize != sizeof(OMX_BUFFERHEADERTYPE))) { 39608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->Invalid buffer or size"); 396161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 396261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 396361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 396461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nVersion.nVersion != OMX_SPEC_VERSION) { 39658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->OMX Version Invalid"); 396661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorVersionMismatch; 396761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 396861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 396961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nOutputPortIndex != (OMX_U32)PORT_INDEX_OUT) { 39708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->Bad port index"); 397161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 397261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 397361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 397461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_sOutPortDef.bEnabled) { 39758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->port is disabled"); 397661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 397761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 397861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event((unsigned long) hComp, (unsigned long)buffer,OMX_COMPONENT_GENERATE_FTB); 398061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 398147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 398247e37c4428509524ee576920a98381f3e4872493Nick Pelly 398347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 398461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 398561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::fill_this_buffer_proxy 398647e37c4428509524ee576920a98381f3e4872493Nick Pelly 398761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 398861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan IL client uses this method to release the frame buffer 398961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan after displaying them. 399047e37c4428509524ee576920a98381f3e4872493Nick Pelly 399161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 399261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 399347e37c4428509524ee576920a98381f3e4872493Nick Pelly 399461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 399561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 399647e37c4428509524ee576920a98381f3e4872493Nick Pelly 399761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 399847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::fill_this_buffer_proxy( 399961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 400061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* bufferAdd) 400147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 40028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 400361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *pmem_data_buf = NULL; 400461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE nRet = OMX_ErrorNone; 400561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FTBProxy: bufferAdd->pBuffer[%p]", bufferAdd->pBuffer); 400761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (bufferAdd == NULL || ((bufferAdd - m_out_mem_ptr) >= (int)m_sOutPortDef.nBufferCountActual) ) { 40098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: FTBProxy: Invalid i/p params"); 401061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 401161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 401261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 401361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers++; 401461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Return back the output buffer to client*/ 401561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( m_sOutPortDef.bEnabled != OMX_TRUE || output_flush_progress == true) { 40168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("o/p port is Disabled or Flush in Progress"); 40178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)bufferAdd,0, 401847e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_COMPONENT_GENERATE_FBD); 401961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 402061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 402147e37c4428509524ee576920a98381f3e4872493Nick Pelly 402261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (output_use_buffer && !m_use_output_pmem) { 40238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Heap UseBuffer case"); 402461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_data_buf = (OMX_U8 *)m_pOutput_pmem[bufferAdd - m_out_mem_ptr].buffer; 402561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 402661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 402761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_fill_buf(bufferAdd, pmem_data_buf,(bufferAdd - m_out_mem_ptr),m_pOutput_pmem[bufferAdd - m_out_mem_ptr].fd) != true) { 40288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_fill_buf() Failed"); 40298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)bufferAdd,0,OMX_COMPONENT_GENERATE_FBD); 403061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers--; 403161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 403261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 403361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 403461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 403547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 403647e37c4428509524ee576920a98381f3e4872493Nick Pelly 403747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 403861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 403961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::SetCallbacks 404047e37c4428509524ee576920a98381f3e4872493Nick Pelly 404161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 404261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Set the callbacks. 404347e37c4428509524ee576920a98381f3e4872493Nick Pelly 404461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 404561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 404647e37c4428509524ee576920a98381f3e4872493Nick Pelly 404761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 404861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything successful. 404947e37c4428509524ee576920a98381f3e4872493Nick Pelly 405061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 405147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::set_callbacks(OMX_IN OMX_HANDLETYPE hComp, 405261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_CALLBACKTYPE* callbacks, 405361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData) 405447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 40558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 405661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks = *callbacks; 40578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Callbacks Set %p %p %p",m_pCallbacks.EmptyBufferDone,\ 405861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EventHandler,m_pCallbacks.FillBufferDone); 405961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_app_data = appData; 406061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNotImplemented; 406147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 406247e37c4428509524ee576920a98381f3e4872493Nick Pelly 406347e37c4428509524ee576920a98381f3e4872493Nick Pelly 406447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 406561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 406661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::UseEGLImage 406747e37c4428509524ee576920a98381f3e4872493Nick Pelly 406861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 406961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Use EGL Image method implementation <TBD>. 407047e37c4428509524ee576920a98381f3e4872493Nick Pelly 407161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 407261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 407347e37c4428509524ee576920a98381f3e4872493Nick Pelly 407461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 407561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Not Implemented error. 407647e37c4428509524ee576920a98381f3e4872493Nick Pelly 407761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 40788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE omx_video::use_EGL_image(OMX_IN OMX_HANDLETYPE hComp, 407961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 408061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 408161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 408261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN void* eglImage) 408347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 40848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp, (void)bufferHdr, (void)port, (void)appData, (void)eglImage; 40858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: use_EGL_image: Not Implemented"); 408661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNotImplemented; 408747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 408847e37c4428509524ee576920a98381f3e4872493Nick Pelly 408947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 409061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 409161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ComponentRoleEnum 409247e37c4428509524ee576920a98381f3e4872493Nick Pelly 409361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 409461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Component Role Enum method implementation. 409547e37c4428509524ee576920a98381f3e4872493Nick Pelly 409661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 409761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 409847e37c4428509524ee576920a98381f3e4872493Nick Pelly 409961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 410061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything is successful. 410161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 410247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::component_role_enum(OMX_IN OMX_HANDLETYPE hComp, 410361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_U8* role, 410461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 index) 410547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 41068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 410761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 410861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) { 410961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 411061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_decoder.mpeg4",OMX_MAX_STRINGNAME_SIZE); 41118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 411261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 411361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 411461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 411561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.h263",OMX_MAX_STRINGNAME_SIZE)) { 411661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 411761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_decoder.h263",OMX_MAX_STRINGNAME_SIZE); 41188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 411961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 41208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 412161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 412261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 412361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 412461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 412561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_decoder.avc",OMX_MAX_STRINGNAME_SIZE); 41268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 412761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 41288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 412961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 413061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 413161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.vc1",OMX_MAX_STRINGNAME_SIZE)) { 413261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 413361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_decoder.vc1",OMX_MAX_STRINGNAME_SIZE); 41348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 413561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 41368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 413761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 413861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 413961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 414061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) { 414161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 414261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE); 41438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 414461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 414561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 414661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 414761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE)) { 414861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 414961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_encoder.h263",OMX_MAX_STRINGNAME_SIZE); 41508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 415161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 41528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 415361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 415461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 415561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 415661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 415761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE); 41588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 415961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 41608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 416161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 416261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 416361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 41646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 416561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) { 416661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 416761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE); 41688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 416961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 41708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 417161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 417261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 417361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 41746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 4175e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.hevc", OMX_MAX_STRINGNAME_SIZE)) { 4176f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if ((0 == index) && role) { 4177f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan strlcpy((char *)role, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); 4178f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s", role); 4179f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 4180f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 4181f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan eRet = OMX_ErrorNoMore; 4182f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 4183f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 418461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 41858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Querying Role on Unknown Component"); 418661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidComponentName; 418761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 418861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 418947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 419047e37c4428509524ee576920a98381f3e4872493Nick Pelly 419147e37c4428509524ee576920a98381f3e4872493Nick Pelly 419247e37c4428509524ee576920a98381f3e4872493Nick Pelly 419347e37c4428509524ee576920a98381f3e4872493Nick Pelly 419447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 419561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 419661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateDone 419747e37c4428509524ee576920a98381f3e4872493Nick Pelly 419861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 419961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if entire buffer pool is allocated by IL Client or not. 420061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Need this to move to IDLE state. 420147e37c4428509524ee576920a98381f3e4872493Nick Pelly 420261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 420361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 420447e37c4428509524ee576920a98381f3e4872493Nick Pelly 420561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 420661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false. 420747e37c4428509524ee576920a98381f3e4872493Nick Pelly 420861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 420947e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_done(void) 421047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 421161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 421261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet_In = false; 421361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet_Out = false; 421447e37c4428509524ee576920a98381f3e4872493Nick Pelly 421561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet_In = allocate_input_done(); 421661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet_Out = allocate_output_done(); 421747e37c4428509524ee576920a98381f3e4872493Nick Pelly 421861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bRet_In && bRet_Out) { 421961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 422061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 422147e37c4428509524ee576920a98381f3e4872493Nick Pelly 422261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 422347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 422447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 422561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 422661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateInputDone 422747e37c4428509524ee576920a98381f3e4872493Nick Pelly 422861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 422961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if I/P buffer pool is allocated by IL Client or not. 423047e37c4428509524ee576920a98381f3e4872493Nick Pelly 423161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 423261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 423347e37c4428509524ee576920a98381f3e4872493Nick Pelly 423461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 423561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false. 423647e37c4428509524ee576920a98381f3e4872493Nick Pelly 423761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 423847e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_input_done(void) 423947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 424061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 424161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i=0; 424247e37c4428509524ee576920a98381f3e4872493Nick Pelly 424361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr == NULL) { 424461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 424561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 424661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr ) { 424761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (; i<m_sInPortDef.nBufferCountActual; i++) { 424861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_inp_bm_count,i)) { 424961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 425061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 425161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 425261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 425361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i==m_sInPortDef.nBufferCountActual) { 425461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 425561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 425661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i==m_sInPortDef.nBufferCountActual && m_sInPortDef.bEnabled) { 425761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bPopulated = OMX_TRUE; 425861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 425947e37c4428509524ee576920a98381f3e4872493Nick Pelly return bRet; 426047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 426147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 426261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 426361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateOutputDone 426447e37c4428509524ee576920a98381f3e4872493Nick Pelly 426561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 426661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if entire O/P buffer pool is allocated by IL Client or not. 426747e37c4428509524ee576920a98381f3e4872493Nick Pelly 426861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 426961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 427047e37c4428509524ee576920a98381f3e4872493Nick Pelly 427161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 427261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false. 427347e37c4428509524ee576920a98381f3e4872493Nick Pelly 427461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 427547e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_output_done(void) 427647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 427761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 427861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned j=0; 427947e37c4428509524ee576920a98381f3e4872493Nick Pelly 428061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr == NULL) { 428161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 428261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 428347e37c4428509524ee576920a98381f3e4872493Nick Pelly 428461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr ) { 428561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (; j<m_sOutPortDef.nBufferCountActual; j++) { 428661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_out_bm_count,j)) { 428761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 428861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 428961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 429047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 429147e37c4428509524ee576920a98381f3e4872493Nick Pelly 429261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (j==m_sOutPortDef.nBufferCountActual) { 429361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 429461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 429547e37c4428509524ee576920a98381f3e4872493Nick Pelly 429661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (j==m_sOutPortDef.nBufferCountActual && m_sOutPortDef.bEnabled) { 429761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bPopulated = OMX_TRUE; 429861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 429961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 430047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 430147e37c4428509524ee576920a98381f3e4872493Nick Pelly 430247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 430361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 430461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ReleaseDone 430547e37c4428509524ee576920a98381f3e4872493Nick Pelly 430661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 430761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if IL client has released all the buffers. 430847e37c4428509524ee576920a98381f3e4872493Nick Pelly 430961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 431061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 431147e37c4428509524ee576920a98381f3e4872493Nick Pelly 431261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 431361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 431447e37c4428509524ee576920a98381f3e4872493Nick Pelly 431561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 431647e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_done(void) 431747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 431861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 43198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside release_done()"); 432061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_input_done()) { 432161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_output_done()) { 432261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 432361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 432461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 432561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 432647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 432747e37c4428509524ee576920a98381f3e4872493Nick Pelly 432847e37c4428509524ee576920a98381f3e4872493Nick Pelly 432947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 433061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 433161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ReleaseOutputDone 433247e37c4428509524ee576920a98381f3e4872493Nick Pelly 433361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 433461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if IL client has released all the buffers. 433547e37c4428509524ee576920a98381f3e4872493Nick Pelly 433661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 433761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 433847e37c4428509524ee576920a98381f3e4872493Nick Pelly 433961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 434061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 434147e37c4428509524ee576920a98381f3e4872493Nick Pelly 434261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 434347e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_output_done(void) 434447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 434561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 434661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i=0,j=0; 434761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 43488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside release_output_done()"); 434961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr) { 435061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (; j<m_sOutPortDef.nBufferCountActual; j++) { 435161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_out_bm_count,j)) { 435261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 435361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 435461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 435561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (j==m_sOutPortDef.nBufferCountActual) { 435661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 435761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 435861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 435961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 436061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 436161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 436247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 436347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 436461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 436561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ReleaseInputDone 436647e37c4428509524ee576920a98381f3e4872493Nick Pelly 436761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 436861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if IL client has released all the buffers. 436947e37c4428509524ee576920a98381f3e4872493Nick Pelly 437061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 437161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 437247e37c4428509524ee576920a98381f3e4872493Nick Pelly 437361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 437461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 437547e37c4428509524ee576920a98381f3e4872493Nick Pelly 437661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 437747e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_input_done(void) 437847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 437961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 438061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i=0,j=0; 438161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 43828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside release_input_done()"); 438361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr) { 438461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (; j<m_sInPortDef.nBufferCountActual; j++) { 438561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( BITMASK_PRESENT(&m_inp_bm_count,j)) { 438661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 438761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 438861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 438961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (j==m_sInPortDef.nBufferCountActual) { 439061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 439161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 439261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 439361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 439461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 439561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 439647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 439747e37c4428509524ee576920a98381f3e4872493Nick Pelly 439847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::fill_buffer_done(OMX_HANDLETYPE hComp, 439961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE * buffer) 440047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 44016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 44026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal int index = buffer - m_out_mem_ptr; 44036eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 44048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("fill_buffer_done: buffer->pBuffer[%p], flags=0x%x size = %u", 44058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buffer->pBuffer, (unsigned)buffer->nFlags, (unsigned int)buffer->nFilledLen); 44068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (buffer == NULL || ((buffer - m_out_mem_ptr) > (int)m_sOutPortDef.nBufferCountActual)) { 440761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 440861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 440947e37c4428509524ee576920a98381f3e4872493Nick Pelly 441061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers--; 441147e37c4428509524ee576920a98381f3e4872493Nick Pelly 44128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 4413e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin extra_data_handle.create_extra_data(buffer); 44146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 4415e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) { 4416e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("parsing extradata"); 4417e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin extra_data_handle.parse_extra_data(buffer); 4418e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 44196eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 44208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 44218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 442261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* For use buffer we need to copy the data */ 442361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pCallbacks.FillBufferDone) { 442461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nFilledLen > 0) { 442561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_fbd_count++; 4426826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 44278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (dev_get_output_log_flag()) { 44288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan dev_output_log_buffers((const char*)buffer->pBuffer, buffer->nFilledLen); 442961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 443061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 443161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) { 4432e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!dev_handle_output_extradata((void *)buffer)) 4433e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("Failed to parse output extradata"); 44348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 44358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan dev_extradata_log_buffers((char *)(((unsigned long)buffer->pBuffer + buffer->nOffset + 44368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buffer->nFilledLen + 3) & (~3))); 443761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 443861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.FillBufferDone (hComp,m_app_data,buffer); 443961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 444061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 444161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 444261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 444347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 444447e37c4428509524ee576920a98381f3e4872493Nick Pelly 444547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::empty_buffer_done(OMX_HANDLETYPE hComp, 444661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* buffer) 444747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 444861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int buffer_index = -1; 444961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4450f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan buffer_index = buffer - ((mUseProxyColorFormat && !mUsesColorConversion) ? meta_buffer_hdr : m_inp_mem_ptr); 44518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("empty_buffer_done: buffer[%p]", buffer); 445261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL || 4453f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan ((buffer_index > (int)m_sInPortDef.nBufferCountActual))) { 44548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR in empty_buffer_done due to index buffer"); 445561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 445661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 445761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 445861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_input_buffers--; 445961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4460f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (mUseProxyColorFormat && 4461f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (buffer_index >= 0 && (buffer_index < (int)m_sInPortDef.nBufferCountActual))) { 4462f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!pdest_frame && !input_flush_progress && mUsesColorConversion) { 446361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = buffer; 44648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("empty_buffer_done pdest_frame address is %p",pdest_frame); 446561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return push_input_buffer(hComp); 44669ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 446756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //check if empty-EOS-buffer is being returned, treat this same as the 446856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //color-conversion case as we queued a color-conversion buffer to encoder 446956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan bool handleEmptyEosBuffer = (mEmptyEosBuffer == buffer); 447056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (mUsesColorConversion || handleEmptyEosBuffer) { 447156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (handleEmptyEosBuffer) { 447256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan mEmptyEosBuffer = NULL; 447356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 44749ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // return color-conversion buffer back to the pool 44758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("empty_buffer_done insert address is %p",buffer); 44768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_opq_pmem_q.insert_entry((unsigned long)buffer, 0, 0)) { 44778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("empty_buffer_done: pmem queue is full"); 447861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 447961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 44809ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } else { 44819ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // We are not dealing with color-conversion, Buffer being returned 44829ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // here is client's buffer, return it back to client 4483f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (m_pCallbacks.EmptyBufferDone && buffer) { 4484f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer); 4485f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("empty_buffer_done: Returning client buf %p", buffer); 44869ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 448761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 448861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_pCallbacks.EmptyBufferDone) { 448961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp ,m_app_data, buffer); 449061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 449161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 449247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 4493826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 4494826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid omx_video::complete_pending_buffer_done_cbs() 4495826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 44968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1; 44978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2; 44988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident; 449961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue tmp_q, pending_bd_q; 450061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 450161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // pop all pending GENERATE FDB from ftb queue 450261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_ftb_q.m_size) { 450361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.pop_entry(&p1,&p2,&ident); 450461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_FBD) { 450561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_bd_q.insert_entry(p1,p2,ident); 450661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 450761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan tmp_q.insert_entry(p1,p2,ident); 4508826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 450961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 451061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //return all non GENERATE FDB to ftb queue 451161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (tmp_q.m_size) { 451261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan tmp_q.pop_entry(&p1,&p2,&ident); 451361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.insert_entry(p1,p2,ident); 451461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 451561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // pop all pending GENERATE EDB from etb queue 451661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_etb_q.m_size) { 451761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.pop_entry(&p1,&p2,&ident); 451861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_EBD) { 451961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_bd_q.insert_entry(p1,p2,ident); 452061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 452161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan tmp_q.insert_entry(p1,p2,ident); 452261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 452361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 452461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //return all non GENERATE FDB to etb queue 452561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (tmp_q.m_size) { 452661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan tmp_q.pop_entry(&p1,&p2,&ident); 452761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.insert_entry(p1,p2,ident); 452861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 452961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 453061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // process all pending buffer dones 453161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (pending_bd_q.m_size) { 453261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_bd_q.pop_entry(&p1,&p2,&ident); 453361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (ident) { 453461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EBD: 453561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (empty_buffer_done(&m_cmp, (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone) { 45368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: empty_buffer_done() failed!"); 453761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_error (); 453861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 453961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 454061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 454161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_FBD: 454261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (fill_buffer_done(&m_cmp, (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone ) { 45438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: fill_buffer_done() failed!"); 454461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_error (); 454561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 454661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 4547826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 4548826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 4549826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 4550826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 4551826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P 4552826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType) 4553826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 455461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 455561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!profileLevelType) 455661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 455761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 455861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nPortIndex == 1) { 455961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 456061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 456161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline; 456261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel31; 456361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 456461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain; 456561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel31; 456661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 2) { 456761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh; 456861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel31; 456961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 45708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", 45718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (int)profileLevelType->nProfileIndex); 457261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 457361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 457461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 457561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 457661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_H263ProfileBaseline; 457761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_H263Level70; 457861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 45798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", (int)profileLevelType->nProfileIndex); 458061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 458161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 458261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 458361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 458461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileSimple; 458561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_MPEG4Level5; 458661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 458761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple; 458861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_MPEG4Level5; 458961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 45908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", (int)profileLevelType->nProfileIndex); 459161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 459261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 459361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 459461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 45958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported should be queried on Input port only %d", (int)profileLevelType->nPortIndex); 459661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 459761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 45988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported for Input port returned Profile:%d, Level:%d", 45998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (int)profileLevelType->eProfile, (int)profileLevelType->eLevel); 460061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 4601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 4602826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 4603826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 4604826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 4605826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType) 4606826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 460761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 460861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!profileLevelType) 460961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 4610826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 461161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nPortIndex == 1) { 461261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 46138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#if defined _MSM8974_ && !defined _MSM8226_ 461461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 461561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline; 46168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 461761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 461861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain; 46198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 462061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 2) { 462161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh; 46228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 46238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (profileLevelType->nProfileIndex == 3) { 4624544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar profileLevelType->eProfile = OMX_VIDEO_AVCProfileConstrainedBaseline; 46258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 4626e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else if (profileLevelType->nProfileIndex == 4) { 4627544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedBaseline; 4628544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 4629544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar } else if (profileLevelType->nProfileIndex == 5) { 4630544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar profileLevelType->eProfile = OMX_VIDEO_AVCProfileConstrainedHigh; 4631544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 4632544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar } else if (profileLevelType->nProfileIndex == 6) { 4633e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedHigh; 4634e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 463561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 46368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", 46378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)profileLevelType->nProfileIndex); 463861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 463961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 46406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 464161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 464261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline; 464361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 464461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 464561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 464661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain; 464761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 464861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 2) { 464961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh; 465061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 46518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8226_ 46528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (profileLevelType->nProfileIndex == 3) { 4653544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar profileLevelType->eProfile = OMX_VIDEO_AVCProfileConstrainedBaseline; 4654544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 4655544fdbb7dbafbe83a1313564074f0af689aae752Lajos Molnar } else if (profileLevelType->nProfileIndex == 4) { 46568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedBaseline; 46578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 46588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 465961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 46608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", 46618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (int)profileLevelType->nProfileIndex); 466261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 466361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 46646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 466561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 466661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 466761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_H263ProfileBaseline; 466861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_H263Level70; 466961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 46708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", (unsigned int)profileLevelType->nProfileIndex); 467161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 467261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 467361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 467461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 467561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileSimple; 467661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_MPEG4Level5; 467761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 467861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple; 467961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_MPEG4Level5; 468061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 46818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", (unsigned int)profileLevelType->nProfileIndex); 468261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 468361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 46845aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingVP8) { 46857beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano if (profileLevelType->nProfileIndex == 0) { 46867beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano profileLevelType->eProfile = OMX_VIDEO_VP8ProfileMain; 46877beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano profileLevelType->eLevel = OMX_VIDEO_VP8Level_Version0; 46887beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (profileLevelType->nProfileIndex == 1) { 46897beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano profileLevelType->eProfile = OMX_VIDEO_VP8ProfileMain; 46907beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano profileLevelType->eLevel = OMX_VIDEO_VP8Level_Version1; 46917beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else { 46928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("VP8: get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", 46938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)profileLevelType->nProfileIndex); 46947beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano eRet = OMX_ErrorNoMore; 46957beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 4696f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingHEVC) { 4697f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (profileLevelType->nProfileIndex == 0) { 4698f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan profileLevelType->eProfile = OMX_VIDEO_HEVCProfileMain; 4699f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan profileLevelType->eLevel = OMX_VIDEO_HEVCMainTierLevel52; 4700f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 4701f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan profileLevelType->eProfile = OMX_VIDEO_HEVCProfileMain10; 4702f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan profileLevelType->eLevel = OMX_VIDEO_HEVCMainTierLevel52; 4703f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 4704f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("HEVC: get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", 4705f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (unsigned int)profileLevelType->nProfileIndex); 4706f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan eRet = OMX_ErrorNoMore; 4707f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 470861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 47098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported ret NoMore"); 471061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 471161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 471261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 47138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported should be queried on Input port only %u", (unsigned int)profileLevelType->nPortIndex); 471461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 4715826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 47168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported for Input port returned Profile:%u, Level:%u", 47178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)profileLevelType->eProfile, (unsigned int)profileLevelType->eLevel); 471861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 4719826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 47206eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 4721826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 4722826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 47238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint omx_video::alloc_map_ion_memory(int size, 47248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct ion_allocation_data *alloc_data, 472561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_fd_data *fd_data,int flag) 4726826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 472761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ion buf_ion_info; 472861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int ion_device_fd =-1,rc=0,ion_dev_flags = 0; 472961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (size <=0 || !alloc_data || !fd_data) { 47308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid input to alloc_map_ion_memory"); 473161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -EINVAL; 473261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 473361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 473461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ion_dev_flags = O_RDONLY; 473561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ion_device_fd = open (MEM_DEVICE,ion_dev_flags); 473661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ion_device_fd < 0) { 47378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ION Device open() Failed"); 473861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ion_device_fd; 473961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 47418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(secure_session) { 4742e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin alloc_data->len = (size + (SECURE_ALIGN - 1)) & ~(SECURE_ALIGN - 1); 4743e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin alloc_data->align = SECURE_ALIGN; 4744e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin alloc_data->flags = flag; 4745e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin alloc_data->heap_id_mask = ION_HEAP(MEM_HEAP_ID); 4746e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (alloc_data->flags & ION_FLAG_CP_BITSTREAM) { 4747e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin alloc_data->heap_id_mask |= ION_HEAP(ION_SECURE_DISPLAY_HEAP_ID); 4748e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 4749f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("ION ALLOC sec buf: size %u align %u flags %x", 4750f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (unsigned int)alloc_data->len, (unsigned int)alloc_data->align, 4751f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan alloc_data->flags); 47528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 47538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->len = (size + (SZ_4K - 1)) & ~(SZ_4K - 1); 47548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->align = SZ_4K; 47558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->flags = (flag & ION_FLAG_CACHED ? ION_FLAG_CACHED : 0); 47566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P 4757e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin alloc_data->heap_id_mask = ION_HEAP(MEM_HEAP_ID); 47586eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 4759e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin alloc_data->heap_id_mask = (ION_HEAP(MEM_HEAP_ID) | 4760e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin ION_HEAP(ION_IOMMU_HEAP_ID)); 47616eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 4762f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("ION ALLOC unsec buf: size %u align %u flags %x", 4763f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (unsigned int)alloc_data->len, (unsigned int)alloc_data->align, 4764f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan alloc_data->flags); 47658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 47668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 476761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rc = ioctl(ion_device_fd,ION_IOC_ALLOC,alloc_data); 476861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (rc || !alloc_data->handle) { 47698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION ALLOC memory failed 0x%x", rc); 47708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->handle = 0; 477161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(ion_device_fd); 477261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ion_device_fd = -1; 4773826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev return ion_device_fd; 477461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 477561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fd_data->handle = alloc_data->handle; 477661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rc = ioctl(ion_device_fd,ION_IOC_MAP,fd_data); 477761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (rc) { 47788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION MAP failed "); 477961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info.ion_alloc_data = *alloc_data; 478061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info.ion_device_fd = ion_device_fd; 478161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info.fd_ion_data = *fd_data; 478261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&buf_ion_info); 478361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fd_data->fd =-1; 478461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ion_device_fd =-1; 478561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 478661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ion_device_fd; 4787826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 4788826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 47898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanvoid omx_video::free_ion_memory(struct venc_ion *buf_ion_info) 4790826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 479161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!buf_ion_info) { 47928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid input to free_ion_memory"); 479361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return; 479461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 479561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(buf_ion_info->ion_device_fd,ION_IOC_FREE, 479661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &buf_ion_info->ion_alloc_data.handle)) { 47978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION free failed "); 479861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return; 479961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 480061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(buf_ion_info->ion_device_fd); 48018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buf_ion_info->ion_alloc_data.handle = 0; 480261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info->ion_device_fd = -1; 480361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info->fd_ion_data.fd = -1; 4804826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 4805826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 48066eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 4807826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 4808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid omx_video::omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer) 4809826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 481061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer && meta_mode_enable) { 481161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan encoder_media_buffer_type *media_ptr; 481261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem Input_pmem; 481361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int index_pmem = 0; 481461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool meta_error = false; 481561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 481661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan index_pmem = (buffer - m_inp_mem_ptr); 481756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (mUsesColorConversion && 481861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (index_pmem < m_sInPortDef.nBufferCountActual)) { 481961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!dev_free_buf((&m_pInput_pmem[index_pmem]),PORT_INDEX_IN)) { 48208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("omx_release_meta_buffer dev free failed"); 482161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 482261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 482361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_ptr = (encoder_media_buffer_type *) buffer->pBuffer; 482461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_ptr && media_ptr->meta_handle) { 482561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_ptr->buffer_type == kMetadataBufferTypeCameraSource && 482661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_ptr->meta_handle->numFds == 1 && 48278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan media_ptr->meta_handle->numInts >= 2) { 482861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.fd = media_ptr->meta_handle->data[0]; 482961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.buffer = media_ptr; 483061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.size = media_ptr->meta_handle->data[2]; 483161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.offset = media_ptr->meta_handle->data[1]; 483261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("EBD fd = %d, offset = %d, size = %d",Input_pmem.fd, 483361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.offset, 483461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.size); 483561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (media_ptr->buffer_type == kMetadataBufferTypeGrallocSource) { 483661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private_handle_t *handle = (private_handle_t *)media_ptr->meta_handle; 483761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.buffer = media_ptr; 483861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.fd = handle->fd; 483961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.offset = 0; 484061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.size = handle->size; 484161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 484261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_error = true; 484361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR(" Meta Error set in EBD"); 484461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 484561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!meta_error) 484661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_error = !dev_free_buf(&Input_pmem,PORT_INDEX_IN); 484761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_error) { 484861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR(" Warning dev_free_buf failed flush value is %d", 484961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_flush_progress); 485061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 485161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48526eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } 48537eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George } 4854826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 48556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 485661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_video::omx_c2d_conv::omx_c2d_conv() 485761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 485861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 485961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 486061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 486161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 486261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src_format = NV12_128m; 486361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_init(&c_lock, NULL); 486461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 486561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 486661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::init() 486761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 486861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 486961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle || mConvertOpen || mConvertClose) { 48708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("omx_c2d_conv::init called twice"); 487161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 487261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 487361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status) { 487461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = dlopen("libc2dcolorconvert.so", RTLD_LAZY); 487561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 487661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = (createC2DColorConverter_t *) 487761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlsym(mLibHandle,"createC2DColorConverter"); 487861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = (destroyC2DColorConverter_t *) 487961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlsym(mLibHandle,"destroyC2DColorConverter"); 488061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mConvertOpen || !mConvertClose) 488161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 488261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 488361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 488461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 488561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!status && mLibHandle) { 488661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlclose(mLibHandle); 488761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 488861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 488961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 489061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 489161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 489261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 489361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 489461a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::convert(int src_fd, void *src_base, void *src_viraddr, 489561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int dest_fd, void *dest_base, void *dest_viraddr) 489661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 489761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int result; 489861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!src_viraddr || !dest_viraddr || !c2dcc || !src_base || !dest_base) { 48998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid arguments omx_c2d_conv::convert"); 490061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 490161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 490261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 490361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan result = c2dcc->convertC2D(src_fd, src_base, src_viraddr, 490461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dest_fd, dest_base, dest_viraddr); 490561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 49068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Color convert status %d",result); 490761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ((result < 0)?false:true); 490861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 490961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 491061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::open(unsigned int height,unsigned int width, 491161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ColorConvertFormat src, ColorConvertFormat dest,unsigned int src_stride) 491261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 491361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = false; 491461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 491561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2dcc) { 491661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = mConvertOpen(width, height, width, height, 491761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src,dest,0,src_stride); 491861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (c2dcc) { 491961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src_format = src; 492061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = true; 492161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 49228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("mConvertOpen failed"); 492361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 492461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 492561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 492661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 492761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 492861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanvoid omx_video::omx_c2d_conv::close() 492961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 493061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 493161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 493261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mConvertClose && c2dcc) 493361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose(c2dcc); 493461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 493561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 493661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 493761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 493861a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_video::omx_c2d_conv::~omx_c2d_conv() 493961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 49408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Destroy C2D instance"); 494161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 494261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mConvertClose && c2dcc) { 494361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 494461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose(c2dcc); 494561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 494661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 494761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlclose(mLibHandle); 494861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 494961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 495061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 495161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 495261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 495361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_destroy(&c_lock); 495461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 495561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 495661a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_video::omx_c2d_conv::get_src_format() 495761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 495861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int format = -1; 495961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (src_format == NV12_128m) { 496061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan format = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; 496161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (src_format == RGBA8888) { 496261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan format = HAL_PIXEL_FORMAT_RGBA_8888; 496361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 496461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return format; 496561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 496661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 496761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size) 496861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 496961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int cret = 0; 497061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ret = false; 497161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan C2DBuffReq bufferreq; 497261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (c2dcc) { 497361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferreq.size = 0; 497461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 497561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan cret = c2dcc->getBuffReq(port,&bufferreq); 497661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 49778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Status of getbuffer is %d", cret); 497861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = (cret)?false:true; 497961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_size = bufferreq.size; 498061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 498161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 498261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 498361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4984e4010605f233a213cf0d972397bb33c34c364227Patrick Tjinbool omx_video::is_conv_needed(int hal_fmt, int hal_flags) 4985e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin{ 4986e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bool bRet = hal_fmt == HAL_PIXEL_FORMAT_RGBA_8888 && 4987e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin !(hal_flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED); 4988e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#ifdef _HW_RGBA 4989e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin bRet = false; 4990e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin#endif 4991e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_LOW("RGBA conversion %s", bRet ? "Needed":"Not-Needed"); 4992e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return bRet; 4993e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin} 4994e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 4995939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavanvoid omx_video::print_debug_color_aspects(ColorAspects *aspects, const char *prefix) { 4996939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan DEBUG_PRINT_HIGH("%s : Color aspects : Primaries = %d Range = %d Transfer = %d MatrixCoeffs = %d", 4997939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan prefix, aspects->mPrimaries, aspects->mRange, aspects->mTransfer, aspects->mMatrixCoeffs); 4998939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan} 4999939bc4145117bc6b87d6cef5c0219c63efff113bPraveen Chavan 500061a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::empty_this_buffer_opaque(OMX_IN OMX_HANDLETYPE hComp, 500161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 500261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 500361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned nBufIndex = 0; 500461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 500561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan encoder_media_buffer_type *media_buffer; 5006587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan private_handle_t *handle = NULL; 50078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ETBProxyOpaque: buffer[%p]", buffer); 500861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 500961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL) { 50108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Invalid buffer[%p]",buffer); 501161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 501261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 501361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nBufIndex = buffer - meta_buffer_hdr; 501461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nBufIndex >= m_sInPortDef.nBufferCountActual) { 50158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Invalid bufindex = %u", 501661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nBufIndex); 501761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 501861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 501961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_buffer = (encoder_media_buffer_type *)buffer->pBuffer; 5020587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan if ((!media_buffer || !media_buffer->meta_handle) && 5021587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan !(buffer->nFlags & OMX_BUFFERFLAG_EOS)) { 5022f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("Incorrect Buffer queued media buffer = %p", 5023f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan media_buffer); 5024f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer); 5025f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorBadParameter; 5026587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan } else if (media_buffer) { 5027587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan handle = (private_handle_t *)media_buffer->meta_handle; 5028f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 502956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 5030e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (media_buffer && media_buffer->buffer_type == 5031e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin kMetadataBufferTypeCameraSource) { 5032e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin return empty_this_buffer_proxy(hComp, buffer); 5033e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 5034e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 5035e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin /*Enable following code once private handle color format is 5036e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin updated correctly*/ 503725adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan 5038e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (buffer->nFilledLen > 0 && handle) { 50393b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (c2d_opened && handle->format != c2d_conv.get_src_format()) { 50403b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan c2d_conv.close(); 50413b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan c2d_opened = false; 50423b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 5043e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin 50443b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (!c2d_opened) { 5045e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin mUsesColorConversion = is_conv_needed(handle->format, handle->flags); 5046e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (mUsesColorConversion) { 5047e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_INFO("open Color conv forW: %u, H: %u", 50488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.format.video.nFrameWidth, 50498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.format.video.nFrameHeight); 50503b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (!c2d_conv.open(m_sInPortDef.format.video.nFrameHeight, 50513b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan m_sInPortDef.format.video.nFrameWidth, 50523b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan RGBA8888, NV12_128m, handle->width)) { 50533b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); 50548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Color conv open failed"); 50553b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan return OMX_ErrorBadParameter; 50563b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 50573b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan c2d_opened = true; 50583b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan#ifdef _MSM8974_ 5059e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!dev_set_format(NV12_128m)) 5060e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin DEBUG_PRINT_ERROR("cannot set color format"); 50613b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan#endif 506261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 506361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 506461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 506561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (input_flush_progress == true) { 506661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); 50678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Input flush in progress"); 506861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 506961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 507061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 507161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame) { 507261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = buffer; 507361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = push_input_buffer(hComp); 507461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 50758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_opq_meta_q.insert_entry((unsigned long)buffer,0,0)) { 50768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Queue is full"); 50778f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); 507861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 507961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 508061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 508161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 508261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 508361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 508461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::queue_meta_buffer(OMX_HANDLETYPE hComp, 508561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem &Input_pmem_info) 508661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 508761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 508861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 50898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long address = 0,p2,id; 509061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("In queue Meta Buffer"); 509261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame || !pdest_frame) { 50938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("convert_queue_buffer invalid params"); 509461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 509561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 509661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 50973b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (psource_frame->nFilledLen > 0) { 50983b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (dev_use_buf(&Input_pmem_info,PORT_INDEX_IN,0) != true) { 50998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_use_buf"); 51008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)psource_frame,0,OMX_COMPONENT_GENERATE_EBD); 51013b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan ret = OMX_ErrorBadParameter; 51023b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 510361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 510461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 510561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ret == OMX_ErrorNone) 510661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = empty_this_buffer_proxy(hComp,psource_frame); 510761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 510861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ret == OMX_ErrorNone) { 510961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = NULL; 511061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame && m_opq_meta_q.m_size) { 511161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_meta_q.pop_entry(&address,&p2,&id); 511261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = (OMX_BUFFERHEADERTYPE* ) address; 511361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 51148f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan } else { 51158f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan // there has been an error and source frame has been scheduled for an EBD 51168f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan psource_frame = NULL; 511761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 511861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 511961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 512061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 512161a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::convert_queue_buffer(OMX_HANDLETYPE hComp, 51228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct pmem &Input_pmem_info,unsigned long &index) 512361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 512461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 512561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *uva; 512661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 51278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long address = 0,p2,id; 512861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("In Convert and queue Meta Buffer"); 513061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame || !pdest_frame) { 51318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("convert_queue_buffer invalid params"); 513261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 513361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 51348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (secure_session) { 51358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("cannot convert buffer during secure session"); 51368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorInvalidState; 51378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 513861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 513961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame->nFilledLen) { 51403b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if(psource_frame->nFlags & OMX_BUFFERFLAG_EOS) { 51413b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nFilledLen = psource_frame->nFilledLen; 51423b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nTimeStamp = psource_frame->nTimeStamp; 51433b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nFlags = psource_frame->nFlags; 51448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Skipping color conversion for empty EOS Buffer " 51458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "header=%p filled-len=%u", pdest_frame, (unsigned int)pdest_frame->nFilledLen); 51463b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } else { 51473b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nOffset = 0; 51483b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nFilledLen = 0; 51493b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nTimeStamp = psource_frame->nTimeStamp; 51503b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nFlags = psource_frame->nFlags; 51518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Buffer header %p Filled len size %u", 51528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pdest_frame, (unsigned int)pdest_frame->nFilledLen); 51533b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 515461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 515561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan uva = (unsigned char *)mmap(NULL, Input_pmem_info.size, 515661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PROT_READ|PROT_WRITE, 515761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,Input_pmem_info.fd,0); 515861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (uva == MAP_FAILED) { 515961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 516061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 516161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2d_conv.convert(Input_pmem_info.fd, uva, uva, 516261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[index].fd, pdest_frame->pBuffer, pdest_frame->pBuffer)) { 51638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Color Conversion failed"); 516461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 516561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 516661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int buf_size = 0; 516761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2d_conv.get_buffer_size(C2D_OUTPUT,buf_size)) 516861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 516961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 517061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame->nOffset = 0; 517161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame->nFilledLen = buf_size; 517261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame->nTimeStamp = psource_frame->nTimeStamp; 517361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame->nFlags = psource_frame->nFlags; 51748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Buffer header %p Filled len size %u", 51758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pdest_frame, (unsigned int)pdest_frame->nFilledLen); 517661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 517761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 517861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan munmap(uva,Input_pmem_info.size); 517961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 518061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 518161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_use_buf(&m_pInput_pmem[index],PORT_INDEX_IN,0) != true) { 51828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_use_buf"); 51838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)pdest_frame,0,OMX_COMPONENT_GENERATE_EBD); 518461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 518561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 518661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ret == OMX_ErrorNone) 518761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = empty_this_buffer_proxy(hComp,pdest_frame); 518861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ret == OMX_ErrorNone) { 518961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp ,m_app_data, psource_frame); 519061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = NULL; 519161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = NULL; 519261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame && m_opq_meta_q.m_size) { 519361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_meta_q.pop_entry(&address,&p2,&id); 519461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = (OMX_BUFFERHEADERTYPE* ) address; 519561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 519661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pdest_frame && m_opq_pmem_q.m_size) { 519761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_pmem_q.pop_entry(&address,&p2,&id); 519861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = (OMX_BUFFERHEADERTYPE* ) address; 51998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("pdest_frame pop address is %p",pdest_frame); 520061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 52018f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan } else { 52028f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan // there has been an error and source frame has been scheduled for an EBD 52038f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan psource_frame = NULL; 520461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 520561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 520661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 520761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 520861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::push_input_buffer(OMX_HANDLETYPE hComp) 520961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 52108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long address = 0,p2,id, index = 0; 521161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 521261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 5213f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("In push input buffer"); 521461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame && m_opq_meta_q.m_size) { 521561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_meta_q.pop_entry(&address,&p2,&id); 521661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = (OMX_BUFFERHEADERTYPE* ) address; 521761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 521861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pdest_frame && m_opq_pmem_q.m_size) { 521961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_pmem_q.pop_entry(&address,&p2,&id); 522061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = (OMX_BUFFERHEADERTYPE* ) address; 522161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 522261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (psource_frame != NULL && pdest_frame != NULL && 522361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret == OMX_ErrorNone) { 522461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem Input_pmem_info; 522561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan encoder_media_buffer_type *media_buffer; 522661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan index = pdest_frame - m_inp_mem_ptr; 522761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index >= m_sInPortDef.nBufferCountActual) { 52288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Output buffer index is wrong %u act count %u", 52298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)index, (unsigned int)m_sInPortDef.nBufferCountActual); 523061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 523161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 5232b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan 5233b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //Meta-Buffer with empty filled-length can contain garbage handle 5234b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //Some clients queue such buffers to signal EOS. Handle this case 5235b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan // separately by queueing an intermediate color-conversion buffer 5236b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan // and propagate the EOS. 5237b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan if (psource_frame->nFilledLen == 0 && (psource_frame->nFlags & OMX_BUFFERFLAG_EOS)) { 5238b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan return push_empty_eos_buffer(hComp, psource_frame); 5239b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan } 524061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_buffer = (encoder_media_buffer_type *)psource_frame->pBuffer; 524161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Will enable to verify camcorder in current TIPS can be removed*/ 524261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) { 524361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.buffer = media_buffer; 524461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.fd = media_buffer->meta_handle->data[0]; 524561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset = media_buffer->meta_handle->data[1]; 524661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size = media_buffer->meta_handle->data[2]; 524761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("ETB fd = %d, offset = %d, size = %d",Input_pmem_info.fd, 524861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset, 524961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size); 525061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = queue_meta_buffer(hComp,Input_pmem_info); 525161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 525261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle; 525361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.buffer = media_buffer; 525461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.fd = handle->fd; 525561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset = 0; 525661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size = handle->size; 5257e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_graphicBufferSize = handle->size; 5258e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (is_conv_needed(handle->format, handle->flags)) 525961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = convert_queue_buffer(hComp,Input_pmem_info,index); 5260f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan else if (handle->format == HAL_PIXEL_FORMAT_NV12_ENCODEABLE || 5261e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin handle->format == QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m || 5262e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin handle->format == QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed || 5263e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin handle->format == HAL_PIXEL_FORMAT_RGBA_8888 || 5264e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin handle->format == QOMX_COLOR_Format32bitRGBA8888Compressed) 526561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = queue_meta_buffer(hComp,Input_pmem_info); 526661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 526761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 526861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 526961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 527061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 527161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 527256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 527356dd7e53ba5657987bd527fa996a7942da01ef63Praveen ChavanOMX_ERRORTYPE omx_video::push_empty_eos_buffer(OMX_HANDLETYPE hComp, 527456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan OMX_BUFFERHEADERTYPE* buffer) { 527556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan OMX_BUFFERHEADERTYPE* opqBuf = NULL; 527656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan OMX_ERRORTYPE retVal = OMX_ErrorNone; 5277f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan unsigned index = 0; 5278f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 5279f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("In push empty eos buffer"); 528056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan do { 5281f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (mUsesColorConversion) { 5282e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (pdest_frame) { 5283e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //[1] use a checked out conversion buffer, if one is available 5284e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin opqBuf = pdest_frame; 5285e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin pdest_frame = NULL; 5286e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } else if (m_opq_pmem_q.m_size) { 5287e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin //[2] else pop out one from the queue, if available 5288e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin unsigned long address = 0, p2, id; 5289e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin m_opq_pmem_q.pop_entry(&address,&p2,&id); 5290e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin opqBuf = (OMX_BUFFERHEADERTYPE* ) address; 5291e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin } 5292f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan index = opqBuf - m_inp_mem_ptr; 5293f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 5294f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan opqBuf = (OMX_BUFFERHEADERTYPE* ) buffer; 5295f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan index = opqBuf - meta_buffer_hdr; 5296f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 5297f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 529856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (!opqBuf || index >= m_sInPortDef.nBufferCountActual) { 529956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan DEBUG_PRINT_ERROR("push_empty_eos_buffer: Could not find a " 5300b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan "color-conversion buffer to queue ! defer until available"); 5301b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //[3] else, returning back will defer calling this function again 5302b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //until a conversion buffer is returned by the encoder and also 5303b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //hold on to the client's buffer 5304b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan return OMX_ErrorNone; 530556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 530656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan struct pmem Input_pmem_info; 530756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan Input_pmem_info.buffer = opqBuf; 530856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan Input_pmem_info.fd = m_pInput_pmem[index].fd; 530956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan Input_pmem_info.offset = 0; 531056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan Input_pmem_info.size = m_pInput_pmem[index].size; 531156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 531256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (dev_use_buf(&Input_pmem_info, PORT_INDEX_IN, 0) != true) { 531356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_use_buf for empty eos buffer"); 531456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan retVal = OMX_ErrorBadParameter; 531556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan break; 531656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 531756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 531856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //Queue with null pBuffer, as pBuffer in client's hdr can be junk 531956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //Clone the color-conversion buffer to avoid overwriting original buffer 532056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan OMX_BUFFERHEADERTYPE emptyEosBufHdr; 532156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan memcpy(&emptyEosBufHdr, opqBuf, sizeof(OMX_BUFFERHEADERTYPE)); 532256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan emptyEosBufHdr.nFilledLen = 0; 532356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan emptyEosBufHdr.nTimeStamp = buffer->nTimeStamp; 532456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan emptyEosBufHdr.nFlags = buffer->nFlags; 532556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan emptyEosBufHdr.pBuffer = NULL; 5326e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin if (!mUsesColorConversion && !mUseProxyColorFormat) 5327f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan emptyEosBufHdr.nAllocLen = m_sInPortDef.nBufferSize; 5328e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin else if (mUseProxyColorFormat) 5329e4010605f233a213cf0d972397bb33c34c364227Patrick Tjin emptyEosBufHdr.nAllocLen = m_graphicBufferSize > 0 ? m_graphicBufferSize : m_sInPortDef.nBufferSize; 533056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (dev_empty_buf(&emptyEosBufHdr, 0, index, m_pInput_pmem[index].fd) != true) { 533156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_empty_buf for empty eos buffer"); 533256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan dev_free_buf(&Input_pmem_info, PORT_INDEX_IN); 533356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan retVal = OMX_ErrorBadParameter; 533456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan break; 533556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 533656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan mEmptyEosBuffer = opqBuf; 533756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } while(false); 533856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 533956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //return client's buffer regardless since intermediate color-conversion 534056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //buffer is sent to the the encoder 534156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer); 534256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan --pending_input_buffers; 534356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan return retVal; 534456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan} 5345b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 5346b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan// no code beyond this ! 5347b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan 5348b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan// inline import of vendor extensions implementation 5349b76bf315339327ed8c3ee873f0fe8494e8df9f42Praveen Chavan#include "omx_video_extensions.hpp" 5350