MediaEngineWebRTC.h (1938B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 4 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef MEDIAENGINEWEBRTC_H_ 7 #define MEDIAENGINEWEBRTC_H_ 8 9 #include "CubebDeviceEnumerator.h" 10 #include "MediaEngine.h" 11 #include "MediaEngineSource.h" 12 #include "MediaEventSource.h" 13 #include "mozilla/RefPtr.h" 14 #include "mozilla/dom/MediaStreamTrackBinding.h" 15 #include "nsTArray.h" 16 17 namespace mozilla { 18 19 class MediaEngineWebRTC : public MediaEngine { 20 public: 21 MediaEngineWebRTC(); 22 23 // Clients should ensure to clean-up sources video/audio sources 24 // before invoking Shutdown on this class. 25 void Shutdown() override; 26 27 void EnumerateDevices(dom::MediaSourceEnum, MediaSinkEnum, 28 nsTArray<RefPtr<MediaDevice>>*) override; 29 RefPtr<MediaEngineSource> CreateSource(const MediaDevice* aDevice) override; 30 RefPtr<MediaEngineSource> CreateSourceFrom(const MediaEngineSource* aSource, 31 const MediaDevice*) override; 32 33 MediaEventSource<void>& DeviceListChangeEvent() override { 34 return mDeviceListChangeEvent; 35 } 36 bool IsFake() const override { return false; } 37 38 private: 39 ~MediaEngineWebRTC() = default; 40 void EnumerateVideoDevices(dom::MediaSourceEnum, 41 nsTArray<RefPtr<MediaDevice>>*); 42 void EnumerateMicrophoneDevices(nsTArray<RefPtr<MediaDevice>>*); 43 void EnumerateSpeakerDevices(nsTArray<RefPtr<MediaDevice>>*); 44 45 void DeviceListChanged() { mDeviceListChangeEvent.Notify(); } 46 47 MediaEventListener mCameraListChangeListener; 48 MediaEventListener mMicrophoneListChangeListener; 49 MediaEventListener mSpeakerListChangeListener; 50 MediaEventProducer<void> mDeviceListChangeEvent; 51 }; 52 53 } // namespace mozilla 54 55 #endif /* NSMEDIAENGINEWEBRTC_H_ */