From 3a4bbc85c18c388b54faab63232290560d70cdd3 Mon Sep 17 00:00:00 2001 From: beveloper Date: Mon, 12 Aug 2002 20:08:07 +0000 Subject: [PATCH] Start using a class for management and (perhaps later) caching of dormant media nodes git-svn-id: file:///srv/svn/repos/haiku/trunk/current@721 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/media/DormantNodeManager.h | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 headers/private/media/DormantNodeManager.h diff --git a/headers/private/media/DormantNodeManager.h b/headers/private/media/DormantNodeManager.h new file mode 100644 index 0000000000..67e9328e42 --- /dev/null +++ b/headers/private/media/DormantNodeManager.h @@ -0,0 +1,59 @@ +/* + * Copyright 2002, Marcus Overhagen. All rights reserved. + * Distributed under the terms of the MIT License. + */ + +#ifndef _DORMANT_NODE_MANAGER_H +#define _DORMANT_NODE_MANAGER_H + +#include "TMap.h" + +namespace BPrivate { +namespace media { + +class DormantNodeManager +{ +public: + DormantNodeManager(); + ~DormantNodeManager(); + +// InstantiateDormantNode(const dormant_node_info & in_info, bool global, media_node * out_node); + + // Be careful, GetAddon and PutAddon must be balanced. + BMediaAddOn *GetAddon(media_addon_id id); + void PutAddon(media_addon_id id); + + // For use by media_addon_server only + media_addon_id RegisterAddon(const char *path); + void UnregisterAddon(media_addon_id id); + +private: + struct loaded_addon_info + { + BMediaAddOn *addon; + image_id image; + int32 usecount; + }; + + // returns the addon or NULL if it needs to be loaded + BMediaAddOn *TryGetAddon(media_addon_id id); + + // manage loading and unloading add-ons from images + status_t LoadAddon(BMediaAddOn **newaddon, image_id *newimage, const char *path, media_addon_id id); + void UnloadAddon(BMediaAddOn *addon, image_id image); + + // query the server for the path + status_t FindAddonPath(BPath *path, media_addon_id id); + +private: + + Map *fAddonmap; + BLocker *fLock; +}; + +}; // namespace media +}; // namespace BPrivate + +extern BPrivate::media::DormantNodeManager *_DormantNodeManager; + +#endif /* _DORMANT_NODE_MANAGER_H */