]> code.delx.au - pulseaudio/blobdiff - src/modules/alsa/alsa-ucm.h
alsa: Support ALSA without a use case manager
[pulseaudio] / src / modules / alsa / alsa-ucm.h
index 38fb2625a657995f32817a17265c1f5e9e8606cf..c31e5b19a8c325ed4d31aca49a3949788b4c4057 100644 (file)
   USA.
 ***/
 
+#ifdef HAVE_ALSA_UCM
 #include <use-case.h>
+#else
+typedef void snd_use_case_mgr_t;
+#endif
 
 #include "alsa-mixer.h"
 
@@ -73,6 +77,9 @@
 /** For devices: Quality of Service */
 #define PA_ALSA_PROP_UCM_QOS                        "alsa.ucm.qos"
 
+/** For devices: The modifier (if any) that this device corresponds to */
+#define PA_ALSA_PROP_UCM_MODIFIER "alsa.ucm.modifier"
+
 typedef struct pa_alsa_ucm_verb pa_alsa_ucm_verb;
 typedef struct pa_alsa_ucm_modifier pa_alsa_ucm_modifier;
 typedef struct pa_alsa_ucm_device pa_alsa_ucm_device;
@@ -103,6 +110,9 @@ int pa_alsa_ucm_set_port(pa_alsa_ucm_mapping_context *context, pa_device_port *p
 void pa_alsa_ucm_free(pa_alsa_ucm_config *ucm);
 void pa_alsa_ucm_mapping_context_free(pa_alsa_ucm_mapping_context *context);
 
+void pa_alsa_ucm_roled_stream_begin(pa_alsa_ucm_config *ucm, const char *role, pa_direction_t dir);
+void pa_alsa_ucm_roled_stream_end(pa_alsa_ucm_config *ucm, const char *role, pa_direction_t dir);
+
 /* UCM - Use Case Manager is available on some audio cards */
 
 struct pa_alsa_ucm_device {
@@ -140,6 +150,13 @@ struct pa_alsa_ucm_modifier {
     pa_direction_t action_direction;
 
     char *media_role;
+
+    /* Non-NULL if the modifier has its own PlaybackPCM/CapturePCM */
+    pa_alsa_mapping *playback_mapping;
+    pa_alsa_mapping *capture_mapping;
+
+    /* Count how many role matched streams are running */
+    int enabled_counter;
 };
 
 struct pa_alsa_ucm_verb {