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 if (id <= 0) 39 return NULL; 40 41 BufferMap::iterator found = fMap.find(id); 42 if (found != fMap.end()) 43 return found->second; 44 45 buffer_clone_info info; 46 info.buffer = id; 47 BBuffer* buffer = new(std::nothrow) BBuffer(info); 48 if (buffer == NULL || buffer->Data() == NULL) { 49 delete buffer; 50 return NULL; 51 } 52 53 try { 54 fMap.insert(std::make_pair(id, buffer)); 55 } catch (std::bad_alloc& exception) { 56 delete buffer; 57 return NULL; 58 } 59 60 return buffer; 61 } 62 63 64 } // namespace BPrivate 65