audio: implement mute on hdmi multichannel
On direct output streams the audio HAL must implement
the volume function. In the case of HDMI the only function
required is to mute audio when volume is 0 as volume
is defined as fixed on digital output streams.
Bug 8541062
Change-Id: Ia1342f6ffb7b7c95c7c386e3e2ee5243fe65051b
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 3782c32..55ab055 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1380,6 +1380,12 @@
static int out_set_volume(struct audio_stream_out *stream, float left,
float right)
{
+ struct stream_out *out = (struct stream_out *)stream;
+ if (out->usecase == USECASE_AUDIO_PLAYBACK_MULTI_CH) {
+ /* only take left channel into account: the API is for stereo anyway */
+ out->muted = (left == 0.0f);
+ return 0;
+ }
return -ENOSYS;
}
@@ -1402,6 +1408,8 @@
}
if (out->pcm) {
+ if (out->muted)
+ memset((void *)buffer, 0, bytes);
//ALOGV("%s: writing buffer (%d bytes) to pcm device", __func__, bytes);
ret = pcm_write(out->pcm, (void *)buffer, bytes);
}
@@ -1712,6 +1720,7 @@
out->dev = adev;
out->standby = 1;
+ /* out->muted = false; by calloc() */
config->format = out->stream.common.get_format(&out->stream.common);
config->channel_mask = out->stream.common.get_channels(&out->stream.common);