mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-27 07:00:12 -05:00
Applications using the device provider typically list devices in the order they were added. In order to ensure that apps pick nodes like cameras with the highest priority by default, sort devices accordingly. This unfortunately does not not have an effect on nodes added later, e.g. on hotplug. Closes https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3072
90 lines
3.3 KiB
C
90 lines
3.3 KiB
C
/* GStreamer */
|
|
/* SPDX-FileCopyrightText: Copyright © 2018 Wim Taymans */
|
|
/* SPDX-License-Identifier: MIT */
|
|
|
|
#ifndef __GST_PIPEWIRE_DEVICE_PROVIDER_H__
|
|
#define __GST_PIPEWIRE_DEVICE_PROVIDER_H__
|
|
|
|
#include "config.h"
|
|
|
|
#include <gst/gst.h>
|
|
|
|
#include <pipewire/pipewire.h>
|
|
#include <gst/gstpipewirecore.h>
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
typedef struct _GstPipeWireDevice GstPipeWireDevice;
|
|
typedef struct _GstPipeWireDeviceClass GstPipeWireDeviceClass;
|
|
|
|
#define GST_TYPE_PIPEWIRE_DEVICE (gst_pipewire_device_get_type())
|
|
#define GST_IS_PIPEWIRE_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PIPEWIRE_DEVICE))
|
|
#define GST_IS_PIPEWIRE_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PIPEWIRE_DEVICE))
|
|
#define GST_PIPEWIRE_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PIPEWIRE_DEVICE, GstPipeWireDeviceClass))
|
|
#define GST_PIPEWIRE_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PIPEWIRE_DEVICE, GstPipeWireDevice))
|
|
#define GST_PIPEWIRE_DEVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DEVICE, GstPipeWireDeviceClass))
|
|
#define GST_PIPEWIRE_DEVICE_CAST(obj) ((GstPipeWireDevice *)(obj))
|
|
|
|
typedef enum {
|
|
GST_PIPEWIRE_DEVICE_TYPE_UNKNOWN,
|
|
GST_PIPEWIRE_DEVICE_TYPE_SOURCE,
|
|
GST_PIPEWIRE_DEVICE_TYPE_SINK,
|
|
} GstPipeWireDeviceType;
|
|
|
|
struct _GstPipeWireDevice {
|
|
GstDevice parent;
|
|
|
|
GstPipeWireDeviceType type;
|
|
uint32_t id;
|
|
uint64_t serial;
|
|
int fd;
|
|
const gchar *element;
|
|
int priority;
|
|
};
|
|
|
|
struct _GstPipeWireDeviceClass {
|
|
GstDeviceClass parent_class;
|
|
};
|
|
|
|
GType gst_pipewire_device_get_type (void);
|
|
|
|
typedef struct _GstPipeWireDeviceProvider GstPipeWireDeviceProvider;
|
|
typedef struct _GstPipeWireDeviceProviderClass GstPipeWireDeviceProviderClass;
|
|
|
|
#define GST_TYPE_PIPEWIRE_DEVICE_PROVIDER (gst_pipewire_device_provider_get_type())
|
|
#define GST_IS_PIPEWIRE_DEVICE_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PIPEWIRE_DEVICE_PROVIDER))
|
|
#define GST_IS_PIPEWIRE_DEVICE_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PIPEWIRE_DEVICE_PROVIDER))
|
|
#define GST_PIPEWIRE_DEVICE_PROVIDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PIPEWIRE_DEVICE_PROVIDER, GstPipeWireDeviceProviderClass))
|
|
#define GST_PIPEWIRE_DEVICE_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PIPEWIRE_DEVICE_PROVIDER, GstPipeWireDeviceProvider))
|
|
#define GST_PIPEWIRE_DEVICE_PROVIDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_DEVICE_PROVIDER, GstPipeWireDeviceProviderClass))
|
|
#define GST_PIPEWIRE_DEVICE_PROVIDER_CAST(obj) ((GstPipeWireDeviceProvider *)(obj))
|
|
|
|
struct _GstPipeWireDeviceProvider {
|
|
GstDeviceProvider parent;
|
|
|
|
gchar *client_name;
|
|
int fd;
|
|
|
|
GstPipeWireCore *core;
|
|
struct spa_hook core_listener;
|
|
struct pw_registry *registry;
|
|
struct spa_hook registry_listener;
|
|
struct spa_list nodes;
|
|
struct spa_list pending;
|
|
int seq;
|
|
|
|
int error;
|
|
gboolean end;
|
|
gboolean list_only;
|
|
GList *devices;
|
|
};
|
|
|
|
struct _GstPipeWireDeviceProviderClass {
|
|
GstDeviceProviderClass parent_class;
|
|
};
|
|
|
|
GType gst_pipewire_device_provider_get_type (void);
|
|
|
|
G_END_DECLS
|
|
|
|
#endif /* __GST_PIPEWIRE_DEVICE_PROVIDER_H__ */
|