1 /* 2 * Copyright (c) 2003 Marcus Overhagen. 3 * All Rights Reserved. 4 * 5 * This file may be used under the terms of the MIT License. 6 */ 7 #ifndef _MEDIA_ROSTER_EX_H_ 8 #define _MEDIA_ROSTER_EX_H_ 9 10 11 #ifndef _MEDIA_T_LIST_H 12 #include "TList.h" 13 #endif 14 #ifndef _DATA_EXCHANGE_H 15 #include "DataExchange.h" 16 #endif 17 #ifndef _MEDIA_NODE_H 18 #include <MediaNode.h> 19 #endif 20 #ifndef _MEDIA_ADD_ON_H 21 #include <MediaAddOn.h> 22 #endif 23 24 25 namespace BPrivate { namespace media { 26 27 28 /* The BMediaRosterEx class is an extension to the BMediaRoster. 29 * It provides functionality that can be used by the implementation 30 * of media_server, media_addon_server and libmedia.so. 31 * To access it, convert any BMediaRoster pointer in a BMediaRosterEx 32 * pointer using the inline function provided below. 33 */ 34 class BMediaRosterEx : public BMediaRoster 35 { 36 public: 37 BMediaRosterEx(status_t* out_error); 38 virtual ~BMediaRosterEx(); 39 40 virtual void Quit(); 41 42 status_t SaveNodeConfiguration(BMediaNode* node); 43 status_t LoadNodeConfiguration(media_addon_id addonid, 44 int32 flavorid, BMessage* out_msg); 45 46 status_t IncrementAddonFlavorInstancesCount( 47 media_addon_id addonid, int32 flavorid); 48 49 status_t DecrementAddonFlavorInstancesCount( 50 media_addon_id addonid, int32 flavorid); 51 52 status_t ReleaseNodeAll(const media_node& node); 53 54 status_t SetNodeCreator(media_node_id node, team_id creator); 55 56 status_t RegisterNode(BMediaNode* node, media_addon_id addonid, 57 int32 flavorid); 58 59 status_t InstantiateDormantNode(media_addon_id addonid, 60 int32 flavorid, team_id creator, media_node* out_node); 61 62 status_t GetDormantFlavorInfo(media_addon_id addonid, 63 int32 flavorid, dormant_flavor_info* out_flavor); 64 65 status_t GetNode(node_type type, media_node* out_node, 66 int32* out_input_id = NULL, 67 BString* out_input_name = NULL); 68 69 status_t SetNode(node_type type, const media_node* node, 70 const dormant_node_info* info = NULL, 71 const media_input *input = NULL); 72 73 status_t GetAllOutputs(const media_node& node, 74 List<media_output>* list); 75 76 status_t GetAllOutputs(BBufferProducer* node, 77 List<media_output>* list); 78 79 status_t GetAllInputs(const media_node& node, 80 List<media_input>* list); 81 82 status_t GetAllInputs(BBufferConsumer* node, 83 List<media_input>* list); 84 85 status_t PublishOutputs(const media_node& node, 86 List<media_output>* list); 87 88 status_t PublishInputs(const media_node& node, 89 List<media_input>* list); 90 91 BTimeSource* MakeTimeSourceObject(media_node_id timesource_id); 92 93 status_t BuildConnections(); 94 95 void RegisterLocalNode(BMediaNode* node); 96 void UnregisterLocalNode(BMediaNode* node); 97 98 void EnableLaunchNotification(bool enable, 99 bool autoExit); 100 101 private: 102 bool fLaunchNotification; 103 bool fAutoExit; 104 105 friend class BMediaRoster; 106 }; 107 108 /* The pointer returned by BMediaRoster::Roster() is always a 109 * BMediaRosterEx object pointer. Use this to convert it. 110 */ 111 inline BMediaRosterEx* MediaRosterEx(BMediaRoster* mediaroster) 112 { 113 return static_cast<BMediaRosterEx*>(mediaroster); 114 } 115 116 117 } } // BPrivate::media 118 using namespace BPrivate::media; 119 120 #endif 121