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 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 // doesn't have an associated output device, we use the input device's own id. | 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. | 473 // We don't support group id for video devices, that's left empty. |
474 blink::WebVector<blink::WebMediaDeviceInfo> | 474 blink::WebVector<blink::WebMediaDeviceInfo> |
475 devices(request->audio_input_devices.size() + | 475 devices(request->audio_input_devices.size() + |
476 request->video_input_devices.size() + | 476 request->video_input_devices.size() + |
477 request->audio_output_devices.size()); | 477 request->audio_output_devices.size()); |
478 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) { |
479 const MediaStreamDevice& device = request->audio_input_devices[i].device; | 479 const MediaStreamDevice& device = request->audio_input_devices[i].device; |
480 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_CAPTURE); | 480 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_CAPTURE); |
481 | 481 |
482 // We add an arbitrary character to the device ID in order to avoid the same | 482 devices[i].initialize(blink::WebString::fromUTF8(device.id), |
483 // group ID for the input and output devices that share the same ID but are | 483 blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput, |
484 // not in the same physical device. This may happen with the default and | 484 blink::WebString::fromUTF8(device.name), |
485 // communication devices. | 485 blink::WebString::fromUTF8(device.group_id)); |
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)); | |
495 } | 486 } |
496 size_t offset = request->audio_input_devices.size(); | 487 size_t offset = request->audio_input_devices.size(); |
497 for (size_t i = 0; i < request->video_input_devices.size(); ++i) { | 488 for (size_t i = 0; i < request->video_input_devices.size(); ++i) { |
498 const MediaStreamDevice& device = request->video_input_devices[i].device; | 489 const MediaStreamDevice& device = request->video_input_devices[i].device; |
499 DCHECK_EQ(device.type, MEDIA_DEVICE_VIDEO_CAPTURE); | 490 DCHECK_EQ(device.type, MEDIA_DEVICE_VIDEO_CAPTURE); |
500 devices[offset + i].initialize( | 491 devices[offset + i].initialize( |
501 blink::WebString::fromUTF8(device.id), | 492 blink::WebString::fromUTF8(device.id), |
502 blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, | 493 blink::WebMediaDeviceInfo::MediaDeviceKindVideoInput, |
503 blink::WebString::fromUTF8(device.name), | 494 blink::WebString::fromUTF8(device.name), |
504 blink::WebString()); | 495 blink::WebString()); |
505 } | 496 } |
506 offset += request->video_input_devices.size(); | 497 offset += request->video_input_devices.size(); |
507 for (size_t i = 0; i < request->audio_output_devices.size(); ++i) { | 498 for (size_t i = 0; i < request->audio_output_devices.size(); ++i) { |
508 const MediaStreamDevice& device = request->audio_output_devices[i].device; | 499 const MediaStreamDevice& device = request->audio_output_devices[i].device; |
509 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_OUTPUT); | 500 DCHECK_EQ(device.type, MEDIA_DEVICE_AUDIO_OUTPUT); |
510 devices[offset + i].initialize( | 501 devices[offset + i].initialize( |
511 blink::WebString::fromUTF8(device.id), | 502 blink::WebString::fromUTF8(device.id), |
512 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, | 503 blink::WebMediaDeviceInfo::MediaDeviceKindAudioOutput, |
513 blink::WebString::fromUTF8(device.name), | 504 blink::WebString::fromUTF8(device.name), |
514 blink::WebString::fromUTF8(base::UintToString(base::Hash(device.id)))); | 505 blink::WebString::fromUTF8(device.group_id)); |
515 } | 506 } |
516 | 507 |
517 EnumerateDevicesSucceded(&request->media_devices_request, devices); | 508 EnumerateDevicesSucceded(&request->media_devices_request, devices); |
518 } | 509 } |
519 | 510 |
520 void UserMediaClientImpl::FinalizeEnumerateSources( | 511 void UserMediaClientImpl::FinalizeEnumerateSources( |
521 MediaDevicesRequestInfo* request) { | 512 MediaDevicesRequestInfo* request) { |
522 blink::WebVector<blink::WebSourceInfo> | 513 blink::WebVector<blink::WebSourceInfo> |
523 sources(request->audio_input_devices.size() + | 514 sources(request->audio_input_devices.size() + |
524 request->video_input_devices.size()); | 515 request->video_input_devices.size()); |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1199 | 1190 |
1200 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { | 1191 bool UserMediaClientImpl::UserMediaRequestInfo::HasPendingSources() const { |
1201 return !sources_waiting_for_callback_.empty(); | 1192 return !sources_waiting_for_callback_.empty(); |
1202 } | 1193 } |
1203 | 1194 |
1204 void UserMediaClientImpl::OnDestruct() { | 1195 void UserMediaClientImpl::OnDestruct() { |
1205 delete this; | 1196 delete this; |
1206 } | 1197 } |
1207 | 1198 |
1208 } // namespace content | 1199 } // namespace content |
OLD | NEW |