mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-31 22:25:35 -04:00
pcm:plug: save converter config
Passed config is freed after call to open, thus it is invalid when trying to extract the converter name. So config entry is saved for later usage. Signed-off-by: Andreas Pape <apape@de.adit-jv.com> Signed-off-by: Mounesh Sutar <sutar.mounesh@gmail.com> Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7c2093b1c1
commit
653faa8991
1 changed files with 14 additions and 2 deletions
|
|
@ -50,7 +50,7 @@ typedef struct {
|
|||
snd_pcm_format_t sformat;
|
||||
int schannels;
|
||||
int srate;
|
||||
const snd_config_t *rate_converter;
|
||||
snd_config_t *rate_converter;
|
||||
enum snd_pcm_plug_route_policy route_policy;
|
||||
snd_pcm_route_ttable_entry_t *ttable;
|
||||
int ttable_ok;
|
||||
|
|
@ -64,6 +64,10 @@ static int snd_pcm_plug_close(snd_pcm_t *pcm)
|
|||
snd_pcm_plug_t *plug = pcm->private_data;
|
||||
int err, result = 0;
|
||||
free(plug->ttable);
|
||||
if (plug->rate_converter) {
|
||||
snd_config_delete(plug->rate_converter);
|
||||
plug->rate_converter = NULL;
|
||||
}
|
||||
assert(plug->gen.slave == plug->req_slave);
|
||||
if (plug->gen.close_slave) {
|
||||
snd_pcm_unlink_hw_ptr(pcm, plug->req_slave);
|
||||
|
|
@ -1108,7 +1112,6 @@ int snd_pcm_plug_open(snd_pcm_t **pcmp,
|
|||
plug->sformat = sformat;
|
||||
plug->schannels = schannels;
|
||||
plug->srate = srate;
|
||||
plug->rate_converter = rate_converter;
|
||||
plug->gen.slave = plug->req_slave = slave;
|
||||
plug->gen.close_slave = close_slave;
|
||||
plug->route_policy = route_policy;
|
||||
|
|
@ -1125,6 +1128,15 @@ int snd_pcm_plug_open(snd_pcm_t **pcmp,
|
|||
pcm->ops = &snd_pcm_plug_ops;
|
||||
pcm->fast_ops = slave->fast_ops;
|
||||
pcm->fast_op_arg = slave->fast_op_arg;
|
||||
if (rate_converter) {
|
||||
err = snd_config_copy(&plug->rate_converter,
|
||||
(snd_config_t *)rate_converter);
|
||||
if (err < 0) {
|
||||
snd_pcm_free(pcm);
|
||||
free(plug);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
pcm->private_data = plug;
|
||||
pcm->poll_fd = slave->poll_fd;
|
||||
pcm->poll_events = slave->poll_events;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue