⛏️ index : haiku.git

/*
 * Copyright 2010, Haiku. All rights reserved.
 * Distributed under the terms of the MIT license.
 *
 * Authors:
 *		Marcus Overhagen
 *		JΓ©rΓ΄me Duval
 */
/*
 * Copyright 2002, Marcus Overhagen. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _DEFAULT_MANAGER_H
#define _DEFAULT_MANAGER_H


/*!	Manager for defaults (audio and video, input and output)
*/


#include "DataExchange.h"

#include <Autolock.h>
#include <MediaRoster.h>
#include <Message.h>

class NodeManager;


class DefaultManager {
public:
								DefaultManager();
								~DefaultManager();

			status_t 			LoadState();
			status_t			SaveState(NodeManager *node_manager);

			status_t			Set(media_node_id nodeid,
									const char *input_name, int32 input_id,
									node_type type);
			status_t			Get(media_node_id *nodeid, char *input_name,
									int32 *input_id, node_type type);
			status_t			Rescan();

			void				Dump();

			void 				CleanupTeam(team_id team);

private:
			static int32		rescan_thread(void *arg);
			void				_RescanThread();

			void				_FindPhysical(volatile media_node_id *id,
									uint32 default_type, bool isInput,
									media_type type);
			void				_FindAudioMixer();
			void				_FindTimeSource();

			status_t			_ConnectMixerToOutput();

private:
			volatile bool 		fMixerConnected;
			volatile media_node_id fPhysicalVideoOut;
			volatile media_node_id fPhysicalVideoIn;
			volatile media_node_id fPhysicalAudioOut;
			volatile media_node_id fPhysicalAudioIn;
			volatile media_node_id fSystemTimeSource;
			volatile media_node_id fTimeSource;
			volatile media_node_id fAudioMixer;
			volatile int32 		fPhysicalAudioOutInputID;
			char fPhysicalAudioOutInputName[B_MEDIA_NAME_LENGTH];

			BList				fMsgList;

			uint32				fBeginHeader[3];
			uint32				fEndHeader[3];
			thread_id			fRescanThread;
			int32 				fRescanRequested;
			BLocker				fRescanLock;
			BMediaRoster*		fRoster;
};

#endif // _DEFAULT_MANAGER_H