| Index: webrtc/media/engine/webrtcvoiceengine.cc
 | 
| diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
 | 
| index eb9b4bb3569ce01f175d1f80988f0aefd21a4820..2ddf67dd3a6d76d70236b8562cf2d5d8208bbd70 100644
 | 
| --- a/webrtc/media/engine/webrtcvoiceengine.cc
 | 
| +++ b/webrtc/media/engine/webrtcvoiceengine.cc
 | 
| @@ -1341,6 +1341,11 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
 | 
|      stream_->SetSink(std::move(sink));
 | 
|    }
 | 
|  
 | 
| +  void SetOutputVolume(double volume) {
 | 
| +    RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
 | 
| +    stream_->SetGain(volume);
 | 
| +  }
 | 
| +
 | 
|   private:
 | 
|    void RecreateAudioReceiveStream(
 | 
|        uint32_t local_ssrc,
 | 
| @@ -2270,19 +2275,14 @@ bool WebRtcVoiceMediaChannel::SetOutputVolume(uint32_t ssrc, double volume) {
 | 
|      }
 | 
|      ssrc = static_cast<uint32_t>(default_recv_ssrc_);
 | 
|    }
 | 
| -  int ch_id = GetReceiveChannelId(ssrc);
 | 
| -  if (ch_id < 0) {
 | 
| -    LOG(LS_WARNING) << "Cannot find channel for ssrc:" << ssrc;
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  if (-1 == engine()->voe()->volume()->SetChannelOutputVolumeScaling(ch_id,
 | 
| -                                                                     volume)) {
 | 
| -    LOG_RTCERR2(SetChannelOutputVolumeScaling, ch_id, volume);
 | 
| +  const auto it = recv_streams_.find(ssrc);
 | 
| +  if (it == recv_streams_.end()) {
 | 
| +    LOG(LS_WARNING) << "SetOutputVolume: no recv stream" << ssrc;
 | 
|      return false;
 | 
|    }
 | 
| -  LOG(LS_INFO) << "SetOutputVolume to " << volume
 | 
| -               << " for channel " << ch_id << " and ssrc " << ssrc;
 | 
| +  it->second->SetOutputVolume(volume);
 | 
| +  LOG(LS_INFO) << "SetOutputVolume() to " << volume
 | 
| +               << " for recv stream with ssrc " << ssrc;
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| 
 |