mirror of
https://github.com/CTCaer/RetroArch.git
synced 2024-12-19 08:46:57 +00:00
(tinyalsa) Add pcm_pause.
This commit is contained in:
parent
60296c0b7d
commit
645bae4931
@ -1387,6 +1387,8 @@ restart:
|
||||
return x.result;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Unused for now */
|
||||
/** Starts a PCM.
|
||||
* If the PCM has not been prepared,
|
||||
* it is prepared in this function.
|
||||
@ -1413,9 +1415,6 @@ static int pcm_start(struct pcm *pcm)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Unused for now */
|
||||
|
||||
/** Reads audio samples from PCM.
|
||||
* If the PCM has not been started, it is started in this function.
|
||||
* This function is only valid for PCMs opened with the @ref PCM_IN flag.
|
||||
@ -1719,6 +1718,22 @@ static int pcm_stop(struct pcm *pcm)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pcm_can_pause(struct pcm *pcm)
|
||||
{
|
||||
if (ioctl(pcm->fd, SNDRV_PCM_INFO_PAUSE) < 0)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int pcm_pause(struct pcm *pcm, int enable)
|
||||
{
|
||||
if (ioctl(pcm->fd, SNDRV_PCM_IOCTL_PAUSE, enable) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Closes a PCM returned by @ref pcm_open.
|
||||
* @param pcm A PCM returned by @ref pcm_open.
|
||||
* May not be NULL.
|
||||
@ -2203,10 +2218,10 @@ static void * tinyalsa_init(const char *devicestr, unsigned rate,
|
||||
PCM_FORMAT_S16_LE : PCM_FORMAT_S16_BE;
|
||||
config.channels = 2;
|
||||
config.period_size = 1024;
|
||||
config.period_count = 2;
|
||||
config.start_threshold = 1024;
|
||||
config.stop_threshold = 1024 * 2;
|
||||
config.silence_threshold = 1024 * 2;
|
||||
config.period_count = 4;
|
||||
config.start_threshold = config.period_size;
|
||||
config.stop_threshold = 0;
|
||||
config.silence_threshold = 0;
|
||||
|
||||
tinyalsa->pcm = pcm_open(card, device, PCM_OUT, &config);
|
||||
|
||||
@ -2221,6 +2236,11 @@ static void * tinyalsa_init(const char *devicestr, unsigned rate,
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (pcm_can_pause(tinyalsa->pcm))
|
||||
tinyalsa->can_pause = true;
|
||||
|
||||
RARCH_LOG("[TINYALSA]: Can pause: %s.\n", tinyalsa->can_pause ? "yes" : "no");
|
||||
|
||||
buffer_size = pcm_get_buffer_size(tinyalsa->pcm);
|
||||
tinyalsa->buffer_size = pcm_frames_to_bytes(tinyalsa->pcm, buffer_size);
|
||||
tinyalsa->frame_bits = pcm_format_to_bits(config.format) * 2;
|
||||
@ -2238,7 +2258,6 @@ static void * tinyalsa_init(const char *devicestr, unsigned rate,
|
||||
latency -= (unsigned int)initial_latency;
|
||||
buffer_size += latency * frames_per_ms;
|
||||
|
||||
tinyalsa->can_pause = true;
|
||||
tinyalsa->has_float = false;
|
||||
|
||||
RARCH_LOG("[TINYALSA]: Audio rate: %uHz.\n", config.rate);
|
||||
@ -2308,7 +2327,7 @@ tinyalsa_stop(void *data)
|
||||
|
||||
if (tinyalsa->can_pause && !tinyalsa->is_paused)
|
||||
{
|
||||
int ret = pcm_start(tinyalsa->pcm);
|
||||
int ret = pcm_pause(tinyalsa->pcm, 1);
|
||||
if (ret < 0)
|
||||
return false;
|
||||
|
||||
@ -2336,7 +2355,7 @@ tinyalsa_start(void *data, bool is_shutdown)
|
||||
|
||||
if (tinyalsa->can_pause && tinyalsa->is_paused)
|
||||
{
|
||||
int ret = pcm_stop(tinyalsa->pcm);
|
||||
int ret = pcm_pause(tinyalsa->pcm, 0);
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user