1/* 2 * Copyright 2009, Axel D��rfler, axeld@pinc-software.de. 3 * Copyright 2002, Marcus Overhagen. All Rights Reserved. 4 * Distributed under the terms of the MIT License. 5 */ 6 7 8//! A cache for BBuffers to be received by BBufferConsumer::BufferReceived(). 9 10 11#include "BufferCache.h" 12 13#include <Buffer.h> 14 15#include "debug.h" 16 17 18namespace BPrivate { 19 20 21BufferCache::BufferCache() 22{ 23} 24 25 26BufferCache::~BufferCache() 27{ 28 for (BufferMap::iterator iterator = fMap.begin(); iterator != fMap.end(); 29 iterator++) { 30 delete iterator->second; 31 } 32} 33 34 35BBuffer* 36BufferCache::GetBuffer(media_buffer_id id) 37{ 38 BufferMap::iterator found = fMap.find(id); 39 if (found != fMap.end()) 40 return found->second; 41 42 buffer_clone_info info; 43 info.buffer = id; 44 BBuffer* buffer = new(std::nothrow) BBuffer(info); 45 if (buffer == NULL) 46 return NULL; 47 48 try { 49 fMap.insert(std::make_pair(id, buffer)); 50 } catch (std::bad_alloc& exception) { 51 delete buffer; 52 return NULL; 53 } 54 55 return buffer; 56} 57 58 59} // namespace BPrivate 60