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 18 namespace BPrivate { 19 20 21 BufferCache::BufferCache() 22 { 23 } 24 25 26 BufferCache::~BufferCache() 27 { 28 for (BufferMap::iterator iterator = fMap.begin(); iterator != fMap.end(); 29 iterator++) { 30 delete iterator->second; 31 } 32 } 33 34 35 BBuffer* 36 BufferCache::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 || buffer->Data() == NULL) { 46 delete buffer; 47 return NULL; 48 } 49 50 try { 51 fMap.insert(std::make_pair(id, buffer)); 52 } catch (std::bad_alloc& exception) { 53 delete buffer; 54 return NULL; 55 } 56 57 return buffer; 58 } 59 60 61 } // namespace BPrivate 62