From a978b4912731fca16779315b6be8c9b98714f586 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 26 Jul 2001 13:52:43 +0000 Subject: [PATCH] Added missing tests for hw_params->info. --- include/pcm.h | 9 ++++ src/pcm/pcm.c | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) diff --git a/include/pcm.h b/include/pcm.h index fa514422..0f0fc84a 100644 --- a/include/pcm.h +++ b/include/pcm.h @@ -356,6 +356,15 @@ snd_pcm_stream_t snd_pcm_stream(snd_pcm_t *pcm); /* HW params */ int snd_pcm_hw_params_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_mmap_sample_resolution(const snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_double(const snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_batch(const snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_block_transfer(const snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_overrange(const snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_pause(const snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_half_duplex(const snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_joint_duplex(const snd_pcm_hw_params_t *params); +int snd_pcm_hw_params_is_sync_start(const snd_pcm_hw_params_t *params); int snd_pcm_hw_params_get_rate_numden(const snd_pcm_hw_params_t *params, unsigned int *rate_num, unsigned int *rate_den); diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index 550c7e26..d5a9b356 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -1515,6 +1515,123 @@ int snd_pcm_hw_params_dump(snd_pcm_hw_params_t *params, snd_output_t *out) return 0; } +/** + * \brief Check, if hardware supports sample-resolution mmap for given configuration + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't support sample-resolution mmap + * \retval 1 Hardware supports sample-resolution mmap + */ +int snd_pcm_hw_params_is_mmap_sample_resolution(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_MMAP_VALID); +} + +/** + * \brief Check, if hardware does double buffering for start/stop for given configuration + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't do double buffering for start/stop + * \retval 1 Hardware does double buffering for start/stop + */ +int snd_pcm_hw_params_is_double(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_DOUBLE); +} + +/** + * \brief Check, if hardware does double buffering for data transfers for given configuration + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't do double buffering for data transfers + * \retval 1 Hardware does double buffering for data transfers + */ +int snd_pcm_hw_params_is_batch(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_BATCH); +} + +/** + * \brief Check, if hardware does block transfers for samples for given configuration + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't block transfers + * \retval 1 Hardware does block transfers + */ +int snd_pcm_hw_params_is_block_transfer(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_BLOCK_TRANSFER); +} + +/** + * \brief Check, if hardware supports overrange detection + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't support overrange detection + * \retval 1 Hardware supports overrange detection + */ +int snd_pcm_hw_params_is_overrange(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_OVERRANGE); +} + +/** + * \brief Check, if hardware supports pause + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't support pause + * \retval 1 Hardware supports pause + */ +int snd_pcm_hw_params_is_pause(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_PAUSE); +} + +/** + * \brief Check, if hardware does half-duplex only + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't do half-duplex + * \retval 1 Hardware does half-duplex + */ +int snd_pcm_hw_params_is_half_duplex(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_HALF_DUPLEX); +} + +/** + * \brief Check, if hardware does joint-duplex (playback and capture are somewhat correlated) + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't do joint-duplex + * \retval 1 Hardware does joint-duplex + */ +int snd_pcm_hw_params_is_joint_duplex(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_JOINT_DUPLEX); +} + +/** + * \brief Check, if hardware supports synchronized start with sample resolution + * \param param Configuration space + * \return Boolean value + * \retval 0 Hardware doesn't support synchronized start + * \retval 1 Hardware supports synchronized start + */ +int snd_pcm_hw_params_is_sync_start(const snd_pcm_hw_params_t *params) +{ + assert(params); + return !!(params->info & SNDRV_PCM_INFO_SYNC_START); +} + /** * \brief Get rate exact info from a configuration space * \param params Configuration space -- 2.47.1