xref: /haiku/src/apps/mediaplayer/media_node_framework/NodeManager.h (revision bafcab9265d78ede53aa2d22cce1d3f938fccf93)
1 /*
2  * Copyright (c) 2000-2008, Ingo Weinhold <ingo_weinhold@gmx.de>,
3  * Copyright (c) 2000-2008, Stephan Aßmus <superstippi@gmx.de>,
4  * All Rights Reserved. Distributed under the terms of the MIT license.
5  */
6 #ifndef NODE_MANAGER_H
7 #define NODE_MANAGER_H
8 
9 
10 #include <MediaNode.h>
11 
12 #include "PlaybackManager.h"
13 
14 
15 class BMediaRoster;
16 class AudioProducer;
17 class VideoTarget;
18 class VideoProducer;
19 class VideoConsumer;
20 class AudioSupplier;
21 class VideoSupplier;
22 
23 
24 class NodeManager : public PlaybackManager {
25 public:
26 								NodeManager();
27 	virtual						~NodeManager();
28 
29 	// must be implemented in derived classes
30 	virtual	VideoTarget*		CreateVideoTarget() = 0;
31 	virtual	VideoSupplier*		CreateVideoSupplier() = 0;
32 	virtual	AudioSupplier*		CreateAudioSupplier() = 0;
33 
34 	// NodeManager
35 	enum {
36 		AUDIO_AND_VIDEO	= 0,
37 		VIDEO_ONLY,
38 		AUDIO_ONLY
39 	};
40 
41 			status_t			Init(BRect videoBounds, float videoFrameRate,
42 									color_space preferredVideoFormat,
43 									float audioFrameRate, uint32 audioChannels,
44 									int32 loopingMode, bool loopingEnabled,
45 									float speed, uint32 enabledNodes,
46 									bool useOverlays);
47 			status_t			InitCheck();
48 								// only call this if the
49 								// media_server has died!
50 			status_t			CleanupNodes();
51 
52 			status_t			FormatChanged(BRect videoBounds,
53 									float videoFrameRate,
54 									color_space preferredVideoFormat,
55 									float audioFrameRate, uint32 audioChannels,
56 									uint32 enabledNodes,
57 									bool useOverlays,
58 									bool force = false);
59 
60 	virtual	void				SetPlayMode(int32 mode,
61 									bool continuePlaying = true);
62 
63 	virtual	bigtime_t			RealTimeForTime(bigtime_t time) const;
64 	virtual	bigtime_t			TimeForRealTime(bigtime_t time) const;
65 
66 	virtual	void				SetCurrentAudioTime(bigtime_t time);
67 
68 			void				SetVideoBounds(BRect bounds);
69 	virtual	BRect				VideoBounds() const;
70 
71 			void				SetVideoTarget(VideoTarget* vcTarget);
72 			VideoTarget*		GetVideoTarget() const;
73 
74 	virtual	void				SetVolume(float percent);
75 
76 			void				SetPeakListener(BHandler* handler);
77 
78  private:
79 			status_t			_SetUpNodes(color_space preferredVideoFormat,
80 									uint32 enabledNodes, bool useOverlays,
81 									float audioFrameRate,
82 									uint32 audioChannels);
83 			status_t			_SetUpVideoNodes(
84 									color_space preferredVideoFormat,
85 									bool useOverlays);
86 			status_t			_SetUpAudioNodes(float audioFrameRate,
87 									uint32 audioChannels);
88 			status_t			_TearDownNodes(bool disconnect = true);
89 			status_t			_StartNodes();
90 			void				_StopNodes();
91 
92 private:
93 	struct Connection {
94 			Connection();
95 
96 			media_node			producer;
97 			media_node			consumer;
98 			media_source		source;
99 			media_destination	destination;
100 			media_format		format;
101 			bool				connected;
102 	};
103 
104 private:
105 			BMediaRoster*		fMediaRoster;
106 
107 			// media nodes
108 			AudioProducer*		fAudioProducer;
109 			VideoConsumer*		fVideoConsumer;
110 			VideoProducer*		fVideoProducer;
111 			media_node			fTimeSource;
112 
113 			Connection			fAudioConnection;
114 			Connection			fVideoConnection;
115 
116 			bigtime_t			fPerformanceTimeBase;
117 
118 			status_t			fStatus;
119 			//
120 			VideoTarget*		fVideoTarget;
121 			AudioSupplier*		fAudioSupplier;
122 			VideoSupplier*		fVideoSupplier;
123 			BRect				fVideoBounds;
124 
125 			BHandler*			fPeakListener;
126 };
127 
128 
129 #endif	// NODE_MANAGER_H
130