mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 23:06:49 +00:00
589ff8ca6d
Adding IMMDeviceEnumerator::RegisterEndpointNotificationCallback in order to support device monitoring. On OnDeviceAdded(), OnDeviceRemoved(), and OnDefaultDeviceChanged() callback, wasapi device provider implementation will enumerate devices again and will notify newly added and removed device via GstDeviceProvider API. As a bonus point, this IMMDeviceEnumerator abstraction object will spawn a dedicated internal COM thread, so various COM thread related issues of WASAPI plugin can be resolved by this commit. Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1649 Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1110 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2484>
69 lines
2.8 KiB
C
69 lines
2.8 KiB
C
/*
|
|
* Copyright (C) 2021 Seungha Yang <seungha@centricular.com>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef __GST_MM_DEVICE_ENUMERATOR_H__
|
|
#define __GST_MM_DEVICE_ENUMERATOR_H__
|
|
|
|
#include <gst/gst.h>
|
|
#include <mmdeviceapi.h>
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define GST_TYPE_MM_DEVICE_ENUMERATOR (gst_mm_device_enumerator_get_type ())
|
|
G_DECLARE_FINAL_TYPE (GstMMDeviceEnumerator, gst_mm_device_enumerator,
|
|
GST, MM_DEVICE_ENUMERATOR, GstObject);
|
|
|
|
typedef struct
|
|
{
|
|
HRESULT (*device_state_changed) (GstMMDeviceEnumerator * enumerator,
|
|
LPCWSTR device_id,
|
|
DWORD new_state,
|
|
gpointer user_data);
|
|
|
|
HRESULT (*device_added) (GstMMDeviceEnumerator * enumerator,
|
|
LPCWSTR device_id,
|
|
gpointer user_data);
|
|
|
|
HRESULT (*device_removed) (GstMMDeviceEnumerator * provider,
|
|
LPCWSTR device_id,
|
|
gpointer user_data);
|
|
|
|
HRESULT (*default_device_changed) (GstMMDeviceEnumerator * provider,
|
|
EDataFlow flow,
|
|
ERole role,
|
|
LPCWSTR default_device_id,
|
|
gpointer user_data);
|
|
|
|
HRESULT (*property_value_changed) (GstMMDeviceEnumerator * provider,
|
|
LPCWSTR device_id,
|
|
const PROPERTYKEY key,
|
|
gpointer user_data);
|
|
} GstMMNotificationClientCallbacks;
|
|
|
|
GstMMDeviceEnumerator * gst_mm_device_enumerator_new (void);
|
|
|
|
IMMDeviceEnumerator * gst_mm_device_enumerator_get_handle (GstMMDeviceEnumerator * enumerator);
|
|
|
|
gboolean gst_mm_device_enumerator_set_notification_callback (GstMMDeviceEnumerator * enumerator,
|
|
GstMMNotificationClientCallbacks * callbacks,
|
|
gpointer user_data);
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* __GST_MM_DEVICE_ENUMERATOR_H__ */
|