From b326a30e21605eb8b3bb4a2b7598bb30bfcd8957 Mon Sep 17 00:00:00 2001 From: beveloper Date: Tue, 1 Jul 2003 00:49:23 +0000 Subject: [PATCH] implemented muting of the master output git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3780 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp | 9 ++++----- src/add-ons/media/media-add-ons/mixer/MixerCore.cpp | 4 ++-- src/add-ons/media/media-add-ons/mixer/MixerOutput.cpp | 9 ++++++++- src/add-ons/media/media-add-ons/mixer/MixerOutput.h | 10 ++++++++++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp b/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp index 87f87208f5..4dce79598d 100644 --- a/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp +++ b/src/add-ons/media/media-add-ons/mixer/AudioMixer.cpp @@ -868,11 +868,10 @@ AudioMixer::GetParameterValue(int32 id, bigtime_t *last_change, goto err; if (PARAM_IS_MUTE(id)) { // output mute control - printf("get output mute control size %d\n", *ioSize); if (*ioSize < sizeof(int32)) goto err; *ioSize = sizeof(int32); - static_cast(value)[0] = 0; + static_cast(value)[0] = output->IsMuted(); } if (PARAM_IS_GAIN(id)) { // output gain control @@ -926,9 +925,9 @@ AudioMixer::SetParameterValue(int32 id, bigtime_t when, goto err; if (PARAM_IS_MUTE(id)) { // output mute control - printf("set output mute control size %d\n", size); if (size != sizeof(int32)) goto err; + output->SetMuted(static_cast(value)[0]); } if (PARAM_IS_GAIN(id)) { // output gain control @@ -984,10 +983,10 @@ AudioMixer::UpdateParameterWeb() group = output->MakeGroup(""); out = fCore->Output(); if (!out) { - group->MakeNullParameter(PARAM_INPUT(0), B_MEDIA_RAW_AUDIO, "Master Gain", B_WEB_BUFFER_INPUT); + group->MakeNullParameter(PARAM_INPUT(0), B_MEDIA_RAW_AUDIO, "Master Output", B_WEB_BUFFER_INPUT); group->MakeNullParameter(PARAM_FORMAT(0), B_MEDIA_RAW_AUDIO, "not connected", B_GENERIC); } else { - group->MakeNullParameter(PARAM_INPUT(0), B_MEDIA_RAW_AUDIO, "Master Gain", B_WEB_BUFFER_INPUT); + group->MakeNullParameter(PARAM_INPUT(0), B_MEDIA_RAW_AUDIO, "Master Output", B_WEB_BUFFER_INPUT); group->MakeNullParameter(PARAM_FORMAT(0), B_MEDIA_RAW_AUDIO, StringForFormat(out), B_GENERIC); group->MakeDiscreteParameter(PARAM_MUTE(0), B_MEDIA_RAW_AUDIO, "Mute", B_MUTE); group->MakeContinuousParameter(PARAM_GAIN(0), B_MEDIA_RAW_AUDIO, "Gain", B_MASTER_GAIN, "dB", -60.0, 18.0, 0.5) diff --git a/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp b/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp index d2b22e2945..aa394d6d67 100644 --- a/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp +++ b/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp @@ -436,8 +436,8 @@ MixerCore::MixThread() if (!LockWithTimeout(10000)) continue; - // no inputs, skip further processing and just send an empty buffer - if (fInputs->IsEmpty()) { + // no inputs or output muted, skip further processing and just send an empty buffer + if (fInputs->IsEmpty() || fOutput->IsMuted()) { int size = fOutput->MediaOutput().format.u.raw_audio.buffer_size; BBuffer* buf = fBufferGroup->RequestBuffer(size, 5000); if (buf) { diff --git a/src/add-ons/media/media-add-ons/mixer/MixerOutput.cpp b/src/add-ons/media/media-add-ons/mixer/MixerOutput.cpp index 8b156cd185..013f3e65cc 100644 --- a/src/add-ons/media/media-add-ons/mixer/MixerOutput.cpp +++ b/src/add-ons/media/media-add-ons/mixer/MixerOutput.cpp @@ -9,7 +9,8 @@ MixerOutput::MixerOutput(MixerCore *core, const media_output &output) fOutput(output), fOutputChannelCount(0), fOutputChannelInfo(0), - fOutputByteSwap(0) + fOutputByteSwap(0), + fMuted(false) { fix_multiaudio_format(&fOutput.format.u.raw_audio); PRINT_OUTPUT("MixerOutput::MixerOutput", fOutput); @@ -313,3 +314,9 @@ MixerOutput::GetOutputChannelSourceAt(int channel, int index, uint32 *source_des *source_gain = fOutputChannelInfo[channel].source_gain[index]; *source_designation = ChannelTypeToChannelMask(fOutputChannelInfo[channel].source_type[index]); } + +void +MixerOutput::SetMuted(bool yesno) +{ + fMuted = yesno; +} \ No newline at end of file diff --git a/src/add-ons/media/media-add-ons/mixer/MixerOutput.h b/src/add-ons/media/media-add-ons/mixer/MixerOutput.h index 3271cc16fc..52cf012251 100644 --- a/src/add-ons/media/media-add-ons/mixer/MixerOutput.h +++ b/src/add-ons/media/media-add-ons/mixer/MixerOutput.h @@ -30,6 +30,9 @@ public: void SetOutputChannelSourceGain(int channel, uint32 source_designation, float source_gain); float GetOutputChannelSourceGain(int channel, uint32 source_designation); void GetOutputChannelSourceAt(int channel, int index, uint32 *source_designation, float *source_gain); + + void SetMuted(bool yesno); + bool IsMuted(); // only for use by MixerCore void GetMixerChannelInfo(int channel, int index, int *type, float *gain); @@ -55,6 +58,8 @@ private: uint32 fOutputChannelCount; output_chan_info *fOutputChannelInfo; //array ByteSwap *fOutputByteSwap; + + bool fMuted; }; inline uint32 MixerOutput::GetOutputChannelCount() @@ -90,4 +95,9 @@ inline void MixerOutput::AdjustByteOrder(BBuffer *buffer) fOutputByteSwap->Swap(buffer->Data(), buffer->SizeUsed()); } +inline bool MixerOutput::IsMuted() +{ + return fMuted; +} + #endif