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:
Andreas Pape 2017-03-21 18:28:18 +05:30 committed by Takashi Iwai
parent 7c2093b1c1
commit 653faa8991

View file

@ -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;