 Chromium Code Reviews
 Chromium Code Reviews Issue 1812543003:
  Allow muting/unmuting audio through media track API  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@blink-sb-tracks6
    
  
    Issue 1812543003:
  Allow muting/unmuting audio through media track API  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@blink-sb-tracks6| Index: media/renderers/renderer_impl.cc | 
| diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc | 
| index 38f49d4b66099adbb753cd1cccf67e8d79524e2d..4ca9d59eaf3bef4991579f7ce0c8487efd9ce68a 100644 | 
| --- a/media/renderers/renderer_impl.cc | 
| +++ b/media/renderers/renderer_impl.cc | 
| @@ -205,8 +205,16 @@ void RendererImpl::SetVolume(float volume) { | 
| DVLOG(1) << __FUNCTION__; | 
| DCHECK(task_runner_->BelongsToCurrentThread()); | 
| - if (audio_renderer_) | 
| - audio_renderer_->SetVolume(volume); | 
| + audio_volume_ = volume; | 
| + if (!audio_renderer_) | 
| + return; | 
| + | 
| + if (audio_muted_) { | 
| + DVLOG(1) << "SetVolume ignored since audio is muted"; | 
| 
wolenetz
2016/04/14 20:43:39
nit: s/muted/muted because audio stream is enabled
 
servolk
2016/04/15 02:23:25
Done.
 | 
| + return; | 
| + } | 
| + | 
| + audio_renderer_->SetVolume(volume); | 
| } | 
| base::TimeDelta RendererImpl::GetMediaTime() { | 
| @@ -225,6 +233,51 @@ bool RendererImpl::HasVideo() { | 
| return video_renderer_ != NULL; | 
| } | 
| +void RendererImpl::OnEnabledAudioStreamsChanged( | 
| + const std::vector<const DemuxerStream*>& enabledAudioStreams) { | 
| + DCHECK(task_runner_->BelongsToCurrentThread()); | 
| + DemuxerStream* audio_stream = | 
| + demuxer_stream_provider_->GetStream(DemuxerStream::AUDIO); | 
| + | 
| + bool audio_stream_enabled = false; | 
| + for (const DemuxerStream* demuxer_stream : enabledAudioStreams) { | 
| + DCHECK_EQ(demuxer_stream->type(), DemuxerStream::AUDIO); | 
| 
wolenetz
2016/04/14 20:43:39
aside: this DCHECK (and similar for video, below)
 
servolk
2016/04/15 02:23:25
Acknowledged.
 | 
| + if (demuxer_stream == audio_stream) | 
| + audio_stream_enabled = true; | 
| 
wolenetz
2016/04/14 20:43:39
I'm not entirely clear how this could ever not be
 
servolk
2016/04/15 02:23:25
Right, for now this check is always going to succe
 
wolenetz
2016/04/15 22:47:18
Ack, though it's still not DCHECK + set. Please up
 
servolk
2016/04/15 23:26:31
Done.
 | 
| + } | 
| + | 
| + // TODO(servolk): Need to find a way to completely disable audio (i.e. stop | 
| 
wolenetz
2016/04/14 20:43:39
nit: TODO+wolenetz
 
servolk
2016/04/15 02:23:25
Done.
 | 
| + // audio decoder and switch video to wall clock) when audio stream is | 
| + // disabled, but for now just set volume to 0. crbug.com/599709 | 
| + if (audio_renderer_) { | 
| + if (audio_stream_enabled) { | 
| 
wolenetz
2016/04/14 20:43:39
nit: can a track be enabled while it's already ena
 
servolk
2016/04/15 02:23:25
It should never happen, since blink sends this not
 
wolenetz
2016/04/15 22:47:18
Ack, though now (patch set 35) only one of the two
 
servolk
2016/04/15 23:26:31
Yes, I believe this is the best course of action f
 
wolenetz
2016/04/15 23:52:17
Acknowledged. That makes sense. Thanks for explain
 | 
| + DVLOG(3) << __FUNCTION__ << " enabled audio. SetVolume=" << audio_volume_; | 
| + audio_muted_ = false; | 
| + audio_renderer_->SetVolume(audio_volume_); | 
| + } else { | 
| + DVLOG(3) << __FUNCTION__ << " disabled audio. SetVolume=0"; | 
| + audio_muted_ = true; | 
| + audio_renderer_->SetVolume(0); | 
| + } | 
| + } | 
| +} | 
| + | 
| +void RendererImpl::OnSelectedVideoStreamChanged( | 
| + const DemuxerStream* selectedVideoStream) { | 
| + DCHECK(task_runner_->BelongsToCurrentThread()); | 
| + DemuxerStream* video_stream = | 
| + demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO); | 
| + if (selectedVideoStream) { | 
| + DVLOG(3) << __FUNCTION__ << " selectedVideoStream=" << selectedVideoStream; | 
| + DCHECK_EQ(selectedVideoStream->type(), DemuxerStream::VIDEO); | 
| + CHECK_EQ(selectedVideoStream, video_stream); | 
| + // TODO(servolk): Need to find a way to stop video decoding/rendering when | 
| 
wolenetz
2016/04/14 20:43:39
nit: move this TODO to the else clause, and please
 
servolk
2016/04/15 02:23:25
Done.
 | 
| + // the video stream is deselected. crbug.com/599709 | 
| + } else { | 
| + DVLOG(3) << __FUNCTION__ << " selectedVideoStream=none"; | 
| + } | 
| +} | 
| + | 
| void RendererImpl::DisableUnderflowForTesting() { | 
| DVLOG(1) << __FUNCTION__; | 
| DCHECK(task_runner_->BelongsToCurrentThread()); |