case SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE:
ctrl->result = snd_ctl_pcm_next_device(ctl, &ctrl->u.device);
break;
- case SND_CTL_IOCTL_PCM_SURROUND_NEXT_DEVICE:
- ctrl->result = snd_ctl_pcm_surround_next_device(ctl, ctrl->u.surround.type, &ctrl->u.surround.device);
- break;
case SNDRV_CTL_IOCTL_PCM_INFO:
ctrl->result = snd_ctl_pcm_info(ctl, &ctrl->u.pcm_info);
break;
#define SND_CTL_IOCTL_CLOSE _IO ('U', 0xf2)
#define SND_CTL_IOCTL_POLL_DESCRIPTOR _IO ('U', 0xf3)
#define SND_CTL_IOCTL_ASYNC _IO ('U', 0xf4)
-#define SND_CTL_IOCTL_PCM_SURROUND_NEXT_DEVICE _IO ('U', 0xf5)
typedef struct {
int result;
pid_t pid;
} async;
int device;
- struct {
- snd_pcm_surround_type_t type;
- int device;
- } surround;
int subscribe_events;
snd_ctl_card_info_t card_info;
snd_ctl_elem_list_t element_list;
int snd_ctl_hwdep_next_device(snd_ctl_t *ctl, int * device);
int snd_ctl_hwdep_info(snd_ctl_t *ctl, snd_hwdep_info_t * info);
int snd_ctl_pcm_next_device(snd_ctl_t *ctl, int *device);
-int snd_ctl_pcm_surround_next_device(snd_ctl_t *ctl, snd_pcm_surround_type_t type, int *device);
int snd_ctl_pcm_info(snd_ctl_t *ctl, snd_pcm_info_t * info);
int snd_ctl_pcm_prefer_subdevice(snd_ctl_t *ctl, int subdev);
int snd_ctl_rawmidi_next_device(snd_ctl_t *ctl, int * device);
SND_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_LAST,
} snd_pcm_tstamp_t;
-/** Surround type */
-typedef enum _snd_pcm_surround_type {
- /** 4.0 speakers */
- SND_PCM_SURROUND_40 = 0,
- /** 5.1 speakers */
- SND_PCM_SURROUND_51 = 1,
- SND_PCM_SURROUND_LAST = SND_PCM_SURROUND_51
-} snd_pcm_surround_type_t;
-
/** Unsigned frames quantity */
typedef sndrv_pcm_uframes_t snd_pcm_uframes_t;
/** Signed frames quantity */
return ctl->ops->pcm_next_device(ctl, device);
}
-/**
- * \brief Get next PCM surround device number
- * \param ctl CTL handle
- * \param type surround type
- * \param device current device on entry and next device on return
- * \return 0 on success otherwise a negative error code
- */
-int snd_ctl_pcm_surround_next_device(snd_ctl_t *ctl, snd_pcm_surround_type_t type, int * device)
-{
- assert(ctl && device);
- return ctl->ops->pcm_surround_next_device(ctl, type, device);
-}
-
/**
* \brief Get info about a PCM device
* \param ctl CTL handle
return 0;
}
-extern int snd_pcm_surround_next_device(snd_ctl_t *ctl, snd_pcm_surround_type_t type, int *device);
-
-static int snd_ctl_hw_pcm_surround_next_device(snd_ctl_t *handle, snd_pcm_surround_type_t type, int * device)
-{
- return snd_pcm_surround_next_device(handle, type, device);
-}
-
static int snd_ctl_hw_pcm_info(snd_ctl_t *handle, snd_pcm_info_t * info)
{
snd_ctl_hw_t *hw = handle->private_data;
hwdep_next_device: snd_ctl_hw_hwdep_next_device,
hwdep_info: snd_ctl_hw_hwdep_info,
pcm_next_device: snd_ctl_hw_pcm_next_device,
- pcm_surround_next_device: snd_ctl_hw_pcm_surround_next_device,
pcm_info: snd_ctl_hw_pcm_info,
pcm_prefer_subdevice: snd_ctl_hw_pcm_prefer_subdevice,
rawmidi_next_device: snd_ctl_hw_rawmidi_next_device,
int (*hwdep_next_device)(snd_ctl_t *handle, int *device);
int (*hwdep_info)(snd_ctl_t *handle, snd_hwdep_info_t * info);
int (*pcm_next_device)(snd_ctl_t *handle, int *device);
- int (*pcm_surround_next_device)(snd_ctl_t *handle, snd_pcm_surround_type_t type, int *device);
int (*pcm_info)(snd_ctl_t *handle, snd_pcm_info_t * info);
int (*pcm_prefer_subdevice)(snd_ctl_t *handle, int subdev);
int (*rawmidi_next_device)(snd_ctl_t *handle, int *device);
return err;
}
-static int snd_ctl_shm_pcm_surround_next_device(snd_ctl_t *ctl, snd_pcm_surround_type_t type, int * device)
-{
- snd_ctl_shm_t *shm = ctl->private_data;
- volatile snd_ctl_shm_ctrl_t *ctrl = shm->ctrl;
- int err;
- ctrl->u.surround.type = type;
- ctrl->u.surround.device = *device;
- ctrl->cmd = SND_CTL_IOCTL_PCM_SURROUND_NEXT_DEVICE;
- err = snd_ctl_shm_action(ctl);
- if (err < 0)
- return err;
- *device = ctrl->u.device;
- return err;
-}
-
static int snd_ctl_shm_pcm_info(snd_ctl_t *ctl, snd_pcm_info_t * info)
{
snd_ctl_shm_t *shm = ctl->private_data;
hwdep_next_device: snd_ctl_shm_hwdep_next_device,
hwdep_info: snd_ctl_shm_hwdep_info,
pcm_next_device: snd_ctl_shm_pcm_next_device,
- pcm_surround_next_device: snd_ctl_shm_pcm_surround_next_device,
pcm_info: snd_ctl_shm_pcm_info,
pcm_prefer_subdevice: snd_ctl_shm_pcm_prefer_subdevice,
rawmidi_next_device: snd_ctl_shm_rawmidi_next_device,
#define SND_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_LAST_INTERVAL
#define SND_PCM_HW_PARAM_FIRST_INTERVAL SNDRV_PCM_HW_PARAM_FIRST_INTERVAL
+/** Surround type */
+typedef enum _snd_pcm_surround_type {
+ /** 4.0 speakers */
+ SND_PCM_SURROUND_40 = 0,
+ /** 5.1 speakers */
+ SND_PCM_SURROUND_51 = 1,
+ SND_PCM_SURROUND_LAST = SND_PCM_SURROUND_51
+} snd_pcm_surround_type_t;
+
typedef struct _snd_pcm_channel_info {
unsigned int channel;
void *addr; /* base address of channel samples */
(1U << SND_PCM_FORMAT_U32_LE) | \
(1U << SND_PCM_FORMAT_U32_BE))
-
}
return snd_pcm_surround_open(pcmp, name, card, device, type, stream, mode);
}
-
-int snd_pcm_surround_next_device(snd_ctl_t *ctl, snd_pcm_surround_type_t type, int *device)
-{
- int err;
- snd_ctl_card_info_t *info;
- snd_card_type_t ctype;
- surround_open_t *po;
-
- assert(device);
- snd_ctl_card_info_alloca(&info);
- if ((err = snd_ctl_card_info(ctl, info)) < 0)
- return err;
- ctype = snd_ctl_card_info_get_type(info);
- for (po = open_table; po->type != SND_CARD_TYPE_NONE; po++) {
- if (po->type == ctype) {
- switch (type) {
- case SND_PCM_SURROUND_40:
- if (po->flags & SURR_FLG_NO_4CH)
- return -ENODEV;
- break;
- case SND_PCM_SURROUND_51:
- if (po->flags & SURR_FLG_NO_6CH)
- return -ENODEV;
- break;
- }
- if ((err = po->scount(ctl, info, type)) < 0)
- return err;
- if (err == 0)
- return -ENODEV;
- if (*device == 0)
- *device = 0;
- (*device)++;
- if (*device >= err)
- *device = -1;
- return 0;
- }
- }
- return -ENODEV;
-}