Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: content/renderer/media/remote_media_stream_track_adapter.cc

Issue 2883023002: WebRtcMediaStreamTrackAdapter, maps 1 webrtc and 1 blink track (Closed)
Patch Set: Addressed nits Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/media/remote_media_stream_track_adapter.h"
6
7 #include "content/renderer/media/media_stream_audio_source.h"
8 #include "content/renderer/media/media_stream_video_track.h"
9 #include "content/renderer/media/webrtc/media_stream_remote_video_source.h"
10 #include "content/renderer/media/webrtc/peer_connection_remote_audio_source.h"
11 #include "content/renderer/media/webrtc/track_observer.h"
12
13 namespace content {
14
15 RemoteVideoTrackAdapter::RemoteVideoTrackAdapter(
16 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
17 webrtc::VideoTrackInterface* webrtc_track)
18 : RemoteMediaStreamTrackAdapter(main_thread, webrtc_track) {
19 std::unique_ptr<TrackObserver> observer(
20 new TrackObserver(main_thread, observed_track().get()));
21 // Here, we use base::Unretained() to avoid a circular reference.
22 web_initialize_ = base::Bind(
23 &RemoteVideoTrackAdapter::InitializeWebVideoTrack, base::Unretained(this),
24 base::Passed(&observer), observed_track()->enabled());
25 }
26
27 RemoteVideoTrackAdapter::~RemoteVideoTrackAdapter() {
28 DCHECK(main_thread_->BelongsToCurrentThread());
29 if (initialized()) {
30 static_cast<MediaStreamRemoteVideoSource*>(
31 web_track()->Source().GetExtraData())
32 ->OnSourceTerminated();
33 }
34 }
35
36 void RemoteVideoTrackAdapter::InitializeWebVideoTrack(
37 std::unique_ptr<TrackObserver> observer,
38 bool enabled) {
39 DCHECK(main_thread_->BelongsToCurrentThread());
40 std::unique_ptr<MediaStreamRemoteVideoSource> video_source(
41 new MediaStreamRemoteVideoSource(std::move(observer)));
42 InitializeWebTrack(blink::WebMediaStreamSource::kTypeVideo);
43 web_track()->Source().SetExtraData(video_source.get());
44 MediaStreamVideoTrack* media_stream_track = new MediaStreamVideoTrack(
45 video_source.release(), MediaStreamVideoSource::ConstraintsCallback(),
46 enabled);
47 web_track()->SetTrackData(media_stream_track);
48 }
49
50 RemoteAudioTrackAdapter::RemoteAudioTrackAdapter(
51 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
52 webrtc::AudioTrackInterface* webrtc_track)
53 : RemoteMediaStreamTrackAdapter(main_thread, webrtc_track),
54 #if DCHECK_IS_ON()
55 unregistered_(false),
56 #endif
57 state_(observed_track()->state()) {
58 // TODO(tommi): Use TrackObserver instead.
59 observed_track()->RegisterObserver(this);
60 // Here, we use base::Unretained() to avoid a circular reference.
61 web_initialize_ =
62 base::Bind(&RemoteAudioTrackAdapter::InitializeWebAudioTrack,
63 base::Unretained(this));
64 }
65
66 RemoteAudioTrackAdapter::~RemoteAudioTrackAdapter() {
67 #if DCHECK_IS_ON()
68 DCHECK(unregistered_);
69 #endif
70 }
71
72 void RemoteAudioTrackAdapter::Unregister() {
73 #if DCHECK_IS_ON()
74 DCHECK(!unregistered_);
75 unregistered_ = true;
76 #endif
77 observed_track()->UnregisterObserver(this);
78 }
79
80 void RemoteAudioTrackAdapter::InitializeWebAudioTrack() {
81 InitializeWebTrack(blink::WebMediaStreamSource::kTypeAudio);
82
83 MediaStreamAudioSource* const source =
84 new PeerConnectionRemoteAudioSource(observed_track().get());
85 web_track()->Source().SetExtraData(source); // Takes ownership.
86 source->ConnectToTrack(*(web_track()));
87 }
88
89 void RemoteAudioTrackAdapter::OnChanged() {
90 main_thread_->PostTask(
91 FROM_HERE, base::Bind(&RemoteAudioTrackAdapter::OnChangedOnMainThread,
92 this, observed_track()->state()));
93 }
94
95 void RemoteAudioTrackAdapter::OnChangedOnMainThread(
96 webrtc::MediaStreamTrackInterface::TrackState state) {
97 DCHECK(main_thread_->BelongsToCurrentThread());
98
99 if (state == state_ || !initialized())
100 return;
101
102 state_ = state;
103
104 switch (state) {
105 case webrtc::MediaStreamTrackInterface::kLive:
106 web_track()->Source().SetReadyState(
107 blink::WebMediaStreamSource::kReadyStateLive);
108 break;
109 case webrtc::MediaStreamTrackInterface::kEnded:
110 web_track()->Source().SetReadyState(
111 blink::WebMediaStreamSource::kReadyStateEnded);
112 break;
113 default:
114 NOTREACHED();
115 break;
116 }
117 }
118
119 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698