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

Side by Side Diff: content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc

Issue 2887403003: WebRtcMediaStreamTrackMap added (Closed)
Patch Set: EXPECT_FALSE( instead of EXPECT_EQ(false fixing android compile error 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/webrtc/webrtc_media_stream_track_adapter_map.h"
6
7 #include <utility>
8
9 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
10
11 namespace content {
12
13 namespace {
14
15 bool RemoveAndDisposeTrackAdapter(
16 std::map<std::string, scoped_refptr<WebRtcMediaStreamTrackAdapter>>* tracks,
17 const std::string& id) {
18 auto it = tracks->find(id);
19 if (it == tracks->end())
20 return false;
21 scoped_refptr<WebRtcMediaStreamTrackAdapter>& track = it->second;
22 DCHECK(track->HasOneRef());
23 track->Dispose();
24 tracks->erase(it);
25 return true;
26 }
27
28 void DisposeAllTrackAdapters(
29 std::map<std::string, scoped_refptr<WebRtcMediaStreamTrackAdapter>>*
30 tracks) {
31 for (auto& pair : *tracks) {
32 scoped_refptr<WebRtcMediaStreamTrackAdapter>& track = pair.second;
33 DCHECK(track->HasOneRef());
34 track->Dispose();
35 }
36 tracks->clear();
37 }
38
39 } // namespace
40
41 WebRtcMediaStreamTrackAdapterMap::WebRtcMediaStreamTrackAdapterMap(
42 PeerConnectionDependencyFactory* const factory,
43 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread)
44 : factory_(factory), main_thread_(main_thread) {
45 DCHECK(factory_);
46 DCHECK(main_thread_);
47 }
48
49 WebRtcMediaStreamTrackAdapterMap::~WebRtcMediaStreamTrackAdapterMap() {
50 DCHECK(main_thread_->BelongsToCurrentThread());
51 DisposeAllTrackAdapters();
52 }
53
54 scoped_refptr<WebRtcMediaStreamTrackAdapter>
55 WebRtcMediaStreamTrackAdapterMap::GetLocalTrackAdapter(
56 const std::string& id) const {
57 base::AutoLock cs(lock_);
58 auto it = local_tracks_.find(id);
59 if (it == local_tracks_.end())
60 return nullptr;
61 return it->second;
62 }
63
64 scoped_refptr<WebRtcMediaStreamTrackAdapter>
65 WebRtcMediaStreamTrackAdapterMap::GetOrCreateLocalTrackAdapter(
66 const blink::WebMediaStreamTrack& web_track) {
67 DCHECK(!web_track.IsNull());
68 DCHECK(main_thread_->BelongsToCurrentThread());
69 std::string id = web_track.Id().Utf8();
70 base::AutoLock cs(lock_);
71 auto it = local_tracks_.find(id);
72 if (it != local_tracks_.end())
73 return it->second;
74 scoped_refptr<WebRtcMediaStreamTrackAdapter> track =
75 WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter(
76 factory_, main_thread_, web_track);
77 local_tracks_.insert(std::make_pair(id, track));
78 return track;
79 }
80
81 bool WebRtcMediaStreamTrackAdapterMap::DisposeLocalTrackAdapter(
82 const std::string& id) {
83 DCHECK(main_thread_->BelongsToCurrentThread());
84 base::AutoLock cs(lock_);
Guido Urdaneta 2017/05/30 09:02:41 what does cs mean? (no action necessary, unless it
hbos_chromium 2017/06/02 08:52:19 Critical section or scope, inspired by rtc::CritSc
85 return RemoveAndDisposeTrackAdapter(&local_tracks_, id);
86 }
87
88 size_t WebRtcMediaStreamTrackAdapterMap::GetLocalTrackCount() const {
89 base::AutoLock cs(lock_);
90 return local_tracks_.size();
91 }
92
93 scoped_refptr<WebRtcMediaStreamTrackAdapter>
94 WebRtcMediaStreamTrackAdapterMap::GetRemoteTrackAdapter(
95 const std::string& id) const {
96 base::AutoLock cs(lock_);
97 auto it = remote_tracks_.find(id);
98 if (it == remote_tracks_.end())
99 return nullptr;
100 return it->second;
101 }
102
103 scoped_refptr<WebRtcMediaStreamTrackAdapter>
104 WebRtcMediaStreamTrackAdapterMap::GetOrCreateRemoteTrackAdapter(
105 webrtc::MediaStreamTrackInterface* webrtc_track) {
106 DCHECK(webrtc_track);
107 DCHECK(factory_->GetWebRtcSignalingThread()->BelongsToCurrentThread());
108 std::string id = webrtc_track->id();
109 base::AutoLock cs(lock_);
110 auto it = remote_tracks_.find(id);
111 if (it != remote_tracks_.end())
112 return it->second;
113 scoped_refptr<WebRtcMediaStreamTrackAdapter> track =
114 WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter(
115 factory_, main_thread_, webrtc_track);
116 remote_tracks_.insert(std::make_pair(id, track));
117 return track;
118 }
119
120 bool WebRtcMediaStreamTrackAdapterMap::DisposeRemoteTrackAdapter(
121 const std::string& id) {
122 DCHECK(main_thread_->BelongsToCurrentThread());
123 base::AutoLock cs(lock_);
124 return RemoveAndDisposeTrackAdapter(&remote_tracks_, id);
125 }
126
127 size_t WebRtcMediaStreamTrackAdapterMap::GetRemoteTrackCount() const {
128 base::AutoLock cs(lock_);
129 return remote_tracks_.size();
130 }
131
132 void WebRtcMediaStreamTrackAdapterMap::DisposeAllTrackAdapters() {
133 DCHECK(main_thread_->BelongsToCurrentThread());
134 base::AutoLock cs(lock_);
135 ::content::DisposeAllTrackAdapters(&local_tracks_);
136 ::content::DisposeAllTrackAdapters(&remote_tracks_);
137 }
138
139 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698