1 // Copyright 2014 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 #ifndef CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_CAPTURE_DEVICES_H 6 #define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_CAPTURE_DEVICES_H 7 8 #include "base/memory/singleton.h" 9 #include "content/public/browser/media_capture_devices.h" 10 11 namespace content { 12 13 class MediaCaptureDevicesImpl : public MediaCaptureDevices { 14 public: 15 static MediaCaptureDevicesImpl* GetInstance(); 16 17 // Overriden from MediaCaptureDevices 18 virtual const MediaStreamDevices& GetAudioCaptureDevices() OVERRIDE; 19 virtual const MediaStreamDevices& GetVideoCaptureDevices() OVERRIDE; 20 21 // Called by MediaStreamManager to notify the change of media capture 22 // devices, these 2 methods are called in IO thread. 23 void OnAudioCaptureDevicesChanged(const MediaStreamDevices& devices); 24 void OnVideoCaptureDevicesChanged(const MediaStreamDevices& devices); 25 26 private: 27 friend struct DefaultSingletonTraits<MediaCaptureDevicesImpl>; 28 MediaCaptureDevicesImpl(); 29 virtual ~MediaCaptureDevicesImpl(); 30 31 void UpdateAudioDevicesOnUIThread(const content::MediaStreamDevices& devices); 32 void UpdateVideoDevicesOnUIThread(const content::MediaStreamDevices& devices); 33 34 // Flag to indicate if device enumeration has been done/doing. 35 // Only accessed on UI thread. 36 bool devices_enumerated_; 37 38 // A list of cached audio capture devices. 39 MediaStreamDevices audio_devices_; 40 41 // A list of cached video capture devices. 42 MediaStreamDevices video_devices_; 43 44 DISALLOW_COPY_AND_ASSIGN(MediaCaptureDevicesImpl); 45 }; 46 47 } // namespace content 48 49 #endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_CAPTURE_DEVICES_H 50