* Copyright (c) 2008 Haiku, Inc. All rights reserved.
* Distributed under the terms of the the MIT licence.
*
*/
#ifndef _MEDIA_ROSTER_H
#define _MEDIA_ROSTER_H
#include <MediaDefs.h>
#include <MediaNode.h>
typedef enum {
B_ISA_BUS,
B_PCI_BUS,
B_PCMCIA_BUS,
B_UNKNOWN_BUS = 0x80
} bus_type;
class BBufferGroup;
class BMediaAddOn;
class BMimeType;
class BParameterWeb;
class BString;
struct dormant_flavor_info;
struct entry_ref;
namespace BPrivate { namespace media {
class DefaultDeleter;
class BMediaRosterEx;
} }
class BMediaRoster : public BLooper {
public:
static BMediaRoster* Roster(status_t* _error = NULL);
static BMediaRoster* CurrentRoster();
static bool IsRunning();
status_t GetVideoInput(media_node* _node);
status_t GetAudioInput(media_node* _node);
status_t GetVideoOutput(media_node* _node);
status_t GetAudioMixer(media_node* _node);
status_t GetAudioOutput(media_node* _node);
status_t GetAudioOutput(media_node* _node,
int32* _inputId, BString* _inputName);
status_t GetTimeSource(media_node* _node);
status_t SetVideoInput(const media_node& producer);
status_t SetVideoInput(
const dormant_node_info& producer);
status_t SetAudioInput(const media_node& producer);
status_t SetAudioInput(
const dormant_node_info& producer);
status_t SetVideoOutput(const media_node& consumer);
status_t SetVideoOutput(
const dormant_node_info& consumer);
status_t SetAudioOutput(
const media_node& consumer);
status_t SetAudioOutput(
const media_input& inputToOutput);
status_t SetAudioOutput(
const dormant_node_info& consumer);
status_t GetNodeFor(media_node_id node,
media_node* clone);
status_t GetSystemTimeSource(media_node* clone);
status_t ReleaseNode(const media_node& node);
BTimeSource* MakeTimeSourceFor(const media_node& for_node);
status_t Connect(const media_source& from,
const media_destination& to,
media_format* _inOutFormat,
media_output* _output,
media_input* _input);
enum connect_flags {
B_CONNECT_MUTED = 0x1
};
status_t Connect(const media_source& from,
const media_destination& to,
media_format* _inOutFormat,
media_output* _output,
media_input* _input,
uint32 flags, void* _reserved = NULL);
status_t Disconnect(media_node_id sourceNode,
const media_source& source,
media_node_id destinationNode,
const media_destination& destination);
status_t Disconnect(const media_output& output,
const media_input& input);
status_t StartNode(const media_node& node,
bigtime_t atPerformanceTime);
status_t StopNode(const media_node& node,
bigtime_t atPerformanceTime,
bool immediate = false);
status_t SeekNode(const media_node& node,
bigtime_t toMediaTime,
bigtime_t atPerformanceTime = 0);
status_t StartTimeSource(const media_node& node,
bigtime_t atRealTime);
status_t StopTimeSource(const media_node& node,
bigtime_t atRealTime,
bool immediate = false);
status_t SeekTimeSource(const media_node& node,
bigtime_t toPerformanceTime,
bigtime_t atRealTime);
status_t SyncToNode(const media_node& node,
bigtime_t atTime,
bigtime_t timeout = B_INFINITE_TIMEOUT);
status_t SetRunModeNode(const media_node& node,
BMediaNode::run_mode mode);
status_t PrerollNode(const media_node& node);
status_t RollNode(const media_node& node,
bigtime_t startPerformance,
bigtime_t stopPerformance,
bigtime_t atMediaTime
= -B_INFINITE_TIMEOUT);
status_t SetProducerRunModeDelay(const media_node& node,
bigtime_t delay,
BMediaNode::run_mode mode
= BMediaNode::B_RECORDING);
status_t SetProducerRate(const media_node& producer,
int32 numer, int32 denom);
status_t GetLiveNodeInfo(const media_node& node,
live_node_info* _liveInfo);
status_t GetLiveNodes(live_node_info* _liveNodes,
int32* inOutTotalCount,
const media_format* hasInput = NULL,
const media_format* hasOutput = NULL,
const char* name = NULL,
uint64 nodeKinds = 0);
status_t GetFreeInputsFor(const media_node& node,
media_input* _freeInputsBuffer,
int32 bufferCapacity,
int32* _foundCount,
media_type filterType
= B_MEDIA_UNKNOWN_TYPE);
status_t GetConnectedInputsFor(const media_node& node,
media_input* _activeInputsBuffer,
int32 bufferCapacity,
int32* _foundCount);
status_t GetAllInputsFor(const media_node& node,
media_input* _inputsBuffer,
int32 bufferCapacity,
int32* _foundCount);
status_t GetFreeOutputsFor(const media_node& node,
media_output* _freeOutputsBuffer,
int32 bufferCapacity,
int32* _foundCount,
media_type filterType
= B_MEDIA_UNKNOWN_TYPE);
status_t GetConnectedOutputsFor(const media_node& node,
media_output* _activeOutputsBuffer,
int32 bufferCapacity,
int32* _foundCount);
status_t GetAllOutputsFor(const media_node& node,
media_output* _outputsBuffer,
int32 bufferCapacity,
int32* _foundCount);
status_t StartWatching(const BMessenger& target);
status_t StartWatching(const BMessenger& target,
int32 notificationType);
status_t StartWatching(const BMessenger& target,
const media_node& node,
int32 notificationType);
status_t StopWatching(const BMessenger& target);
status_t StopWatching(const BMessenger& target,
int32 notificationType);
status_t StopWatching(const BMessenger& target,
const media_node& node,
int32 notificationType);
status_t RegisterNode(BMediaNode* node);
status_t UnregisterNode(BMediaNode* node);
status_t SetTimeSourceFor(media_node_id node,
media_node_id timeSource);
status_t GetParameterWebFor(const media_node& node,
BParameterWeb** _web);
status_t StartControlPanel(const media_node& node,
BMessenger* _messenger = NULL);
status_t GetDormantNodes(dormant_node_info* _info,
int32* _inOutCount,
const media_format* _hasInput = NULL,
const media_format* _hasOutput = NULL,
const char* name = NULL,
uint64 requireKinds = 0,
uint64 denyKinds = 0);
status_t InstantiateDormantNode(
const dormant_node_info& info,
media_node* _node,
uint32 flags);
status_t InstantiateDormantNode(
const dormant_node_info& info,
media_node* _node);
status_t GetDormantNodeFor(const media_node& node,
dormant_node_info* _info);
status_t GetDormantFlavorInfoFor(
const dormant_node_info& info,
dormant_flavor_info* _flavor);
status_t GetLatencyFor(const media_node& producer,
bigtime_t* _latency);
status_t GetInitialLatencyFor(
const media_node& producer,
bigtime_t* _latency,
uint32* _flags = NULL);
status_t GetStartLatencyFor(
const media_node& timeSource,
bigtime_t* _latency);
status_t GetFileFormatsFor(
const media_node& fileInterface,
media_file_format* _formatsBuffer,
int32* _inOutNumInfos);
status_t SetRefFor(const media_node& fileInterface,
const entry_ref& file,
bool createAndTruncate,
bigtime_t* _length);
status_t GetRefFor(const media_node& node,
entry_ref* _ref,
BMimeType* mimeType = NULL);
status_t SniffRefFor(const media_node& fileInterface,
const entry_ref& ref, BMimeType* _mimeType,
float* _capability);
status_t SniffRef(const entry_ref& ref,
uint64 requireNodeKinds,
dormant_node_info* _node,
BMimeType* _mimeType = NULL);
status_t GetDormantNodeForType(const BMimeType& type,
uint64 requireNodeKinds,
dormant_node_info* _info);
status_t GetReadFileFormatsFor(
const dormant_node_info& node,
media_file_format* _readFormatsBuffer,
int32 bufferCapacity, int32* _foundCount);
status_t GetWriteFileFormatsFor(
const dormant_node_info& node,
media_file_format* _writeFormatsBuffer,
int32 bufferCapacity, int32* _foundCount);
status_t GetFormatFor(const media_output& output,
media_format* _inOutFormat,
uint32 flags = 0);
status_t GetFormatFor(const media_input& input,
media_format* _inOutFormat,
uint32 flags = 0);
status_t GetFormatFor(const media_node& node,
media_format* _inOutFormat,
float quality = B_MEDIA_ANY_QUALITY);
ssize_t GetNodeAttributesFor(const media_node& node,
media_node_attribute* outArray,
size_t inMaxCount);
media_node_id NodeIDFor(port_id sourceOrDestinationPort);
status_t GetInstancesFor(media_addon_id addon,
int32 flavor,media_node_id* _id,
int32* _inOutCount = NULL);
ssize_t AudioBufferSizeFor(int32 channelCount,
uint32 sampleFormat, float frameRate,
bus_type busType = B_UNKNOWN_BUS);
static ssize_t MediaFlags(media_flags cap, void* buffer,
size_t maxSize);
virtual void MessageReceived(BMessage* message);
virtual bool QuitRequested();
virtual BHandler* ResolveSpecifier(BMessage* message,
int32 index, BMessage* specifier,
int32 form, const char* property);
virtual status_t GetSupportedSuites(BMessage* data);
virtual ~BMediaRoster();
private:
virtual status_t _Reserved_MediaRoster_0(void*);
virtual status_t _Reserved_MediaRoster_1(void*);
virtual status_t _Reserved_MediaRoster_2(void*);
virtual status_t _Reserved_MediaRoster_3(void*);
virtual status_t _Reserved_MediaRoster_4(void*);
virtual status_t _Reserved_MediaRoster_5(void*);
virtual status_t _Reserved_MediaRoster_6(void*);
virtual status_t _Reserved_MediaRoster_7(void*);
friend class BPrivate::media::DefaultDeleter;
friend class BPrivate::media::BMediaRosterEx;
BMediaRoster();
status_t SetOutputBuffersFor(const media_source& output,
BBufferGroup* group,
bool willReclaim = false);
status_t SetRealtimeFlags(uint32 enabledFlags);
status_t GetRealtimeFlags(uint32* _enabledFlags);
static status_t ParseCommand(BMessage& reply);
status_t GetDefaultInfo(media_node_id forDefault,
BMessage& _config);
status_t SetRunningDefault(media_node_id forDefault,
const media_node& node);
private:
uint32 _reserved_media_roster_[67];
static BMediaRoster* sDefaultInstance;
};
#endif