| 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/user_media_client_impl.h" | 5 #include "content/renderer/media/user_media_client_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 | 460 |
| 461 for (StreamDeviceInfoArray::const_iterator device_it = video_array.begin(); | 461 for (StreamDeviceInfoArray::const_iterator device_it = video_array.begin(); |
| 462 device_it != video_array.end(); ++device_it) { | 462 device_it != video_array.end(); ++device_it) { |
| 463 if (!FindLocalSource(*device_it)) | 463 if (!FindLocalSource(*device_it)) |
| 464 media_stream_dispatcher_->StopStreamDevice(*device_it); | 464 media_stream_dispatcher_->StopStreamDevice(*device_it); |
| 465 } | 465 } |
| 466 } | 466 } |
| 467 | 467 |
| 468 void UserMediaClientImpl::FinalizeEnumerateDevices( | 468 void UserMediaClientImpl::FinalizeEnumerateDevices( |
| 469 MediaDevicesRequestInfo* request) { | 469 MediaDevicesRequestInfo* request) { |
| 470 // All devices are ready for copying. We use a hashed audio output device id |
| 471 // as the group id for input and output audio devices. If an input device |
| 472 // doesn't have an associated output device, we use the input device's own id. |
| 473 // We don't support group id for video devices, that's left empty. |
| 470 blink::WebVector<blink::WebMediaDeviceInfo> | 474 blink::WebVector<blink::WebMediaDeviceInfo> |
| 471 devices(request->audio_input_devices.size() + | 475 devices(request->audio_input_devices.size() + |
| 472 request->video_input_devices.size() + | 476 request->video_input_devices.size() + |
| 473 request->audio_output_devices.size()); | 477 request->audio_output_devices.size()); |
| 474 for (size_t i = 0; i < request->audio_input_devices.size(); ++i) { | 478 for (size_t i = 0; i < request->audio_input_devices.size(); ++i) { |
| 475 const MediaStreamDevice& device = request->audio_input_devices[i].device; | 479 const MediaStreamDevice& device = request->audio_input_devices[i].device; |
| 476 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_CAPTURE); | 480 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_CAPTURE); |
| 477 | 481 |
| 478 devices[i].initialize(blink::WebString::fromUTF8(device.id), | 482 // We add an arbitrary character to the device ID in order to avoid the same |
| 479 blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, | 483 // group ID for the input and output devices that share the same ID but are |
| 480 blink::WebString::fromUTF8(device.name), | 484 // not in the same physical device. This may happen with the default and |
| 481 blink::WebString::fromUTF8(device.group_id)); | 485 // communication devices. |
| 486 std::string group_id = base::UintToString(base::Hash( |
| 487 device.matched_output_device_id.empty() ? |
| 488 device.id + "i" : |
| 489 device.matched_output_device_id)); |
| 490 devices[i].initialize( |
| 491 blink::WebString::fromUTF8(device.id), |
| 492 blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, |
| 493 blink::WebString::fromUTF8(device.name), |
| 494 blink::WebString::fromUTF8(group_id)); |
| 482 } | 495 } |
| 483 size_t offset = request->audio_input_devices.size(); | 496 size_t offset = request->audio_input_devices.size(); |
| 484 for (size_t i = 0; i < request->video_input_devices.size(); ++i) { | 497 for (size_t i = 0; i < request->video_input_devices.size(); ++i) { |
| 485 const MediaStreamDevice& device = request->video_input_devices[i].device; | 498 const MediaStreamDevice& device = request->video_input_devices[i].device; |
| 486 DCHECK_EQ(device.type, MEDIA_DEVICE_VIDEO_CAPTURE); | 499 DCHECK_EQ(device.type, MEDIA_DEVICE_VIDEO_CAPTURE); |
| 487 devices[offset + i].initialize( | 500 devices[offset + i].initialize( |
| 488 blink::WebString::fromUTF8(device.id), | 501 blink::WebString::fromUTF8(device.id), |
| 489 blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, | 502 blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, |
| 490 blink::WebString::fromUTF8(device.name), | 503 blink::WebString::fromUTF8(device.name), |
| 491 blink::WebString()); | 504 blink::WebString()); |
| 492 } | 505 } |
| 493 offset += request->video_input_devices.size(); | 506 offset += request->video_input_devices.size(); |
| 494 for (size_t i = 0; i < request->audio_output_devices.size(); ++i) { | 507 for (size_t i = 0; i < request->audio_output_devices.size(); ++i) { |
| 495 const MediaStreamDevice& device = request->audio_output_devices[i].device; | 508 const MediaStreamDevice& device = request->audio_output_devices[i].device; |
| 496 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_OUTPUT); | 509 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_OUTPUT); |
| 497 devices[offset + i].initialize( | 510 devices[offset + i].initialize( |
| 498 blink::WebString::fromUTF8(device.id), | 511 blink::WebString::fromUTF8(device.id), |
| 499 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, | 512 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, |
| 500 blink::WebString::fromUTF8(device.name), | 513 blink::WebString::fromUTF8(device.name), |
| 501 blink::WebString::fromUTF8(device.group_id)); | 514 blink::WebString::fromUTF8(base::UintToString(base::Hash(device.id)))); |
| 502 } | 515 } |
| 503 | 516 |
| 504 EnumerateDevicesSucceded(&request->media_devices_request, devices); | 517 EnumerateDevicesSucceded(&request->media_devices_request, devices); |
| 505 } | 518 } |
| 506 | 519 |
| 507 void UserMediaClientImpl::FinalizeEnumerateSources( | 520 void UserMediaClientImpl::FinalizeEnumerateSources( |
| 508 MediaDevicesRequestInfo* request) { | 521 MediaDevicesRequestInfo* request) { |
| 509 blink::WebVector<blink::WebSourceInfo> | 522 blink::WebVector<blink::WebSourceInfo> |
| 510 sources(request->audio_input_devices.size() + | 523 sources(request->audio_input_devices.size() + |
| 511 request->video_input_devices.size()); | 524 request->video_input_devices.size()); |
| (...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1186 | 1199 |
| 1187 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { | 1200 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { |
| 1188 return !sources_waiting_for_callback_.empty(); | 1201 return !sources_waiting_for_callback_.empty(); |
| 1189 } | 1202 } |
| 1190 | 1203 |
| 1191 void UserMediaClientImpl::OnDestruct() { | 1204 void UserMediaClientImpl::OnDestruct() { |
| 1192 delete this; | 1205 delete this; |
| 1193 } | 1206 } |
| 1194 | 1207 |
| 1195 } // namespace content | 1208 } // namespace content |
| OLD | NEW |