// Copyright 2005-2019 The Mumble Developers. All rights reserved. // Use of this source code is governed by a BSD-style license // that can be found in the LICENSE file at the root of the // Mumble source tree or at . #ifndef MUMBLE_MUMBLE_WASAPI_H_ #define MUMBLE_MUMBLE_WASAPI_H_ #include "AudioInput.h" #include "AudioOutput.h" #include "win.h" #include #include #include #include #include #include #include #include #include #ifdef _INC_FUNCTIONDISCOVERYKEYS # undef _INC_FUNCTIONDISCOVERYKEYS #endif #include #include #include class WASAPISystem : public QObject { private: Q_OBJECT Q_DISABLE_COPY(WASAPISystem) public: static const QHash getDevices(EDataFlow dataflow); static const QHash getInputDevices(); static const QHash getOutputDevices(); static const QList mapToDevice(const QHash&, const QString&); }; class WASAPIInput : public AudioInput { private: Q_OBJECT Q_DISABLE_COPY(WASAPIInput) public: WASAPIInput(); ~WASAPIInput() Q_DECL_OVERRIDE; void run() Q_DECL_OVERRIDE; }; class WASAPIOutput : public AudioOutput { private: Q_OBJECT Q_DISABLE_COPY(WASAPIOutput) bool setVolumeForSessionControl(IAudioSessionControl *control, const DWORD mumblePID, QSet &seen); bool setVolumeForSessionControl2(IAudioSessionControl2 *control2, const DWORD mumblePID, QSet &seen); protected: typedef QPair VolumePair; QMap qmVolumes; void setVolumes(IMMDevice *, bool talking); public: WASAPIOutput(); ~WASAPIOutput() Q_DECL_OVERRIDE; void run() Q_DECL_OVERRIDE; }; #endif