/* * Copyright (c) 2000-2008, Ingo Weinhold , * Copyright (c) 2000-2008, Stephan Aßmus , * All Rights Reserved. Distributed under the terms of the MIT license. */ #ifndef NODE_MANAGER_H #define NODE_MANAGER_H #include #include "PlaybackManager.h" class BMediaRoster; class AudioProducer; class VideoTarget; class VideoProducer; class VideoConsumer; class AudioSupplier; class VideoSupplier; class NodeManager : public PlaybackManager { public: NodeManager(); virtual ~NodeManager(); // must be implemented in derived classes virtual VideoTarget* CreateVideoTarget() = 0; virtual VideoSupplier* CreateVideoSupplier() = 0; virtual AudioSupplier* CreateAudioSupplier() = 0; // NodeManager enum { AUDIO_AND_VIDEO = 0, VIDEO_ONLY, AUDIO_ONLY }; status_t Init(BRect videoBounds, float videoFrameRate, color_space preferredVideoFormat, float audioFrameRate, uint32 audioChannels, int32 loopingMode, bool loopingEnabled, float speed, uint32 enabledNodes, bool useOverlays); status_t InitCheck(); // only call this if the // media_server has died! status_t CleanupNodes(); status_t FormatChanged(BRect videoBounds, float videoFrameRate, color_space preferredVideoFormat, float audioFrameRate, uint32 audioChannels, uint32 enabledNodes, bool useOverlays, bool force = false); virtual void SetPlayMode(int32 mode, bool continuePlaying = true); virtual bigtime_t RealTimeForTime(bigtime_t time) const; virtual bigtime_t TimeForRealTime(bigtime_t time) const; virtual void SetCurrentAudioTime(bigtime_t time); void SetVideoBounds(BRect bounds); virtual BRect VideoBounds() const; void SetVideoTarget(VideoTarget* vcTarget); VideoTarget* GetVideoTarget() const; virtual void SetVolume(float percent); void SetPeakListener(BHandler* handler); private: status_t _SetUpNodes(color_space preferredVideoFormat, uint32 enabledNodes, bool useOverlays, float audioFrameRate, uint32 audioChannels); status_t _SetUpVideoNodes( color_space preferredVideoFormat, bool useOverlays); status_t _SetUpAudioNodes(float audioFrameRate, uint32 audioChannels); status_t _TearDownNodes(bool disconnect = true); status_t _StartNodes(); void _StopNodes(); private: struct Connection { Connection(); media_node producer; media_node consumer; media_source source; media_destination destination; media_format format; bool connected; }; private: BMediaRoster* fMediaRoster; // media nodes AudioProducer* fAudioProducer; VideoConsumer* fVideoConsumer; VideoProducer* fVideoProducer; media_node fTimeSource; Connection fAudioConnection; Connection fVideoConnection; bigtime_t fPerformanceTimeBase; status_t fStatus; // VideoTarget* fVideoTarget; AudioSupplier* fAudioSupplier; VideoSupplier* fVideoSupplier; BRect fVideoBounds; BHandler* fPeakListener; }; #endif // NODE_MANAGER_H