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

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

Issue 2887403003: WebRtcMediaStreamTrackMap added (Closed)
Patch Set: CONTENT_EXPORT AdapterRef for win bots to compile 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 WebRtcMediaStreamTrackAdapterMap::AdapterEntry::AdapterEntry(
14 const scoped_refptr<WebRtcMediaStreamTrackAdapter>& adapter)
15 : adapter(adapter), ref_count(0) {}
16
17 WebRtcMediaStreamTrackAdapterMap::AdapterEntry::AdapterEntry(
18 AdapterEntry&& other)
19 : adapter(other.adapter), ref_count(other.ref_count) {
20 other.adapter = nullptr;
21 }
22
23 WebRtcMediaStreamTrackAdapterMap::AdapterEntry::~AdapterEntry() {
24 DCHECK(!ref_count);
25 DCHECK(!adapter || !adapter->is_initialized());
26 }
27
28 WebRtcMediaStreamTrackAdapterMap::AdapterRef::AdapterRef(
29 const scoped_refptr<WebRtcMediaStreamTrackAdapterMap>& map,
30 Type type,
31 const std::map<std::string, AdapterEntry>::iterator& it)
32 : map_(map), type_(type), it_(it) {
33 DCHECK(map_);
34 ++entry()->ref_count;
35 }
36
37 WebRtcMediaStreamTrackAdapterMap::AdapterRef::~AdapterRef() {
38 DCHECK(map_->main_thread_->BelongsToCurrentThread());
39 base::AutoLock scoped_lock(map_->lock_);
40 if (--entry()->ref_count == 0) {
41 entry()->adapter->Dispose();
42 if (type_ == Type::kLocal)
43 map_->local_track_adapters_.erase(it_);
44 else
45 map_->remote_track_adapters_.erase(it_);
46 }
47 }
48
49 WebRtcMediaStreamTrackAdapterMap::WebRtcMediaStreamTrackAdapterMap(
50 PeerConnectionDependencyFactory* const factory,
51 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread)
52 : factory_(factory), main_thread_(main_thread) {
53 DCHECK(factory_);
54 DCHECK(main_thread_);
55 }
56
57 WebRtcMediaStreamTrackAdapterMap::~WebRtcMediaStreamTrackAdapterMap() {
58 DCHECK(local_track_adapters_.empty());
59 DCHECK(remote_track_adapters_.empty());
60 }
61
62 std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef>
63 WebRtcMediaStreamTrackAdapterMap::GetLocalTrackAdapter(const std::string& id) {
64 base::AutoLock scoped_lock(lock_);
65 auto it = local_track_adapters_.find(id);
66 if (it == local_track_adapters_.end())
67 return nullptr;
68 return std::unique_ptr<AdapterRef>(
Guido Urdaneta 2017/06/02 13:19:01 use base::MakeUnique
hbos_chromium 2017/06/05 11:55:40 base::MakeUnique actually does not work in this ca
Guido Urdaneta 2017/06/05 13:05:56 Acknowledged.
69 new AdapterRef(this, AdapterRef::Type::kLocal, it));
70 }
71
72 std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef>
73 WebRtcMediaStreamTrackAdapterMap::GetOrCreateLocalTrackAdapter(
74 const blink::WebMediaStreamTrack& web_track) {
75 DCHECK(!web_track.IsNull());
76 DCHECK(main_thread_->BelongsToCurrentThread());
77 std::string id = web_track.Id().Utf8();
78 base::AutoLock scoped_lock(lock_);
79 auto it = local_track_adapters_.find(id);
80 if (it == local_track_adapters_.end()) {
81 scoped_refptr<WebRtcMediaStreamTrackAdapter> adapter =
82 WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter(
83 factory_, main_thread_, web_track);
84 it = local_track_adapters_.insert(std::make_pair(id, AdapterEntry(adapter)))
85 .first;
86 }
87 return std::unique_ptr<AdapterRef>(
Guido Urdaneta 2017/06/02 13:19:01 use base::MakeUnique
hbos_chromium 2017/06/05 11:55:40 Ditto.
Guido Urdaneta 2017/06/05 13:05:56 Acko.
88 new AdapterRef(this, AdapterRef::Type::kLocal, it));
89 }
90
91 size_t WebRtcMediaStreamTrackAdapterMap::GetLocalTrackCount() const {
92 base::AutoLock scoped_lock(lock_);
93 return local_track_adapters_.size();
94 }
95
96 std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef>
97 WebRtcMediaStreamTrackAdapterMap::GetRemoteTrackAdapter(const std::string& id) {
98 base::AutoLock scoped_lock(lock_);
99 auto it = remote_track_adapters_.find(id);
Guido Urdaneta 2017/06/02 13:19:01 Since the logic is the same as for GetLocalTrackAd
hbos_chromium 2017/06/05 11:55:40 Done.
100 if (it == remote_track_adapters_.end())
101 return nullptr;
102 return std::unique_ptr<AdapterRef>(
Guido Urdaneta 2017/06/02 13:19:01 use base::MakeUnique
hbos_chromium 2017/06/05 11:55:40 Ditto.
103 new AdapterRef(this, AdapterRef::Type::kRemote, it));
104 }
105
106 std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef>
107 WebRtcMediaStreamTrackAdapterMap::GetOrCreateRemoteTrackAdapter(
108 webrtc::MediaStreamTrackInterface* webrtc_track) {
109 DCHECK(webrtc_track);
Guido Urdaneta 2017/06/02 13:19:01 Same genericness argument as with simple Get metho
hbos_chromium 2017/06/05 11:55:39 Done.
110 DCHECK(factory_->GetWebRtcSignalingThread()->BelongsToCurrentThread());
111 std::string id = webrtc_track->id();
112 base::AutoLock scoped_lock(lock_);
113 auto it = remote_track_adapters_.find(id);
114 if (it == remote_track_adapters_.end()) {
115 scoped_refptr<WebRtcMediaStreamTrackAdapter> adapter =
116 WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter(
117 factory_, main_thread_, webrtc_track);
118 it =
119 remote_track_adapters_.insert(std::make_pair(id, AdapterEntry(adapter)))
120 .first;
121 }
122 return std::unique_ptr<AdapterRef>(
Guido Urdaneta 2017/06/02 13:19:01 use base::MakeUnique
hbos_chromium 2017/06/05 11:55:40 Ditto.
123 new AdapterRef(this, AdapterRef::Type::kRemote, it));
124 }
125
126 size_t WebRtcMediaStreamTrackAdapterMap::GetRemoteTrackCount() const {
127 base::AutoLock scoped_lock(lock_);
128 return remote_track_adapters_.size();
129 }
130
131 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698