/* ------------------------------------------------------------------ * Copyright (C) 1998-2009 PacketVideo * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. * See the License for the specific language governing permissions * and limitations under the License. * ------------------------------------------------------------------- */ #include "pvmf_mempool.h" #include "pvmf_media_msg_format_ids.h" #define MPLOGDATAPATH(x) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iDatapathLogger, PVLOGMSG_DEBUG, x); #define MPLOGDATAPATH_ERR(x) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iDatapathLogger, PVLOGMSG_ERROR, x); OSCL_EXPORT_REF PVMFMemPoolFixedChunkAllocator::PVMFMemPoolFixedChunkAllocator(const char* name, const uint32 numchunk, const uint32 chunksize, Oscl_DefAlloc* gen_alloc) : OsclMemPoolFixedChunkAllocator(numchunk, chunksize, gen_alloc) { if (name) { iName = name; } iDatapathLogger = PVLogger::GetLoggerObject("datapath"); iOsclErrorTrapImp = OsclErrorTrap::GetErrorTrapImp(); } OSCL_EXPORT_REF PVMFMemPoolFixedChunkAllocator::~PVMFMemPoolFixedChunkAllocator() { #if OSCL_MEM_CHECK_ALL_MEMPOOL_CHUNKS_ARE_RETURNED if (iFreeMemChunkList.size() < iNumChunk) { // All of the chunks were not returned-- usage error MPLOGDATAPATH_ERR((0, ("MEMP %s Error: %d Free Chunks Not Returned!" , iName.get_cstr(), iNumChunk - iFreeMemChunkList.size()))); //OsclError::Panic("PVMFMEMPOOL",1); } #endif iDatapathLogger = NULL; MPLOGDATAPATH((0, "MEMP %s Destroyed", iName.get_cstr())); } OSCL_EXPORT_REF OsclAny* PVMFMemPoolFixedChunkAllocator::allocate(const uint32 n) { OsclAny* freechunk = NULL; int32 leavecode = OsclErrNone; OSCL_TRY_NO_TLS(iOsclErrorTrapImp, leavecode, freechunk = OsclMemPoolFixedChunkAllocator::allocate(n)); if (OsclErrNone != leavecode) { if (OsclErrNoResources == leavecode) { // No free chunk is available MPLOGDATAPATH((0, "MEMP %s Allocate %d chunk failed--No Free Chunks!", iName.get_cstr(), n)); OSCL_LEAVE(leavecode); } else { OSCL_LEAVE(leavecode); } } MPLOGDATAPATH((0, "MEMP %s Chunk allocated, %d/%d in use" , iName.get_cstr(), iNumChunk - iFreeMemChunkList.size(), iNumChunk)); return freechunk; } OSCL_EXPORT_REF void PVMFMemPoolFixedChunkAllocator::deallocate(OsclAny* p) { if (iRefCount > 0) { MPLOGDATAPATH((0, "MEMP %s Chunk freed, %d/%d in use" , iName.get_cstr(), iNumChunk - iFreeMemChunkList.size(), iNumChunk)); } OsclMemPoolFixedChunkAllocator::deallocate(p); } OSCL_EXPORT_REF void PVMFMemPoolFixedChunkAllocator::LogMediaDataInfo(PVMFSharedMediaDataPtr aMediaData) { OSCL_UNUSED_ARG(aMediaData); MPLOGDATAPATH( (0, "MEMP %s MediaData SeqNum %d, SId %d, TS %d", iName.get_cstr() , aMediaData->getSeqNum() , aMediaData->getStreamID() , aMediaData->getTimestamp())); } OSCL_EXPORT_REF void PVMFMemPoolFixedChunkAllocator::LogMediaCmdInfo(PVMFSharedMediaCmdPtr aMediaCmd) { if (aMediaCmd->getFormatID() == PVMF_MEDIA_CMD_EOS_FORMAT_ID) { MPLOGDATAPATH((0, "MEMP %s MediaCmd FmtId %s, SeqNum %d, SId %d, TS %d", iName.get_cstr() , "EOS", aMediaCmd->getSeqNum(), aMediaCmd->getStreamID(), aMediaCmd->getTimestamp())); } else { MPLOGDATAPATH((0, "MEMP %s MediaCmd FmtId %d, SeqNum %d, SId %d, TS %d", iName.get_cstr() , aMediaCmd->getFormatID(), aMediaCmd->getSeqNum(), aMediaCmd->getStreamID(), aMediaCmd->getTimestamp())); } } void PVMFMemPoolFixedChunkAllocator::createmempool() { OsclMemPoolFixedChunkAllocator::createmempool(); MPLOGDATAPATH((0, "MEMP %s Created, Numchunk %d Size %d" , iName.get_cstr(), iNumChunk, iChunkSizeMemAligned)); }