Index: webrtc/media/engine/webrtcvoiceengine.h |
diff --git a/webrtc/media/engine/webrtcvoiceengine.h b/webrtc/media/engine/webrtcvoiceengine.h |
index 0eeef482abfc099c1a82d4a5a5665726ef9ea32f..ac3c989ee6ef6a8331d701ae15f23dcbb89b2637 100644 |
--- a/webrtc/media/engine/webrtcvoiceengine.h |
+++ b/webrtc/media/engine/webrtcvoiceengine.h |
@@ -188,6 +188,7 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel, |
bool RemoveRecvStream(uint32_t ssrc) override; |
bool GetActiveStreams(AudioInfo::StreamList* actives) override; |
int GetOutputLevel() override; |
+ // SSRC=0 will apply the new volume to current and future unsignaled streams. |
bool SetOutputVolume(uint32_t ssrc, double volume) override; |
bool CanInsertDtmf() override; |
@@ -203,6 +204,8 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel, |
void OnTransportOverheadChanged(int transport_overhead_per_packet) override; |
bool GetStats(VoiceMediaInfo* info) override; |
+ // SSRC=0 will set the audio sink on the latest unsignaled stream, future or |
+ // current. Only one stream at a time will use the sink. |
void SetRawAudioSink( |
uint32_t ssrc, |
std::unique_ptr<webrtc::AudioSinkInterface> sink) override; |
@@ -238,12 +241,12 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel, |
void ChangePlayout(bool playout); |
int CreateVoEChannel(); |
bool DeleteVoEChannel(int channel); |
- bool IsDefaultRecvStream(uint32_t ssrc) { |
- return default_recv_ssrc_ == static_cast<int64_t>(ssrc); |
- } |
bool SetMaxSendBitrate(int bps); |
bool ValidateRtpParameters(const webrtc::RtpParameters& parameters); |
void SetupRecording(); |
+ // Check if 'ssrc' is an unsignaled stream, and if so mark it as not being |
+ // unsignaled anymore (i.e. it is now removed, or signaled), and return true. |
+ bool MaybeDeregisterUnsignaledRecvStream(uint32_t ssrc); |
rtc::ThreadChecker worker_thread_checker_; |
@@ -262,11 +265,12 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel, |
webrtc::Call* const call_ = nullptr; |
webrtc::Call::Config::BitrateConfig bitrate_config_; |
- // SSRC of unsignalled receive stream, or -1 if there isn't one. |
- int64_t default_recv_ssrc_ = -1; |
- // Volume for unsignalled stream, which may be set before the stream exists. |
+ // Queue of unsignaled SSRCs; oldest at the beginning. |
+ std::vector<uint32_t> unsignaled_recv_ssrcs_; |
+ |
+ // Volume for unsignaled streams, which may be set before the stream exists. |
double default_recv_volume_ = 1.0; |
- // Sink for unsignalled stream, which may be set before the stream exists. |
+ // Sink for latest unsignaled stream - may be set before the stream exists. |
std::unique_ptr<webrtc::AudioSinkInterface> default_sink_; |
// Default SSRC to use for RTCP receiver reports in case of no signaled |
// send streams. See: https://code.google.com/p/webrtc/issues/detail?id=4740 |