haiku/headers/private/media/MediaRosterEx.h
Dario Casalinuovo 67060664c9 Allow BMediaRoster to log local nodes
* BMediaRoster is now capable to know which nodes are
instantiated in this team. This is also a first step to make
them survive after media_server crashes.
* A control at BMediaRoster::Quit can notify if all nodes
were correctly released. Ideally at this point the local nodes
list should be empty.
2015-11-28 16:35:04 +01:00

115 lines
3.0 KiB
C++

/*
* Copyright (c) 2003 Marcus Overhagen.
* All Rights Reserved.
*
* This file may be used under the terms of the MIT License.
*/
#ifndef _MEDIA_ROSTER_EX_H_
#define _MEDIA_ROSTER_EX_H_
#ifndef _MEDIA_T_LIST_H
#include "TList.h"
#endif
#ifndef _DATA_EXCHANGE_H
#include "DataExchange.h"
#endif
#ifndef _MEDIA_NODE_H
#include <MediaNode.h>
#endif
#ifndef _MEDIA_ADD_ON_H
#include <MediaAddOn.h>
#endif
namespace BPrivate { namespace media {
/* The BMediaRosterEx class is an extension to the BMediaRoster.
* It provides functionality that can be used by the implementation
* of media_server, media_addon_server and libmedia.so.
* To access it, convert any BMediaRoster pointer in a BMediaRosterEx
* pointer using the inline function provided below.
*/
class BMediaRosterEx : public BMediaRoster
{
public:
BMediaRosterEx(status_t* out_error);
virtual ~BMediaRosterEx();
virtual void Quit();
status_t SaveNodeConfiguration(BMediaNode* node);
status_t LoadNodeConfiguration(media_addon_id addonid,
int32 flavorid, BMessage* out_msg);
status_t IncrementAddonFlavorInstancesCount(
media_addon_id addonid, int32 flavorid);
status_t DecrementAddonFlavorInstancesCount(
media_addon_id addonid, int32 flavorid);
status_t ReleaseNodeAll(const media_node& node);
status_t SetNodeCreator(media_node_id node, team_id creator);
status_t RegisterNode(BMediaNode* node, media_addon_id addonid,
int32 flavorid);
status_t InstantiateDormantNode(media_addon_id addonid,
int32 flavorid, team_id creator, media_node* out_node);
status_t GetDormantFlavorInfo(media_addon_id addonid,
int32 flavorid, dormant_flavor_info* out_flavor);
status_t GetNode(node_type type, media_node* out_node,
int32* out_input_id = NULL,
BString* out_input_name = NULL);
status_t SetNode(node_type type, const media_node* node,
const dormant_node_info* info = NULL,
const media_input *input = NULL);
status_t GetAllOutputs(const media_node& node,
List<media_output>* list);
status_t GetAllOutputs(BBufferProducer* node,
List<media_output>* list);
status_t GetAllInputs(const media_node& node,
List<media_input>* list);
status_t GetAllInputs(BBufferConsumer* node,
List<media_input>* list);
status_t PublishOutputs(const media_node& node,
List<media_output>* list);
status_t PublishInputs(const media_node& node,
List<media_input>* list);
BTimeSource* MakeTimeSourceObject(media_node_id timesource_id);
status_t BuildConnections();
void RegisterLocalNode(BMediaNode* node);
void UnregisterLocalNode(BMediaNode* node);
private:
friend class BMediaRoster;
};
/* The pointer returned by BMediaRoster::Roster() is always a
* BMediaRosterEx object pointer. Use this to convert it.
*/
inline BMediaRosterEx* MediaRosterEx(BMediaRoster* mediaroster)
{
return static_cast<BMediaRosterEx*>(mediaroster);
}
} } // BPrivate::media
using namespace BPrivate::media;
#endif