blob: 890600d93b0b51a9bdb12b15a54506084f1ba456 [file] [log] [blame]
Taylor Brandstettercf846ad2015-12-10 15:52:02 -08001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2015 The WebRTC project authors. All Rights Reserved.
Taylor Brandstettercf846ad2015-12-10 15:52:02 -08003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
Taylor Brandstettercf846ad2015-12-10 15:52:02 -08009 */
10
Steve Anton10542f22019-01-11 09:11:00 -080011#ifndef PC_MEDIA_STREAM_OBSERVER_H_
12#define PC_MEDIA_STREAM_OBSERVER_H_
Taylor Brandstettercf846ad2015-12-10 15:52:02 -080013
Steve Anton10542f22019-01-11 09:11:00 -080014#include "api/media_stream_interface.h"
Mirko Bonadeid9708072019-01-25 20:26:48 +010015#include "api/scoped_refptr.h"
Artem Titove41c4332018-07-25 15:04:28 +020016#include "rtc_base/third_party/sigslot/sigslot.h"
deadbeefeb459812015-12-15 19:24:43 -080017
18namespace webrtc {
19
20// Helper class which will listen for changes to a stream and emit the
21// corresponding signals.
22class MediaStreamObserver : public ObserverInterface {
23 public:
24 explicit MediaStreamObserver(MediaStreamInterface* stream);
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +020025 ~MediaStreamObserver() override;
deadbeefeb459812015-12-15 19:24:43 -080026
27 const MediaStreamInterface* stream() const { return stream_; }
28
29 void OnChanged() override;
30
31 sigslot::signal2<AudioTrackInterface*, MediaStreamInterface*>
32 SignalAudioTrackAdded;
33 sigslot::signal2<AudioTrackInterface*, MediaStreamInterface*>
34 SignalAudioTrackRemoved;
35 sigslot::signal2<VideoTrackInterface*, MediaStreamInterface*>
36 SignalVideoTrackAdded;
37 sigslot::signal2<VideoTrackInterface*, MediaStreamInterface*>
38 SignalVideoTrackRemoved;
39
40 private:
41 rtc::scoped_refptr<MediaStreamInterface> stream_;
42 AudioTrackVector cached_audio_tracks_;
43 VideoTrackVector cached_video_tracks_;
44};
45
46} // namespace webrtc
47
Steve Anton10542f22019-01-11 09:11:00 -080048#endif // PC_MEDIA_STREAM_OBSERVER_H_