| /* ------------------------------------------------------------------ |
| * 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)); |
| } |