• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2011 The WebRTC project authors. All Rights Reserved.
3  *
4  *  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.
9  */
10 
11 #ifndef PC_MEDIA_STREAM_TRACK_H_
12 #define PC_MEDIA_STREAM_TRACK_H_
13 
14 #include <string>
15 
16 #include "api/media_stream_interface.h"
17 #include "api/notifier.h"
18 
19 namespace webrtc {
20 
21 // MediaTrack implements the interface common to AudioTrackInterface and
22 // VideoTrackInterface.
23 template <typename T>
24 class MediaStreamTrack : public Notifier<T> {
25  public:
26   typedef typename T::TrackState TypedTrackState;
27 
id()28   std::string id() const override { return id_; }
state()29   MediaStreamTrackInterface::TrackState state() const override {
30     return state_;
31   }
enabled()32   bool enabled() const override { return enabled_; }
set_enabled(bool enable)33   bool set_enabled(bool enable) override {
34     bool fire_on_change = (enable != enabled_);
35     enabled_ = enable;
36     if (fire_on_change) {
37       Notifier<T>::FireOnChanged();
38     }
39     return fire_on_change;
40   }
41 
42  protected:
MediaStreamTrack(const std::string & id)43   explicit MediaStreamTrack(const std::string& id)
44       : enabled_(true), id_(id), state_(MediaStreamTrackInterface::kLive) {}
45 
set_state(MediaStreamTrackInterface::TrackState new_state)46   bool set_state(MediaStreamTrackInterface::TrackState new_state) {
47     bool fire_on_change = (state_ != new_state);
48     state_ = new_state;
49     if (fire_on_change)
50       Notifier<T>::FireOnChanged();
51     return true;
52   }
53 
54  private:
55   bool enabled_;
56   std::string id_;
57   MediaStreamTrackInterface::TrackState state_;
58 };
59 
60 }  // namespace webrtc
61 
62 #endif  // PC_MEDIA_STREAM_TRACK_H_
63