1/*
2 * Copyright 2010, Haiku. All rights reserved.
3 * Distributed under the terms of the MIT license.
4 *
5 * Authors:
6 *		Marcus Overhagen
7 *		Jérôme Duval
8 */
9/*
10 * Copyright 2002, Marcus Overhagen. All rights reserved.
11 * Distributed under the terms of the MIT License.
12 */
13#ifndef _DEFAULT_MANAGER_H
14#define _DEFAULT_MANAGER_H
15
16
17/*!	Manager for defaults (audio and video, input and output)
18*/
19
20
21#include "DataExchange.h"
22
23#include <Autolock.h>
24#include <MediaRoster.h>
25#include <Message.h>
26
27class NodeManager;
28
29
30class DefaultManager {
31public:
32								DefaultManager();
33								~DefaultManager();
34
35			status_t 			LoadState();
36			status_t			SaveState(NodeManager *node_manager);
37
38			status_t			Set(media_node_id nodeid,
39									const char *input_name, int32 input_id,
40									node_type type);
41			status_t			Get(media_node_id *nodeid, char *input_name,
42									int32 *input_id, node_type type);
43			status_t			Rescan();
44
45			void				Dump();
46
47			void 				CleanupTeam(team_id team);
48
49private:
50			static int32		rescan_thread(void *arg);
51			void				_RescanThread();
52
53			void				_FindPhysical(volatile media_node_id *id,
54									uint32 default_type, bool isInput,
55									media_type type);
56			void				_FindAudioMixer();
57			void				_FindTimeSource();
58
59			status_t			_ConnectMixerToOutput();
60
61private:
62			volatile bool 		fMixerConnected;
63			volatile media_node_id fPhysicalVideoOut;
64			volatile media_node_id fPhysicalVideoIn;
65			volatile media_node_id fPhysicalAudioOut;
66			volatile media_node_id fPhysicalAudioIn;
67			volatile media_node_id fSystemTimeSource;
68			volatile media_node_id fTimeSource;
69			volatile media_node_id fAudioMixer;
70			volatile int32 		fPhysicalAudioOutInputID;
71			char fPhysicalAudioOutInputName[B_MEDIA_NAME_LENGTH];
72
73			BList				fMsgList;
74
75			uint32				fBeginHeader[3];
76			uint32				fEndHeader[3];
77			thread_id			fRescanThread;
78			int32 				fRescanRequested;
79			BLocker				fRescanLock;
80			BMediaRoster*		fRoster;
81};
82
83#endif // _DEFAULT_MANAGER_H
84