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