OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/media_stream_center.h" | 5 #include "content/renderer/media/media_stream_center.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 media_stream_source = new WebAudioMediaStreamSource(&source); | 54 media_stream_source = new WebAudioMediaStreamSource(&source); |
55 source.setExtraData(media_stream_source); // Takes ownership. | 55 source.setExtraData(media_stream_source); // Takes ownership. |
56 } | 56 } |
57 | 57 |
58 if (media_stream_source) | 58 if (media_stream_source) |
59 media_stream_source->ConnectToTrack(track); | 59 media_stream_source->ConnectToTrack(track); |
60 else | 60 else |
61 LOG(DFATAL) << "WebMediaStreamSource missing its MediaStreamAudioSource."; | 61 LOG(DFATAL) << "WebMediaStreamSource missing its MediaStreamAudioSource."; |
62 } | 62 } |
63 | 63 |
64 void CreateNativeVideoMediaStreamTrack( | 64 void CreateNativeVideoMediaStreamTrack(blink::WebMediaStreamTrack track) { |
65 const blink::WebMediaStreamTrack& track) { | |
66 DCHECK(track.getTrackData() == NULL); | 65 DCHECK(track.getTrackData() == NULL); |
67 blink::WebMediaStreamSource source = track.source(); | 66 blink::WebMediaStreamSource source = track.source(); |
68 DCHECK_EQ(source.getType(), blink::WebMediaStreamSource::TypeVideo); | 67 DCHECK_EQ(source.getType(), blink::WebMediaStreamSource::TypeVideo); |
69 MediaStreamVideoSource* native_source = | 68 MediaStreamVideoSource* native_source = |
70 MediaStreamVideoSource::GetVideoSource(source); | 69 MediaStreamVideoSource::GetVideoSource(source); |
71 DCHECK(native_source); | 70 DCHECK(native_source); |
72 blink::WebMediaStreamTrack writable_track(track); | |
73 if (IsOldVideoConstraints()) { | 71 if (IsOldVideoConstraints()) { |
74 // TODO(perkj): The constraints to use here should be passed from blink when | 72 // TODO(perkj): The constraints to use here should be passed from blink when |
75 // a new track is created. For cloning, it should be the constraints of the | 73 // a new track is created. For cloning, it should be the constraints of the |
76 // cloned track and not the originating source. | 74 // cloned track and not the originating source. |
77 // Also - source.constraints() returns an uninitialized constraint if the | 75 // Also - source.constraints() returns an uninitialized constraint if the |
78 // source is coming from a remote video track. See http://crbug/287805. | 76 // source is coming from a remote video track. See http://crbug/287805. |
79 blink::WebMediaConstraints constraints = source.constraints(); | 77 blink::WebMediaConstraints constraints = source.constraints(); |
80 if (constraints.isNull()) | 78 if (constraints.isNull()) |
81 constraints.initialize(); | 79 constraints.initialize(); |
82 writable_track.setTrackData(new MediaStreamVideoTrack( | 80 track.setTrackData(new MediaStreamVideoTrack( |
83 native_source, constraints, | 81 native_source, constraints, |
84 MediaStreamVideoSource::ConstraintsCallback(), track.isEnabled())); | 82 MediaStreamVideoSource::ConstraintsCallback(), track.isEnabled())); |
85 } else { | 83 } else { |
86 // TODO(guidou): All existing uses are without constraints except for the | 84 track.setTrackData(new MediaStreamVideoTrack( |
87 // case of cloning a track. To fix this, create a new function in | |
88 // MediaStreamCenter specifically for cloning. | |
89 writable_track.setTrackData(new MediaStreamVideoTrack( | |
90 native_source, MediaStreamVideoSource::ConstraintsCallback(), | 85 native_source, MediaStreamVideoSource::ConstraintsCallback(), |
91 track.isEnabled())); | 86 track.isEnabled())); |
92 } | 87 } |
93 } | 88 } |
94 | 89 |
| 90 void CloneNativeVideoMediaStreamTrack( |
| 91 const blink::WebMediaStreamTrack& original, |
| 92 blink::WebMediaStreamTrack clone) { |
| 93 DCHECK(!clone.getTrackData()); |
| 94 blink::WebMediaStreamSource source = clone.source(); |
| 95 DCHECK_EQ(source.getType(), blink::WebMediaStreamSource::TypeVideo); |
| 96 MediaStreamVideoSource* native_source = |
| 97 MediaStreamVideoSource::GetVideoSource(source); |
| 98 DCHECK(native_source); |
| 99 if (IsOldVideoConstraints()) { |
| 100 // TODO(perkj): The constraints to use here should be passed from blink when |
| 101 // a new track is created. For cloning, it should be the constraints of the |
| 102 // cloned track and not the originating source. |
| 103 // Also - source.constraints() returns an uninitialized constraint if the |
| 104 // source is coming from a remote video track. See http://crbug/287805. |
| 105 blink::WebMediaConstraints constraints = source.constraints(); |
| 106 if (constraints.isNull()) |
| 107 constraints.initialize(); |
| 108 clone.setTrackData(new MediaStreamVideoTrack( |
| 109 native_source, constraints, |
| 110 MediaStreamVideoSource::ConstraintsCallback(), clone.isEnabled())); |
| 111 } else { |
| 112 MediaStreamVideoTrack* original_track = |
| 113 MediaStreamVideoTrack::GetVideoTrack(original); |
| 114 DCHECK(original_track); |
| 115 clone.setTrackData(new MediaStreamVideoTrack( |
| 116 native_source, original_track->adapter_settings(), |
| 117 original_track->noise_reduction(), original_track->is_screencast(), |
| 118 original_track->min_frame_rate(), |
| 119 MediaStreamVideoSource::ConstraintsCallback(), clone.isEnabled())); |
| 120 } |
| 121 } |
| 122 |
95 } // namespace | 123 } // namespace |
96 | 124 |
97 MediaStreamCenter::MediaStreamCenter( | 125 MediaStreamCenter::MediaStreamCenter( |
98 blink::WebMediaStreamCenterClient* client, | 126 blink::WebMediaStreamCenterClient* client, |
99 PeerConnectionDependencyFactory* factory) {} | 127 PeerConnectionDependencyFactory* factory) {} |
100 | 128 |
101 MediaStreamCenter::~MediaStreamCenter() {} | 129 MediaStreamCenter::~MediaStreamCenter() {} |
102 | 130 |
103 void MediaStreamCenter::didCreateMediaStreamTrack( | 131 void MediaStreamCenter::didCreateMediaStreamTrack( |
104 const blink::WebMediaStreamTrack& track) { | 132 const blink::WebMediaStreamTrack& track) { |
105 DVLOG(1) << "MediaStreamCenter::didCreateMediaStreamTrack"; | 133 DVLOG(1) << "MediaStreamCenter::didCreateMediaStreamTrack"; |
106 DCHECK(!track.isNull() && !track.getTrackData()); | 134 DCHECK(!track.isNull() && !track.getTrackData()); |
107 DCHECK(!track.source().isNull()); | 135 DCHECK(!track.source().isNull()); |
108 | 136 |
109 switch (track.source().getType()) { | 137 switch (track.source().getType()) { |
110 case blink::WebMediaStreamSource::TypeAudio: | 138 case blink::WebMediaStreamSource::TypeAudio: |
111 CreateNativeAudioMediaStreamTrack(track); | 139 CreateNativeAudioMediaStreamTrack(track); |
112 break; | 140 break; |
113 case blink::WebMediaStreamSource::TypeVideo: | 141 case blink::WebMediaStreamSource::TypeVideo: |
114 CreateNativeVideoMediaStreamTrack(track); | 142 CreateNativeVideoMediaStreamTrack(track); |
115 break; | 143 break; |
116 } | 144 } |
117 } | 145 } |
118 | 146 |
| 147 void MediaStreamCenter::didCloneMediaStreamTrack( |
| 148 const blink::WebMediaStreamTrack& original, |
| 149 const blink::WebMediaStreamTrack& clone) { |
| 150 DCHECK(!clone.isNull()); |
| 151 DCHECK(!clone.getTrackData()); |
| 152 DCHECK(!clone.source().isNull()); |
| 153 |
| 154 switch (clone.source().getType()) { |
| 155 case blink::WebMediaStreamSource::TypeAudio: |
| 156 CreateNativeAudioMediaStreamTrack(clone); |
| 157 break; |
| 158 case blink::WebMediaStreamSource::TypeVideo: |
| 159 CloneNativeVideoMediaStreamTrack(original, clone); |
| 160 break; |
| 161 } |
| 162 } |
| 163 |
119 void MediaStreamCenter::didSetContentHint( | 164 void MediaStreamCenter::didSetContentHint( |
120 const blink::WebMediaStreamTrack& track) { | 165 const blink::WebMediaStreamTrack& track) { |
121 MediaStreamTrack* native_track = MediaStreamTrack::GetTrack(track); | 166 MediaStreamTrack* native_track = MediaStreamTrack::GetTrack(track); |
122 if (native_track) | 167 if (native_track) |
123 native_track->SetContentHint(track.contentHint()); | 168 native_track->SetContentHint(track.contentHint()); |
124 } | 169 } |
125 | 170 |
126 void MediaStreamCenter::didEnableMediaStreamTrack( | 171 void MediaStreamCenter::didEnableMediaStreamTrack( |
127 const blink::WebMediaStreamTrack& track) { | 172 const blink::WebMediaStreamTrack& track) { |
128 MediaStreamTrack* native_track = | 173 MediaStreamTrack* native_track = |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 | 251 |
207 bool MediaStreamCenter::didRemoveMediaStreamTrack( | 252 bool MediaStreamCenter::didRemoveMediaStreamTrack( |
208 const blink::WebMediaStream& stream, | 253 const blink::WebMediaStream& stream, |
209 const blink::WebMediaStreamTrack& track) { | 254 const blink::WebMediaStreamTrack& track) { |
210 DVLOG(1) << "MediaStreamCenter::didRemoveMediaStreamTrack"; | 255 DVLOG(1) << "MediaStreamCenter::didRemoveMediaStreamTrack"; |
211 MediaStream* native_stream = MediaStream::GetMediaStream(stream); | 256 MediaStream* native_stream = MediaStream::GetMediaStream(stream); |
212 return native_stream->RemoveTrack(track); | 257 return native_stream->RemoveTrack(track); |
213 } | 258 } |
214 | 259 |
215 } // namespace content | 260 } // namespace content |
OLD | NEW |