[PATCH v2] alsaloop: added option prateshift for PLAYSHIFT ctl elem used in PLAYSHIFT
Jaroslav Kysela
perex at perex.cz
Wed Oct 13 09:01:10 CEST 2021
On 05. 10. 21 21:49, Pavel Hofman wrote:
> -static void openctl_elem(struct loopback_handle *lhandle,
> - int device, int subdevice,
> - const char *name,
> - snd_ctl_elem_value_t **elem)
> +static int openctl_elem_id(struct loopback_handle *lhandle, snd_ctl_elem_id_t *id,
> + snd_ctl_elem_value_t **elem)
> {
> int err;
>
> if (snd_ctl_elem_value_malloc(elem) < 0) {
> *elem = NULL;
> + snd_ctl_elem_id_free(id);
> + return -ENOMEM;
> + }
> + snd_ctl_elem_value_set_id(*elem, id);
> + snd_ctl_elem_value_set_interface(*elem, SND_CTL_ELEM_IFACE_PCM);
> + err = snd_ctl_elem_read(lhandle->ctl, *elem);
> + if (err < 0) {
> + snd_ctl_elem_id_free(id);
Move the id allocation management to the caller.
> + snd_ctl_elem_value_free(*elem);
> + *elem = NULL;
> + return err;
> } else {
> - snd_ctl_elem_value_set_interface(*elem,
> - SND_CTL_ELEM_IFACE_PCM);
> - snd_ctl_elem_value_set_device(*elem, device);
> - snd_ctl_elem_value_set_subdevice(*elem, subdevice);
> - snd_ctl_elem_value_set_name(*elem, name);
> - err = snd_ctl_elem_read(lhandle->ctl, *elem);
> - if (err < 0) {
> - snd_ctl_elem_value_free(*elem);
> - *elem = NULL;
> - } else {
> - if (verbose)
> - snd_output_printf(lhandle->loopback->output,
> - "Opened PCM element %s of %s, device %d, subdevice %d\n",
> - name, snd_ctl_name(lhandle->ctl), device, subdevice);
> - }
> + snd_output_printf(lhandle->loopback->output,
> + "Opened PCM element %s of %s, device %d, subdevice %d\n",
> + snd_ctl_elem_id_get_name(id), snd_ctl_name(lhandle->ctl),
> + snd_ctl_elem_id_get_device(id),
> + snd_ctl_elem_id_get_subdevice(id));
> + return 0;
> }
> }
>
> +static int openctl_elem(struct loopback_handle *lhandle,
> + int device, int subdevice,
> + const char *name,
> + snd_ctl_elem_value_t **elem)
> +{
> + snd_ctl_elem_id_t *id;
> +
> + if (snd_ctl_elem_id_malloc(&id))
> + return -ENOMEM;
> + snd_ctl_elem_id_set_device(id, device);
> + snd_ctl_elem_id_set_subdevice(id, subdevice);
> + snd_ctl_elem_id_set_name(id, name);
> + return openctl_elem_id(lhandle, id, elem);
Missing snd_ctl_elem_id_free(id). Eventually, the id may be allocated using
snd_ctl_elem_id_alloca().
> +}
> +
> +static int openctl_elem_ascii(struct loopback_handle *lhandle, char *ascii_name,
> + snd_ctl_elem_value_t **elem)
> +{
> + snd_ctl_elem_id_t *id;
> +
> + if (snd_ctl_elem_id_malloc(&id)) {
> + return -ENOMEM;
> + }
> + if (snd_ctl_ascii_elem_id_parse(id, ascii_name)) {
> + snd_ctl_elem_id_free(id);
> + fprintf(stderr, "Wrong control identifier: %s\n", ascii_name);
> + return -EINVAL;
> + }
> + return openctl_elem_id(lhandle, id, elem);
Missing snd_ctl_elem_id_free(id). Eventually, the id may be allocated using
snd_ctl_elem_id_alloca().
Jaroslav
--
Jaroslav Kysela <perex at perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.
More information about the Alsa-devel
mailing list