mirror of
https://github.com/openharmony/third_party_tinyalsa.git
synced 2026-07-19 15:24:22 -04:00
@@ -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.
|
||||
@@ -205,6 +208,9 @@ int pcm_stop(struct pcm *pcm);
|
||||
int pcm_wait(struct pcm *pcm, int timeout);
|
||||
|
||||
|
||||
/* Get the pcm delay */
|
||||
long pcm_get_delay(struct pcm *pcm);
|
||||
|
||||
/*
|
||||
* MIXER API
|
||||
*/
|
||||
|
||||
@@ -170,6 +170,8 @@ struct pcm {
|
||||
struct snd_pcm_sync_ptr *sync_ptr;
|
||||
void *mmap_buffer;
|
||||
unsigned int noirq_frames_per_msec;
|
||||
long pcm_delay;
|
||||
unsigned int subdevice;
|
||||
};
|
||||
|
||||
unsigned int pcm_get_buffer_size(struct pcm *pcm)
|
||||
@@ -182,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;
|
||||
@@ -653,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(¶ms);
|
||||
param_set_mask(¶ms, SNDRV_PCM_HW_PARAM_FORMAT,
|
||||
@@ -918,7 +926,7 @@ int pcm_wait(struct pcm *pcm, int timeout)
|
||||
int err;
|
||||
|
||||
pfd.fd = pcm->fd;
|
||||
pfd.events = POLLOUT | POLLERR | POLLNVAL;
|
||||
pfd.events = POLLIN | POLLOUT | POLLERR | POLLNVAL;
|
||||
|
||||
do {
|
||||
/* let's wait for avail or timeout */
|
||||
@@ -1046,3 +1054,11 @@ int pcm_mmap_read(struct pcm *pcm, void *data, unsigned int count)
|
||||
|
||||
return pcm_mmap_transfer(pcm, data, count);
|
||||
}
|
||||
|
||||
long pcm_get_delay(struct pcm *pcm)
|
||||
{
|
||||
if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_DELAY, &pcm->pcm_delay) < 0)
|
||||
return -1;
|
||||
|
||||
return pcm->pcm_delay;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user