implemented muting of the master output
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@3780 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -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<int32 *>(value)[0] = 0;
|
||||
static_cast<int32 *>(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<const int32 *>(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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user