147e37c4428509524ee576920a98381f3e4872493Nick Pelly/*-------------------------------------------------------------------------- 216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen ChavanCopyright (c) 2010-2016, 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 8461a2c6a19dbd06a317a419623020e02056661876Praveen Chavantypedef struct OMXComponentCapabilityFlagsType { 8547e37c4428509524ee576920a98381f3e4872493Nick Pelly ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS 8616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan OMX_U32 nSize; 8716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan OMX_VERSIONTYPE nVersion; 8847e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iIsOMXComponentMultiThreaded; 8947e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc; 9047e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc; 9147e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentSupportsMovableInputBuffers; 9247e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentSupportsPartialFrames; 9347e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentUsesNALStartCodes; 9447e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentCanHandleIncompleteFrames; 9547e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_BOOL iOMXComponentUsesFullAVCFrames; 9647e37c4428509524ee576920a98381f3e4872493Nick Pelly 9747e37c4428509524ee576920a98381f3e4872493Nick Pelly} OMXComponentCapabilityFlagsType; 9847e37c4428509524ee576920a98381f3e4872493Nick Pelly#define OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347 99826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 10047e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid* message_thread(void *input) 10147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 10261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video* omx = reinterpret_cast<omx_video*>(input); 10361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char id; 10461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int n; 10561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("omx_venc: message thread start"); 10761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan prctl(PR_SET_NAME, (unsigned long)"VideoEncMsgThread", 0, 0, 0); 10861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (1) { 10961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan n = read(omx->m_pipe_in, &id, 1); 11061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (0 == n) { 11161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 11261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 11347e37c4428509524ee576920a98381f3e4872493Nick Pelly 11461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (1 == n) { 11561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx->process_event_cb(omx, id); 11661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 11747e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef QLE_BUILD 11861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (n < 0) break; 11947e37c4428509524ee576920a98381f3e4872493Nick Pelly#else 12061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((n < 0) && (errno != EINTR)) break; 12147e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif 12261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("omx_venc: message thread stop"); 12461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return 0; 12547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 12647e37c4428509524ee576920a98381f3e4872493Nick Pelly 12747e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid post_message(omx_video *omx, unsigned char id) 12847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 1298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("omx_venc: post_message %d", id); 13061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan write(omx->m_pipe_out, &id, 1); 13147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 13247e37c4428509524ee576920a98381f3e4872493Nick Pelly 13347e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx_cmd_queue destructor 13447e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::omx_cmd_queue::~omx_cmd_queue() 13547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 13661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Nothing to do 13747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 13847e37c4428509524ee576920a98381f3e4872493Nick Pelly 13947e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue constructor 14047e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::omx_cmd_queue::omx_cmd_queue(): m_read(0),m_write(0),m_size(0) 14147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 14261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(m_q,0,sizeof(omx_event)*OMX_CORE_CONTROL_CMDQ_SIZE); 14347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 14447e37c4428509524ee576920a98381f3e4872493Nick Pelly 14547e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue insert 1468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::omx_cmd_queue::insert_entry(unsigned long p1, unsigned long p2, unsigned long id) 14747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 14861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ret = true; 14961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_size < OMX_CORE_CONTROL_CMDQ_SIZE) { 15061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_q[m_write].id = id; 15161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_q[m_write].param1 = p1; 15261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_q[m_write].param2 = p2; 15361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_write++; 15461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_size ++; 15561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_write >= OMX_CORE_CONTROL_CMDQ_SIZE) { 15661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_write = 0; 15761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 15861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 15961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = false; 1608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR!!! Command Queue Full"); 16161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 16261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 16347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 16447e37c4428509524ee576920a98381f3e4872493Nick Pelly 16547e37c4428509524ee576920a98381f3e4872493Nick Pelly// omx cmd queue pop 1668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::omx_cmd_queue::pop_entry(unsigned long *p1, unsigned long *p2, unsigned long *id) 16747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 16861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ret = true; 16961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_size > 0) { 17061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *id = m_q[m_read].id; 17161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *p1 = m_q[m_read].param1; 17261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *p2 = m_q[m_read].param2; 17361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Move the read pointer ahead 17461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ++m_read; 17561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan --m_size; 17661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_read >= OMX_CORE_CONTROL_CMDQ_SIZE) { 17761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_read = 0; 17861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 17961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 18061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = false; 18161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 18261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 18347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 18447e37c4428509524ee576920a98381f3e4872493Nick Pelly 18547e37c4428509524ee576920a98381f3e4872493Nick Pelly// Retrieve the first mesg type in the queue 18647e37c4428509524ee576920a98381f3e4872493Nick Pellyunsigned omx_video::omx_cmd_queue::get_q_msg_type() 18747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 18861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return m_q[m_read].id; 18947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 19047e37c4428509524ee576920a98381f3e4872493Nick Pelly 19147e37c4428509524ee576920a98381f3e4872493Nick Pelly 19247e37c4428509524ee576920a98381f3e4872493Nick Pelly 19347e37c4428509524ee576920a98381f3e4872493Nick Pelly#ifdef _ANDROID_ 19447e37c4428509524ee576920a98381f3e4872493Nick PellyVideoHeap::VideoHeap(int fd, size_t size, void* base) 19547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 19661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // dup file descriptor, map once, use pmem 19761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan init(dup(fd), base, size, 0 , MEM_DEVICE); 19847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 19947e37c4428509524ee576920a98381f3e4872493Nick Pelly#endif // _ANDROID_ 20047e37c4428509524ee576920a98381f3e4872493Nick Pelly 20147e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 20261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 20361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::omx_venc 20447e37c4428509524ee576920a98381f3e4872493Nick Pelly 20561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 20661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Constructor 20747e37c4428509524ee576920a98381f3e4872493Nick Pelly 20861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 20961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None 21047e37c4428509524ee576920a98381f3e4872493Nick Pelly 21161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 21261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 21361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 2146eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalomx_video::omx_video(): 2158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan c2d_opened(false), 2168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan psource_frame(NULL), 2178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pdest_frame(NULL), 2188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan secure_session(false), 2198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan mEmptyEosBuffer(NULL), 2202162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan m_pipe_in(-1), 2212162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan m_pipe_out(-1), 22261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem(NULL), 22361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem(NULL), 224826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 22561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion(NULL), 22661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion(NULL), 227826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 22861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_error_propogated(false), 22961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_state(OMX_StateInvalid), 23061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_app_data(NULL), 23161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem(OMX_FALSE), 23261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_output_pmem(OMX_FALSE), 2338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_input_msg_id(OMX_COMPONENT_GENERATE_ETB), 23461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr(NULL), 23561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr(NULL), 23661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_flush_progress (false), 23761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_flush_progress (false), 23861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_use_buffer (false), 23961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_use_buffer (false), 24061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_input_buffers(0), 24161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers(0), 24261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_bm_count(0), 24361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_bm_count(0), 24461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_flags(0), 24561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_count(0), 24661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_fbd_count(0), 247f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_event_port_settings_sent(false), 248f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan hw_overload(false) 24947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 2508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_video(): Inside Constructor()"); 25161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&m_cmp,0,sizeof(m_cmp)); 25261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&m_pCallbacks,0,sizeof(m_pCallbacks)); 25361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan async_thread_created = false; 25461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan msg_thread_created = false; 25561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 256f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan mUsesColorConversion = false; 25761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_init(&m_lock, NULL); 25861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_init(&m_cmd_lock,0,0); 259f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("meta_buffer_hdr = %p", meta_buffer_hdr); 26047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 26147e37c4428509524ee576920a98381f3e4872493Nick Pelly 26247e37c4428509524ee576920a98381f3e4872493Nick Pelly 26347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 26461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 26561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::~omx_venc 26647e37c4428509524ee576920a98381f3e4872493Nick Pelly 26761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 26861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Destructor 26947e37c4428509524ee576920a98381f3e4872493Nick Pelly 27061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 27161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None 27247e37c4428509524ee576920a98381f3e4872493Nick Pelly 27361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 27461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 27561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 27647e37c4428509524ee576920a98381f3e4872493Nick Pellyomx_video::~omx_video() 27747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 2788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("~omx_video(): Inside Destructor()"); 2792162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan if (m_pipe_in >= 0) close(m_pipe_in); 2802162c701ddabeec0df8b4f36746e73d8a722f340Praveen Chavan if (m_pipe_out >= 0) close(m_pipe_out); 2818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_video: Waiting on Msg Thread exit"); 28261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (msg_thread_created) 28361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_join(msg_thread_id,NULL); 2848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_video: Waiting on Async Thread exit"); 28561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*For V4L2 based drivers, pthread_join is done in device_close 28661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * so no need to do it here*/ 28761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifndef _MSM8974_ 28861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (async_thread_created) 28961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_join(async_thread_id,NULL); 29061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif 29161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_destroy(&m_lock); 29261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_destroy(&m_cmd_lock); 293f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("m_etb_count = %" PRIu64 ", m_fbd_count = %" PRIu64, m_etb_count, 29461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_fbd_count); 2958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("omx_video: Destructor exit"); 296f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("Exiting OMX Video Encoder ..."); 29747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 29847e37c4428509524ee576920a98381f3e4872493Nick Pelly 29947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 30061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 30161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::OMXCntrlProcessMsgCb 30247e37c4428509524ee576920a98381f3e4872493Nick Pelly 30361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 30461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan IL Client callbacks are generated through this routine. The decoder 30561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan provides the thread context for this routine. 30647e37c4428509524ee576920a98381f3e4872493Nick Pelly 30761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 30861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ctxt -- Context information related to the self. 30961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan id -- Event identifier. This could be any of the following: 31061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 1. Command completion event 31161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2. Buffer done callback event 31261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3. Frame done callback event 31347e37c4428509524ee576920a98381f3e4872493Nick Pelly 31461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 31561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 31647e37c4428509524ee576920a98381f3e4872493Nick Pelly 31761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 31847e37c4428509524ee576920a98381f3e4872493Nick Pellyvoid omx_video::process_event_cb(void *ctxt, unsigned char id) 31947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 3208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1; // Parameter - 1 3218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2; // Parameter - 2 3228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident; 32361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned qsize=0; // qsize 32461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video *pThis = (omx_video *) ctxt; 32547e37c4428509524ee576920a98381f3e4872493Nick Pelly 32661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pThis) { 3278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ProcessMsgCb:Context is incorrect; bailing out"); 32861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return; 32961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 33047e37c4428509524ee576920a98381f3e4872493Nick Pelly 33161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Protect the shared queue data structure 33261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan do { 33361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Read the message id's from the queue*/ 33447e37c4428509524ee576920a98381f3e4872493Nick Pelly 33561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&pThis->m_lock); 33661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qsize = pThis->m_cmd_q.m_size; 33761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize) { 33861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_cmd_q.pop_entry(&p1,&p2,&ident); 33947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 34047e37c4428509524ee576920a98381f3e4872493Nick Pelly 34161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize == 0) { 34261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qsize = pThis->m_ftb_q.m_size; 34361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize) { 34461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_ftb_q.pop_entry(&p1,&p2,&ident); 345826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 34647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 34747e37c4428509524ee576920a98381f3e4872493Nick Pelly 34861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize == 0) { 34961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qsize = pThis->m_etb_q.m_size; 35061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize) { 35161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_etb_q.pop_entry(&p1,&p2,&ident); 352826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 35347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 35447e37c4428509524ee576920a98381f3e4872493Nick Pelly 35561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&pThis->m_lock); 35661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 35761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*process message if we have one*/ 35861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (qsize > 0) { 35961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan id = ident; 36061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (id) { 36161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EVENT: 36261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 36361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (p1) { 36461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_CommandStateSet: 36561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = (OMX_STATETYPE) p2; 3668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Process -> state set to %d", pThis->m_state); 36761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 36861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete, p1, p2, NULL); 36961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 37061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 37161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_EventError: 3728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_EventError: p2 = %lu", p2); 3738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (p2 == (unsigned)OMX_ErrorHardware) { 37461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 37561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventError,OMX_ErrorHardware,0,NULL); 37661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 37761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 3788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_EventError, p2, 0, 0); 37961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 38161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 38261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 38361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_CommandPortDisable: 3848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Process -> Port %lu set to PORT_STATE_DISABLED" \ 3858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "state", p2); 38661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 38761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete, p1, p2, NULL ); 38861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 38961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_CommandPortEnable: 3908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Process ->Port %lu set PORT_STATE_ENABLED state" \ 39161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan , p2); 39261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,\ 39361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete, p1, p2, NULL ); 39461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 39561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 3978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("process_event_cb forwarding EventCmdComplete %lu", p1); 39861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 39961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete, p1, p2, NULL ); 40061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 40161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 40361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 4048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ProcessMsgCb NULL callbacks"); 40561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 40661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 40761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_ETB_OPQ: 4088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_ETB_OPQ"); 40961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->empty_this_buffer_opaque((OMX_HANDLETYPE)p1,\ 41061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) { 4118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy() failed!"); 41261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 41361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 41461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 415f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case OMX_COMPONENT_GENERATE_ETB: { 416f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_ERRORTYPE iret; 4178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_ETB"); 418f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan iret = pThis->empty_this_buffer_proxy((OMX_HANDLETYPE)p1, (OMX_BUFFERHEADERTYPE *)p2); 419f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (iret == OMX_ErrorInsufficientResources) { 420f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("empty_this_buffer_proxy failure due to HW overload"); 421f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan pThis->omx_report_hw_overload (); 422f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (iret != OMX_ErrorNone) { 423f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("empty_this_buffer_proxy failure"); 42461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 42561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 426f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 42761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 42861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 42961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_FTB: 43061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( pThis->fill_this_buffer_proxy((OMX_HANDLETYPE)p1,\ 43161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) { 4328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: FTBProxy() failed!"); 43361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 43461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 43561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 43661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 43761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_COMMAND: 43861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->send_command_proxy(&pThis->m_cmp,(OMX_COMMANDTYPE)p1,\ 43961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_U32)p2,(OMX_PTR)NULL); 44061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 44161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 44261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EBD: 44361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( pThis->empty_buffer_done(&pThis->m_cmp, 44461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone) { 4458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: empty_buffer_done() failed!"); 44661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 44761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 44861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 44961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_FBD: 45161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( pThis->fill_buffer_done(&pThis->m_cmp, 45261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone ) { 4538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: fill_buffer_done() failed!"); 45461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 45561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 45661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 45761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 45861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH: 45961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 46061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->input_flush_progress = false; 461f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("m_etb_count at i/p flush = %" PRIu64, m_etb_count); 46261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_count = 0; 46361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 46461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if we need generate event for Flush done*/ 46561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags, 46661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_INPUT_FLUSH_PENDING)) { 46761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_INPUT_FLUSH_PENDING); 46861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 46961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandFlush, 47061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN,NULL ); 47161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags, 47261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_IDLE_PENDING)) { 47361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pThis->output_flush_progress) { 4748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("dev_stop called after input flush complete"); 47561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_stop() != 0) { 4768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_stop() failed in i/p flush!"); 47761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 47861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 48361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 48461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 48561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH: 48661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 48761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->output_flush_progress = false; 488f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("m_fbd_count at o/p flush = %" PRIu64, m_fbd_count); 48961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_fbd_count = 0; 49061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 49161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if we need generate event for Flush done*/ 49261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags, 49361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_OUTPUT_FLUSH_PENDING)) { 49461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR (&pThis->m_flags,OMX_COMPONENT_OUTPUT_FLUSH_PENDING); 49561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 49661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 49761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandFlush, 49861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_OUT,NULL ); 49961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags ,OMX_COMPONENT_IDLE_PENDING)) { 5008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("dev_stop called after Output flush complete"); 50161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pThis->input_flush_progress) { 50261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_stop() != 0) { 5038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_stop() failed in o/p flush!"); 50461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 50561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 50661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 50761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 50861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 50961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 51061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_START_DONE: 5128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE msg"); 51361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 51461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 5158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE Success"); 51661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_EXECUTE_PENDING)) { 5178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_START_DONE Move to \ 51861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan executing"); 51961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 52061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_EXECUTE_PENDING); 52161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = OMX_StateExecuting; 52261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 52361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandStateSet, 52461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_StateExecuting, NULL); 52561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags, 52661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_PAUSE_PENDING)) { 52761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_pause()) { 5288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_pause() failed in Start Done!"); 52961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 53061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 53161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags, 53261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_LOADED_START_PENDING)) { 53361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_loaded_start_done()) { 53461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("successful loaded Start Done!"); 53561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 53661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: failed in loaded Start Done!"); 53761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 53861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 53961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_LOADED_START_PENDING); 54061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 541f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("ERROR: unknown flags=%" PRIx64, pThis->m_flags); 54261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 54361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 5448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Event Handler callback is NULL"); 54561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 54661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 54761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 54861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_PAUSE_DONE: 5498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_PAUSE_DONE msg"); 55061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 55161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_PAUSE_PENDING)) { 55261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //Send the callback now 55361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->complete_pending_buffer_done_cbs(); 5548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("omx_video::process_event_cb() Sending PAUSE complete after all pending EBD/FBD"); 55561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_PAUSE_PENDING); 55661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = OMX_StatePause; 55761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 55861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandStateSet, 55961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_StatePause, NULL); 56061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 56161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 56261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 56461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 56561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_RESUME_DONE: 5668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_RESUME_DONE msg"); 56761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 56861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_EXECUTE_PENDING)) { 56961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 57061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_EXECUTE_PENDING); 57161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = OMX_StateExecuting; 57261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data, 57361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandStateSet, 57461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_StateExecuting,NULL); 57561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 57761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 57861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 57961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 58061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_STOP_DONE: 5818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_COMPONENT_GENERATE_STOP_DONE msg"); 58261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 58361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->complete_pending_buffer_done_cbs(); 58461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&pThis->m_flags,OMX_COMPONENT_IDLE_PENDING)) { 58561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 58661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_IDLE_PENDING); 58761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_state = OMX_StateIdle; 58861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler(&pThis->m_cmp,pThis->m_app_data, 58961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventCmdComplete,OMX_CommandStateSet, 59061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_StateIdle,NULL); 59161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (BITMASK_PRESENT(&pThis->m_flags, 59261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_LOADED_STOP_PENDING)) { 59361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_loaded_stop_done()) { 59461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("successful loaded Stop Done!"); 59561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 59661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: failed in loaded Stop Done!"); 59761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 59861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 59961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&pThis->m_flags),OMX_COMPONENT_LOADED_STOP_PENDING); 60061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 601f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("ERROR: unknown flags=%" PRIx64, pThis->m_flags); 60261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 60361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 60461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 60561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 60661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 60761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_HARDWARE_ERROR: 6088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_COMPONENT_GENERATE_HARDWARE_ERROR!"); 60961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->omx_report_error (); 61061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 6116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 61261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_LTRUSE_FAILED: 61361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMX_COMPONENT_GENERATE_LTRUSE_FAILED!"); 61461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pThis->m_pCallbacks.EventHandler) { 61561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Sending QOMX_ErrorLTRUseFailed, p2 = 0x%x", p2); 61661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_pCallbacks.EventHandler( 61761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &pThis->m_cmp, pThis->m_app_data, 61861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_EventError, QOMX_ErrorLTRUseFailed, NULL, NULL); 61961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 62061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 6216eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 62261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 6238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("process_event_cb unknown msg id 0x%02x", id); 62461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 62561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 62661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 62747e37c4428509524ee576920a98381f3e4872493Nick Pelly 62861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&pThis->m_lock); 62961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan qsize = pThis->m_cmd_q.m_size + pThis->m_ftb_q.m_size +\ 63061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pThis->m_etb_q.m_size; 63147e37c4428509524ee576920a98381f3e4872493Nick Pelly 63261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&pThis->m_lock); 63347e37c4428509524ee576920a98381f3e4872493Nick Pelly 63461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } while (qsize>0); 6358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("exited the while loop"); 63647e37c4428509524ee576920a98381f3e4872493Nick Pelly 63747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 63847e37c4428509524ee576920a98381f3e4872493Nick Pelly 63947e37c4428509524ee576920a98381f3e4872493Nick Pelly 64047e37c4428509524ee576920a98381f3e4872493Nick Pelly 64147e37c4428509524ee576920a98381f3e4872493Nick Pelly 64247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 64361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 64461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::GetComponentVersion 64547e37c4428509524ee576920a98381f3e4872493Nick Pelly 64661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 64761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns the component version. 64847e37c4428509524ee576920a98381f3e4872493Nick Pelly 64961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 65061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan TBD. 65147e37c4428509524ee576920a98381f3e4872493Nick Pelly 65261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 65361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ErrorNone. 65447e37c4428509524ee576920a98381f3e4872493Nick Pelly 65561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 65647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_component_version 65747e37c4428509524ee576920a98381f3e4872493Nick Pelly( 65861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 65961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_STRING componentName, 66061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_VERSIONTYPE* componentVersion, 66161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_VERSIONTYPE* specVersion, 66261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_UUIDTYPE* componentUUID 66361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) 66447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 6658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 6668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)componentName; 6678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)componentVersion; 6688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)componentUUID; 66961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 6708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Comp Version in Invalid State"); 67161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 67261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 67361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* TBD -- Return the proper version */ 67461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (specVersion) { 67561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan specVersion->nVersion = OMX_SPEC_VERSION; 67661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 67761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 67847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 67947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 68061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 68161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::SendCommand 68247e37c4428509524ee576920a98381f3e4872493Nick Pelly 68361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 68461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns zero if all the buffers released.. 68547e37c4428509524ee576920a98381f3e4872493Nick Pelly 68661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 68761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 68847e37c4428509524ee576920a98381f3e4872493Nick Pelly 68961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 69061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 69147e37c4428509524ee576920a98381f3e4872493Nick Pelly 69261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 69347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::send_command(OMX_IN OMX_HANDLETYPE hComp, 69461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_COMMANDTYPE cmd, 69561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 param1, 69661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR cmdData 69761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) 69847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 6998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 70061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 7018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Send Command in Invalid State"); 70261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 70361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 70461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 70561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (cmd == OMX_CommandFlush || cmd == OMX_CommandPortDisable || cmd == OMX_CommandPortEnable) { 7068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if ((param1 != (OMX_U32)PORT_INDEX_IN) && (param1 != (OMX_U32)PORT_INDEX_OUT) && (param1 != (OMX_U32)PORT_INDEX_BOTH)) { 7078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->bad port index"); 70861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 70961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 71061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 71161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (cmd == OMX_CommandMarkBuffer) { 71261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 != PORT_INDEX_IN) { 7138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->bad port index"); 71461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 71561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 71661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!cmdData) { 71761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::send_command-->param is null"); 71861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 71961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 72061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 72161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 7228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event((unsigned long)cmd,(unsigned long)param1,OMX_COMPONENT_GENERATE_COMMAND); 72361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_wait(&m_cmd_lock); 72461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 72547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 72647e37c4428509524ee576920a98381f3e4872493Nick Pelly 72747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 72861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 72961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::SendCommand 73047e37c4428509524ee576920a98381f3e4872493Nick Pelly 73161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 73261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns zero if all the buffers released.. 73347e37c4428509524ee576920a98381f3e4872493Nick Pelly 73461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 73561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 73647e37c4428509524ee576920a98381f3e4872493Nick Pelly 73761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 73861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 73947e37c4428509524ee576920a98381f3e4872493Nick Pelly 74061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 74147e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::send_command_proxy(OMX_IN OMX_HANDLETYPE hComp, 74261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_COMMANDTYPE cmd, 74361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 param1, 74461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR cmdData 74561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) 74647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 7478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 7488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)cmdData; 7498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 75061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 75161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_STATETYPE eState = (OMX_STATETYPE) param1; 75261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int bFlag = 1; 75361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 75461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (cmd == OMX_CommandStateSet) { 75561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 75661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is Loaded */ 75761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 75861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateLoaded) { 75961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateIdle) { 76061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //if all buffers are allocated or all ports disabled 76161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocate_done() || 76261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ( m_sInPortDef.bEnabled == OMX_FALSE && m_sOutPortDef.bEnabled == OMX_FALSE)) { 7638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->Idle"); 76461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 7658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->Idle-Pending"); 76661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_IDLE_PENDING); 76761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 76861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 76961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 77061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 77161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to Loaded */ 77261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateLoaded) { 7738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Loaded"); 77461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState,\ 77561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 77661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 77761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 77861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to WaitForResources */ 77961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 78061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Since error is None , we will post an event 78161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan at the end of this function definition */ 7828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Loaded-->WaitForResources"); 78361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 78461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to Executing */ 78561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateExecuting) { 7868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Executing"); 78761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 78861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 78961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 79061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 79161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to Pause */ 79261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 7938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Pause"); 79461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 79561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 79661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 79761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 79861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Loaded to Invalid */ 79961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 8008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->Invalid"); 80161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 80261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 80361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Loaded-->%d Not Handled",\ 80561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eState); 80661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 80761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 80847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 80961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 81061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 81161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is IDLE */ 81261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 81361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StateIdle) { 81461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateLoaded) { 81561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_done()) { 81661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* 81761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Since error is None , we will post an event at the end 81861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan of this function definition 81961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan */ 8208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Loaded"); 82161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_stop() != 0) { 8228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_stop() failed at Idle --> Loaded"); 82361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 82461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 82561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Loaded-Pending"); 82761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_LOADING_PENDING); 82861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 82961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 83061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 83161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 83261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to Executing */ 83361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateExecuting) { 83461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( dev_start() ) { 8358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_start() failed in SCP on Idle --> Exe"); 83661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_error (); 83761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 83861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 83961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_EXECUTE_PENDING); 8408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Executing"); 84161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 84261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 84461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_start_done(); 84561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 84661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to Idle */ 84761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateIdle) { 8488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->Idle"); 84961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState,\ 85061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 85161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 85261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 85361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to WaitForResources */ 85461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 8558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->WaitForResources"); 85661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 85761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 85861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 85961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 86061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to Pause */ 86161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 86261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*To pause the Video core we need to start the driver*/ 86361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( dev_start() ) { 8648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_start() failed in SCP on Idle --> Pause"); 86561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_error (); 86661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 86761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 86861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_PAUSE_PENDING); 8698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Idle-->Pause"); 87061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 87161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 87261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 87361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Idle to Invalid */ 87461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 8758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle-->Invalid"); 87661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 87761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 87861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 8798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Idle --> %d Not Handled",eState); 88061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 88161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 88247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 88347e37c4428509524ee576920a98381f3e4872493Nick Pelly 88461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /******************************/ 88561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is Executing */ 88661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /******************************/ 88761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StateExecuting) { 88861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Idle */ 88961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateIdle) { 89061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Since error is None , we will post an event 89161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan at the end of this function definition 89261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan */ 8938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Executing --> Idle"); 89461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //here this should be Pause-Idle pending and should be cleared when flush is complete and change the state to Idle 89561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_IDLE_PENDING); 89661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(OMX_ALL); 89761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 89861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 89961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Paused */ 90061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 90161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 90261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_pause()) { 9038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_pause() failed in SCP on Exe --> Pause"); 90461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorHardware,\ 90561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 90661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 90761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 90861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_PAUSE_PENDING); 9098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Executing-->Pause"); 91061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 91161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 91261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 91361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Loaded */ 91461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateLoaded) { 9158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Loaded"); 91661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 91761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 91861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 91961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 92061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to WaitForResources */ 92161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 9228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> WaitForResources"); 92361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 92461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 92561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 92661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 92761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Executing */ 92861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateExecuting) { 9298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Executing"); 93061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState,\ 93161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 93261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 93361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 93461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Executing to Invalid */ 93561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 9368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> Invalid"); 93761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 93861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 93961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Executing --> %d Not Handled",eState); 94161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 94261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 94347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 94461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 94561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is Pause */ 94661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 94761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StatePause) { 94861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to Executing */ 94961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateExecuting) { 9508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Pause --> Executing"); 95161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( dev_resume() ) { 95261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorHardware,\ 95361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 95461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 95561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 95661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_EXECUTE_PENDING); 9578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Pause-->Executing"); 9588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event (0, 0, OMX_COMPONENT_GENERATE_RESUME_DONE); 95961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 96061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 96261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to Idle */ 96361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateIdle) { 96461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Since error is None , we will post an event 96561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan at the end of this function definition */ 9668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Pause --> Idle"); 96761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags,OMX_COMPONENT_IDLE_PENDING); 96861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(OMX_ALL); 96961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 97061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 97161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to loaded */ 97261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateLoaded) { 9738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Pause --> loaded"); 97461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 97561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 97661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 97761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 97861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to WaitForResources */ 97961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 9808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Pause --> WaitForResources"); 98161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 98261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 98361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 98461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 98561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to Pause */ 98661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 9878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Pause --> Pause"); 98861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState,\ 98961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 99061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 99161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 99261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from Pause to Invalid */ 99361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 9948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Pause --> Invalid"); 99561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 99661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 99761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 9988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Paused --> %d Not Handled",eState); 99961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 100061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 100147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 100261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 100361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is WaitForResources */ 100461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /***************************/ 100561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StateWaitForResources) { 100661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Loaded */ 100761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == OMX_StateLoaded) { 100861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Since error is None , we will post an event 100961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan at the end of this function definition */ 10108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: WaitForResources-->Loaded"); 101161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 101261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to WaitForResources */ 101361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateWaitForResources) { 10148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->WaitForResources"); 101561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorSameState, 101661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 101761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorSameState; 101861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 101961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Executing */ 102061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateExecuting) { 10218767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Executing"); 102261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 102361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 102461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 102561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 102661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Pause */ 102761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StatePause) { 10288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Pause"); 102961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorIncorrectStateTransition,\ 103061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 103161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorIncorrectStateTransition; 103261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 103361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Invalid */ 103461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (eState == OMX_StateInvalid) { 10358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: WaitForResources-->Invalid"); 103661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,eState,OMX_COMPONENT_GENERATE_EVENT); 103761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 103861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 103961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Requesting transition from WaitForResources to Loaded - 104061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan is NOT tested by Khronos TS */ 104147e37c4428509524ee576920a98381f3e4872493Nick Pelly 104261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: %d --> %d(Not Handled)",m_state,eState); 104461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 104547e37c4428509524ee576920a98381f3e4872493Nick Pelly } 104661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 104761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /********************************/ 104861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Current State is Invalid */ 104961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*******************************/ 105061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (m_state == OMX_StateInvalid) { 105161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* State Transition from Inavlid to any state */ 105261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eState == (OMX_StateLoaded || OMX_StateWaitForResources 105361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || OMX_StateIdle || OMX_StateExecuting 105461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || OMX_StatePause || OMX_StateInvalid)) { 10558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: OMXCORE-SM: Invalid -->Loaded"); 105661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError,OMX_ErrorInvalidState,\ 105761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 105861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidState; 105947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 106061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (cmd == OMX_CommandFlush) { 106161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (0 == param1 || OMX_ALL == param1) { 106261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_FLUSH_PENDING); 106347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 106461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (1 == param1 || OMX_ALL == param1) { 106561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //generate output flush event only. 106661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_FLUSH_PENDING); 106747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 106847e37c4428509524ee576920a98381f3e4872493Nick Pelly 106961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(param1); 107047e37c4428509524ee576920a98381f3e4872493Nick Pelly bFlag = 0; 107161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ( cmd == OMX_CommandPortEnable) { 107261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 == PORT_INDEX_IN || param1 == OMX_ALL) { 107361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bEnabled = OMX_TRUE; 107461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 107561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( (m_state == OMX_StateLoaded && 107661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) 107761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || allocate_input_done()) { 107861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable,PORT_INDEX_IN, 107961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 108061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Disabled-->Enabled Pending"); 108261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_ENABLE_PENDING); 108361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 108461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 108561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 108647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 108761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 == PORT_INDEX_OUT || param1 == OMX_ALL) { 108861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bEnabled = OMX_TRUE; 108961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 109061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( (m_state == OMX_StateLoaded && 109161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan !BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) 109261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan || (allocate_output_done())) { 109361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable,PORT_INDEX_OUT, 109461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 109561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 109661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 10978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMXCORE-SM: Disabled-->Enabled Pending"); 109861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_ENABLE_PENDING); 109961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 110061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 110161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 110261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 110361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (cmd == OMX_CommandPortDisable) { 110461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 == PORT_INDEX_IN || param1 == OMX_ALL) { 110561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bEnabled = OMX_FALSE; 110661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((m_state == OMX_StateLoaded || m_state == OMX_StateIdle) 110761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && release_input_done()) { 110861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortDisable,PORT_INDEX_IN, 110961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 111061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 111161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_INPUT_DISABLE_PENDING); 111261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StatePause ||m_state == OMX_StateExecuting) { 111361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(PORT_INDEX_IN); 111461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 111661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 111761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 111861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 111961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 112061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (param1 == PORT_INDEX_OUT || param1 == OMX_ALL) { 112161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bEnabled = OMX_FALSE; 112261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 112361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((m_state == OMX_StateLoaded || m_state == OMX_StateIdle) 112461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && release_output_done()) { 112561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortDisable,PORT_INDEX_OUT,\ 112661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 112761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 112861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_OUTPUT_DISABLE_PENDING); 112961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StatePause ||m_state == OMX_StateExecuting) { 113061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan execute_omx_flush(PORT_INDEX_OUT); 113161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 113261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Skip the event notification 113361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bFlag = 0; 113447e37c4428509524ee576920a98381f3e4872493Nick Pelly 113561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 113661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 113761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 11388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Command received other than StateSet (%d)",cmd); 113961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNotImplemented; 114061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 114161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone && bFlag) { 114261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(cmd,eState,OMX_COMPONENT_GENERATE_EVENT); 114361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 114461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan sem_post(&m_cmd_lock); 114561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 114647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 114747e37c4428509524ee576920a98381f3e4872493Nick Pelly 114847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 114961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 115061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ExecuteOmxFlush 115147e37c4428509524ee576920a98381f3e4872493Nick Pelly 115261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 115361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Executes the OMX flush. 115447e37c4428509524ee576920a98381f3e4872493Nick Pelly 115561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 115661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan flushtype - input flush(1)/output flush(0)/ both. 115747e37c4428509524ee576920a98381f3e4872493Nick Pelly 115861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 115961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 116047e37c4428509524ee576920a98381f3e4872493Nick Pelly 116161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 116247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_omx_flush(OMX_U32 flushType) 116347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 116461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 11658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_omx_flush - %u", (unsigned int)flushType); 11666eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 116761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* XXX: The driver/hardware does not support flushing of individual ports 116861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * in all states. So we pretty much need to flush both ports internally, 116961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * but client should only get the FLUSH_(INPUT|OUTPUT)_DONE for the one it 117061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * requested. Since OMX_COMPONENT_(OUTPUT|INPUT)_FLUSH_PENDING isn't set, 117161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * we automatically omit sending the FLUSH done for the "opposite" port. */ 117261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 11736eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal input_flush_progress = true; 11746eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal output_flush_progress = true; 11756eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal bRet = execute_flush_all(); 11766eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 117761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (flushType == 0 || flushType == OMX_ALL) { 117861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_flush_progress = true; 117961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //flush input only 118061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = execute_input_flush(); 118161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 118261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (flushType == 1 || flushType == OMX_ALL) { 118361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //flush output only 118461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_flush_progress = true; 118561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = execute_output_flush(); 118661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 11876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 118861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 118947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 119047e37c4428509524ee576920a98381f3e4872493Nick Pelly/*========================================================================= 119147e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION : execute_output_flush 119247e37c4428509524ee576920a98381f3e4872493Nick Pelly 119347e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION 119461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at OUTPUT PORT. 119547e37c4428509524ee576920a98381f3e4872493Nick Pelly 119647e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS 119761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone. 119847e37c4428509524ee576920a98381f3e4872493Nick Pelly 119947e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE 120061a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false 120147e37c4428509524ee576920a98381f3e4872493Nick Pelly==========================================================================*/ 120247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_output_flush(void) 120347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 12048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1 = 0; // Parameter - 1 12058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2 = 0; // Parameter - 2 12068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident = 0; 120761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = true; 120861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 120961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate FBD for all Buffers in the FTBq*/ 12108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_output_flush"); 121161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 121261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_ftb_q.m_size) { 121361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.pop_entry(&p1,&p2,&ident); 121461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 121561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_FTB ) { 121661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers++; 121761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2); 121861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_FBD) { 121961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1); 122061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 122361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 122461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if there are buffers with the Driver*/ 122561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_flush(PORT_INDEX_OUT)) { 12268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: o/p dev_flush() Failed"); 122761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 122861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 122961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 123061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 123147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 123247e37c4428509524ee576920a98381f3e4872493Nick Pelly/*========================================================================= 123347e37c4428509524ee576920a98381f3e4872493Nick PellyFUNCTION : execute_input_flush 123447e37c4428509524ee576920a98381f3e4872493Nick Pelly 123547e37c4428509524ee576920a98381f3e4872493Nick PellyDESCRIPTION 123661a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at INPUT PORT. 123747e37c4428509524ee576920a98381f3e4872493Nick Pelly 123847e37c4428509524ee576920a98381f3e4872493Nick PellyPARAMETERS 123961a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone. 124047e37c4428509524ee576920a98381f3e4872493Nick Pelly 124147e37c4428509524ee576920a98381f3e4872493Nick PellyRETURN VALUE 124261a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false 124347e37c4428509524ee576920a98381f3e4872493Nick Pelly==========================================================================*/ 124447e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::execute_input_flush(void) 124547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 12468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1 = 0; // Parameter - 1 12478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2 = 0; // Parameter - 2 12488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident = 0; 124961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = true; 125061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 125161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate EBD for all Buffers in the ETBq*/ 12528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_input_flush"); 125361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 125461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 125561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_etb_q.m_size) { 125661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.pop_entry(&p1,&p2,&ident); 125761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_ETB) { 125861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_input_buffers++; 125961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2); 126061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_EBD) { 126161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1); 126261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_ETB_OPQ) { 126361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,(OMX_BUFFERHEADERTYPE *)p2); 126461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 126561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 126661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mUseProxyColorFormat) { 126761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (psource_frame) { 126861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,psource_frame); 126961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = NULL; 127061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 127161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_opq_meta_q.m_size) { 12728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1,p2,id; 127361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_meta_q.pop_entry(&p1,&p2,&id); 127461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data, 127561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_BUFFERHEADERTYPE *)p1); 127661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 127761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pdest_frame) { 12788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_opq_pmem_q.insert_entry((unsigned long)pdest_frame,0,0); 127961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = NULL; 128061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 128161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 128261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 128361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if there are buffers with the Driver*/ 128461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_flush(PORT_INDEX_IN)) { 12858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: i/p dev_flush() Failed"); 128661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 128761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 128861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 128961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 12906eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal} 12916eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 12926eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 12936eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal/*========================================================================= 12946eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalFUNCTION : execute_flush 12956eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 12966eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalDESCRIPTION 129761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanExecutes the OMX flush at INPUT & OUTPUT PORT. 12986eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 12996eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalPARAMETERS 130061a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNone. 13016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 13026eec4d1ea65df853450a6e158718981cba900bf6Shashank MittalRETURN VALUE 130361a2c6a19dbd06a317a419623020e02056661876Praveen Chavantrue/false 13046eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal==========================================================================*/ 13056eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 13066eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittalbool omx_video::execute_flush_all(void) 13076eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal{ 13088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1 = 0; // Parameter - 1 13098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2 = 0; // Parameter - 2 13108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident = 0; 131161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = true; 131261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 13138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_flush_all"); 131461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 131561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate EBD for all Buffers in the ETBq*/ 131661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 131761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_etb_q.m_size) { 131861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.pop_entry(&p1,&p2,&ident); 131961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_ETB) { 132061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_input_buffers++; 132161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2); 132261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_EBD) { 132361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan empty_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1); 13248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if(ident == OMX_COMPONENT_GENERATE_ETB_OPQ) { 13258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,(OMX_BUFFERHEADERTYPE *)p2); 13268767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 13278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 13288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(mUseProxyColorFormat) { 13298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(psource_frame) { 13308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data,psource_frame); 13318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan psource_frame = NULL; 13328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 13338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan while(m_opq_meta_q.m_size) { 13348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1,p2,id; 13358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_opq_meta_q.pop_entry(&p1,&p2,&id); 13368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pCallbacks.EmptyBufferDone(&m_cmp,m_app_data, 13378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_BUFFERHEADERTYPE *)p1); 13388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 13398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(pdest_frame){ 13408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_opq_pmem_q.insert_entry((unsigned long)pdest_frame,0,0); 13418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pdest_frame = NULL; 134261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 134361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 134461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 134561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Generate FBD for all Buffers in the FTBq*/ 13468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("execute_output_flush"); 134761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_ftb_q.m_size) { 134861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.pop_entry(&p1,&p2,&ident); 134961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 135061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_FTB ) { 135161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers++; 135261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p2); 135361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (ident == OMX_COMPONENT_GENERATE_FBD) { 135461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p1); 135561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 135661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 135761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 135861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 135961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 136061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Check if there are buffers with the Driver*/ 136161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_flush(PORT_INDEX_BOTH)) { 13628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_flush() Failed"); 136361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 136461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 136561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 136647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 136747e37c4428509524ee576920a98381f3e4872493Nick Pelly 13686eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 136947e37c4428509524ee576920a98381f3e4872493Nick Pelly 137047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 137161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 137261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::SendCommandEvent 137347e37c4428509524ee576920a98381f3e4872493Nick Pelly 137461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 137561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Send the event to decoder pipe. This is needed to generate the callbacks 137661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan in decoder thread context. 137747e37c4428509524ee576920a98381f3e4872493Nick Pelly 137861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 137961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 138047e37c4428509524ee576920a98381f3e4872493Nick Pelly 138161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 138261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 138347e37c4428509524ee576920a98381f3e4872493Nick Pelly 138461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 13858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanbool omx_video::post_event(unsigned long p1, 13868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2, 13878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long id) 138847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 13898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bool bRet = false; 139061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 139161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 139261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 139361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((id == OMX_COMPONENT_GENERATE_FTB) || 139461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (id == OMX_COMPONENT_GENERATE_FBD) || 139561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (id == OMX_COMPONENT_GENERATE_EVENT_OUTPUT_FLUSH)) { 139661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.insert_entry(p1,p2,id); 139761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ((id == OMX_COMPONENT_GENERATE_ETB) || 139861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (id == OMX_COMPONENT_GENERATE_EBD) || 139961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (id == OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH)) { 140061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.insert_entry(p1,p2,id); 140161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 140261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_cmd_q.insert_entry(p1,p2,id); 140361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 140461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 140561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 14068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Value of this pointer in post_event %p",this); 140761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_message(this, id); 140861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 140961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 141061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 141147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 141247e37c4428509524ee576920a98381f3e4872493Nick Pelly 141347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 141461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 141561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::GetParameter 141647e37c4428509524ee576920a98381f3e4872493Nick Pelly 141761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 141861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Get Parameter method implementation 141947e37c4428509524ee576920a98381f3e4872493Nick Pelly 142061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 142161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 142247e37c4428509524ee576920a98381f3e4872493Nick Pelly 142361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 142461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Error None if successful. 142547e37c4428509524ee576920a98381f3e4872493Nick Pelly 142661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 142747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_parameter(OMX_IN OMX_HANDLETYPE hComp, 142861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_INDEXTYPE paramIndex, 142961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_PTR paramData) 143047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 14318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 143261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 143361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int height=0,width = 0; 14346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 14358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter:"); 143661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 14378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid State"); 143861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 143961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 144061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (paramData == NULL) { 14418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Param in Invalid paramData"); 144261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 144361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 14448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan switch ((int)paramIndex) { 144561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPortDefinition: 144661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 144716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_PORTDEFINITIONTYPE); 144861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_PORTDEFINITIONTYPE *portDefn; 144961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn = (OMX_PARAM_PORTDEFINITIONTYPE *) paramData; 145061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 14518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamPortDefinition"); 145261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portDefn->nPortIndex == (OMX_U32) PORT_INDEX_IN) { 14538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan dev_get_buf_req (&m_sInPortDef.nBufferCountMin, 14548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan &m_sInPortDef.nBufferCountActual, 14558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan &m_sInPortDef.nBufferSize, 14568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_sInPortDef.nPortIndex); 14578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("m_sInPortDef: size = %u, min cnt = %u, actual cnt = %u", 14588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.nBufferSize, (unsigned int)m_sInPortDef.nBufferCountMin, 14598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.nBufferCountActual); 146061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portDefn, &m_sInPortDef, sizeof(m_sInPortDef)); 146161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_ICS_ 146261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_mode_enable) { 146361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn->nBufferSize = sizeof(encoder_media_buffer_type); 146461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 146561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mUseProxyColorFormat) { 146661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan portDefn->format.video.eColorFormat = 146761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_COLOR_FORMATTYPE)QOMX_COLOR_FormatAndroidOpaque; 146861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 1469826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 147061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (portDefn->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 1471f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (m_state != OMX_StateExecuting) { 147261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_get_buf_req (&m_sOutPortDef.nBufferCountMin, 147361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferCountActual, 147461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_sOutPortDef.nBufferSize, 147561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nPortIndex); 1476f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 14778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("m_sOutPortDef: size = %u, min cnt = %u, actual cnt = %u", 14788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferSize, (unsigned int)m_sOutPortDef.nBufferCountMin, 14798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferCountActual); 148061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portDefn, &m_sOutPortDef, sizeof(m_sOutPortDef)); 148161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 148261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index"); 148361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 148461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 148561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 148661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 148761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoInit: 148861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 148916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE); 149061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PORT_PARAM_TYPE *portParamType = 149161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_PORT_PARAM_TYPE *) paramData; 14928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoInit"); 149361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 149461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portParamType, &m_sPortParam, sizeof(m_sPortParam)); 149561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 14966eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } 149761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoPortFormat: 149861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 149916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PORTFORMATTYPE); 150061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PORTFORMATTYPE *portFmt = 150161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (OMX_VIDEO_PARAM_PORTFORMATTYPE *)paramData; 15028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoPortFormat"); 150361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 150461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_IN) { 15058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned index = portFmt->nIndex; 15060b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //we support two formats 15070b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //index 0 - Venus flavour of YUV420SP 15080b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //index 1 - opaque which internally maps to YUV420SP. 15090b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //index 2 - vannilla YUV420SP 15100b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan //this can be extended in the future 15110b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan int supportedFormats[] = { 15120b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan [0] = QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m, 15130b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan [1] = QOMX_COLOR_FormatAndroidOpaque, 15140b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan [2] = OMX_COLOR_FormatYUV420SemiPlanar, 15150b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan }; 15160b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan 1517f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (index > (sizeof(supportedFormats)/sizeof(*supportedFormats) - 1)) 151861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 151961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 152061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portFmt, &m_sInPortFormat, sizeof(m_sInPortFormat)); 15210b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan portFmt->nIndex = index; //restore index set from client 15220b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan portFmt->eColorFormat = (OMX_COLOR_FORMATTYPE)supportedFormats[index]; 152361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 152461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (portFmt->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 152561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(portFmt, &m_sOutPortFormat, sizeof(m_sOutPortFormat)); 152661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 152761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index"); 152861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 152961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 153061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 153161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 153261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoBitrate: 153361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 153416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_BITRATETYPE); 153561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_BITRATETYPE* pParam = (OMX_VIDEO_PARAM_BITRATETYPE*)paramData; 15368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoBitrate"); 153761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 153861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == (OMX_U32) PORT_INDEX_OUT) { 153961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamBitrate, sizeof(m_sParamBitrate)); 154061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 154161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index"); 154261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 154361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 154461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 154561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 154661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 154761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoMpeg4: 154861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 154916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_MPEG4TYPE); 155061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_MPEG4TYPE* pParam = (OMX_VIDEO_PARAM_MPEG4TYPE*)paramData; 15518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoMpeg4"); 155261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamMPEG4, sizeof(m_sParamMPEG4)); 155361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 155461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 155561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoH263: 155661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 155716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_H263TYPE); 155861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_H263TYPE* pParam = (OMX_VIDEO_PARAM_H263TYPE*)paramData; 15598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoH263"); 156061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamH263, sizeof(m_sParamH263)); 156161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 156261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 156361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoAvc: 156461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 156516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_AVCTYPE); 156661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_AVCTYPE* pParam = (OMX_VIDEO_PARAM_AVCTYPE*)paramData; 15678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoAvc"); 156861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamAVC, sizeof(m_sParamAVC)); 156961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 157061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 15717beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano case (OMX_INDEXTYPE)OMX_IndexParamVideoVp8: 15727beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano { 157316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_VP8TYPE); 15747beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano OMX_VIDEO_PARAM_VP8TYPE* pParam = (OMX_VIDEO_PARAM_VP8TYPE*)paramData; 15758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoVp8"); 15767beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano memcpy(pParam, &m_sParamVP8, sizeof(m_sParamVP8)); 15777beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano break; 15787beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 1579f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case (OMX_INDEXTYPE)OMX_IndexParamVideoHevc: 1580f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 158116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_HEVCTYPE); 1582f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_VIDEO_PARAM_HEVCTYPE* pParam = (OMX_VIDEO_PARAM_HEVCTYPE*)paramData; 1583f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoHevc"); 1584f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(pParam, &m_sParamHEVC, sizeof(m_sParamHEVC)); 1585f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 1586f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 158761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoProfileLevelQuerySupported: 158861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 158916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE); 159061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData; 15918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported"); 159261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = get_supported_profile_level(pParam); 15938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (eRet && eRet != OMX_ErrorNoMore) 15948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_supported_profile_level %u, %u", 15958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->eProfile, (unsigned int)pParam->eLevel); 159661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 159761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 159861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoProfileLevelCurrent: 159961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 160016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_PROFILELEVELTYPE); 160161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_PROFILELEVELTYPE* pParam = (OMX_VIDEO_PARAM_PROFILELEVELTYPE*)paramData; 16028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelCurrent"); 160361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sParamProfileLevel, sizeof(m_sParamProfileLevel)); 160461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 160561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 160661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Component should support this port definition*/ 160761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamAudioInit: 160861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 160916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE); 161061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PORT_PARAM_TYPE *audioPortParamType = (OMX_PORT_PARAM_TYPE *) paramData; 16118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamAudioInit"); 161261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(audioPortParamType, &m_sPortParam_audio, sizeof(m_sPortParam_audio)); 161361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 161461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 161561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Component should support this port definition*/ 161661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamImageInit: 161761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 161816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PORT_PARAM_TYPE); 161961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PORT_PARAM_TYPE *imagePortParamType = (OMX_PORT_PARAM_TYPE *) paramData; 16208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamImageInit"); 162161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(imagePortParamType, &m_sPortParam_img, sizeof(m_sPortParam_img)); 162261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 162361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 162461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 162561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Component should support this port definition*/ 162661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamOtherInit: 162761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 16288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: get_parameter: OMX_IndexParamOtherInit %08x", paramIndex); 162961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedIndex; 163061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 163161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 163261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamStandardComponentRole: 163361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 163416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_COMPONENTROLETYPE); 163561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_COMPONENTROLETYPE *comp_role; 163661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role = (OMX_PARAM_COMPONENTROLETYPE *) paramData; 163761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role->nVersion.nVersion = OMX_SPEC_VERSION; 163861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan comp_role->nSize = sizeof(*comp_role); 163961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 16408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Getparameter: OMX_IndexParamStandardComponentRole %d",paramIndex); 16417ee8c166895cb654eb241ab283a63cdbbe40ae18Bernhard Rosenkraenzer strlcpy((char*)comp_role->cRole,(const char*)m_cRole,OMX_MAX_STRINGNAME_SIZE); 164261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 164361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 164461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Added for parameter test */ 164561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamPriorityMgmt: 164661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 164716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PRIORITYMGMTTYPE); 164861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PRIORITYMGMTTYPE *priorityMgmType = (OMX_PRIORITYMGMTTYPE *) paramData; 16498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamPriorityMgmt"); 165061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(priorityMgmType, &m_sPriorityMgmt, sizeof(m_sPriorityMgmt)); 165161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 165261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 165361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* Added for parameter test */ 165461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamCompBufferSupplier: 165561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 165616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_PARAM_BUFFERSUPPLIERTYPE); 165761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PARAM_BUFFERSUPPLIERTYPE *bufferSupplierType = (OMX_PARAM_BUFFERSUPPLIERTYPE*) paramData; 16588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamCompBufferSupplier"); 165961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bufferSupplierType->nPortIndex ==(OMX_U32) PORT_INDEX_IN) { 166061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(bufferSupplierType, &m_sInBufSupplier, sizeof(m_sInBufSupplier)); 166161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (bufferSupplierType->nPortIndex ==(OMX_U32) PORT_INDEX_OUT) { 166261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(bufferSupplierType, &m_sOutBufSupplier, sizeof(m_sOutBufSupplier)); 166361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 166461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: GetParameter called on Bad Port Index"); 166561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 166661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 166761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 166861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 166961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 167061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoQuantization: 167161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 167216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_QUANTIZATIONTYPE); 167361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_QUANTIZATIONTYPE *session_qp = (OMX_VIDEO_PARAM_QUANTIZATIONTYPE*) paramData; 16748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoQuantization"); 167561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(session_qp, &m_sSessionQuantization, sizeof(m_sSessionQuantization)); 167661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 167761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 167861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 167961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamVideoQPRange: 168061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 168116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_QPRANGETYPE); 168261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_VIDEO_PARAM_QPRANGETYPE *qp_range = (OMX_QCOM_VIDEO_PARAM_QPRANGETYPE*) paramData; 16838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamVideoQPRange"); 168461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(qp_range, &m_sSessionQPRange, sizeof(m_sSessionQPRange)); 168561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 168661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 168761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 168861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoErrorCorrection: 168961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 169016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE); 169161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE* errorresilience = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE*)paramData; 16928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_IndexParamVideoErrorCorrection"); 169361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan errorresilience->bEnableHEC = m_sErrorCorrection.bEnableHEC; 169461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan errorresilience->bEnableResync = m_sErrorCorrection.bEnableResync; 169561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan errorresilience->nResynchMarkerSpacing = m_sErrorCorrection.nResynchMarkerSpacing; 169661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 169761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 169861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoIntraRefresh: 169961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 170016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_VIDEO_PARAM_INTRAREFRESHTYPE); 170161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_PARAM_INTRAREFRESHTYPE* intrarefresh = (OMX_VIDEO_PARAM_INTRAREFRESHTYPE*)paramData; 17028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("OMX_IndexParamVideoIntraRefresh"); 17038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("OMX_IndexParamVideoIntraRefresh GET"); 170461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intrarefresh->eRefreshMode = m_sIntraRefresh.eRefreshMode; 170561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan intrarefresh->nCirMBs = m_sIntraRefresh.nCirMBs; 170661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 170761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 170861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexPortDefn: 170961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //TODO 171061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 171161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_CAPABILITY_TYPE_INDEX: 171261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 171316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMXComponentCapabilityFlagsType); 171461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMXComponentCapabilityFlagsType *pParam = reinterpret_cast<OMXComponentCapabilityFlagsType*>(paramData); 17158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_COMPONENT_CAPABILITY_TYPE_INDEX"); 171661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iIsOMXComponentMultiThreaded = OMX_TRUE; 171761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE; 171861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentSupportsExternalInputBufferAlloc = OMX_TRUE; 171961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentSupportsMovableInputBuffers = OMX_TRUE; 172061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentUsesNALStartCodes = OMX_TRUE; 172161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentSupportsPartialFrames = OMX_FALSE; 172261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentCanHandleIncompleteFrames = OMX_FALSE; 172361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->iOMXComponentUsesFullAVCFrames = OMX_FALSE; 172461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem = OMX_TRUE; 172561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Supporting capability index in encoder node"); 172661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 172761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 17286eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#if !defined(MAX_RES_720P) || defined(_MSM8974_) 172961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_QcomIndexParamIndexExtraDataType: 173061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 173116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_INDEXEXTRADATATYPE); 173261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamIndexExtraDataType"); 173361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_INDEXEXTRADATATYPE *pParam = (QOMX_INDEXEXTRADATATYPE *)paramData; 173461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderSliceInfo) { 173561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 173661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->bEnabled = 17378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_BOOL)(m_sExtraData & VEN_EXTRADATA_SLICEINFO); 173861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("Slice Info extradata %d", pParam->bEnabled); 173961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 174061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: slice information is " 174161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "valid for output port only"); 174261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedIndex; 174361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 17448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoEncoderMBInfo) { 17458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 17468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->bEnabled = 17478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_BOOL)(m_sExtraData & VEN_EXTRADATA_MBINFO); 17488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("MB Info extradata %d", pParam->bEnabled); 17498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 17508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: MB information is " 17518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "valid for output port only"); 17528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 17538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 175461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 17556eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 175661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (pParam->nIndex == (OMX_INDEXTYPE)OMX_ExtraDataVideoLTRInfo) { 175761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 175861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->bEnabled = 17598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (OMX_BOOL)(m_sExtraData & VEN_EXTRADATA_LTRINFO); 176061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("LTR Info extradata %d", pParam->bEnabled); 176161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 176261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: LTR information is " 176361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "valid for output port only"); 176461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 176561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 176661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 17676eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 176861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 176961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: unsupported extradata index (0x%x)", 177061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nIndex); 177161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 177261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 177361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 177461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 177561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoLTRCountRangeSupported: 177661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 177716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_RANGETYPE); 177861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("get_parameter: QOMX_IndexParamVideoLTRCountRangeSupported"); 177961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_RANGETYPE *pParam = (QOMX_EXTNINDEX_RANGETYPE *)paramData; 178061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->nPortIndex == PORT_INDEX_OUT) { 178161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 min = 0, max = 0, step_size = 0; 178261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_get_capability_ltrcount(&min, &max, &step_size)) { 178361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nMin = min; 178461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nMax = max; 178561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pParam->nStepSize = step_size; 178661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 178761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: get_capability_ltrcount failed"); 178861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUndefined; 178961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 179061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 179161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("LTR count range is valid for output port only"); 179261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 179361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 179461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 179561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 1796f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case OMX_QcomIndexParamVideoLTRCount: 1797f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 179816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE); 1799f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamVideoLTRCount"); 1800f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE *pParam = 1801f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE*>(paramData); 1802f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(pParam, &m_sParamLTRCount, sizeof(m_sParamLTRCount)); 1803f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 1804f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 1805826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 180661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexParamVideoSyntaxHdr: 180761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 180816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_PARAMTYPE); 180961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_HIGH("QOMX_IndexParamVideoSyntaxHdr"); 181061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_EXTNINDEX_PARAMTYPE* pParam = 181161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<QOMX_EXTNINDEX_PARAMTYPE*>(paramData); 181261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam->pData == NULL) { 181361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Error: Data buffer is NULL"); 181461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadParameter; 181561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 181661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 181761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (get_syntaxhdr_enable == false) { 181861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: get_parameter: Get syntax header disabled"); 181961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorUnsupportedIndex; 182061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 182161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 182261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_LOADED_START_PENDING); 182361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_loaded_start()) { 182461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("device start successful"); 182561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 182661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("device start failed"); 182761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR(&m_flags, OMX_COMPONENT_LOADED_START_PENDING); 182861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorHardware; 182961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 183061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_get_seq_hdr(pParam->pData, 183161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (unsigned)(pParam->nSize - sizeof(QOMX_EXTNINDEX_PARAMTYPE)), 1832f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (unsigned *)(void *)&pParam->nDataSize)) { 18338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("get syntax header successful (hdrlen = %u)", 18348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->nDataSize); 183561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (unsigned i = 0; i < pParam->nDataSize; i++) { 183661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Header[%d] = %x", i, *((char *)pParam->pData + i)); 183761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 183861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 183961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("Error returned from GetSyntaxHeader()"); 184061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 184161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 184261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_flags, OMX_COMPONENT_LOADED_STOP_PENDING); 184361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_loaded_stop()) { 184461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("device stop successful"); 184561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 184661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("device stop failed"); 184761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR(&m_flags, OMX_COMPONENT_LOADED_STOP_PENDING); 184861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 184961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 185061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 185161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 18528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexHierarchicalStructure: 18538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 185416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_VIDEO_HIERARCHICALLAYERS); 18558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan QOMX_VIDEO_HIERARCHICALLAYERS* hierp = (QOMX_VIDEO_HIERARCHICALLAYERS*) paramData; 18568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexHierarchicalStructure"); 18578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(hierp, &m_sHierLayers, sizeof(m_sHierLayers)); 18588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 18598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 18608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamPerfLevel: 18618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 186216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PERF_LEVEL); 18638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 perflevel; 18648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_QCOM_VIDEO_PARAM_PERF_LEVEL *pParam = 18658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_PARAM_PERF_LEVEL*>(paramData); 18668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamPerfLevel"); 18678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!dev_get_performance_level(&perflevel)) { 18688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_performance_level %d", 18698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->ePerfLevel); 18708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 18718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->ePerfLevel = (QOMX_VIDEO_PERF_LEVEL)perflevel; 18728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 18738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 18748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 18758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamH264VUITimingInfo: 18768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 187716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO); 18788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 enabled; 18798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO *pParam = 18808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO*>(paramData); 18818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamH264VUITimingInfo"); 18828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!dev_get_vui_timing_info(&enabled)) { 18838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_vui_Timing_info %d", 18848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->bEnable); 18858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 18868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->bEnable = (OMX_BOOL)enabled; 18878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 18888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 18898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 18908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_QcomIndexParamPeakBitrate: 18918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 189216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE); 18938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 peakbitrate; 18948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE *pParam = 18958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE*>(paramData); 18968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_QcomIndexParamPeakBitrate"); 18978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!dev_get_peak_bitrate(&peakbitrate)) { 18988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_peak_bitrate %u", 18998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->nPeakBitrate); 19008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 19018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pParam->nPeakBitrate = peakbitrate; 19028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 19038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 19048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 19058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case QOMX_IndexParamVideoInitialQp: 19068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 190716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(paramData, QOMX_EXTNINDEX_VIDEO_INITIALQP); 19088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan QOMX_EXTNINDEX_VIDEO_INITIALQP* initqp = 19098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<QOMX_EXTNINDEX_VIDEO_INITIALQP *>(paramData); 19108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(initqp, &m_sParamInitqp, sizeof(m_sParamInitqp)); 19118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 19128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 191361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexParamVideoSliceFMO: 191461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 191561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 19168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: get_parameter: unknown param %08x", paramIndex); 191761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet =OMX_ErrorUnsupportedIndex; 191861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 191961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 192061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 192161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 192261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 192361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 192447e37c4428509524ee576920a98381f3e4872493Nick Pelly 192547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 192647e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 192761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 192861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::GetConfig 192947e37c4428509524ee576920a98381f3e4872493Nick Pelly 193061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 193161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Get Config Method implementation. 193247e37c4428509524ee576920a98381f3e4872493Nick Pelly 193361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 193461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 193547e37c4428509524ee576920a98381f3e4872493Nick Pelly 193661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 193761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if successful. 193847e37c4428509524ee576920a98381f3e4872493Nick Pelly 193961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 194047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_config(OMX_IN OMX_HANDLETYPE hComp, 194161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_INDEXTYPE configIndex, 194261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_PTR configData) 194347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 19448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 194561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //////////////////////////////////////////////////////////////// 194661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Supported Config Index Type 194761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // ============================================================= 194861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // OMX_IndexConfigVideoBitrate OMX_VIDEO_CONFIG_BITRATETYPE 194961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // OMX_IndexConfigVideoFramerate OMX_CONFIG_FRAMERATETYPE 195061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // OMX_IndexConfigCommonRotate OMX_CONFIG_ROTATIONTYPE 195161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //////////////////////////////////////////////////////////////// 195261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 195361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (configData == NULL) { 195461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: param is null"); 195561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 195661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 195761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 195861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 195961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: can't be in invalid state"); 196061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 196161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 196261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 196361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //@todo need to validate params 19648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan switch ((int)configIndex) { 196561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoBitrate: 196661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 196716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_BITRATETYPE); 196861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_BITRATETYPE* pParam = reinterpret_cast<OMX_VIDEO_CONFIG_BITRATETYPE*>(configData); 196961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sConfigBitrate, sizeof(m_sConfigBitrate)); 197061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 197161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 197261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoFramerate: 197361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 197416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_FRAMERATETYPE); 197561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_FRAMERATETYPE* pParam = reinterpret_cast<OMX_CONFIG_FRAMERATETYPE*>(configData); 197661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sConfigFramerate, sizeof(m_sConfigFramerate)); 197761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 197861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 197961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigCommonRotate: 198061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 198116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_CONFIG_ROTATIONTYPE); 198261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_CONFIG_ROTATIONTYPE* pParam = reinterpret_cast<OMX_CONFIG_ROTATIONTYPE*>(configData); 198361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sConfigFrameRotation, sizeof(m_sConfigFrameRotation)); 198461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 198561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 198661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case QOMX_IndexConfigVideoIntraperiod: 198761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 19888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_config:QOMX_IndexConfigVideoIntraperiod"); 198916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, QOMX_VIDEO_INTRAPERIODTYPE); 199061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan QOMX_VIDEO_INTRAPERIODTYPE* pParam = reinterpret_cast<QOMX_VIDEO_INTRAPERIODTYPE*>(configData); 199161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sIntraperiod, sizeof(m_sIntraperiod)); 199261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 199361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 199461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_IndexConfigVideoAVCIntraPeriod: 199561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan { 199616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_AVCINTRAPERIOD); 199761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_VIDEO_CONFIG_AVCINTRAPERIOD *pParam = 199861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan reinterpret_cast<OMX_VIDEO_CONFIG_AVCINTRAPERIOD*>(configData); 199961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("get_config: OMX_IndexConfigVideoAVCIntraPeriod"); 200061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memcpy(pParam, &m_sConfigAVCIDRPeriod, sizeof(m_sConfigAVCIDRPeriod)); 200161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 200261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 20038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_IndexConfigCommonDeinterlace: 20048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 200516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_DEINTERLACE); 20068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_VIDEO_CONFIG_DEINTERLACE *pParam = 20078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_VIDEO_CONFIG_DEINTERLACE*>(configData); 20088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_config: OMX_IndexConfigCommonDeinterlace"); 20098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(pParam, &m_sConfigDeinterlace, sizeof(m_sConfigDeinterlace)); 20108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 20118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 20128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan case OMX_IndexConfigVideoVp8ReferenceFrame: 20138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan { 201416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_VP8REFERENCEFRAMETYPE); 20158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_VIDEO_VP8REFERENCEFRAMETYPE* pParam = 20168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan reinterpret_cast<OMX_VIDEO_VP8REFERENCEFRAMETYPE*>(configData); 20178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_config: OMX_IndexConfigVideoVp8ReferenceFrame"); 20188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan memcpy(pParam, &m_sConfigVp8ReferenceFrame, sizeof(m_sConfigVp8ReferenceFrame)); 20198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan break; 20208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 2021f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan case OMX_QcomIndexConfigPerfLevel: 2022f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan { 202316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan VALIDATE_OMX_PARAM_DATA(configData, OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL); 2024f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_U32 perflevel; 2025f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL *pParam = 2026f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan reinterpret_cast<OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL*>(configData); 2027f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("get_config: OMX_QcomIndexConfigPerfLevel"); 2028f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!dev_get_performance_level(&perflevel)) { 2029f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("Invalid entry returned from get_performance_level %d", 2030f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan pParam->ePerfLevel); 2031f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 2032f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan pParam->ePerfLevel = (QOMX_VIDEO_PERF_LEVEL)perflevel; 2033f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 2034f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan break; 2035f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 2036f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon case OMX_IndexConfigAndroidIntraRefresh: 2037f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon { 2038f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon VALIDATE_OMX_PARAM_DATA(configData, OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE); 2039f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE* pParam = 2040f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon reinterpret_cast<OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE*>(configData); 2041f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon DEBUG_PRINT_LOW("get_config: OMX_IndexConfigAndroidIntraRefresh"); 2042f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon memcpy(pParam, &m_sConfigIntraRefresh, sizeof(m_sConfigIntraRefresh)); 2043f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon break; 2044f1b15e15b61a610b6d0a78797e9a5a3f2cfdd56cArun Menon } 204561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan default: 204661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: unsupported index %d", (int) configIndex); 204761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorUnsupportedIndex; 204861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 204961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 205047e37c4428509524ee576920a98381f3e4872493Nick Pelly 205147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 205247e37c4428509524ee576920a98381f3e4872493Nick Pelly 2053c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan#define extn_equals(param, extn) (!strcmp(param, extn)) 2054c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan 205547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 205661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 205761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::GetExtensionIndex 205847e37c4428509524ee576920a98381f3e4872493Nick Pelly 205961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 206061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX GetExtensionIndex method implementaion. <TBD> 206147e37c4428509524ee576920a98381f3e4872493Nick Pelly 206261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 206361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 206447e37c4428509524ee576920a98381f3e4872493Nick Pelly 206561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 206661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything successful. 206747e37c4428509524ee576920a98381f3e4872493Nick Pelly 206861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 206947e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_extension_index(OMX_IN OMX_HANDLETYPE hComp, 207061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_STRING paramName, 207161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_INDEXTYPE* indexType) 207247e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 20738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 207461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 20758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Get Extension Index in Invalid State"); 207661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 207761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2078826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 2079c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.QCOM.index.param.SliceDeliveryMode")) { 208061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *indexType = (OMX_INDEXTYPE)OMX_QcomIndexEnableSliceDeliveryMode; 208161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 208261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2083826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 2084826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 2085c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.google.android.index.storeMetaDataInBuffers")) { 20868e9fdc3254721b488ebdb9e9e62fb2d99eac392dVineeta Srivastava *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamVideoMetaBufferMode; 2087826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev return OMX_ErrorNone; 208861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2089826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 2090c9770704a9bb7c26205cf0e5bca05d4397aab1c3Praveen Chavan if (extn_equals(paramName, "OMX.google.android.index.prependSPSPPSToIDRFrames")) { 20918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan *indexType = (OMX_INDEXTYPE)OMX_QcomIndexParamSequenceHeaderWithIDR; 20928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorNone; 20938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 209461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNotImplemented; 209547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 209647e37c4428509524ee576920a98381f3e4872493Nick Pelly 209747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 209861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 209961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::GetState 210047e37c4428509524ee576920a98381f3e4872493Nick Pelly 210161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 210261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns the state information back to the caller.<TBD> 210347e37c4428509524ee576920a98381f3e4872493Nick Pelly 210461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 210561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 210647e37c4428509524ee576920a98381f3e4872493Nick Pelly 210761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 210861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Error None if everything is successful. 210961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 211047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::get_state(OMX_IN OMX_HANDLETYPE hComp, 211161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_STATETYPE* state) 211247e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 21138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 211461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *state = m_state; 21158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_state: Returning the state %d",*state); 211661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 211747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 211847e37c4428509524ee576920a98381f3e4872493Nick Pelly 211947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 212061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 212161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::ComponentTunnelRequest 212247e37c4428509524ee576920a98381f3e4872493Nick Pelly 212361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 212461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Component Tunnel Request method implementation. <TBD> 212547e37c4428509524ee576920a98381f3e4872493Nick Pelly 212661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 212761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 212847e37c4428509524ee576920a98381f3e4872493Nick Pelly 212961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 213061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything successful. 213147e37c4428509524ee576920a98381f3e4872493Nick Pelly 213261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 21338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE omx_video::component_tunnel_request(OMX_IN OMX_HANDLETYPE hComp, 213461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 213561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE peerComponent, 213661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 peerPort, 213761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_TUNNELSETUPTYPE* tunnelSetup) 213847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 21398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void) hComp, (void) port, (void) peerComponent, (void) peerPort, (void) tunnelSetup; 21408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: component_tunnel_request Not Implemented"); 214161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNotImplemented; 214247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 214347e37c4428509524ee576920a98381f3e4872493Nick Pelly 214447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 214561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 214661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::UseInputBuffer 214747e37c4428509524ee576920a98381f3e4872493Nick Pelly 214861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 214961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Helper function for Use buffer in the input pin 215047e37c4428509524ee576920a98381f3e4872493Nick Pelly 215161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 215261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 215347e37c4428509524ee576920a98381f3e4872493Nick Pelly 215461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 215561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 215647e37c4428509524ee576920a98381f3e4872493Nick Pelly 215761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 215847e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::use_input_buffer( 215961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 216061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 216161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 216261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 216361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes, 216461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U8* buffer) 216547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 21668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void) hComp; 216761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 216847e37c4428509524ee576920a98381f3e4872493Nick Pelly 216961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i = 0; 217061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *buf_addr = NULL; 217147e37c4428509524ee576920a98381f3e4872493Nick Pelly 21728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("use_input_buffer: port = %u appData = %p bytes = %u buffer = %p",(unsigned int)port,appData,(unsigned int)bytes,buffer); 217361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bytes != m_sInPortDef.nBufferSize) { 21748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: use_input_buffer: Size Mismatch!! " 21758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "bytes[%u] != Port.nBufferSize[%u]", (unsigned int)bytes, (unsigned int)m_sInPortDef.nBufferSize); 217661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 217747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 217847e37c4428509524ee576920a98381f3e4872493Nick Pelly 217961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_inp_mem_ptr) { 218061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_use_buffer = true; 218161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = (OMX_BUFFERHEADERTYPE*) \ 218261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan calloc( (sizeof(OMX_BUFFERHEADERTYPE)), m_sInPortDef.nBufferCountActual); 218361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr == NULL) { 21848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_inp_mem_ptr"); 218561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 218661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2187f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("Successfully allocated m_inp_mem_ptr = %p", m_inp_mem_ptr); 218861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2189826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 219061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sInPortDef.nBufferCountActual); 219161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem == NULL) { 21928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_pmem"); 219361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 219461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 219661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sInPortDef.nBufferCountActual); 219761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion == NULL) { 21988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_ion"); 219961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 220061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 2202826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 220361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sInPortDef.nBufferCountActual; i++) { 220461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = -1; 2205826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 220661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd =-1; 220761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].fd_ion_data.fd =-1; 22088767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_ion[i].ion_alloc_data.handle = 0; 2209826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 221061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 221147e37c4428509524ee576920a98381f3e4872493Nick Pelly 221261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 221347e37c4428509524ee576920a98381f3e4872493Nick Pelly 221461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sInPortDef.nBufferCountActual; i++) { 221561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_inp_bm_count,i)) { 221661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 221761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 221847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 221947e37c4428509524ee576920a98381f3e4872493Nick Pelly 222061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i < m_sInPortDef.nBufferCountActual) { 222147e37c4428509524ee576920a98381f3e4872493Nick Pelly 222261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = (m_inp_mem_ptr + i); 222361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_inp_bm_count,i); 222447e37c4428509524ee576920a98381f3e4872493Nick Pelly 222561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pBuffer = (OMX_U8 *)buffer; 222661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nSize = sizeof(OMX_BUFFERHEADERTYPE); 222761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nVersion.nVersion = OMX_SPEC_VERSION; 222861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nAllocLen = m_sInPortDef.nBufferSize; 222961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pAppPrivate = appData; 223061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nInputPortIndex = PORT_INDEX_IN; 223147e37c4428509524ee576920a98381f3e4872493Nick Pelly 223261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_use_input_pmem) { 2233826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 22346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 223561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize, 223661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].ion_alloc_data, 223761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].fd_ion_data,0); 22386eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 223961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize, 224061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].ion_alloc_data, 224161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].fd_ion_data,ION_FLAG_CACHED); 22426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 224361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion[i].ion_device_fd < 0) { 22448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ION device open() Failed"); 224561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 224661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 224761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = m_pInput_ion[i].fd_ion_data.fd; 2248826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 224961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 225061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i].fd == 0) { 225161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 225261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 225347e37c4428509524ee576920a98381f3e4872493Nick Pelly 225461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i] .fd < 0) { 22558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed"); 225661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 225761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2258826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 225961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].size = m_sInPortDef.nBufferSize; 226061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].offset = 0; 22618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2262d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pInput_pmem[i].buffer = NULL; 22638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 22648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_pmem[i].buffer = (unsigned char *)mmap( 22658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan NULL,m_pInput_pmem[i].size,PROT_READ|PROT_WRITE, 226661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pInput_pmem[i].fd,0); 226761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 226861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i].buffer == MAP_FAILED) { 22698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: mmap() Failed"); 2270d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pInput_pmem[i].buffer = NULL; 227161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(m_pInput_pmem[i].fd); 2272826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 227361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pInput_ion[i]); 2274826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 227561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 227661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 22778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 22788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 227961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 228061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pParam = reinterpret_cast<OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *>((*bufferHdr)->pAppPrivate); 22818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside qcom_ext with luma:(fd:%lu,offset:0x%x)", pParam->pmem_fd, (unsigned)pParam->offset); 228261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 228361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam) { 228461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = pParam->pmem_fd; 228561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].offset = pParam->offset; 228661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].size = m_sInPortDef.nBufferSize; 228761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].buffer = (unsigned char *)buffer; 22888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("DBG:: pParam->pmem_fd = %u, pParam->offset = %u", 22898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)pParam->pmem_fd, (unsigned int)pParam->offset); 229061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 229161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid AppData given for PMEM i/p UseBuffer case"); 229261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 229361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 229461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 229547e37c4428509524ee576920a98381f3e4872493Nick Pelly 22968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("use_inp:: bufhdr = %p, pBuffer = %p, m_pInput_pmem[i].buffer = %p", 229747e37c4428509524ee576920a98381f3e4872493Nick Pelly (*bufferHdr), (*bufferHdr)->pBuffer, m_pInput_pmem[i].buffer); 229861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( dev_use_buf(&m_pInput_pmem[i],PORT_INDEX_IN,i) != true) { 22998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_use_buf() Failed for i/p buf"); 230061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 230161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 230261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 23038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: All buffers are already used, invalid use_buf call for " 230461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "index = %u", i); 230561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 230661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 230761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 230861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 230947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 231047e37c4428509524ee576920a98381f3e4872493Nick Pelly 231147e37c4428509524ee576920a98381f3e4872493Nick Pelly 231247e37c4428509524ee576920a98381f3e4872493Nick Pelly 231347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 231461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 231561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::UseOutputBuffer 231647e37c4428509524ee576920a98381f3e4872493Nick Pelly 231761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 231861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Helper function for Use buffer in the input pin 231947e37c4428509524ee576920a98381f3e4872493Nick Pelly 232061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 232161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 232247e37c4428509524ee576920a98381f3e4872493Nick Pelly 232361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 232461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 232547e37c4428509524ee576920a98381f3e4872493Nick Pelly 232661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 232747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::use_output_buffer( 232861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 232961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 233061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 233161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 233261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes, 233361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U8* buffer) 233447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 23358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp, (void)port; 233661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 233761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *bufHdr= NULL; // buffer header 233861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i= 0; // Temporary counter 233961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *buf_addr = NULL; 23406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 234161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int align_size; 23426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 234347e37c4428509524ee576920a98381f3e4872493Nick Pelly 23448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Inside use_output_buffer()"); 234561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bytes != m_sOutPortDef.nBufferSize) { 23468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: use_output_buffer: Size Mismatch!! " 23478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "bytes[%u] != Port.nBufferSize[%u]", (unsigned int)bytes, (unsigned int)m_sOutPortDef.nBufferSize); 234861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 234947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 235061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 235161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_out_mem_ptr) { 235261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_use_buffer = true; 235361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int nBufHdrSize = 0; 235461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 23558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Allocating First Output Buffer(%u)",(unsigned int)m_sOutPortDef.nBufferCountActual); 235661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nBufHdrSize = m_sOutPortDef.nBufferCountActual * sizeof(OMX_BUFFERHEADERTYPE); 235761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* 235861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Memory for output side involves the following: 235961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * 1. Array of Buffer Headers 236061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * 2. Bitmask array to hold the buffer allocation details 236161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * In order to minimize the memory management entire allocation 236261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * is done in one step. 236361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan */ 236461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //OMX Buffer header 236561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr = (OMX_BUFFERHEADERTYPE *)calloc(nBufHdrSize,1); 236661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr == NULL) { 23678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_out_mem_ptr"); 236861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 236961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 237061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 237161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sOutPortDef.nBufferCountActual); 237261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem == NULL) { 23738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_pmem"); 237461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 237561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2376826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 237761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sOutPortDef.nBufferCountActual); 237861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion == NULL) { 23798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_ion"); 238061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 238161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2382826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 238361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr) { 238461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr = m_out_mem_ptr; 23858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Memory Allocation Succeeded for OUT port%p",m_out_mem_ptr); 238661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Settting the entire storage nicely 238761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i < m_sOutPortDef.nBufferCountActual ; i++) { 238861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE); 238961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nVersion.nVersion = OMX_SPEC_VERSION; 239061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nAllocLen = bytes; 239161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nFilledLen = 0; 239261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->pAppPrivate = appData; 239361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nOutputPortIndex = PORT_INDEX_OUT; 239461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->pBuffer = NULL; 239561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr++; 239661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = -1; 2397826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 239861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd =-1; 239961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].fd_ion_data.fd=-1; 24008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_ion[i].ion_alloc_data.handle = 0; 2401826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 240261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 240361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 24048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Output buf mem alloc failed[0x%p]",m_out_mem_ptr); 240561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 240661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 240761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 240861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 240961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sOutPortDef.nBufferCountActual; i++) { 241061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_out_bm_count,i)) { 241161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 241261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 241361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 241461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 241561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 241661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i < m_sOutPortDef.nBufferCountActual) { 241761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = (m_out_mem_ptr + i ); 241861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pBuffer = (OMX_U8 *)buffer; 241961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pAppPrivate = appData; 242061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 242161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_use_output_pmem) { 2422826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 24236eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 24248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan align_size = (m_sOutPortDef.nBufferSize + (SZ_4K - 1)) & ~(SZ_4K - 1); 242561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size, 242661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].ion_alloc_data, 242761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].fd_ion_data,0); 24286eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 242961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory( 243061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.nBufferSize, 243161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].ion_alloc_data, 243261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].fd_ion_data,ION_FLAG_CACHED); 24336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 243461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion[i].ion_device_fd < 0) { 24358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ION device open() Failed"); 243661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 243761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 243861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = m_pOutput_ion[i].fd_ion_data.fd; 2439826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 244061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 244147e37c4428509524ee576920a98381f3e4872493Nick Pelly 244261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].fd == 0) { 244361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 244461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 244547e37c4428509524ee576920a98381f3e4872493Nick Pelly 244661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].fd < 0) { 24478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed"); 244861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 244961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2450826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 245161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize; 245261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].offset = 0; 24538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 2454d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pOutput_pmem[i].buffer = NULL; 24558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 24566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 24578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL, 24588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan align_size,PROT_READ|PROT_WRITE, 245961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pOutput_pmem[i].fd,0); 24606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 24618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL, 24628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].size,PROT_READ|PROT_WRITE, 246361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pOutput_pmem[i].fd,0); 24646eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 246561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].buffer == MAP_FAILED) { 24668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: mmap() Failed"); 2467d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pOutput_pmem[i].buffer = NULL; 246861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(m_pOutput_pmem[i].fd); 2469826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 247061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pOutput_ion[i]); 2471826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 247261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 247361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 24748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 247561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 247661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO *pParam = reinterpret_cast<OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO*>((*bufferHdr)->pAppPrivate); 24778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside qcom_ext pParam: %p", pParam); 247861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 247961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (pParam) { 24808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside qcom_ext with luma:(fd:%lu,offset:0x%x)", pParam->pmem_fd, (int)pParam->offset); 248161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = pParam->pmem_fd; 248261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].offset = pParam->offset; 248361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize; 248461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)buffer; 248561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 248661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid AppData given for PMEM o/p UseBuffer case"); 248761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 248861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 248961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_addr = (unsigned char *)buffer; 249061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 249147e37c4428509524ee576920a98381f3e4872493Nick Pelly 24928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("use_out:: bufhdr = %p, pBuffer = %p, m_pOutput_pmem[i].buffer = %p", 249361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr), (*bufferHdr)->pBuffer, m_pOutput_pmem[i].buffer); 249461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_use_buf(&m_pOutput_pmem[i],PORT_INDEX_OUT,i) != true) { 249561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_use_buf Failed for o/p buf"); 249661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 249761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2498417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan 2499417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan BITMASK_SET(&m_out_bm_count,i); 250061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 250161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: All o/p Buffers have been Used, invalid use_buf call for " 250261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan "index = %u", i); 250361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 250447e37c4428509524ee576920a98381f3e4872493Nick Pelly } 250561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 250661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 250747e37c4428509524ee576920a98381f3e4872493Nick Pelly} 250847e37c4428509524ee576920a98381f3e4872493Nick Pelly 250947e37c4428509524ee576920a98381f3e4872493Nick Pelly 251047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 251161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 251261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::UseBuffer 251347e37c4428509524ee576920a98381f3e4872493Nick Pelly 251461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 251561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Use Buffer method implementation. 251647e37c4428509524ee576920a98381f3e4872493Nick Pelly 251761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 251861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 251947e37c4428509524ee576920a98381f3e4872493Nick Pelly 252061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 252161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None , if everything successful. 252247e37c4428509524ee576920a98381f3e4872493Nick Pelly 252361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 252447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::use_buffer( 252561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 252661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 252761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 252861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 252961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes, 253061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U8* buffer) 253147e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 253261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 253361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 25348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Use Buffer in Invalid State"); 253561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 253661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 253761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 253861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = use_input_buffer(hComp,bufferHdr,port,appData,bytes,buffer); 253961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 254061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = use_output_buffer(hComp,bufferHdr,port,appData,bytes,buffer); 254161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 25428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index received %d",(int)port); 254361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 254461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 254561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 254661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 254761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocate_done()) { 254861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) { 254961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 255061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_IDLE_PENDING); 255161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandStateSet,OMX_StateIdle, 255261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 255361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 255461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 255561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN && m_sInPortDef.bPopulated) { 255661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_INPUT_ENABLE_PENDING)) { 255761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_ENABLE_PENDING); 255861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable, 255961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN, 256061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 256161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 256261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 256361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT && m_sOutPortDef.bPopulated) { 256461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) { 256561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_ENABLE_PENDING); 256661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable, 256761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_OUT, 256861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 256961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_event_port_settings_sent = false; 257061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 257161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 257261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 257361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 257447e37c4428509524ee576920a98381f3e4872493Nick Pelly} 257547e37c4428509524ee576920a98381f3e4872493Nick Pelly 257647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr) 257747e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 257861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int index = 0; 257961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *temp_buff ; 258047e37c4428509524ee576920a98381f3e4872493Nick Pelly 258161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bufferHdr == NULL || m_inp_mem_ptr == NULL) { 258261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: free_input: Invalid bufferHdr[%p] or m_inp_mem_ptr[%p]", 258361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferHdr, m_inp_mem_ptr); 258461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 258561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 258647e37c4428509524ee576920a98381f3e4872493Nick Pelly 2587f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan index = bufferHdr - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr); 2588826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 258961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_mode_enable) { 259061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sInPortDef.nBufferCountActual) { 259161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&meta_buffer_hdr[index], 0, sizeof(meta_buffer_hdr[index])); 259261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&meta_buffers[index], 0, sizeof(meta_buffers[index])); 259361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 259461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mUseProxyColorFormat) 259561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 25963b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan else { 259761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2d_conv.close(); 25983b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan opaque_buffer_hdr[index] = NULL; 25993b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 2600826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 2601826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 260261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sInPortDef.nBufferCountActual && !mUseProxyColorFormat && 260361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_free_buf(&m_pInput_pmem[index],PORT_INDEX_IN) != true) { 26048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ERROR: dev_free_buf() Failed for i/p buf"); 260561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 260661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 260761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sInPortDef.nBufferCountActual && m_pInput_pmem) { 260814a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan auto_lock l(m_lock); 260914a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan 261061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[index].fd > 0 && input_use_buffer == false) { 26118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: i/p AllocateBuffer case"); 26128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 261361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan munmap (m_pInput_pmem[index].buffer,m_pInput_pmem[index].size); 26148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 26158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan free(m_pInput_pmem[index].buffer); 26168767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 261714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_pInput_pmem[index].buffer = NULL; 261861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pInput_pmem[index].fd); 2619826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 262061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pInput_ion[index]); 2621826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 262261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[index].fd = -1; 262361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_pInput_pmem[index].fd > 0 && (input_use_buffer == true && 262461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_use_input_pmem == OMX_FALSE)) { 26258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: i/p Heap UseBuffer case"); 262661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_free_buf(&m_pInput_pmem[index],PORT_INDEX_IN) != true) { 26278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_free_buf() Failed for i/p buf"); 262861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 26298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 263014a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan munmap (m_pInput_pmem[index].buffer,m_pInput_pmem[index].size); 263114a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_pInput_pmem[index].buffer = NULL; 26328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 263361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pInput_pmem[index].fd); 2634826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 263561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pInput_ion[index]); 2636826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 263761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[index].fd = -1; 263861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 26398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("FreeBuffer:: fd is invalid or i/p PMEM UseBuffer case"); 264061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 264147e37c4428509524ee576920a98381f3e4872493Nick Pelly } 264261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 264347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 264447e37c4428509524ee576920a98381f3e4872493Nick Pelly 264547e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_output_buffer(OMX_BUFFERHEADERTYPE *bufferHdr) 264647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 264761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int index = 0; 264861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *temp_buff ; 264961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 265061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bufferHdr == NULL || m_out_mem_ptr == NULL) { 265161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: free_output: Invalid bufferHdr[%p] or m_out_mem_ptr[%p]", 265261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferHdr, m_out_mem_ptr); 265361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 265461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 265561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan index = bufferHdr - m_out_mem_ptr; 265661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 265761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sOutPortDef.nBufferCountActual && 265861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dev_free_buf(&m_pOutput_pmem[index],PORT_INDEX_OUT) != true) { 265961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_free_buf Failed for o/p buf"); 266061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 266161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 266261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index < m_sOutPortDef.nBufferCountActual && m_pOutput_pmem) { 266361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[index].fd > 0 && output_use_buffer == false ) { 26648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: o/p AllocateBuffer case"); 26658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 26668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan munmap (m_pOutput_pmem[index].buffer, 26678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[index].size); 26688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 26698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char *data = (char*) m_pOutput_pmem[index].buffer; 2670f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan native_handle_t *handle = NULL; 2671f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(&handle, data + sizeof(OMX_U32), sizeof(native_handle_t*)); 26728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan native_handle_delete(handle); 26738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan free(m_pOutput_pmem[index].buffer); 26748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 267561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pOutput_pmem[index].fd); 2676826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 267761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pOutput_ion[index]); 2678826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 267961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[index].fd = -1; 268061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ( m_pOutput_pmem[index].fd > 0 && (output_use_buffer == true 268161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && m_use_output_pmem == OMX_FALSE)) { 26828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: o/p Heap UseBuffer case"); 268361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_free_buf(&m_pOutput_pmem[index],PORT_INDEX_OUT) != true) { 268461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_free_buf Failed for o/p buf"); 268561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 26868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 26878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan munmap (m_pOutput_pmem[index].buffer, 26888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[index].size); 26898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 269061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pOutput_pmem[index].fd); 2691826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 269261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pOutput_ion[index]); 2693826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 269461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[index].fd = -1; 269561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 26968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer:: fd is invalid or o/p PMEM UseBuffer case"); 269761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 269847e37c4428509524ee576920a98381f3e4872493Nick Pelly } 269961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 270047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 2701826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 2702826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::allocate_input_meta_buffer( 270361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_HANDLETYPE hComp, 270461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE **bufferHdr, 270561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_PTR appData, 270661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U32 bytes) 2707826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 270861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned index = 0; 27097d6e61888e010bbe79878827a3a593699e9a2595Praveen Chavan if (!bufferHdr || bytes < sizeof(encoder_media_buffer_type)) { 27108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("wrong params allocate_input_meta_buffer Hdr %p len %u", 27118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bufferHdr, (unsigned int)bytes); 271261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 271361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 271461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2715f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!m_inp_mem_ptr && !mUseProxyColorFormat) { 271661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = meta_buffer_hdr; 2717f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("use meta_buffer_hdr (%p) as m_inp_mem_ptr = %p", 2718f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan meta_buffer_hdr, m_inp_mem_ptr); 2719f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 272061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (index = 0; ((index < m_sInPortDef.nBufferCountActual) && 272161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].pBuffer); index++); 272261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index == m_sInPortDef.nBufferCountActual) { 272361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("All buffers are allocated input_meta_buffer"); 272461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 272561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 272661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mUseProxyColorFormat) { 272761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (opaque_buffer_hdr[index]) { 272861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("All buffers are allocated opaque_buffer_hdr"); 272961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 273061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 273161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocate_input_buffer(hComp,&opaque_buffer_hdr[index], 273261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN,appData,m_sInPortDef.nBufferSize) != OMX_ErrorNone) { 273361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("All buffers are allocated opaque_buffer_hdr"); 273461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 273561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 273661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 273761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_inp_bm_count,index); 273861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = &meta_buffer_hdr[index]; 273961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan memset(&meta_buffer_hdr[index], 0, sizeof(meta_buffer_hdr[index])); 274061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].nSize = sizeof(meta_buffer_hdr[index]); 27413957953f027b784f2d55d96d388c8107371eb9dbWonsik Kim meta_buffer_hdr[index].nAllocLen = sizeof(meta_buffers[index]); 274261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].nVersion.nVersion = OMX_SPEC_VERSION; 274361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].nInputPortIndex = PORT_INDEX_IN; 274461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].pBuffer = (OMX_U8*)&meta_buffers[index]; 274561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_buffer_hdr[index].pAppPrivate = appData; 274661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mUseProxyColorFormat) { 27478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_opq_pmem_q.insert_entry((unsigned long)opaque_buffer_hdr[index],0,0); 27488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("opaque_buffer_hdr insert %p", opaque_buffer_hdr[index]); 274961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 275061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 2751826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 2752826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 275347e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 275461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 275561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateInputBuffer 275647e37c4428509524ee576920a98381f3e4872493Nick Pelly 275761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 275861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Helper function for allocate buffer in the input pin 275947e37c4428509524ee576920a98381f3e4872493Nick Pelly 276061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 276161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 276247e37c4428509524ee576920a98381f3e4872493Nick Pelly 276361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 276461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 276547e37c4428509524ee576920a98381f3e4872493Nick Pelly 276661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 276747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::allocate_input_buffer( 276861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 276961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 277061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 277161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 277261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes) 277347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 27748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp, (void)port; 277561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 277661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i = 0; 277747e37c4428509524ee576920a98381f3e4872493Nick Pelly 27788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("allocate_input_buffer()::"); 277961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bytes != m_sInPortDef.nBufferSize) { 27808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Buffer size mismatch error: bytes[%u] != nBufferSize[%u]", 27818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)bytes, (unsigned int)m_sInPortDef.nBufferSize); 278261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 278347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 278447e37c4428509524ee576920a98381f3e4872493Nick Pelly 278561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_inp_mem_ptr) { 27868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s: size = %u, actual cnt %u", __FUNCTION__, 27878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.nBufferSize, (unsigned int)m_sInPortDef.nBufferCountActual); 278861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = (OMX_BUFFERHEADERTYPE*) \ 278961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan calloc( (sizeof(OMX_BUFFERHEADERTYPE)), m_sInPortDef.nBufferCountActual); 279061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr == NULL) { 27918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_inp_mem_ptr"); 279261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 279361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 279461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2795f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("Successfully allocated m_inp_mem_ptr = %p", m_inp_mem_ptr); 279661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem = (struct pmem *) calloc(sizeof (struct pmem), m_sInPortDef.nBufferCountActual); 279747e37c4428509524ee576920a98381f3e4872493Nick Pelly 279861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem == NULL) { 27998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_pmem"); 280061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 280161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2802826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 280361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sInPortDef.nBufferCountActual); 280461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion == NULL) { 28058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pInput_ion"); 280661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 280761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2808826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 280961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sInPortDef.nBufferCountActual; i++) { 281061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = -1; 2811826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 281261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd =-1; 281361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].fd_ion_data.fd =-1; 28148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_ion[i].ion_alloc_data.handle = 0; 2815826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 281661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 281747e37c4428509524ee576920a98381f3e4872493Nick Pelly } 281847e37c4428509524ee576920a98381f3e4872493Nick Pelly 281961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sInPortDef.nBufferCountActual; i++) { 282061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_inp_bm_count,i)) { 282161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 282261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 282347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 282461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i < m_sInPortDef.nBufferCountActual) { 282547e37c4428509524ee576920a98381f3e4872493Nick Pelly 282661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = (m_inp_mem_ptr + i); 282761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nSize = sizeof(OMX_BUFFERHEADERTYPE); 282861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nVersion.nVersion = OMX_SPEC_VERSION; 282961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nAllocLen = m_sInPortDef.nBufferSize; 283061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pAppPrivate = appData; 283161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->nInputPortIndex = PORT_INDEX_IN; 28328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan // make fd available to app layer, help with testing 28338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (*bufferHdr)->pInputPortPrivate = (OMX_PTR)&m_pInput_pmem[i]; 283447e37c4428509524ee576920a98381f3e4872493Nick Pelly 2835826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 28366eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 283761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize, 283861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].ion_alloc_data, 283961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].fd_ion_data,0); 28406eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 284161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sInPortDef.nBufferSize, 284261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].ion_alloc_data, 284361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pInput_ion[i].fd_ion_data,ION_FLAG_CACHED); 28446eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 284561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion[i].ion_device_fd < 0) { 28468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ION device open() Failed"); 284761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 284861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2849826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 285061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = m_pInput_ion[i].fd_ion_data.fd; 2851826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 285261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 285347e37c4428509524ee576920a98381f3e4872493Nick Pelly 285461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i].fd == 0) { 285561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 285661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 285747e37c4428509524ee576920a98381f3e4872493Nick Pelly 285861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i].fd < 0) { 28598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() Failed"); 286061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 286161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2862826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 286361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].size = m_sInPortDef.nBufferSize; 286461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[i].offset = 0; 286561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 2866d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pInput_pmem[i].buffer = NULL; 28678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 28688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_pmem[i].buffer = (unsigned char *)mmap(NULL, 28698767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_pmem[i].size,PROT_READ|PROT_WRITE, 287061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pInput_pmem[i].fd,0); 287161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem[i].buffer == MAP_FAILED) { 28728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: mmap FAILED= %d", errno); 2873d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pInput_pmem[i].buffer = NULL; 287461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(m_pInput_pmem[i].fd); 2875826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 287661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pInput_ion[i]); 2877826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 287861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 287961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 28808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 28818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //This should only be used for passing reference to source type and 28828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //secure handle fd struct native_handle_t* 28838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pInput_pmem[i].buffer = malloc(sizeof(OMX_U32) + sizeof(native_handle_t*)); 2884d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan if (m_pInput_pmem[i].buffer == NULL) { 2885d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan DEBUG_PRINT_ERROR("%s: failed to allocate native-handle", __func__); 2886d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan return OMX_ErrorInsufficientResources; 2887d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan } 28888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 28896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 289061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pBuffer = (OMX_U8 *)m_pInput_pmem[i].buffer; 28918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Virtual address in allocate buffer is %p", m_pInput_pmem[i].buffer); 289261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_inp_bm_count,i); 289361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //here change the I/P param here from buf_adr to pmem 289461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mUseProxyColorFormat && (dev_use_buf(&m_pInput_pmem[i],PORT_INDEX_IN,i) != true)) { 28958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_use_buf FAILED for i/p buf"); 289661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 289761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 289861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 28998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: All i/p buffers are allocated, invalid allocate buf call" 29008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "for index [%d]", i); 290161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 290247e37c4428509524ee576920a98381f3e4872493Nick Pelly } 290347e37c4428509524ee576920a98381f3e4872493Nick Pelly 290461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 290547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 290647e37c4428509524ee576920a98381f3e4872493Nick Pelly 290747e37c4428509524ee576920a98381f3e4872493Nick Pelly 290847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 290961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 291061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateOutputBuffer 291147e37c4428509524ee576920a98381f3e4872493Nick Pelly 291261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 291361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Helper fn for AllocateBuffer in the output pin 291447e37c4428509524ee576920a98381f3e4872493Nick Pelly 291561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 291661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 291747e37c4428509524ee576920a98381f3e4872493Nick Pelly 291861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 291961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything went well. 292047e37c4428509524ee576920a98381f3e4872493Nick Pelly 292161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 292247e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::allocate_output_buffer( 292361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 292461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 292561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 292661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 292761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes) 292847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 29298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp, (void)port; 293061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 293161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE *bufHdr= NULL; // buffer header 293261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i= 0; // Temporary counter 29336eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 293461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int align_size; 29356eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 29368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("allocate_output_buffer()for %u bytes", (unsigned int)bytes); 293761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_out_mem_ptr) { 293861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int nBufHdrSize = 0; 29398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("%s: size = %u, actual cnt %u", __FUNCTION__, 29408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sOutPortDef.nBufferSize, (unsigned int)m_sOutPortDef.nBufferCountActual); 294161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nBufHdrSize = m_sOutPortDef.nBufferCountActual * sizeof(OMX_BUFFERHEADERTYPE); 294261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 294361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* 294461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * Memory for output side involves the following: 294561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * 1. Array of Buffer Headers 294661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * 2. Bitmask array to hold the buffer allocation details 294761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * In order to minimize the memory management entire allocation 294861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan * is done in one step. 294961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan */ 295061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr = (OMX_BUFFERHEADERTYPE *)calloc(nBufHdrSize,1); 295147e37c4428509524ee576920a98381f3e4872493Nick Pelly 2952826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 295361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion = (struct venc_ion *) calloc(sizeof (struct venc_ion), m_sOutPortDef.nBufferCountActual); 295461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion == NULL) { 29558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_ion"); 295661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 295761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 2958826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 295961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem = (struct pmem *) calloc(sizeof(struct pmem), m_sOutPortDef.nBufferCountActual); 296061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem == NULL) { 29618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() Failed for m_pOutput_pmem"); 296261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 296361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 296461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr && m_pOutput_pmem) { 296561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr = m_out_mem_ptr; 296661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 296761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i < m_sOutPortDef.nBufferCountActual ; i++) { 296861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE); 296961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nVersion.nVersion = OMX_SPEC_VERSION; 297061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Set the values when we determine the right HxW param 29713957953f027b784f2d55d96d388c8107371eb9dbWonsik Kim bufHdr->nAllocLen = m_sOutPortDef.nBufferSize; 297261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nFilledLen = 0; 297361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->pAppPrivate = appData; 297461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->nOutputPortIndex = PORT_INDEX_OUT; 29758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan // make fd available to app layer, help with testing 29768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan bufHdr->pOutputPortPrivate = (OMX_PTR)&m_pOutput_pmem[i]; 297761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr->pBuffer = NULL; 297861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufHdr++; 297961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = -1; 2980826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 298161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd =-1; 298261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].fd_ion_data.fd=-1; 29838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_ion[i].ion_alloc_data.handle = 0; 2984826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 298561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 298661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 298761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR("ERROR: calloc() failed for m_out_mem_ptr/m_pOutput_pmem"); 298861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInsufficientResources; 298961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 299061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 299161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 29928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("actual cnt = %u", (unsigned int)m_sOutPortDef.nBufferCountActual); 299361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (i=0; i< m_sOutPortDef.nBufferCountActual; i++) { 299461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_out_bm_count,i)) { 29958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Found a Free Output Buffer %d",i); 299661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 299761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 299861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 299961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 300061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i < m_sOutPortDef.nBufferCountActual) { 3001826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 30026eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 300361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan align_size = ((m_sOutPortDef.nBufferSize + 4095)/4096) * 4096; 300461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(align_size, 300561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].ion_alloc_data, 3006f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan &m_pOutput_ion[i].fd_ion_data, ION_FLAG_CACHED); 30076eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 300861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion[i].ion_device_fd = alloc_map_ion_memory(m_sOutPortDef.nBufferSize, 300961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].ion_alloc_data, 301061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &m_pOutput_ion[i].fd_ion_data,ION_FLAG_CACHED); 30116eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 301261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion[i].ion_device_fd < 0) { 30138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR:ION device open() Failed"); 301461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 301561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 30166eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 301761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = m_pOutput_ion[i].fd_ion_data.fd; 3018826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 301961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 302061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].fd == 0) { 302161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].fd = open (MEM_DEVICE,O_RDWR); 302261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 302361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 302461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].fd < 0) { 30258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: /dev/pmem_adsp open() failed"); 302661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 302761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3028826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 302961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].size = m_sOutPortDef.nBufferSize; 303061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem[i].offset = 0; 30318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 3032d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pOutput_pmem[i].buffer = NULL; 30338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 30346eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 30358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL, 30368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan align_size,PROT_READ|PROT_WRITE, 303761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pOutput_pmem[i].fd,0); 30386eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 30398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = (unsigned char *)mmap(NULL, 30408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].size,PROT_READ|PROT_WRITE, 304161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,m_pOutput_pmem[i].fd,0); 30426eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 304361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem[i].buffer == MAP_FAILED) { 30448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: MMAP_FAILED in o/p alloc buffer"); 3045d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan m_pOutput_pmem[i].buffer = NULL; 304661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close (m_pOutput_pmem[i].fd); 3047826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 304861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&m_pOutput_ion[i]); 3049826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 305061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 305161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 30528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 30538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan else { 30548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //This should only be used for passing reference to source type and 30558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan //secure handle fd struct native_handle_t* 30568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan m_pOutput_pmem[i].buffer = malloc(sizeof(OMX_U32) + sizeof(native_handle_t*)); 3057d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan if (m_pOutput_pmem[i].buffer == NULL) { 3058d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan DEBUG_PRINT_ERROR("%s: Failed to allocate native-handle", __func__); 3059d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan return OMX_ErrorInsufficientResources; 3060d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan } 30618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan native_handle_t *handle = native_handle_create(1, 0); 30628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan handle->data[0] = m_pOutput_pmem[i].fd; 30638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan char *data = (char*) m_pOutput_pmem[i].buffer; 30648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan OMX_U32 type = 1; 3065f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(data, &type, sizeof(OMX_U32)); 3066f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan memcpy(data + sizeof(OMX_U32), &handle, sizeof(native_handle_t*)); 30678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 306847e37c4428509524ee576920a98381f3e4872493Nick Pelly 306961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan *bufferHdr = (m_out_mem_ptr + i ); 307061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pBuffer = (OMX_U8 *)m_pOutput_pmem[i].buffer; 307161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (*bufferHdr)->pAppPrivate = appData; 307247e37c4428509524ee576920a98381f3e4872493Nick Pelly 307361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_SET(&m_out_bm_count,i); 307447e37c4428509524ee576920a98381f3e4872493Nick Pelly 307561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_use_buf(&m_pOutput_pmem[i],PORT_INDEX_OUT,i) != true) { 30768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_use_buf FAILED for o/p buf"); 307761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInsufficientResources; 307861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 307961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 30808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: All o/p buffers are allocated, invalid allocate buf call" 30818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "for index [%d] actual: %u", i, (unsigned int)m_sOutPortDef.nBufferCountActual); 308261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 308347e37c4428509524ee576920a98381f3e4872493Nick Pelly } 308447e37c4428509524ee576920a98381f3e4872493Nick Pelly 308561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 308647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 308747e37c4428509524ee576920a98381f3e4872493Nick Pelly 308847e37c4428509524ee576920a98381f3e4872493Nick Pelly 308947e37c4428509524ee576920a98381f3e4872493Nick Pelly// AllocateBuffer -- API Call 309047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 309161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 309261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::AllocateBuffer 309347e37c4428509524ee576920a98381f3e4872493Nick Pelly 309461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 309561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Returns zero if all the buffers released.. 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_buffer(OMX_IN OMX_HANDLETYPE hComp, 310561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 310661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 310761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 310861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 bytes) 310947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 311047e37c4428509524ee576920a98381f3e4872493Nick Pelly 311161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; // OMX return type 311247e37c4428509524ee576920a98381f3e4872493Nick Pelly 31138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Allocate buffer of size = %u on port %d", (unsigned int)bytes, (int)port); 311461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateInvalid) { 31158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Allocate Buf in Invalid State"); 311661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 311761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 311847e37c4428509524ee576920a98381f3e4872493Nick Pelly 311961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // What if the client calls again. 312061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 3121826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 312261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_mode_enable) 312361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = allocate_input_meta_buffer(hComp,bufferHdr,appData,bytes); 312461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 3125826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 312661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = allocate_input_buffer(hComp,bufferHdr,port,appData,bytes); 312761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 312861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = allocate_output_buffer(hComp,bufferHdr,port,appData,bytes); 312961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 31308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid Port Index received %d",(int)port); 313161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 313261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 313361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("Checking for Output Allocate buffer Done"); 313461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (eRet == OMX_ErrorNone) { 313561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (allocate_done()) { 313661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_IDLE_PENDING)) { 313761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 313861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_IDLE_PENDING); 313961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandStateSet,OMX_StateIdle, 314061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 314161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 314261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 314361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN && m_sInPortDef.bPopulated) { 314461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_INPUT_ENABLE_PENDING)) { 314561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_ENABLE_PENDING); 314661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable, 314761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN, 314861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 314961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 315061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 315161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_OUT && m_sOutPortDef.bPopulated) { 315261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_flags,OMX_COMPONENT_OUTPUT_ENABLE_PENDING)) { 315361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_ENABLE_PENDING); 315461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortEnable, 315561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_OUT, 315661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 315761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_event_port_settings_sent = false; 315861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 315961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 316061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 31618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Allocate Buffer exit with ret Code %d",eRet); 316261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 316347e37c4428509524ee576920a98381f3e4872493Nick Pelly} 316447e37c4428509524ee576920a98381f3e4872493Nick Pelly 316547e37c4428509524ee576920a98381f3e4872493Nick Pelly 316647e37c4428509524ee576920a98381f3e4872493Nick Pelly// Free Buffer - API call 316747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 316861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 316961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::FreeBuffer 317047e37c4428509524ee576920a98381f3e4872493Nick Pelly 317161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 317247e37c4428509524ee576920a98381f3e4872493Nick Pelly 317361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 317461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 317547e37c4428509524ee576920a98381f3e4872493Nick Pelly 317661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 317761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 317847e37c4428509524ee576920a98381f3e4872493Nick Pelly 317961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 318047e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::free_buffer(OMX_IN OMX_HANDLETYPE hComp, 318161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 318261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 318347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 31848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 318561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 318661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int nPortIndex; 318761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 31888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("In for encoder free_buffer"); 318961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 319061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_state == OMX_StateIdle && 319161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) { 31928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW(" free buffer while Component in Loading pending"); 319361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if ((m_sInPortDef.bEnabled == OMX_FALSE && port == PORT_INDEX_IN)|| 319461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (m_sOutPortDef.bEnabled == OMX_FALSE && port == PORT_INDEX_OUT)) { 31958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Free Buffer while port %u disabled", (unsigned int)port); 319661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_state == OMX_StateExecuting || m_state == OMX_StatePause) { 31978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,ports need to be disabled"); 319861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError, 319961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ErrorPortUnpopulated, 320061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 320161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 320261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 32038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,port lost Buffers"); 320461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_EventError, 320561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ErrorPortUnpopulated, 320661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 320761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 320861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 320961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (port == PORT_INDEX_IN) { 321061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // check if the buffer is valid 3211f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan nPortIndex = buffer - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr); 321261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 32138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("free_buffer on i/p port - Port idx %u, actual cnt %u", 32148767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan nPortIndex, (unsigned int)m_sInPortDef.nBufferCountActual); 3215417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (nPortIndex < m_sInPortDef.nBufferCountActual && 3216417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan BITMASK_PRESENT(&m_inp_bm_count, nPortIndex)) { 321761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Clear the bit associated with it. 321861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR(&m_inp_bm_count,nPortIndex); 321961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_input_buffer (buffer); 322061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bPopulated = OMX_FALSE; 322161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 322261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Free the Buffer Header*/ 322361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_input_done() 3224826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 322561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && !meta_mode_enable 3226826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 322761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ) { 322861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_use_buffer = false; 322961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr) { 32308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_inp_mem_ptr"); 323161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free (m_inp_mem_ptr); 323261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_inp_mem_ptr = NULL; 323361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 323461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_pmem) { 32358767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_pInput_pmem"); 323661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_pInput_pmem); 323761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem = NULL; 323861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3239826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 324061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pInput_ion) { 32418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_pInput_ion"); 324261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_pInput_ion); 324361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_ion = NULL; 324461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3245826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 324661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 324761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 32488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: free_buffer ,Port Index Invalid"); 324961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 325047e37c4428509524ee576920a98381f3e4872493Nick Pelly } 325161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 325261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT((&m_flags),OMX_COMPONENT_INPUT_DISABLE_PENDING) 325361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && release_input_done()) { 32548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MOVING TO DISABLED STATE"); 325561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_INPUT_DISABLE_PENDING); 325661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortDisable, 325761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_IN, 325861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 325947e37c4428509524ee576920a98381f3e4872493Nick Pelly } 326061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (port == PORT_INDEX_OUT) { 326161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // check if the buffer is valid 326261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nPortIndex = buffer - (OMX_BUFFERHEADERTYPE*)m_out_mem_ptr; 326361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 32648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("free_buffer on o/p port - Port idx %u, actual cnt %u", 32658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan nPortIndex, (unsigned int)m_sOutPortDef.nBufferCountActual); 3266417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan if (nPortIndex < m_sOutPortDef.nBufferCountActual && 3267417bd6d3d293ef616a5a33741cfd6ac8c50f685fPraveen Chavan BITMASK_PRESENT(&m_out_bm_count, nPortIndex)) { 326861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Clear the bit associated with it. 326961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR(&m_out_bm_count,nPortIndex); 327061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bPopulated = OMX_FALSE; 327161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_output_buffer (buffer); 327261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 327361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_output_done()) { 327461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan output_use_buffer = false; 327561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr) { 32768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_out_mem_ptr"); 327761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free (m_out_mem_ptr); 327861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_mem_ptr = NULL; 327961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 328061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_pmem) { 32818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_pOutput_pmem"); 328261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_pOutput_pmem); 328361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_pmem = NULL; 328461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3285826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 328661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pOutput_ion) { 32878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Freeing m_pOutput_ion"); 328861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free(m_pOutput_ion); 328961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pOutput_ion = NULL; 329061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 3291826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 329261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 329361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 32948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: free_buffer , Port Index Invalid"); 329561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 329661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 329761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT((&m_flags),OMX_COMPONENT_OUTPUT_DISABLE_PENDING) 329861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan && release_output_done() ) { 32998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FreeBuffer : If any Disable event pending,post it"); 330061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33018767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("MOVING TO DISABLED STATE"); 330261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_OUTPUT_DISABLE_PENDING); 330361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandPortDisable, 330461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PORT_INDEX_OUT, 330561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 330661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 330761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 33086eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } else { 330961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 331061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 331161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((eRet == OMX_ErrorNone) && 331261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) { 331361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_done()) { 331461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_stop() != 0) { 33158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_stop() FAILED"); 331661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorHardware; 331761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 331861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // Send the callback now 331961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan BITMASK_CLEAR((&m_flags),OMX_COMPONENT_LOADING_PENDING); 332061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan post_event(OMX_CommandStateSet, OMX_StateLoaded, 332161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_COMPONENT_GENERATE_EVENT); 332261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 3323f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("in free buffer, release not done, need to free more buffers input %" PRIx64" output %" PRIx64, 332461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_out_bm_count, m_inp_bm_count); 332561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 332647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 332747e37c4428509524ee576920a98381f3e4872493Nick Pelly 332861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 332947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 333047e37c4428509524ee576920a98381f3e4872493Nick Pelly 333147e37c4428509524ee576920a98381f3e4872493Nick Pelly 333247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 333361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 333461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::EmptyThisBuffer 333547e37c4428509524ee576920a98381f3e4872493Nick Pelly 333661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 333761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan This routine is used to push the encoded video frames to 333861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan the video decoder. 333947e37c4428509524ee576920a98381f3e4872493Nick Pelly 334061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 334161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 334247e37c4428509524ee576920a98381f3e4872493Nick Pelly 334361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 334461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything went successful. 334547e37c4428509524ee576920a98381f3e4872493Nick Pelly 334661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 334747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::empty_this_buffer(OMX_IN OMX_HANDLETYPE hComp, 334861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 334947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 335061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret1 = OMX_ErrorNone; 335161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int nBufferIndex ; 335261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 33538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ETB: buffer = %p, buffer->pBuffer[%p]", buffer, buffer->pBuffer); 335414a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan if (m_state != OMX_StateExecuting && 335514a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_state != OMX_StatePause && 335614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_state != OMX_StateIdle) { 33578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Empty this buffer in Invalid State"); 335861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 335961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 33606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 336161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL || (buffer->nSize != sizeof(OMX_BUFFERHEADERTYPE))) { 33628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::etb--> buffer is null or buffer size is invalid"); 336361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 336461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 33656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 336661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nVersion.nVersion != OMX_SPEC_VERSION) { 33678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::etb--> OMX Version Invalid"); 336861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorVersionMismatch; 336961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 337061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 337161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nInputPortIndex != (OMX_U32)PORT_INDEX_IN) { 33728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Bad port index to call empty_this_buffer"); 337361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 337461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 337561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_sInPortDef.bEnabled) { 33768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Cannot call empty_this_buffer while I/P port is disabled"); 337761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 337861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 337961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 3380f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan nBufferIndex = buffer - ((!meta_mode_enable)?m_inp_mem_ptr:meta_buffer_hdr); 338161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 338261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nBufferIndex > m_sInPortDef.nBufferCountActual ) { 33838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETB: Invalid buffer index[%d]", nBufferIndex); 338461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 338561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 338661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 338761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_count++; 33888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("DBG: i/p nTimestamp = %u", (unsigned)buffer->nTimeStamp); 33898767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)hComp,(unsigned long)buffer,m_input_msg_id); 339061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 339161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 339247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 339361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 339461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::empty_this_buffer_proxy 339547e37c4428509524ee576920a98381f3e4872493Nick Pelly 339661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 339761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan This routine is used to push the encoded video frames to 339861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan the video decoder. 339947e37c4428509524ee576920a98381f3e4872493Nick Pelly 340061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 340161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 340247e37c4428509524ee576920a98381f3e4872493Nick Pelly 340361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 340461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything went successful. 340547e37c4428509524ee576920a98381f3e4872493Nick Pelly 340661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 34078767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE omx_video::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp, 340861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 340947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 34108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 341161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *pmem_data_buf = NULL; 341261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int push_cnt = 0; 34139ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan unsigned nBufIndex = 0; 341461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 34159ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan encoder_media_buffer_type *media_buffer = NULL; 341661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 34176eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 341861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int fd = 0; 34196eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 34208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ETBProxy: buffer->pBuffer[%p]", buffer->pBuffer); 342161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL) { 34228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid buffer[%p]", buffer); 342361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 342461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 34259ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan 34269ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // Buffer sanity checks 34279ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (meta_mode_enable && !mUsesColorConversion) { 34289ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan //For color-conversion case, we have an internal buffer and not a meta buffer 342961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool met_error = false; 34309ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan nBufIndex = buffer - meta_buffer_hdr; 34319ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (nBufIndex >= m_sInPortDef.nBufferCountActual) { 34328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid meta-bufIndex = %u", nBufIndex); 34339ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan return OMX_ErrorBadParameter; 34349ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 34359ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan media_buffer = (encoder_media_buffer_type *)meta_buffer_hdr[nBufIndex].pBuffer; 343661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer) { 343761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->buffer_type != kMetadataBufferTypeCameraSource && 34389ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan media_buffer->buffer_type != kMetadataBufferTypeGrallocSource) { 343961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan met_error = true; 34409ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } else { 344161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) { 344261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->meta_handle == NULL) 344361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan met_error = true; 344461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if ((media_buffer->meta_handle->numFds != 1 && 344561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_buffer->meta_handle->numInts != 2)) 344661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan met_error = true; 344761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 344861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 344961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 3450826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev met_error = true; 345161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (met_error) { 34528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Unkown source/metahandle in ETB call"); 34538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD); 345461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 3455826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 34569ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } else { 34579ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan nBufIndex = buffer - ((OMX_BUFFERHEADERTYPE *)m_inp_mem_ptr); 34589ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (nBufIndex >= m_sInPortDef.nBufferCountActual) { 34598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Invalid bufIndex = %u", nBufIndex); 34609ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan return OMX_ErrorBadParameter; 34619ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 34629ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 34639ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan 34649ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan pending_input_buffers++; 34659ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (input_flush_progress == true) { 34668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0, 34679ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan OMX_COMPONENT_GENERATE_EBD); 34688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Input flush in progress"); 34699ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan return OMX_ErrorNone; 34709ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 34719ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#ifdef _MSM8974_ 34729ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (!meta_mode_enable) { 34739ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan fd = m_pInput_pmem[nBufIndex].fd; 34749ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 34759ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#endif 34769ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan#ifdef _ANDROID_ICS_ 34779ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (meta_mode_enable && !mUseProxyColorFormat) { 34789ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // Camera or Gralloc-source meta-buffers queued with pre-announced color-format 347961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem Input_pmem_info; 3480f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!media_buffer) { 3481f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("%s: invalid media_buffer",__FUNCTION__); 3482f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorBadParameter; 3483f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 348461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) { 348561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.buffer = media_buffer; 348661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.fd = media_buffer->meta_handle->data[0]; 34876eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 348861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fd = Input_pmem_info.fd; 34896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 349061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset = media_buffer->meta_handle->data[1]; 349161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size = media_buffer->meta_handle->data[2]; 34929ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan DEBUG_PRINT_LOW("ETB (meta-Camera) fd = %d, offset = %d, size = %d", 34939ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan Input_pmem_info.fd, Input_pmem_info.offset, 349461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size); 349561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 349661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle; 349761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.buffer = media_buffer; 349861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.fd = handle->fd; 34996eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 350061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fd = Input_pmem_info.fd; 35016eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 350261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset = 0; 350361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size = handle->size; 35049ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan DEBUG_PRINT_LOW("ETB (meta-gralloc) fd = %d, offset = %d, size = %d", 35059ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan Input_pmem_info.fd, Input_pmem_info.offset, 35069ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan Input_pmem_info.size); 350761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 350861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_use_buf(&Input_pmem_info,PORT_INDEX_IN,0) != true) { 35098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_use_buf"); 35108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD); 351161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 351261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 35139ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } else if (meta_mode_enable && !mUsesColorConversion) { 35149ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // Graphic-source meta-buffers queued with opaque color-format 35159ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan if (media_buffer->buffer_type == kMetadataBufferTypeGrallocSource) { 35169ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle; 35179ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan fd = handle->fd; 35189ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan DEBUG_PRINT_LOW("ETB (opaque-gralloc) fd = %d, size = %d", 35199ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan fd, handle->size); 35209ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } else { 35219ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Invalid bufferType for buffer with Opaque" 35229ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan " color format"); 35238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD); 35249ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan return OMX_ErrorBadParameter; 35259ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 3526d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan } else if (input_use_buffer && !m_use_input_pmem && m_pInput_pmem[nBufIndex].buffer) 3527826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 3528d99a08f99689df977dfc585a436ada5acf4f2a25Praveen Chavan if (input_use_buffer && !m_use_input_pmem && m_pInput_pmem[nBufIndex].buffer) 3529826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 3530c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan { 35318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Heap UseBuffer case, so memcpy the data"); 353214a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan 353314a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan auto_lock l(m_lock); 3534c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan pmem_data_buf = (OMX_U8 *)m_pInput_pmem[nBufIndex].buffer; 353514a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan if (pmem_data_buf) { 353614a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan memcpy (pmem_data_buf, (buffer->pBuffer + buffer->nOffset), 353714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan buffer->nFilledLen); 353814a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan } 3539c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan DEBUG_PRINT_LOW("memcpy() done in ETBProxy for i/p Heap UseBuf"); 3540c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan } else if (mUseProxyColorFormat) { 35419ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // Gralloc-source buffers with color-conversion 3542c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan fd = m_pInput_pmem[nBufIndex].fd; 35438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ETB (color-converted) fd = %d, size = %u", 35448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan fd, (unsigned int)buffer->nFilledLen); 3545c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan } else if (m_sInPortDef.format.video.eColorFormat == 35460b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan OMX_COLOR_FormatYUV420SemiPlanar) { 3547c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan //For the case where YUV420SP buffers are qeueued to component 3548c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan //by sources other than camera (Apps via MediaCodec), conversion 3549c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan //to vendor flavoured NV12 color format is required. 3550c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan if (!dev_color_align(buffer, m_sInPortDef.format.video.nFrameWidth, 3551c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan m_sInPortDef.format.video.nFrameHeight)) { 3552c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan DEBUG_PRINT_ERROR("Failed to adjust buffer color"); 35538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event((unsigned long)buffer, 0, OMX_COMPONENT_GENERATE_EBD); 3554c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan return OMX_ErrorUndefined; 3555c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan } 3556c66f61266df4158140e76c2fab3946dad764eee8Praveen Chavan } 35576eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 355861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_empty_buf(buffer, pmem_data_buf,nBufIndex,fd) != true) 3559826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#else 35600b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan if (dev_empty_buf(buffer, pmem_data_buf,0,0) != true) 3561826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 35620b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan { 35638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: dev_empty_buf failed"); 3564826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 35650b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan omx_release_meta_buffer(buffer); 3566826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 35678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)buffer,0,OMX_COMPONENT_GENERATE_EBD); 35680b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan /*Generate an async error and move to invalid state*/ 35690b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan pending_input_buffers--; 3570f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (hw_overload) { 3571f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorInsufficientResources; 3572f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 35730b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan return OMX_ErrorBadParameter; 35740b6fd256ee76a3fbbfcd4a33c63be88b1db78798Praveen Chavan } 357561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 357647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 357747e37c4428509524ee576920a98381f3e4872493Nick Pelly 357847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 357961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 358061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::FillThisBuffer 358147e37c4428509524ee576920a98381f3e4872493Nick Pelly 358261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 358361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan IL client uses this method to release the frame buffer 358461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan after displaying them. 358547e37c4428509524ee576920a98381f3e4872493Nick Pelly 358661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 358761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 358847e37c4428509524ee576920a98381f3e4872493Nick Pelly 358961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 359061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 359147e37c4428509524ee576920a98381f3e4872493Nick Pelly 359261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 359347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::fill_this_buffer(OMX_IN OMX_HANDLETYPE hComp, 359461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 359547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 35968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FTB: buffer->pBuffer[%p]", buffer->pBuffer); 359714a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan if (m_state != OMX_StateExecuting && 359814a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_state != OMX_StatePause && 359914a9920aa26f6b237957001090b127c9d79ac12ePraveen Chavan m_state != OMX_StateIdle) { 36008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: FTB in Invalid State"); 360161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorInvalidState; 360261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 360361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 360461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL ||(buffer->nSize != sizeof(OMX_BUFFERHEADERTYPE))) { 36058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->Invalid buffer or size"); 360661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 360761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 360861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 360961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nVersion.nVersion != OMX_SPEC_VERSION) { 36108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->OMX Version Invalid"); 361161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorVersionMismatch; 361261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 361361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 361461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nOutputPortIndex != (OMX_U32)PORT_INDEX_OUT) { 36158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->Bad port index"); 361661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadPortIndex; 361761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 361861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 361961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!m_sOutPortDef.bEnabled) { 36208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: omx_video::ftb-->port is disabled"); 362161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorIncorrectStateOperation; 362261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 362361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event((unsigned long) hComp, (unsigned long)buffer,OMX_COMPONENT_GENERATE_FTB); 362561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 362647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 362747e37c4428509524ee576920a98381f3e4872493Nick Pelly 362847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 362961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 363061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::fill_this_buffer_proxy 363147e37c4428509524ee576920a98381f3e4872493Nick Pelly 363261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 363361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan IL client uses this method to release the frame buffer 363461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan after displaying them. 363547e37c4428509524ee576920a98381f3e4872493Nick Pelly 363661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 363761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 363847e37c4428509524ee576920a98381f3e4872493Nick Pelly 363961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 364061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 364147e37c4428509524ee576920a98381f3e4872493Nick Pelly 364261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 364347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::fill_this_buffer_proxy( 364461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_HANDLETYPE hComp, 364561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* bufferAdd) 364647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 36478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 364861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_U8 *pmem_data_buf = NULL; 364961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE nRet = OMX_ErrorNone; 365061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("FTBProxy: bufferAdd->pBuffer[%p]", bufferAdd->pBuffer); 365261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 36538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (bufferAdd == NULL || ((bufferAdd - m_out_mem_ptr) >= (int)m_sOutPortDef.nBufferCountActual) ) { 36548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: FTBProxy: Invalid i/p params"); 365561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 365661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 365761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 365861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers++; 365961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Return back the output buffer to client*/ 366061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( m_sOutPortDef.bEnabled != OMX_TRUE || output_flush_progress == true) { 36618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("o/p port is Disabled or Flush in Progress"); 36628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)bufferAdd,0, 366347e37c4428509524ee576920a98381f3e4872493Nick Pelly OMX_COMPONENT_GENERATE_FBD); 366461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 366561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 366647e37c4428509524ee576920a98381f3e4872493Nick Pelly 366761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (output_use_buffer && !m_use_output_pmem) { 36688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Heap UseBuffer case"); 366961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pmem_data_buf = (OMX_U8 *)m_pOutput_pmem[bufferAdd - m_out_mem_ptr].buffer; 367061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 367161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 367261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_fill_buf(bufferAdd, pmem_data_buf,(bufferAdd - m_out_mem_ptr),m_pOutput_pmem[bufferAdd - m_out_mem_ptr].fd) != true) { 36738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: dev_fill_buf() Failed"); 36748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)bufferAdd,0,OMX_COMPONENT_GENERATE_FBD); 367561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers--; 367661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 367761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 367861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 367961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 368047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 368147e37c4428509524ee576920a98381f3e4872493Nick Pelly 368247e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 368361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 368461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_video::SetCallbacks 368547e37c4428509524ee576920a98381f3e4872493Nick Pelly 368661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 368761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Set the callbacks. 368847e37c4428509524ee576920a98381f3e4872493Nick Pelly 368961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 369061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 369147e37c4428509524ee576920a98381f3e4872493Nick Pelly 369261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 369361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything successful. 369447e37c4428509524ee576920a98381f3e4872493Nick Pelly 369561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 369647e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::set_callbacks(OMX_IN OMX_HANDLETYPE hComp, 369761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_CALLBACKTYPE* callbacks, 369861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData) 369947e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 37008767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 370161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks = *callbacks; 37028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Callbacks Set %p %p %p",m_pCallbacks.EmptyBufferDone,\ 370361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EventHandler,m_pCallbacks.FillBufferDone); 370461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_app_data = appData; 370561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNotImplemented; 370647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 370747e37c4428509524ee576920a98381f3e4872493Nick Pelly 370847e37c4428509524ee576920a98381f3e4872493Nick Pelly 370947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 371061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 371161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::UseEGLImage 371247e37c4428509524ee576920a98381f3e4872493Nick Pelly 371361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 371461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Use EGL Image method implementation <TBD>. 371547e37c4428509524ee576920a98381f3e4872493Nick Pelly 371661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 371761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 371847e37c4428509524ee576920a98381f3e4872493Nick Pelly 371961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 372061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Not Implemented error. 372147e37c4428509524ee576920a98381f3e4872493Nick Pelly 372261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 37238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen ChavanOMX_ERRORTYPE omx_video::use_EGL_image(OMX_IN OMX_HANDLETYPE hComp, 372461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_INOUT OMX_BUFFERHEADERTYPE** bufferHdr, 372561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 port, 372661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_PTR appData, 372761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN void* eglImage) 372847e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 37298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp, (void)bufferHdr, (void)port, (void)appData, (void)eglImage; 37308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: use_EGL_image: Not Implemented"); 373161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNotImplemented; 373247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 373347e37c4428509524ee576920a98381f3e4872493Nick Pelly 373447e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 373561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 373661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ComponentRoleEnum 373747e37c4428509524ee576920a98381f3e4872493Nick Pelly 373861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 373961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Component Role Enum method implementation. 374047e37c4428509524ee576920a98381f3e4872493Nick Pelly 374161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 374261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan <TBD>. 374347e37c4428509524ee576920a98381f3e4872493Nick Pelly 374461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 374561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX Error None if everything is successful. 374661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 374747e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::component_role_enum(OMX_IN OMX_HANDLETYPE hComp, 374861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_OUT OMX_U8* role, 374961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_U32 index) 375047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 37518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (void)hComp; 375261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 375361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) { 375461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 375561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_decoder.mpeg4",OMX_MAX_STRINGNAME_SIZE); 37568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 375761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 375861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 375961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 376061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.h263",OMX_MAX_STRINGNAME_SIZE)) { 376161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 376261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_decoder.h263",OMX_MAX_STRINGNAME_SIZE); 37638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 376461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 37658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 376661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 376761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 376861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 376961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 377061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_decoder.avc",OMX_MAX_STRINGNAME_SIZE); 37718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 377261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 37738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 377461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 377561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 377661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.decoder.vc1",OMX_MAX_STRINGNAME_SIZE)) { 377761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 377861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_decoder.vc1",OMX_MAX_STRINGNAME_SIZE); 37798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 378061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 37818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 378261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 378361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 378461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 378561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE)) { 378661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 378761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_encoder.mpeg4",OMX_MAX_STRINGNAME_SIZE); 37888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 378961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 379061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 379161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 379261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.h263",OMX_MAX_STRINGNAME_SIZE)) { 379361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 379461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_encoder.h263",OMX_MAX_STRINGNAME_SIZE); 37958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 379661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 37978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 379861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 379961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 380061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.avc",OMX_MAX_STRINGNAME_SIZE)) { 380161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 380261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_encoder.avc",OMX_MAX_STRINGNAME_SIZE); 38038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 380461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 38058767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 380661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 380761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 380861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 38096eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 381061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else if (!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.vp8",OMX_MAX_STRINGNAME_SIZE)) { 381161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ((0 == index) && role) { 381261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan strlcpy((char *)role, "video_encoder.vp8",OMX_MAX_STRINGNAME_SIZE); 38138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s",role); 381461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 38158767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 381661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 381761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 381861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 38196eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 3820f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan else if ((!strncmp((char*)m_nkind, "OMX.qcom.video.encoder.hevc", OMX_MAX_STRINGNAME_SIZE)) || 3821f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (!strncmp((char*)m_nkind, "OMX.qti.video.encoder.hevc", OMX_MAX_STRINGNAME_SIZE))) { 3822f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if ((0 == index) && role) { 3823f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan strlcpy((char *)role, "video_encoder.hevc", OMX_MAX_STRINGNAME_SIZE); 3824f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("component_role_enum: role %s", role); 3825f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 3826f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("ERROR: No more roles"); 3827f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan eRet = OMX_ErrorNoMore; 3828f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 3829f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 383061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 38318767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: Querying Role on Unknown Component"); 383261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorInvalidComponentName; 383361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 383461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 383547e37c4428509524ee576920a98381f3e4872493Nick Pelly} 383647e37c4428509524ee576920a98381f3e4872493Nick Pelly 383747e37c4428509524ee576920a98381f3e4872493Nick Pelly 383847e37c4428509524ee576920a98381f3e4872493Nick Pelly 383947e37c4428509524ee576920a98381f3e4872493Nick Pelly 384047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 384161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 384261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateDone 384347e37c4428509524ee576920a98381f3e4872493Nick Pelly 384461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 384561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if entire buffer pool is allocated by IL Client or not. 384661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Need this to move to IDLE state. 384747e37c4428509524ee576920a98381f3e4872493Nick Pelly 384861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 384961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 385047e37c4428509524ee576920a98381f3e4872493Nick Pelly 385161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 385261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false. 385347e37c4428509524ee576920a98381f3e4872493Nick Pelly 385461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 385547e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_done(void) 385647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 385761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 385861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet_In = false; 385961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet_Out = false; 386047e37c4428509524ee576920a98381f3e4872493Nick Pelly 386161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet_In = allocate_input_done(); 386261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet_Out = allocate_output_done(); 386347e37c4428509524ee576920a98381f3e4872493Nick Pelly 386461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (bRet_In && bRet_Out) { 386561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 386661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 386747e37c4428509524ee576920a98381f3e4872493Nick Pelly 386861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 386947e37c4428509524ee576920a98381f3e4872493Nick Pelly} 387047e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 387161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 387261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateInputDone 387347e37c4428509524ee576920a98381f3e4872493Nick Pelly 387461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 387561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if I/P buffer pool is allocated by IL Client or not. 387647e37c4428509524ee576920a98381f3e4872493Nick Pelly 387761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 387861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 387947e37c4428509524ee576920a98381f3e4872493Nick Pelly 388061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 388161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false. 388247e37c4428509524ee576920a98381f3e4872493Nick Pelly 388361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 388447e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_input_done(void) 388547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 388661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 388761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i=0; 388847e37c4428509524ee576920a98381f3e4872493Nick Pelly 388961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr == NULL) { 389061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 389161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 389261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr ) { 389361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (; i<m_sInPortDef.nBufferCountActual; i++) { 389461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_inp_bm_count,i)) { 389561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 389661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 389761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 389861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 389961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i==m_sInPortDef.nBufferCountActual) { 390061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 390161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 390261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (i==m_sInPortDef.nBufferCountActual && m_sInPortDef.bEnabled) { 390361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sInPortDef.bPopulated = OMX_TRUE; 390461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 390547e37c4428509524ee576920a98381f3e4872493Nick Pelly return bRet; 390647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 390747e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 390861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 390961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::AllocateOutputDone 391047e37c4428509524ee576920a98381f3e4872493Nick Pelly 391161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 391261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if entire O/P buffer pool is allocated by IL Client or not. 391347e37c4428509524ee576920a98381f3e4872493Nick Pelly 391461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 391561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 391647e37c4428509524ee576920a98381f3e4872493Nick Pelly 391761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 391861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false. 391947e37c4428509524ee576920a98381f3e4872493Nick Pelly 392061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 392147e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::allocate_output_done(void) 392247e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 392361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 392461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned j=0; 392547e37c4428509524ee576920a98381f3e4872493Nick Pelly 392661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr == NULL) { 392761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 392861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 392947e37c4428509524ee576920a98381f3e4872493Nick Pelly 393061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr ) { 393161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (; j<m_sOutPortDef.nBufferCountActual; j++) { 393261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_ABSENT(&m_out_bm_count,j)) { 393361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 393461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 393561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 393647e37c4428509524ee576920a98381f3e4872493Nick Pelly } 393747e37c4428509524ee576920a98381f3e4872493Nick Pelly 393861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (j==m_sOutPortDef.nBufferCountActual) { 393961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 394061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 394147e37c4428509524ee576920a98381f3e4872493Nick Pelly 394261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (j==m_sOutPortDef.nBufferCountActual && m_sOutPortDef.bEnabled) { 394361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_sOutPortDef.bPopulated = OMX_TRUE; 394461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 394561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 394647e37c4428509524ee576920a98381f3e4872493Nick Pelly} 394747e37c4428509524ee576920a98381f3e4872493Nick Pelly 394847e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 394961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 395061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ReleaseDone 395147e37c4428509524ee576920a98381f3e4872493Nick Pelly 395261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 395361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if IL client has released all the buffers. 395447e37c4428509524ee576920a98381f3e4872493Nick Pelly 395561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 395661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 395747e37c4428509524ee576920a98381f3e4872493Nick Pelly 395861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 395961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 396047e37c4428509524ee576920a98381f3e4872493Nick Pelly 396161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 396247e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_done(void) 396347e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 396461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 39658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside release_done()"); 396661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_input_done()) { 396761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (release_output_done()) { 396861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 396961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 397061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 397161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 397247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 397347e37c4428509524ee576920a98381f3e4872493Nick Pelly 397447e37c4428509524ee576920a98381f3e4872493Nick Pelly 397547e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 397661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 397761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ReleaseOutputDone 397847e37c4428509524ee576920a98381f3e4872493Nick Pelly 397961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 398061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if IL client has released all the buffers. 398147e37c4428509524ee576920a98381f3e4872493Nick Pelly 398261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 398361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 398447e37c4428509524ee576920a98381f3e4872493Nick Pelly 398561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 398661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 398747e37c4428509524ee576920a98381f3e4872493Nick Pelly 398861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 398947e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_output_done(void) 399047e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 399161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 399261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i=0,j=0; 399361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 39948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside release_output_done()"); 399561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_out_mem_ptr) { 399661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (; j<m_sOutPortDef.nBufferCountActual; j++) { 399761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (BITMASK_PRESENT(&m_out_bm_count,j)) { 399861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 399961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 400061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 400161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (j==m_sOutPortDef.nBufferCountActual) { 400261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 400361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 400461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 400561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 400661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 400761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 400847e37c4428509524ee576920a98381f3e4872493Nick Pelly} 400947e37c4428509524ee576920a98381f3e4872493Nick Pelly/* ====================================================================== 401061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan FUNCTION 401161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_venc::ReleaseInputDone 401247e37c4428509524ee576920a98381f3e4872493Nick Pelly 401361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DESCRIPTION 401461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Checks if IL client has released all the buffers. 401547e37c4428509524ee576920a98381f3e4872493Nick Pelly 401661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PARAMETERS 401761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan None. 401847e37c4428509524ee576920a98381f3e4872493Nick Pelly 401961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan RETURN VALUE 402061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan true/false 402147e37c4428509524ee576920a98381f3e4872493Nick Pelly 402261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ========================================================================== */ 402347e37c4428509524ee576920a98381f3e4872493Nick Pellybool omx_video::release_input_done(void) 402447e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 402561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool bRet = false; 402661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned i=0,j=0; 402761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 40288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Inside release_input_done()"); 402961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_inp_mem_ptr) { 403061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan for (; j<m_sInPortDef.nBufferCountActual; j++) { 403161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if ( BITMASK_PRESENT(&m_inp_bm_count,j)) { 403261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 403361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 403461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 403561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (j==m_sInPortDef.nBufferCountActual) { 403661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 403761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 403861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 403961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bRet = true; 404061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 404161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return bRet; 404247e37c4428509524ee576920a98381f3e4872493Nick Pelly} 404347e37c4428509524ee576920a98381f3e4872493Nick Pelly 404447e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::fill_buffer_done(OMX_HANDLETYPE hComp, 404561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE * buffer) 404647e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 40476eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 40486eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal int index = buffer - m_out_mem_ptr; 40496eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 40508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("fill_buffer_done: buffer->pBuffer[%p], flags=0x%x size = %u", 40518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buffer->pBuffer, (unsigned)buffer->nFlags, (unsigned int)buffer->nFilledLen); 40528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (buffer == NULL || ((buffer - m_out_mem_ptr) > (int)m_sOutPortDef.nBufferCountActual)) { 405361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 405461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 405547e37c4428509524ee576920a98381f3e4872493Nick Pelly 405661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_output_buffers--; 405747e37c4428509524ee576920a98381f3e4872493Nick Pelly 40588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(!secure_session) { 405961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan extra_data_handle.create_extra_data(buffer); 40606eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifndef _MSM8974_ 406161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) { 406261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("parsing extradata"); 406361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan extra_data_handle.parse_extra_data(buffer); 406461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 40656eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 40668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 40678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 406861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /* For use buffer we need to copy the data */ 406961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_pCallbacks.FillBufferDone) { 407061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nFilledLen > 0) { 407161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_fbd_count++; 4072826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 40738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (dev_get_output_log_flag()) { 40748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan dev_output_log_buffers((const char*)buffer->pBuffer, buffer->nFilledLen); 407561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 407661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 40776eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef _MSM8974_ 407861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer->nFlags & OMX_BUFFERFLAG_EXTRADATA) { 407961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!dev_handle_extradata((void *)buffer, index)) 40808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Failed to parse extradata"); 40818767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 40828767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan dev_extradata_log_buffers((char *)(((unsigned long)buffer->pBuffer + buffer->nOffset + 40838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buffer->nFilledLen + 3) & (~3))); 408461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 40856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 408661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.FillBufferDone (hComp,m_app_data,buffer); 408761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 408861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 408961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 409061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 409147e37c4428509524ee576920a98381f3e4872493Nick Pelly} 409247e37c4428509524ee576920a98381f3e4872493Nick Pelly 409347e37c4428509524ee576920a98381f3e4872493Nick PellyOMX_ERRORTYPE omx_video::empty_buffer_done(OMX_HANDLETYPE hComp, 409461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_BUFFERHEADERTYPE* buffer) 409547e37c4428509524ee576920a98381f3e4872493Nick Pelly{ 409661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int buffer_index = -1; 409761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4098f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan buffer_index = buffer - ((mUseProxyColorFormat && !mUsesColorConversion) ? meta_buffer_hdr : m_inp_mem_ptr); 40998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("empty_buffer_done: buffer[%p]", buffer); 410061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL || 4101f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan ((buffer_index > (int)m_sInPortDef.nBufferCountActual))) { 41028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR in empty_buffer_done due to index buffer"); 410361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 410461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 410561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 410661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_input_buffers--; 410761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4108f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (mUseProxyColorFormat && 4109f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (buffer_index >= 0 && (buffer_index < (int)m_sInPortDef.nBufferCountActual))) { 4110f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!pdest_frame && !input_flush_progress && mUsesColorConversion) { 411161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = buffer; 41128767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("empty_buffer_done pdest_frame address is %p",pdest_frame); 411361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return push_input_buffer(hComp); 41149ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 411556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //check if empty-EOS-buffer is being returned, treat this same as the 411656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //color-conversion case as we queued a color-conversion buffer to encoder 411756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan bool handleEmptyEosBuffer = (mEmptyEosBuffer == buffer); 411856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (mUsesColorConversion || handleEmptyEosBuffer) { 411956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (handleEmptyEosBuffer) { 412056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan mEmptyEosBuffer = NULL; 412156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 41229ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // return color-conversion buffer back to the pool 41238767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("empty_buffer_done insert address is %p",buffer); 41248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_opq_pmem_q.insert_entry((unsigned long)buffer, 0, 0)) { 41258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("empty_buffer_done: pmem queue is full"); 412661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 412761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 41289ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } else { 41299ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // We are not dealing with color-conversion, Buffer being returned 41309ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan // here is client's buffer, return it back to client 4131f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (m_pCallbacks.EmptyBufferDone && buffer) { 4132f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer); 4133f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("empty_buffer_done: Returning client buf %p", buffer); 41349ad5c6ee7a6308393e3d11f7d51cd46004473063Praveen Chavan } 413561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 413661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_pCallbacks.EmptyBufferDone) { 413761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp ,m_app_data, buffer); 413861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 413961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 414047e37c4428509524ee576920a98381f3e4872493Nick Pelly} 4141826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 4142826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid omx_video::complete_pending_buffer_done_cbs() 4143826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 41448767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p1; 41458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long p2; 41468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long ident; 414761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_cmd_queue tmp_q, pending_bd_q; 414861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&m_lock); 414961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // pop all pending GENERATE FDB from ftb queue 415061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_ftb_q.m_size) { 415161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.pop_entry(&p1,&p2,&ident); 415261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_FBD) { 415361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_bd_q.insert_entry(p1,p2,ident); 415461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 415561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan tmp_q.insert_entry(p1,p2,ident); 4156826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 415761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 415861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //return all non GENERATE FDB to ftb queue 415961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (tmp_q.m_size) { 416061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan tmp_q.pop_entry(&p1,&p2,&ident); 416161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_ftb_q.insert_entry(p1,p2,ident); 416261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 416361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // pop all pending GENERATE EDB from etb queue 416461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (m_etb_q.m_size) { 416561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.pop_entry(&p1,&p2,&ident); 416661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ident == OMX_COMPONENT_GENERATE_EBD) { 416761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_bd_q.insert_entry(p1,p2,ident); 416861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 416961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan tmp_q.insert_entry(p1,p2,ident); 417061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 417161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 417261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan //return all non GENERATE FDB to etb queue 417361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (tmp_q.m_size) { 417461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan tmp_q.pop_entry(&p1,&p2,&ident); 417561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_etb_q.insert_entry(p1,p2,ident); 417661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 417761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&m_lock); 417861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan // process all pending buffer dones 417961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (pending_bd_q.m_size) { 418061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pending_bd_q.pop_entry(&p1,&p2,&ident); 418161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan switch (ident) { 418261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_EBD: 418361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (empty_buffer_done(&m_cmp, (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone) { 41848767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: empty_buffer_done() failed!"); 418561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_error (); 418661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 418761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 418861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 418961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan case OMX_COMPONENT_GENERATE_FBD: 419061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (fill_buffer_done(&m_cmp, (OMX_BUFFERHEADERTYPE *)p1) != OMX_ErrorNone ) { 41918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: fill_buffer_done() failed!"); 419261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan omx_report_error (); 419361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 419461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan break; 4195826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 4196826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 4197826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 4198826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 4199826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_720P 4200826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType) 4201826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 420261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 420361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!profileLevelType) 420461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 420561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 420661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nPortIndex == 1) { 420761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 420861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 420961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline; 421061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel31; 421161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 421261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain; 421361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel31; 421461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 2) { 421561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh; 421661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel31; 421761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 42188767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", 42198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (int)profileLevelType->nProfileIndex); 422061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 422161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 422261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 422361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 422461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_H263ProfileBaseline; 422561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_H263Level70; 422661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 42278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", (int)profileLevelType->nProfileIndex); 422861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 422961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 423061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 423161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 423261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileSimple; 423361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_MPEG4Level5; 423461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 423561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple; 423661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_MPEG4Level5; 423761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 42388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", (int)profileLevelType->nProfileIndex); 423961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 424061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 424161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 424261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 42438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported should be queried on Input port only %d", (int)profileLevelType->nPortIndex); 424461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 424561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 42468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported for Input port returned Profile:%d, Level:%d", 42478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (int)profileLevelType->eProfile, (int)profileLevelType->eLevel); 424861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 4249826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 4250826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 4251826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 4252826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef MAX_RES_1080P 4253826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan MalchevOMX_ERRORTYPE omx_video::get_supported_profile_level(OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevelType) 4254826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 425561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE eRet = OMX_ErrorNone; 425661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!profileLevelType) 425761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 4258826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 425961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nPortIndex == 1) { 426061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingAVC) { 42618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#if defined _MSM8974_ && !defined _MSM8226_ 426261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 426361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline; 42648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 426561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 426661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain; 42678767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 426861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 2) { 426961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh; 42708767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 42718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (profileLevelType->nProfileIndex == 3) { 42728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedBaseline; 42738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel52; 427461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 42758767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", 42768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)profileLevelType->nProfileIndex); 427761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 427861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 42796eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 428061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 428161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileBaseline; 428261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 428361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 428461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 428561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileMain; 428661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 428761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 2) { 428861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_AVCProfileHigh; 428961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 42908767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _MSM8226_ 42918767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else if (profileLevelType->nProfileIndex == 3) { 42928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eProfile = QOMX_VIDEO_AVCProfileConstrainedBaseline; 42938767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_AVCLevel4; 42948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif 429561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 42968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %d", 42978767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (int)profileLevelType->nProfileIndex); 429861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 429961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 43006eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 430161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingH263) { 430261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 430361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_H263ProfileBaseline; 430461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_H263Level70; 430561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 43068767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", (unsigned int)profileLevelType->nProfileIndex); 430761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 430861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 430961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingMPEG4) { 431061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (profileLevelType->nProfileIndex == 0) { 431161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileSimple; 431261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_MPEG4Level5; 431361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 431461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eProfile = OMX_VIDEO_MPEG4ProfileAdvancedSimple; 431561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan profileLevelType->eLevel = OMX_VIDEO_MPEG4Level5; 431661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 43178767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", (unsigned int)profileLevelType->nProfileIndex); 431861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 431961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 43205aa03230fef7a43a61e1ac5f19a2c5a71e5d6df7Praveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingVP8) { 43217beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano if (profileLevelType->nProfileIndex == 0) { 43227beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano profileLevelType->eProfile = OMX_VIDEO_VP8ProfileMain; 43237beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano profileLevelType->eLevel = OMX_VIDEO_VP8Level_Version0; 43247beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else if (profileLevelType->nProfileIndex == 1) { 43257beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano profileLevelType->eProfile = OMX_VIDEO_VP8ProfileMain; 43267beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano profileLevelType->eLevel = OMX_VIDEO_VP8Level_Version1; 43277beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } else { 43288767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("VP8: get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", 43298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)profileLevelType->nProfileIndex); 43307beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano eRet = OMX_ErrorNoMore; 43317beb72122c9b88f2a04e5ef30e370b3d35483d04Jorge Solano Altamirano } 4332f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (m_sOutPortDef.format.video.eCompressionFormat == OMX_VIDEO_CodingHEVC) { 4333f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (profileLevelType->nProfileIndex == 0) { 4334f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan profileLevelType->eProfile = OMX_VIDEO_HEVCProfileMain; 4335f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan profileLevelType->eLevel = OMX_VIDEO_HEVCMainTierLevel52; 4336f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else if (profileLevelType->nProfileIndex == 1) { 4337f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan profileLevelType->eProfile = OMX_VIDEO_HEVCProfileMain10; 4338f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan profileLevelType->eLevel = OMX_VIDEO_HEVCMainTierLevel52; 4339f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 4340f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("HEVC: get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported nProfileIndex ret NoMore %u", 4341f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (unsigned int)profileLevelType->nProfileIndex); 4342f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan eRet = OMX_ErrorNoMore; 4343f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 434461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 43458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported ret NoMore"); 434661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorNoMore; 434761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 434861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 43498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported should be queried on Input port only %u", (unsigned int)profileLevelType->nPortIndex); 435061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan eRet = OMX_ErrorBadPortIndex; 4351826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev } 43528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("get_parameter: OMX_IndexParamVideoProfileLevelQuerySupported for Input port returned Profile:%u, Level:%u", 43538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)profileLevelType->eProfile, (unsigned int)profileLevelType->eLevel); 435461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return eRet; 4355826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 43566eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 4357826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 4358826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef USE_ION 43598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanint omx_video::alloc_map_ion_memory(int size, 43608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct ion_allocation_data *alloc_data, 436161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct ion_fd_data *fd_data,int flag) 4362826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 436361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct venc_ion buf_ion_info; 436461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int ion_device_fd =-1,rc=0,ion_dev_flags = 0; 436561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (size <=0 || !alloc_data || !fd_data) { 43668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid input to alloc_map_ion_memory"); 436761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return -EINVAL; 436861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 436961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 437061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ion_dev_flags = O_RDONLY; 437161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ion_device_fd = open (MEM_DEVICE,ion_dev_flags); 437261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ion_device_fd < 0) { 43738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ION Device open() Failed"); 437461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ion_device_fd; 437561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 43768767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 43778767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if(secure_session) { 43788767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->len = (size + (SZ_1M - 1)) & ~(SZ_1M - 1); 43798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->align = SZ_1M; 43808767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->flags = ION_SECURE; 43819157b7d2c90c853713840ce85a78f5d22600fe1ePraveen Chavan alloc_data->ION_HEAP_MASK = ION_HEAP(ION_CP_MM_HEAP_ID); 4382f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("ION ALLOC sec buf: size %u align %u flags %x", 4383f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (unsigned int)alloc_data->len, (unsigned int)alloc_data->align, 4384f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan alloc_data->flags); 43858767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } else { 43868767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->len = (size + (SZ_4K - 1)) & ~(SZ_4K - 1); 43878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->align = SZ_4K; 43888767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->flags = (flag & ION_FLAG_CACHED ? ION_FLAG_CACHED : 0); 43896eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#ifdef MAX_RES_720P 4390f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan alloc_data->ION_HEAP_MASK = ION_HEAP(MEM_HEAP_ID); 43916eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#else 4392f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan alloc_data->ION_HEAP_MASK = (ION_HEAP(MEM_HEAP_ID) | 439361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ION_HEAP(ION_IOMMU_HEAP_ID)); 43946eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 4395f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_HIGH("ION ALLOC unsec buf: size %u align %u flags %x", 4396f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan (unsigned int)alloc_data->len, (unsigned int)alloc_data->align, 4397f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan alloc_data->flags); 43988767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 43998767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan 440061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rc = ioctl(ion_device_fd,ION_IOC_ALLOC,alloc_data); 440161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (rc || !alloc_data->handle) { 44028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION ALLOC memory failed 0x%x", rc); 44038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan alloc_data->handle = 0; 440461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(ion_device_fd); 440561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ion_device_fd = -1; 4406826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev return ion_device_fd; 440761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 440861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fd_data->handle = alloc_data->handle; 440961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan rc = ioctl(ion_device_fd,ION_IOC_MAP,fd_data); 441061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (rc) { 44118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION MAP failed "); 441261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info.ion_alloc_data = *alloc_data; 441361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info.ion_device_fd = ion_device_fd; 441461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info.fd_ion_data = *fd_data; 441561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan free_ion_memory(&buf_ion_info); 441661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan fd_data->fd =-1; 441761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ion_device_fd =-1; 441861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 441961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ion_device_fd; 4420826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 4421826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev 44228767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanvoid omx_video::free_ion_memory(struct venc_ion *buf_ion_info) 4423826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 442461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!buf_ion_info) { 44258767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid input to free_ion_memory"); 442661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return; 442761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 442861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ioctl(buf_ion_info->ion_device_fd,ION_IOC_FREE, 442961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan &buf_ion_info->ion_alloc_data.handle)) { 44308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ION free failed "); 443161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return; 443261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 443361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan close(buf_ion_info->ion_device_fd); 44348767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan buf_ion_info->ion_alloc_data.handle = 0; 443561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info->ion_device_fd = -1; 443661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_ion_info->fd_ion_data.fd = -1; 4437826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 4438826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#endif 44396eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal 4440826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev#ifdef _ANDROID_ICS_ 4441826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchevvoid omx_video::omx_release_meta_buffer(OMX_BUFFERHEADERTYPE *buffer) 4442826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev{ 444361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer && meta_mode_enable) { 444461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan encoder_media_buffer_type *media_ptr; 444561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem Input_pmem; 444661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int index_pmem = 0; 444761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool meta_error = false; 444861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 444961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan index_pmem = (buffer - m_inp_mem_ptr); 445056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (mUsesColorConversion && 445161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan (index_pmem < m_sInPortDef.nBufferCountActual)) { 445261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!dev_free_buf((&m_pInput_pmem[index_pmem]),PORT_INDEX_IN)) { 44538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("omx_release_meta_buffer dev free failed"); 445461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 445561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 445661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_ptr = (encoder_media_buffer_type *) buffer->pBuffer; 445761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_ptr && media_ptr->meta_handle) { 445861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_ptr->buffer_type == kMetadataBufferTypeCameraSource && 445961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_ptr->meta_handle->numFds == 1 && 44608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan media_ptr->meta_handle->numInts >= 2) { 446161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.fd = media_ptr->meta_handle->data[0]; 446261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.buffer = media_ptr; 446361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.size = media_ptr->meta_handle->data[2]; 446461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.offset = media_ptr->meta_handle->data[1]; 446561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("EBD fd = %d, offset = %d, size = %d",Input_pmem.fd, 446661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.offset, 446761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.size); 446861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (media_ptr->buffer_type == kMetadataBufferTypeGrallocSource) { 446961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private_handle_t *handle = (private_handle_t *)media_ptr->meta_handle; 447061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.buffer = media_ptr; 447161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.fd = handle->fd; 447261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.offset = 0; 447361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem.size = handle->size; 447461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 447561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_error = true; 447661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR(" Meta Error set in EBD"); 447761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 447861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!meta_error) 447961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan meta_error = !dev_free_buf(&Input_pmem,PORT_INDEX_IN); 448061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (meta_error) { 448161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_ERROR(" Warning dev_free_buf failed flush value is %d", 448261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan input_flush_progress); 448361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 448461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 44856eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal } 44867eecc360a0b15aec6389c96ec23980231af4ddc6Haynes Mathew George } 4487826ececcbea342f7a0b92ec61847f1c95d384e05Iliyan Malchev} 44886eec4d1ea65df853450a6e158718981cba900bf6Shashank Mittal#endif 448961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_video::omx_c2d_conv::omx_c2d_conv() 449061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 449161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 449261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 449361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 449461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 449561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src_format = NV12_128m; 449661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_init(&c_lock, NULL); 449761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 449861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 449961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::init() 450061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 450161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = true; 450261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle || mConvertOpen || mConvertClose) { 45038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("omx_c2d_conv::init called twice"); 450461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 450561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 450661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (status) { 450761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = dlopen("libc2dcolorconvert.so", RTLD_LAZY); 450861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 450961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = (createC2DColorConverter_t *) 451061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlsym(mLibHandle,"createC2DColorConverter"); 451161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = (destroyC2DColorConverter_t *) 451261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlsym(mLibHandle,"destroyC2DColorConverter"); 451361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!mConvertOpen || !mConvertClose) 451461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 451561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 451661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = false; 451761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 451861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!status && mLibHandle) { 451961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlclose(mLibHandle); 452061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 452161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 452261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 452361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 452461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 452561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 452661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 452761a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::convert(int src_fd, void *src_base, void *src_viraddr, 452861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int dest_fd, void *dest_base, void *dest_viraddr) 452961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 453061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int result; 453161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!src_viraddr || !dest_viraddr || !c2dcc || !src_base || !dest_base) { 45328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Invalid arguments omx_c2d_conv::convert"); 453361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return false; 453461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 453561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 453661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan result = c2dcc->convertC2D(src_fd, src_base, src_viraddr, 453761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dest_fd, dest_base, dest_viraddr); 453861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 45398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Color convert status %d",result); 454061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ((result < 0)?false:true); 454161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 454261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 454361a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::open(unsigned int height,unsigned int width, 454461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ColorConvertFormat src, ColorConvertFormat dest,unsigned int src_stride) 454561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 454661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool status = false; 454761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 454861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2dcc) { 454961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = mConvertOpen(width, height, width, height, 455061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src,dest,0,src_stride); 455161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (c2dcc) { 455261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan src_format = src; 455361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan status = true; 455461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else 45558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("mConvertOpen failed"); 455661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 455761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 455861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return status; 455961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 456061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 456161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanvoid omx_video::omx_c2d_conv::close() 456261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 456361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 456461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 456561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mConvertClose && c2dcc) 456661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose(c2dcc); 456761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 456861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 456961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 457061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 457161a2c6a19dbd06a317a419623020e02056661876Praveen Chavanomx_video::omx_c2d_conv::~omx_c2d_conv() 457261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 45738767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Destroy C2D instance"); 457461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mLibHandle) { 457561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (mConvertClose && c2dcc) { 457661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 457761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose(c2dcc); 457861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 457961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 458061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan dlclose(mLibHandle); 458161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 458261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan c2dcc = NULL; 458361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mLibHandle = NULL; 458461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertOpen = NULL; 458561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan mConvertClose = NULL; 458661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_destroy(&c_lock); 458761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 458861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 458961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanint omx_video::omx_c2d_conv::get_src_format() 459061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 459161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int format = -1; 459261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (src_format == NV12_128m) { 459361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan format = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; 459461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else if (src_format == RGBA8888) { 459561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan format = HAL_PIXEL_FORMAT_RGBA_8888; 459661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 459761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return format; 459861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 459961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 460061a2c6a19dbd06a317a419623020e02056661876Praveen Chavanbool omx_video::omx_c2d_conv::get_buffer_size(int port,unsigned int &buf_size) 460161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 460261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan int cret = 0; 460361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bool ret = false; 460461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan C2DBuffReq bufferreq; 460561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (c2dcc) { 460661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan bufferreq.size = 0; 460761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_lock(&c_lock); 460861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan cret = c2dcc->getBuffReq(port,&bufferreq); 460961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pthread_mutex_unlock(&c_lock); 46108767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Status of getbuffer is %d", cret); 461161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = (cret)?false:true; 461261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan buf_size = bufferreq.size; 461361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 461461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 461561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 461661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 461761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::empty_this_buffer_opaque(OMX_IN OMX_HANDLETYPE hComp, 461861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_IN OMX_BUFFERHEADERTYPE* buffer) 461961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 462061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned nBufIndex = 0; 462161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 462261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan encoder_media_buffer_type *media_buffer; 4623587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan private_handle_t *handle = NULL; 46248767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("ETBProxyOpaque: buffer[%p]", buffer); 462561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 462661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (buffer == NULL) { 46278767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Invalid buffer[%p]",buffer); 462861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 462961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 463061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nBufIndex = buffer - meta_buffer_hdr; 463161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (nBufIndex >= m_sInPortDef.nBufferCountActual) { 46328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Invalid bufindex = %u", 463361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan nBufIndex); 463461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 463561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 463661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_buffer = (encoder_media_buffer_type *)buffer->pBuffer; 4637587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan if ((!media_buffer || !media_buffer->meta_handle) && 4638587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan !(buffer->nFlags & OMX_BUFFERFLAG_EOS)) { 4639f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_ERROR("Incorrect Buffer queued media buffer = %p", 4640f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan media_buffer); 4641f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer); 4642f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan return OMX_ErrorBadParameter; 4643587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan } else if (media_buffer) { 4644587e0d2efca6d748d02d40bbe727bde04476300fPraveen Chavan handle = (private_handle_t *)media_buffer->meta_handle; 4645f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 464656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 4647f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (buffer->nFilledLen > 0 && handle) { 464825adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan /*Enable following code once private handle color format is 464925adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan updated correctly*/ 465025adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan if (handle->format == HAL_PIXEL_FORMAT_RGBA_8888) 465125adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan mUsesColorConversion = true; 465225adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan else 465325adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan mUsesColorConversion = false; 465425adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan 46553b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (c2d_opened && handle->format != c2d_conv.get_src_format()) { 46563b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan c2d_conv.close(); 46573b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan c2d_opened = false; 46583b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 46593b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (!c2d_opened) { 46603b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (handle->format == HAL_PIXEL_FORMAT_RGBA_8888) { 46618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_INFO("open Color conv for RGBA888 W: %u, H: %u", 46628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.format.video.nFrameWidth, 46638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)m_sInPortDef.format.video.nFrameHeight); 46643b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (!c2d_conv.open(m_sInPortDef.format.video.nFrameHeight, 46653b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan m_sInPortDef.format.video.nFrameWidth, 46663b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan RGBA8888, NV12_128m, handle->width)) { 46673b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); 46688767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Color conv open failed"); 46693b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan return OMX_ErrorBadParameter; 46703b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 46713b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan c2d_opened = true; 46723b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan#ifdef _MSM8974_ 46733b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (!dev_set_format(handle->format)) 46748767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("cannot set color format for RGBA8888"); 46753b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan#endif 467625adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan } else if (handle->format != HAL_PIXEL_FORMAT_NV12_ENCODEABLE && 467725adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan handle->format != QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m && 467825adac3dbdf265811b56384cc133f7e6c4b12023Praveen Chavan handle->format != QOMX_COLOR_FormatYVU420SemiPlanar) { 46798767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Incorrect color format"); 468061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); 468161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 468261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 468361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 468461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 468561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (input_flush_progress == true) { 468661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); 46878767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxyA: Input flush in progress"); 468861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorNone; 468961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 469061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 469161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame) { 469261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = buffer; 469361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = push_input_buffer(hComp); 469461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 46958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (!m_opq_meta_q.insert_entry((unsigned long)buffer,0,0)) { 46968767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: ETBProxy: Queue is full"); 46978f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp,m_app_data,buffer); 469861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 469961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 470061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 470161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 470261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 470361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 470461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::queue_meta_buffer(OMX_HANDLETYPE hComp, 470561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem &Input_pmem_info) 470661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 470761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 470861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 47098767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long address = 0,p2,id; 471061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47118767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("In queue Meta Buffer"); 471261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame || !pdest_frame) { 47138767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("convert_queue_buffer invalid params"); 471461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 471561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 471661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47173b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (psource_frame->nFilledLen > 0) { 47183b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if (dev_use_buf(&Input_pmem_info,PORT_INDEX_IN,0) != true) { 47198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_use_buf"); 47208767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)psource_frame,0,OMX_COMPONENT_GENERATE_EBD); 47213b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan ret = OMX_ErrorBadParameter; 47223b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 472361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 472461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 472561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ret == OMX_ErrorNone) 472661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = empty_this_buffer_proxy(hComp,psource_frame); 472761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 472861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ret == OMX_ErrorNone) { 472961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = NULL; 473061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame && m_opq_meta_q.m_size) { 473161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_meta_q.pop_entry(&address,&p2,&id); 473261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = (OMX_BUFFERHEADERTYPE* ) address; 473361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47348f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan } else { 47358f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan // there has been an error and source frame has been scheduled for an EBD 47368f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan psource_frame = NULL; 473761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 473861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 473961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 474061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 474161a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::convert_queue_buffer(OMX_HANDLETYPE hComp, 47428767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan struct pmem &Input_pmem_info,unsigned long &index) 474361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 474461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 474561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned char *uva; 474661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 47478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long address = 0,p2,id; 474861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 47498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("In Convert and queue Meta Buffer"); 475061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame || !pdest_frame) { 47518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("convert_queue_buffer invalid params"); 475261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 475361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 47548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan if (secure_session) { 47558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("cannot convert buffer during secure session"); 47568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan return OMX_ErrorInvalidState; 47578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan } 475861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 475961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame->nFilledLen) { 47603b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan if(psource_frame->nFlags & OMX_BUFFERFLAG_EOS) { 47613b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nFilledLen = psource_frame->nFilledLen; 47623b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nTimeStamp = psource_frame->nTimeStamp; 47633b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nFlags = psource_frame->nFlags; 47648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_HIGH("Skipping color conversion for empty EOS Buffer " 47658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan "header=%p filled-len=%u", pdest_frame, (unsigned int)pdest_frame->nFilledLen); 47663b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } else { 47673b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nOffset = 0; 47683b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nFilledLen = 0; 47693b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nTimeStamp = psource_frame->nTimeStamp; 47703b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan pdest_frame->nFlags = psource_frame->nFlags; 47718767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Buffer header %p Filled len size %u", 47728767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pdest_frame, (unsigned int)pdest_frame->nFilledLen); 47733b9a58e7b41e80902a651d1d551255dac9d260d3Praveen Chavan } 477461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 477561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan uva = (unsigned char *)mmap(NULL, Input_pmem_info.size, 477661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan PROT_READ|PROT_WRITE, 477761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan MAP_SHARED,Input_pmem_info.fd,0); 477861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (uva == MAP_FAILED) { 477961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 478061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 478161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2d_conv.convert(Input_pmem_info.fd, uva, uva, 478261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pInput_pmem[index].fd, pdest_frame->pBuffer, pdest_frame->pBuffer)) { 47838767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Color Conversion failed"); 478461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 478561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 478661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan unsigned int buf_size = 0; 478761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!c2d_conv.get_buffer_size(C2D_OUTPUT,buf_size)) 478861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 478961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else { 479061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame->nOffset = 0; 479161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame->nFilledLen = buf_size; 479261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame->nTimeStamp = psource_frame->nTimeStamp; 479361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame->nFlags = psource_frame->nFlags; 47948767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("Buffer header %p Filled len size %u", 47958767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan pdest_frame, (unsigned int)pdest_frame->nFilledLen); 479661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 479761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 479861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan munmap(uva,Input_pmem_info.size); 479961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 480061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 480161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (dev_use_buf(&m_pInput_pmem[index],PORT_INDEX_IN,0) != true) { 48028767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_use_buf"); 48038767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan post_event ((unsigned long)pdest_frame,0,OMX_COMPONENT_GENERATE_EBD); 480461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 480561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 480661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ret == OMX_ErrorNone) 480761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = empty_this_buffer_proxy(hComp,pdest_frame); 480861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (ret == OMX_ErrorNone) { 480961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp ,m_app_data, psource_frame); 481061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = NULL; 481161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = NULL; 481261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame && m_opq_meta_q.m_size) { 481361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_meta_q.pop_entry(&address,&p2,&id); 481461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = (OMX_BUFFERHEADERTYPE* ) address; 481561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 481661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pdest_frame && m_opq_pmem_q.m_size) { 481761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_pmem_q.pop_entry(&address,&p2,&id); 481861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = (OMX_BUFFERHEADERTYPE* ) address; 48198767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_LOW("pdest_frame pop address is %p",pdest_frame); 482061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 48218f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan } else { 48228f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan // there has been an error and source frame has been scheduled for an EBD 48238f8a54aad809df7e94c0af2991be0bc4b542d0e5Praveen Chavan psource_frame = NULL; 482461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 482561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 482661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 482761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 482861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOMX_ERRORTYPE omx_video::push_input_buffer(OMX_HANDLETYPE hComp) 482961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{ 48308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long address = 0,p2,id, index = 0; 483161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan OMX_ERRORTYPE ret = OMX_ErrorNone; 483261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan 4833f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("In push input buffer"); 483461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!psource_frame && m_opq_meta_q.m_size) { 483561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_meta_q.pop_entry(&address,&p2,&id); 483661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan psource_frame = (OMX_BUFFERHEADERTYPE* ) address; 483761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 483861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (!pdest_frame && m_opq_pmem_q.m_size) { 483961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan m_opq_pmem_q.pop_entry(&address,&p2,&id); 484061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan pdest_frame = (OMX_BUFFERHEADERTYPE* ) address; 484161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 484261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan while (psource_frame != NULL && pdest_frame != NULL && 484361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret == OMX_ErrorNone) { 484461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan struct pmem Input_pmem_info; 484561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan encoder_media_buffer_type *media_buffer; 484661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan index = pdest_frame - m_inp_mem_ptr; 484761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (index >= m_sInPortDef.nBufferCountActual) { 48488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan DEBUG_PRINT_ERROR("Output buffer index is wrong %u act count %u", 48498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan (unsigned int)index, (unsigned int)m_sInPortDef.nBufferCountActual); 485061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return OMX_ErrorBadParameter; 485161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 4852b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan 4853b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //Meta-Buffer with empty filled-length can contain garbage handle 4854b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //Some clients queue such buffers to signal EOS. Handle this case 4855b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan // separately by queueing an intermediate color-conversion buffer 4856b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan // and propagate the EOS. 4857b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan if (psource_frame->nFilledLen == 0 && (psource_frame->nFlags & OMX_BUFFERFLAG_EOS)) { 4858b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan return push_empty_eos_buffer(hComp, psource_frame); 4859b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan } 486061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan media_buffer = (encoder_media_buffer_type *)psource_frame->pBuffer; 486161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan /*Will enable to verify camcorder in current TIPS can be removed*/ 486261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (media_buffer->buffer_type == kMetadataBufferTypeCameraSource) { 486361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.buffer = media_buffer; 486461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.fd = media_buffer->meta_handle->data[0]; 486561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset = media_buffer->meta_handle->data[1]; 486661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size = media_buffer->meta_handle->data[2]; 486761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan DEBUG_PRINT_LOW("ETB fd = %d, offset = %d, size = %d",Input_pmem_info.fd, 486861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset, 486961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size); 487061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = queue_meta_buffer(hComp,Input_pmem_info); 487161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } else { 487261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan private_handle_t *handle = (private_handle_t *)media_buffer->meta_handle; 487361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.buffer = media_buffer; 487461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.fd = handle->fd; 487561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.offset = 0; 487661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan Input_pmem_info.size = handle->size; 487761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan if (handle->format == HAL_PIXEL_FORMAT_RGBA_8888) 487861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = convert_queue_buffer(hComp,Input_pmem_info,index); 4879f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan else if (handle->format == HAL_PIXEL_FORMAT_NV12_ENCODEABLE || 4880f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan handle->format == QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m) 488161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = queue_meta_buffer(hComp,Input_pmem_info); 488261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan else 488361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan ret = OMX_ErrorBadParameter; 488461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 488561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan } 488661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan return ret; 488761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan} 488856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 488956dd7e53ba5657987bd527fa996a7942da01ef63Praveen ChavanOMX_ERRORTYPE omx_video::push_empty_eos_buffer(OMX_HANDLETYPE hComp, 489056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan OMX_BUFFERHEADERTYPE* buffer) { 489156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan OMX_BUFFERHEADERTYPE* opqBuf = NULL; 489256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan OMX_ERRORTYPE retVal = OMX_ErrorNone; 4893f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan unsigned index = 0; 4894f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 4895f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan DEBUG_PRINT_LOW("In push empty eos buffer"); 489656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan do { 4897f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (mUsesColorConversion) { 4898b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan if (pdest_frame) { 4899b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //[1] use a checked out conversion buffer, if one is available 4900b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan opqBuf = pdest_frame; 4901b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan pdest_frame = NULL; 4902b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan } else if (m_opq_pmem_q.m_size) { 4903b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //[2] else pop out one from the queue, if available 49048767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan unsigned long address = 0, p2, id; 490556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan m_opq_pmem_q.pop_entry(&address,&p2,&id); 490656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan opqBuf = (OMX_BUFFERHEADERTYPE* ) address; 490756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 4908f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan index = opqBuf - m_inp_mem_ptr; 4909f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } else { 4910f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan opqBuf = (OMX_BUFFERHEADERTYPE* ) buffer; 4911f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan index = opqBuf - meta_buffer_hdr; 4912f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan } 4913f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan 491456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (!opqBuf || index >= m_sInPortDef.nBufferCountActual) { 491556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan DEBUG_PRINT_ERROR("push_empty_eos_buffer: Could not find a " 4916b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan "color-conversion buffer to queue ! defer until available"); 4917b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //[3] else, returning back will defer calling this function again 4918b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //until a conversion buffer is returned by the encoder and also 4919b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan //hold on to the client's buffer 4920b1830340f6787bf2af5eafcd4e31d7e9bf76733ePraveen Chavan return OMX_ErrorNone; 492156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 492256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan struct pmem Input_pmem_info; 492356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan Input_pmem_info.buffer = opqBuf; 492456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan Input_pmem_info.fd = m_pInput_pmem[index].fd; 492556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan Input_pmem_info.offset = 0; 492656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan Input_pmem_info.size = m_pInput_pmem[index].size; 492756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 492856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (dev_use_buf(&Input_pmem_info, PORT_INDEX_IN, 0) != true) { 492956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_use_buf for empty eos buffer"); 493056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan retVal = OMX_ErrorBadParameter; 493156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan break; 493256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 493356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 493456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //Queue with null pBuffer, as pBuffer in client's hdr can be junk 493556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //Clone the color-conversion buffer to avoid overwriting original buffer 493656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan OMX_BUFFERHEADERTYPE emptyEosBufHdr; 493756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan memcpy(&emptyEosBufHdr, opqBuf, sizeof(OMX_BUFFERHEADERTYPE)); 493856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan emptyEosBufHdr.nFilledLen = 0; 493956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan emptyEosBufHdr.nTimeStamp = buffer->nTimeStamp; 494056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan emptyEosBufHdr.nFlags = buffer->nFlags; 494156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan emptyEosBufHdr.pBuffer = NULL; 4942f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan if (!mUsesColorConversion) 4943f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan emptyEosBufHdr.nAllocLen = m_sInPortDef.nBufferSize; 494456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan if (dev_empty_buf(&emptyEosBufHdr, 0, index, m_pInput_pmem[index].fd) != true) { 494556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan DEBUG_PRINT_ERROR("ERROR: in dev_empty_buf for empty eos buffer"); 494656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan dev_free_buf(&Input_pmem_info, PORT_INDEX_IN); 494756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan retVal = OMX_ErrorBadParameter; 494856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan break; 494956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } 495056dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan mEmptyEosBuffer = opqBuf; 495156dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan } while(false); 495256dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 495356dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //return client's buffer regardless since intermediate color-conversion 495456dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan //buffer is sent to the the encoder 495556dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan m_pCallbacks.EmptyBufferDone(hComp, m_app_data, buffer); 495656dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan --pending_input_buffers; 495756dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan return retVal; 495856dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan} 495956dd7e53ba5657987bd527fa996a7942da01ef63Praveen Chavan 4960