summaryrefslogtreecommitdiffstats
path: root/src/VBox/Devices/Audio/VBoxMMNotificationClient.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-06 03:01:46 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-06 03:01:46 +0000
commitf8fe689a81f906d1b91bb3220acde2a4ecb14c5b (patch)
tree26484e9d7e2c67806c2d1760196ff01aaa858e8c /src/VBox/Devices/Audio/VBoxMMNotificationClient.h
parentInitial commit. (diff)
downloadvirtualbox-f8fe689a81f906d1b91bb3220acde2a4ecb14c5b.tar.xz
virtualbox-f8fe689a81f906d1b91bb3220acde2a4ecb14c5b.zip
Adding upstream version 6.0.4-dfsg.upstream/6.0.4-dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/Devices/Audio/VBoxMMNotificationClient.h')
-rw-r--r--src/VBox/Devices/Audio/VBoxMMNotificationClient.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/VBox/Devices/Audio/VBoxMMNotificationClient.h b/src/VBox/Devices/Audio/VBoxMMNotificationClient.h
new file mode 100644
index 00000000..6d63174c
--- /dev/null
+++ b/src/VBox/Devices/Audio/VBoxMMNotificationClient.h
@@ -0,0 +1,91 @@
+/* $Id: VBoxMMNotificationClient.h $ */
+/** @file
+ * VBoxMMNotificationClient.h - Implementation of the IMMNotificationClient interface
+ * to detect audio endpoint changes.
+ */
+
+/*
+ * Copyright (C) 2017-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef VBOX_INCLUDED_SRC_Audio_VBoxMMNotificationClient_h
+#define VBOX_INCLUDED_SRC_Audio_VBoxMMNotificationClient_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include <iprt/critsect.h>
+#include <iprt/win/windows.h>
+
+/* Should fix warning in include\ks.h. */
+#ifndef _WIN64
+# ifdef RT_ARCH_X86
+# define _WIN64 1
+# else
+# define _WIN64 0
+# endif
+#endif
+
+#include <Mmdeviceapi.h>
+
+#include "DrvAudio.h"
+
+class VBoxMMNotificationClient : IMMNotificationClient
+{
+public:
+
+ VBoxMMNotificationClient();
+ virtual ~VBoxMMNotificationClient();
+
+ HRESULT Initialize();
+ int RegisterCallback(PPDMDRVINS pDrvIns, PFNPDMHOSTAUDIOCALLBACK pfnCallback);
+ void UnregisterCallback(void);
+ void Dispose();
+
+ /** @name IUnknown interface
+ * @{ */
+ IFACEMETHODIMP_(ULONG) Release();
+ /** @} */
+
+private:
+
+ bool m_fRegisteredClient;
+ IMMDeviceEnumerator *m_pEnum;
+ IMMDevice *m_pEndpoint;
+
+ long m_cRef;
+
+ PPDMDRVINS m_pDrvIns;
+ PFNPDMHOSTAUDIOCALLBACK m_pfnCallback;
+
+ HRESULT AttachToDefaultEndpoint();
+ void DetachFromEndpoint();
+
+ /** @name IMMNotificationClient interface
+ * @{ */
+ IFACEMETHODIMP OnDeviceStateChanged(LPCWSTR pwstrDeviceId, DWORD dwNewState);
+ IFACEMETHODIMP OnDeviceAdded(LPCWSTR pwstrDeviceId);
+ IFACEMETHODIMP OnDeviceRemoved(LPCWSTR pwstrDeviceId);
+ IFACEMETHODIMP OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR pwstrDefaultDeviceId);
+ IFACEMETHODIMP OnPropertyValueChanged(LPCWSTR /*pwstrDeviceId*/, const PROPERTYKEY /*key*/) { return S_OK; }
+ IFACEMETHODIMP OnDeviceQueryRemove() { return S_OK; }
+ IFACEMETHODIMP OnDeviceQueryRemoveFailed() { return S_OK; }
+ IFACEMETHODIMP OnDeviceRemovePending() { return S_OK; }
+ /** @} */
+
+ /** @name IUnknown interface
+ * @{ */
+ IFACEMETHODIMP QueryInterface(const IID& iid, void** ppUnk);
+ IFACEMETHODIMP_(ULONG) AddRef();
+ /** @} */
+};
+#endif /* !VBOX_INCLUDED_SRC_Audio_VBoxMMNotificationClient_h */
+