1/* 2 * Copyright 2002, Marcus Overhagen. All rights reserved. 3 * Copyright 2009, Axel Dörfler, axeld@pinc-software.de. 4 * Distributed under the terms of the MIT License. 5 */ 6#ifndef _BUFFER_MANAGER_H 7#define _BUFFER_MANAGER_H 8 9#include <set> 10 11#include <Locker.h> 12#include <MediaDefs.h> 13 14#include <HashMap.h> 15 16 17namespace BPrivate { 18 class SharedBufferList; 19} 20 21 22class BufferManager { 23public: 24 BufferManager(); 25 ~BufferManager(); 26 27 area_id SharedBufferListArea(); 28 29 status_t RegisterBuffer(team_id team, 30 media_buffer_id bufferID, size_t* _size, 31 int32* _flags, size_t* _offset, area_id* _area); 32 33 status_t RegisterBuffer(team_id team, size_t size, 34 int32 flags, size_t offset, area_id area, 35 media_buffer_id* _bufferID); 36 37 status_t UnregisterBuffer(team_id team, 38 media_buffer_id bufferID); 39 40 void CleanupTeam(team_id team); 41 42 void Dump(); 43 44private: 45 area_id _CloneArea(area_id area); 46 void _ReleaseClonedArea(area_id clone); 47 48private: 49 struct clone_info { 50 area_id clone; 51 vint32 ref_count; 52 }; 53 54 struct buffer_info { 55 media_buffer_id id; 56 area_id area; 57 size_t offset; 58 size_t size; 59 int32 flags; 60 std::set<team_id> teams; 61 }; 62 63 typedef HashMap<HashKey32<media_buffer_id>, buffer_info> BufferInfoMap; 64 typedef HashMap<HashKey32<area_id>, clone_info> CloneInfoMap; 65 typedef HashMap<HashKey32<area_id>, area_id> SourceInfoMap; 66 67 BPrivate::SharedBufferList* fSharedBufferList; 68 area_id fSharedBufferListArea; 69 media_buffer_id fNextBufferID; 70 BLocker fLocker; 71 BufferInfoMap fBufferInfoMap; 72 CloneInfoMap fCloneInfoMap; 73 SourceInfoMap fSourceInfoMap; 74}; 75 76#endif // _BUFFER_MANAGER_H 77