⛏️ index : haiku.git

/*
 * Copyright 2007 Haiku Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */
#ifndef _MIXER_SETTINGS_H
#define _MIXER_SETTINGS_H


#include <Message.h>
#include <Path.h>

class BLocker;
class MixerInput;
class MixerOutput;


#define MAX_INPUT_SETTINGS	50

class MixerSettings {
	public:
										MixerSettings();
										~MixerSettings();
	
		void							SetSettingsFile(const char *file);

		bool							AttenuateOutput();
		void							SetAttenuateOutput(bool yesno);

		bool							UseBalanceControl();
		void							SetUseBalanceControl(bool yesno);

		bool							AllowOutputChannelRemapping();
		void							SetAllowOutputChannelRemapping(bool yesno);

		bool							AllowInputChannelRemapping();
		void							SetAllowInputChannelRemapping(bool yesno);

		int								InputGainControls();
		void							SetInputGainControls(int value);

		int								ResamplingAlgorithm();
		void							SetResamplingAlgorithm(int value);

		bool							RefuseOutputFormatChange();
		void							SetRefuseOutputFormatChange(bool yesno);

		bool							RefuseInputFormatChange();
		void							SetRefuseInputFormatChange(bool yesno);

		void							SaveConnectionSettings(MixerInput *input);
		void							LoadConnectionSettings(MixerInput *input);

		void							SaveConnectionSettings(MixerOutput *output);
		void							LoadConnectionSettings(MixerOutput *output);
	
	protected:
		void							StartDeferredSave();
		void							StopDeferredSave();
	
		void							Save();
		void							Load();

		static int32 					_save_thread_(void *arg);
		void 							SaveThread();

		BLocker							*fLocker;
		BPath							*fSettingsFile;
		volatile bool					fSettingsDirty;
		volatile bigtime_t				fSettingsLastChange;
		volatile thread_id				fSaveThread;
		volatile sem_id					fSaveThreadWaitSem;
		volatile bool					fSaveThreadRunning;

		struct settings {
			bool	AttenuateOutput;
			bool	UseBalanceControl;
			bool	AllowOutputChannelRemapping;
			bool	AllowInputChannelRemapping;
			int		InputGainControls;
			int		ResamplingAlgorithm;
			bool	RefuseOutputFormatChange;
			bool	RefuseInputFormatChange;
		};
	
		volatile settings				fSettings;

		BMessage						fOutputSetting;
		BMessage						fInputSetting[MAX_INPUT_SETTINGS];
};

#endif	// _MIXER_SETTINGS_H