summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/libjingle/source/talk/session/media/call.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/libjingle/source/talk/session/media/call.h')
-rw-r--r--chromium/third_party/libjingle/source/talk/session/media/call.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/chromium/third_party/libjingle/source/talk/session/media/call.h b/chromium/third_party/libjingle/source/talk/session/media/call.h
index efb4ea396f4..063447a7f73 100644
--- a/chromium/third_party/libjingle/source/talk/session/media/call.h
+++ b/chromium/third_party/libjingle/source/talk/session/media/call.h
@@ -48,6 +48,8 @@
namespace cricket {
+struct AudioInfo;
+class Call;
class MediaSessionClient;
class BaseChannel;
class VoiceChannel;
@@ -58,6 +60,26 @@ class DataChannel;
struct CallOptions : public MediaSessionOptions {
};
+// CurrentSpeakerMonitor used to have a dependency on Call. To remove this
+// dependency, we create AudioSourceContext. CurrentSpeakerMonitor depends on
+// AudioSourceContext.
+// AudioSourceProxy acts as a proxy so that when SignalAudioMonitor
+// in Call is triggered, SignalAudioMonitor in AudioSourceContext is triggered.
+// Likewise, when OnMediaStreamsUpdate in Call is triggered,
+// OnMediaStreamsUpdate in AudioSourceContext is triggered.
+class AudioSourceProxy: public AudioSourceContext, public sigslot::has_slots<> {
+ public:
+ explicit AudioSourceProxy(Call* call);
+
+ private:
+ void OnAudioMonitor(Call* call, const AudioInfo& info);
+ void OnMediaStreamsUpdate(Call* call, cricket::Session*,
+ const cricket::MediaStreams&, const cricket::MediaStreams&);
+
+ AudioSourceContext* audio_source_context_;
+ Call* call_;
+};
+
class Call : public talk_base::MessageHandler, public sigslot::has_slots<> {
public:
explicit Call(MediaSessionClient* session_client);
@@ -167,6 +189,8 @@ class Call : public talk_base::MessageHandler, public sigslot::has_slots<> {
const ReceiveDataParams&,
const talk_base::Buffer&> SignalDataReceived;
+ AudioSourceProxy* GetAudioSourceProxy();
+
private:
void OnMessage(talk_base::Message* message);
void OnSessionState(BaseSession* base_session, BaseSession::State state);
@@ -276,6 +300,8 @@ class Call : public talk_base::MessageHandler, public sigslot::has_slots<> {
VoiceMediaInfo last_voice_media_info_;
+ talk_base::scoped_ptr<AudioSourceProxy> audio_source_proxy_;
+
friend class MediaSessionClient;
};