snd_ctl_ducking_status_read()

Updated: April 19, 2023

Get all active audio subchannels associated with an audio ducking output

Synopsis:

#include <sys/asoundlib.h>

int snd_ctl_ducking_status_read( snd_ctl_t *handle, 
                                 const char* ducking_output, 
                                 snd_ducking_priority_status_t **info );

Arguments:

handle
The handle for the control connection to the card. This must be a handle created by snd_ctl_open().
ducking_output
The name of the ducking output to monitor. The ducking output is the audio concurrency management context or output specified by the audio configuration file audiomgmt_id key.
info
A pointer to location where a snd_ducking_priority_status_t structure is stored. The structure contains information about the audio types that are active. If the call is successful, the system allocates memory for you, therefore it's the responsibility of the caller to free the allocated memory. This value can't be NULL.

Library:

libasound.so

Use the -l asound option with qcc to link against this library.

Description:

The snd_ctl_ducking_status_read() function gets a list of all the active audio subchannels and information about their priority and ducking state, regardless of whether they are audible or not.

Because audio concurrency management handles a PCM link group as a single stream, this function reports only information for the first subchannel in a group.

Use this function to get information about active audio types after you receive a SND_CTL_READ_AUDIOMGMT_STATUS_CHG event in an audiomgmt callback.

The priority and ducking state information is specified in the snd_ducking_priority_status_t structure that info points to:

typedef struct snd_ducking_priority_status {
    int                       nsubchns;
    snd_ducking_subchn_info_t subchns[];
} snd_ducking_priority_status_t;

This structure includes the following members:

nsubchns
The number of active subchannels. Subchannels do not have to be audible to be considered active.
subchns
An array of subchannel ducking information structures.

The subchns member is a variable-sized array of snd_ducking_status_t structures:

typedef struct snd_ducking_subchn_info
{
    pid_t    pid;
    uint32_t prio;
    uint32_t state;
    uint32_t ducked_by;
    char      name[32];
} snd_ducking_subchn_info_t;

The members include:

pid
The process ID of the application that opened the audio stream.
prio
The priority of the audio type. The higher the number, the higher the priority.
state

The ducking state. The following values are valid:

  • SND_PCM_DUCKING_STATE_ACTIVE — Ducking is active because the stream is active.
  • SND_PCM_DUCKING_STATE_HARD_SUSPENDED — The subchannel is suspended by an audio type with a higher priority.
  • SND_PCM_DUCKING_STATE_SOFT_SUSPENDED — The subchannel is suspended by an audio type of the same priority.
  • SND_PCM_DUCKING_STATE_PAUSED — The stream will transition to SND_PCM_STATUS_PAUSED when unsuspended.
  • SND_PCM_DUCKING_STATE_FORCED_ACTIVE — Ducking was made active using snd_pcm_channel_audio_ducking().
  • SND_PCM_DUCKING_STATE_MUTE_BY_HIGHER — The stream was ducked by a stream with a higher priority.
  • SND_PCM_DUCKING_STATE_MUTE_BY_SAME — The stream was ducked by a stream with an equal priority.
  • SND_PCM_DUCKING_STATE_DUCKED — Ducking is active.
ducked_by

Describes the audio stream that ducked this active stream. Valid values are:

  • SND_PCM_DUCKED_BY_SAME_PRIO
  • SND_PCM_DUCKED_BY_HIGHER_PRIO
  • SND_PCM_DUCKED_BY_NONTRANSIENT

Returns:

EOK on success. The priority status information is allocated and populated. The client application must free the buffer afterwards.

Errors:

-ENOMEM
No memory available to build the ducking status reply.
-EINVAL
Ducking output not found.

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler No
Signal handler No
Thread Yes