17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************* 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @file VideoEditorBuffer.c 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief StageFright shell Buffer 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi************************************************************************* 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#undef M4OSA_TRACE_LEVEL 237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4OSA_TRACE_LEVEL 1 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorBuffer.h" 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "utils/Log.h" 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define VIDEOEDITOR_BUFFEPOOL_MAX_NAME_SIZE 40 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define VIDEOEDITOR_SAFE_FREE(p) \ 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ \ 327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != p) \ 337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { \ 34694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(p); \ 357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi p = M4OSA_NULL; \ 367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } \ 377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR VIDEOEDITOR_BUFFER_allocatePool(VIDEOEDITOR_BUFFER_Pool** ppool, 427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * M4OSA_UInt32 nbBuffers) 437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Allocate a pool of nbBuffers buffers 447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param ppool : IN The buffer pool to create 467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param nbBuffers : IN The number of buffers in the pool 477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param poolName : IN a name given to the pool 487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return Error code 497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VIDEOEDITOR_BUFFER_allocatePool(VIDEOEDITOR_BUFFER_Pool** ppool, 527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 nbBuffers, M4OSA_Char* poolName) 537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR lerr = M4NO_ERROR; 557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_BUFFER_Pool* pool; 569d8e55cd2705a6ab43ea4aca6f94feb7bef87938Truls Bengtsson M4OSA_UInt32 index; 577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 582703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_allocatePool : ppool = 0x%x nbBuffers = %d ", 597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ppool, nbBuffers); 607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool = M4OSA_NULL; 62694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pool = (VIDEOEDITOR_BUFFER_Pool*)M4OSA_32bitAlignedMalloc( 637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(VIDEOEDITOR_BUFFER_Pool), VIDEOEDITOR_BUFFER_EXTERNAL, 647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)("VIDEOEDITOR_BUFFER_allocatePool: pool")); 657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (M4OSA_NULL == pool) 667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lerr = M4ERR_ALLOC; 687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto VIDEOEDITOR_BUFFER_allocatePool_Cleanup; 697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 712703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_allocatePool : Allocating Pool buffers"); 727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool->pNXPBuffer = M4OSA_NULL; 73694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pool->pNXPBuffer = (VIDEOEDITOR_BUFFER_Buffer*)M4OSA_32bitAlignedMalloc( 747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sizeof(VIDEOEDITOR_BUFFER_Buffer)*nbBuffers, 757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_BUFFER_EXTERNAL, 767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)("BUFFER_allocatePool: pNXPBuffer")); 777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL == pool->pNXPBuffer) 787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lerr = M4ERR_ALLOC; 807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto VIDEOEDITOR_BUFFER_allocatePool_Cleanup; 817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 839d8e55cd2705a6ab43ea4aca6f94feb7bef87938Truls Bengtsson for (index = 0; index < nbBuffers; index++) 849d8e55cd2705a6ab43ea4aca6f94feb7bef87938Truls Bengtsson { 859d8e55cd2705a6ab43ea4aca6f94feb7bef87938Truls Bengtsson pool->pNXPBuffer[index].pData = M4OSA_NULL; 869d8e55cd2705a6ab43ea4aca6f94feb7bef87938Truls Bengtsson } 879d8e55cd2705a6ab43ea4aca6f94feb7bef87938Truls Bengtsson 882703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_allocatePool : Allocating Pool name buffer"); 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool->poolName = M4OSA_NULL; 90694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pool->poolName = (M4OSA_Char*)M4OSA_32bitAlignedMalloc( 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_BUFFEPOOL_MAX_NAME_SIZE,VIDEOEDITOR_BUFFER_EXTERNAL, 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)("VIDEOEDITOR_BUFFER_allocatePool: poolname")); 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pool->poolName == M4OSA_NULL) 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lerr = M4ERR_ALLOC; 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi goto VIDEOEDITOR_BUFFER_allocatePool_Cleanup; 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 992703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_allocatePool : Assigning Pool name buffer"); 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 10132ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memset((void *)pool->poolName, 0,VIDEOEDITOR_BUFFEPOOL_MAX_NAME_SIZE); 10232ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)pool->poolName, (void *)poolName, 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_BUFFEPOOL_MAX_NAME_SIZE-1); 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool->NB = nbBuffers; 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiVIDEOEDITOR_BUFFER_allocatePool_Cleanup: 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4NO_ERROR != lerr) 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_SAFE_FREE(pool->pNXPBuffer); 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_SAFE_FREE(pool->poolName); 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_SAFE_FREE(pool); 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *ppool = pool; 1152703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_allocatePool END"); 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return lerr; 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR VIDEOEDITOR_BUFFER_freePool(VIDEOEDITOR_BUFFER_Pool* ppool) 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Deallocate a buffer pool 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param ppool : IN The buffer pool to free 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return Error code 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VIDEOEDITOR_BUFFER_freePool(VIDEOEDITOR_BUFFER_Pool* ppool) 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err; 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 j = 0; 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1342703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_freePool : ppool = 0x%x", ppool); 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4NO_ERROR; 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (j = 0; j < ppool->NB; j++) 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL != ppool->pNXPBuffer[j].pData) 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 142694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(ppool->pNXPBuffer[j].pData); 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ppool->pNXPBuffer[j].pData = M4OSA_NULL; 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(ppool != M4OSA_NULL) 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(ppool->pNXPBuffer); 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(ppool->poolName); 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi SAFE_FREE(ppool); 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return(err); 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR VIDEOEDITOR_BUFFER_getBuffer(VIDEOEDITOR_BUFFER_Pool* ppool, 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * VIDEOEDITOR_BUFFER_Buffer** pNXPBuffer) 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief Returns a buffer in a given state 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param ppool : IN The buffer pool 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param desiredState : IN The buffer state 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param pNXPBuffer : IN The selected buffer 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return Error code 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/ 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VIDEOEDITOR_BUFFER_getBuffer(VIDEOEDITOR_BUFFER_Pool* ppool, 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_BUFFER_State desiredState, 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_BUFFER_Buffer** pNXPBuffer) 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool bFound = M4OSA_FALSE; 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 i, ibuf; 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1772703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_getBuffer from %s in state=%d", 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ppool->poolName, desiredState); 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ibuf = 0; 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i=0; i < ppool->NB; i++) 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bFound = (ppool->pNXPBuffer[i].state == desiredState); 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (bFound) 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ibuf = i; 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(!bFound) 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1942703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_getBuffer No buffer available in state %d", 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi desiredState); 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pNXPBuffer = M4OSA_NULL; 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4ERR_NO_BUFFER_AVAILABLE; 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* case where a buffer has been found */ 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pNXPBuffer = &(ppool->pNXPBuffer[ibuf]); 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2032703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_getBuffer: idx = %d", ibuf); 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return(err); 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VIDEOEDITOR_BUFFER_initPoolBuffers(VIDEOEDITOR_BUFFER_Pool* pool, 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 lSize) 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 index, j; 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /** 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Initialize all the buffers in the pool */ 2162fffed1d281c5d9df2d5b830dca92034271362a2Danny Fernandes for(index = 0; index < pool->NB; index++) 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool->pNXPBuffer[index].pData = M4OSA_NULL; 219694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu pool->pNXPBuffer[index].pData = (M4OSA_Void*)M4OSA_32bitAlignedMalloc( 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi lSize, VIDEOEDITOR_BUFFER_EXTERNAL, 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (M4OSA_Char*)("BUFFER_initPoolBuffers: Buffer data")); 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_NULL == pool->pNXPBuffer[index].pData) 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (j = 0; j < index; j++) 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2262fffed1d281c5d9df2d5b830dca92034271362a2Danny Fernandes if(M4OSA_NULL != pool->pNXPBuffer[j].pData) 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 228694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(pool->pNXPBuffer[j].pData); 2292fffed1d281c5d9df2d5b830dca92034271362a2Danny Fernandes pool->pNXPBuffer[j].pData = M4OSA_NULL; 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_ALLOC; 2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool->pNXPBuffer[index].size = 0; 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool->pNXPBuffer[index].state = VIDEOEDITOR_BUFFER_kEmpty; 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool->pNXPBuffer[index].idx = index; 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pool->pNXPBuffer[index].buffCTS = -1; 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VIDEOEDITOR_BUFFER_getOldestBuffer(VIDEOEDITOR_BUFFER_Pool *pool, 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_BUFFER_State desiredState, 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi VIDEOEDITOR_BUFFER_Buffer** pNXPBuffer) 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 index, j; 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4_MediaTime candidateTimeStamp = (M4_MediaTime)0x7ffffff; 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_Bool bFound = M4OSA_FALSE; 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pNXPBuffer = M4OSA_NULL; 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for(index = 0; index< pool->NB; index++) 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pool->pNXPBuffer[index].state == desiredState) 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(pool->pNXPBuffer[index].buffCTS <= candidateTimeStamp) 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi bFound = M4OSA_TRUE; 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi candidateTimeStamp = pool->pNXPBuffer[index].buffCTS; 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *pNXPBuffer = &(pool->pNXPBuffer[index]); 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(M4OSA_FALSE == bFound) 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2672703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("VIDEOEDITOR_BUFFER_getOldestBuffer WARNING no buffer available"); 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi err = M4ERR_NO_BUFFER_AVAILABLE; 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return err; 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 272