aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Wagner <david.wagner@intel.com>2014-04-02 15:12:54 +0200
committerVinod Koul <vinod.koul@intel.com>2014-08-12 14:04:32 +0530
commit4cddf19dfcf65e6fb1277a3230fd0fe509ec7e81 (patch)
tree912ab5aaa742278190c8cd832f4ded4cf322c0fa
parent9ecb93fb6b4474bee5e700e65663af15088c97c2 (diff)
tinyalsa: add pcm_get_subdevice()
The users of tinyalsa had no way of knowing on which subdevice a stream had been created. A new API, "unsigned int pcm_get_subdevice(struct *pcm)" returns it. This information is filled during the pcm_open() Change-Id: Ie866e10e06ce6691ede09e2ca46a24441723ea8b Signed-off-by: David Wagner <david.wagner@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r--include/tinyalsa/asoundlib.h3
-rw-r--r--pcm.c7
2 files changed, 10 insertions, 0 deletions
diff --git a/include/tinyalsa/asoundlib.h b/include/tinyalsa/asoundlib.h
index eb3e4c4..045c8b5 100644
--- a/include/tinyalsa/asoundlib.h
+++ b/include/tinyalsa/asoundlib.h
@@ -179,6 +179,9 @@ unsigned int pcm_bytes_to_frames(struct pcm *pcm, unsigned int bytes);
int pcm_get_htimestamp(struct pcm *pcm, unsigned int *avail,
struct timespec *tstamp);
+/* Returns the subdevice on which the pcm has been opened */
+unsigned int pcm_get_subdevice(struct pcm *pcm);
+
/* Write data to the fifo.
* Will start playback on the first write or on a write that
* occurs after a fifo underrun.
diff --git a/pcm.c b/pcm.c
index 90c9dad..d58d6a3 100644
--- a/pcm.c
+++ b/pcm.c
@@ -171,6 +171,7 @@ struct pcm {
void *mmap_buffer;
unsigned int noirq_frames_per_msec;
long pcm_delay;
+ unsigned int subdevice;
};
unsigned int pcm_get_buffer_size(struct pcm *pcm)
@@ -183,6 +184,11 @@ const char* pcm_get_error(struct pcm *pcm)
return pcm->error;
}
+unsigned int pcm_get_subdevice(struct pcm *pcm)
+{
+ return pcm->subdevice;
+}
+
static int oops(struct pcm *pcm, int e, const char *fmt, ...)
{
va_list ap;
@@ -654,6 +660,7 @@ struct pcm *pcm_open(unsigned int card, unsigned int device,
oops(pcm, errno, "cannot get info");
goto fail_close;
}
+ pcm->subdevice = info.subdevice;
param_init(&params);
param_set_mask(&params, SNDRV_PCM_HW_PARAM_FORMAT,