mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
pcm: implement snd_pcm_hw_params_get_sync() and obsolete snd_pcm_info_get_sync()
Use the new clock source mechanism to get information about similar PCM clock sources for PCM streams. Link: https://lore.kernel.org/linux-sound/20240625172836.589380-1-perex@perex.cz/ Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
9b6dfb3eb6
commit
b154d9145f
3 changed files with 32 additions and 5 deletions
|
|
@ -508,6 +508,9 @@ typedef union _snd_pcm_sync_id {
|
||||||
unsigned int id32[4];
|
unsigned int id32[4];
|
||||||
} snd_pcm_sync_id_t;
|
} snd_pcm_sync_id_t;
|
||||||
|
|
||||||
|
/** synchronization ID size (see snd_pcm_hw_params_get_sync) */
|
||||||
|
#define SND_PCM_HW_PARAMS_SYNC_SIZE 16
|
||||||
|
|
||||||
/** Infinite wait for snd_pcm_wait() */
|
/** Infinite wait for snd_pcm_wait() */
|
||||||
#define SND_PCM_WAIT_INFINITE (-1)
|
#define SND_PCM_WAIT_INFINITE (-1)
|
||||||
/** Wait for next i/o in snd_pcm_wait() */
|
/** Wait for next i/o in snd_pcm_wait() */
|
||||||
|
|
@ -747,6 +750,7 @@ int snd_pcm_hw_params_get_rate_numden(const snd_pcm_hw_params_t *params,
|
||||||
unsigned int *rate_den);
|
unsigned int *rate_den);
|
||||||
int snd_pcm_hw_params_get_sbits(const snd_pcm_hw_params_t *params);
|
int snd_pcm_hw_params_get_sbits(const snd_pcm_hw_params_t *params);
|
||||||
int snd_pcm_hw_params_get_fifo_size(const snd_pcm_hw_params_t *params);
|
int snd_pcm_hw_params_get_fifo_size(const snd_pcm_hw_params_t *params);
|
||||||
|
const unsigned char * snd_pcm_hw_params_get_sync(const snd_pcm_hw_params_t *params);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
typedef struct _snd_pcm_hw_strategy snd_pcm_hw_strategy_t;
|
typedef struct _snd_pcm_hw_strategy snd_pcm_hw_strategy_t;
|
||||||
|
|
|
||||||
|
|
@ -426,7 +426,8 @@ struct snd_pcm_hw_params {
|
||||||
unsigned int rate_num; /* R: rate numerator */
|
unsigned int rate_num; /* R: rate numerator */
|
||||||
unsigned int rate_den; /* R: rate denominator */
|
unsigned int rate_den; /* R: rate denominator */
|
||||||
snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */
|
snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */
|
||||||
unsigned char reserved[64]; /* reserved for future */
|
unsigned char sync[16]; /* R: synchronization ID (perfect sync - one clock source) */
|
||||||
|
unsigned char reserved[48]; /* reserved for future */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
|
||||||
|
|
@ -494,8 +494,8 @@ software parameter.
|
||||||
There are two functions allowing link multiple streams together. In the
|
There are two functions allowing link multiple streams together. In the
|
||||||
case, the linking means that all operations are synchronized. Because the
|
case, the linking means that all operations are synchronized. Because the
|
||||||
drivers cannot guarantee the synchronization (sample resolution) on hardware
|
drivers cannot guarantee the synchronization (sample resolution) on hardware
|
||||||
lacking this feature, the #snd_pcm_info_get_sync() function
|
lacking this feature, the #snd_pcm_hw_params_get_sync() function
|
||||||
returns synchronization ID - #snd_pcm_sync_id_t, which is equal
|
returns 16-byte synchronization ID, which is equal
|
||||||
for hardware synchronized streams. When the #snd_pcm_link()
|
for hardware synchronized streams. When the #snd_pcm_link()
|
||||||
function is called, all operations managing the stream state for these two
|
function is called, all operations managing the stream state for these two
|
||||||
streams are joined. The opposite function is #snd_pcm_unlink().
|
streams are joined. The opposite function is #snd_pcm_unlink().
|
||||||
|
|
@ -3948,6 +3948,25 @@ int snd_pcm_hw_params_get_fifo_size(const snd_pcm_hw_params_t *params)
|
||||||
return params->fifo_size;
|
return params->fifo_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Get hardware synchronization ID from a PCM info container
|
||||||
|
* \param params Configuration space
|
||||||
|
* \return 16-byte synchronization ID (use #SND_PCM_HW_PARAMS_SYNC_SIZE)
|
||||||
|
*
|
||||||
|
* This synchronization ID determines the similar clocks for the
|
||||||
|
* PCM stream between multiple devices (including different cards).
|
||||||
|
* "All zeros" means "not set". The contents of the ID can be used
|
||||||
|
* only for a comparison with the contents of another ID returned
|
||||||
|
* from this function. Applications should not do a comparison with
|
||||||
|
* hard-coded values, because the implementation generating such
|
||||||
|
* synchronization IDs may be changed in future.
|
||||||
|
*/
|
||||||
|
const unsigned char *snd_pcm_hw_params_get_sync(const snd_pcm_hw_params_t *params)
|
||||||
|
{
|
||||||
|
assert(params);
|
||||||
|
return params->sync;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Fill params with a full configuration space for a PCM
|
* \brief Fill params with a full configuration space for a PCM
|
||||||
* \param pcm PCM handle
|
* \param pcm PCM handle
|
||||||
|
|
@ -7332,7 +7351,7 @@ unsigned int snd_pcm_info_get_subdevices_avail(const snd_pcm_info_t *obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Get hardware synchronization ID from a PCM info container
|
* \brief (DEPRECATED) Get hardware synchronization ID from a PCM info container
|
||||||
* \param obj PCM info container
|
* \param obj PCM info container
|
||||||
* \return hardware synchronization ID
|
* \return hardware synchronization ID
|
||||||
*/
|
*/
|
||||||
|
|
@ -7340,9 +7359,12 @@ snd_pcm_sync_id_t snd_pcm_info_get_sync(const snd_pcm_info_t *obj)
|
||||||
{
|
{
|
||||||
snd_pcm_sync_id_t res;
|
snd_pcm_sync_id_t res;
|
||||||
assert(obj);
|
assert(obj);
|
||||||
memcpy(&res, &obj->sync, sizeof(res));
|
bzero(&res, sizeof(res));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
#ifndef DOC_HIDDEN
|
||||||
|
link_warning(snd_pcm_info_get_sync, "Warning: snd_pcm_info_get_sync is deprecated, consider to use snd_pcm_hw_params_get_sync");
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set wanted device inside a PCM info container (see #snd_ctl_pcm_info)
|
* \brief Set wanted device inside a PCM info container (see #snd_ctl_pcm_info)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue