Alsa-Devel Archive on lore.kernel.org
 help / color / Atom feed
* Accessing pending hw_params in SND_PCM_HOOK_TYPE_HW_PARAMS call back
@ 2020-10-13 20:59 alsa
  0 siblings, 0 replies; only message in thread
From: alsa @ 2020-10-13 20:59 UTC (permalink / raw)
  To: alsa-devel

Hello,

I'll try again with a more specific question.

Is there a way one can access the hw_params that cause the 
SND_PCM_HOOK_TYPE_HW_PARAMS call back to be called inside the call back 
function?

The hook only provides access to the snd_pcm_t object, but all the 
public calls to get hw_params fail because it's not in a prepared state yet.

If there isn't a way to get them now could we please add the ability 
with a patch like the one below?

With this patch a call to snd_pcm_hook_get_hw_params provides access to 
the pending hw_params structure and the pending parameters can be 
accessed with standard calls like snd_pcm_hw_params_get_channels.

Hopefully I'm just missing how to get them without the patch, but if not 
they really should be made accessible.


diff --git a/alsa-lib-1.1.8/include/pcm.h b/pcm.h
index 5b07823..0cf5dca 100644
--- a/alsa-lib-1.1.8/include/pcm.h
+++ b/pcm.h
@@ -1181,6 +1181,7 @@ typedef struct _snd_pcm_hook snd_pcm_hook_t;
  /** PCM hook callback function */
  typedef int (*snd_pcm_hook_func_t)(snd_pcm_hook_t *hook);
  snd_pcm_t *snd_pcm_hook_get_pcm(snd_pcm_hook_t *hook);
+snd_pcm_hw_params_t *snd_pcm_hook_get_hw_params(snd_pcm_hook_t *hook);
  void *snd_pcm_hook_get_private(snd_pcm_hook_t *hook);
  void snd_pcm_hook_set_private(snd_pcm_hook_t *hook, void *private_data);
  int snd_pcm_hook_add(snd_pcm_hook_t **hookp, snd_pcm_t *pcm,



diff --git a/alsa-lib-1.1.8/src/pcm/pcm_hooks.c b/pcm_hooks.c
index 4416d36..f56c3af 100644
--- a/alsa-lib-1.1.8/src/pcm/pcm_hooks.c
+++ b/pcm_hooks.c
@@ -38,6 +38,7 @@ const char *_snd_module_pcm_hooks = "";
  #ifndef DOC_HIDDEN
  struct _snd_pcm_hook {
         snd_pcm_t *pcm;
+       snd_pcm_hw_params_t *params;
         snd_pcm_hook_func_t func;
         void *private_data;
         struct list_head list;
@@ -117,6 +118,7 @@ static int snd_pcm_hooks_hw_params(snd_pcm_t *pcm, 
snd_pcm_hw_params_t *params)
                 return err;
         list_for_each_safe(pos, next, 
&h->hooks[SND_PCM_HOOK_TYPE_HW_PARAMS]) {
                 snd_pcm_hook_t *hook = list_entry(pos, snd_pcm_hook_t, 
list);
+               hook->params = params;
                 err = hook->func(hook);
                 if (err < 0)
                         return err;
@@ -563,6 +565,17 @@ snd_pcm_t *snd_pcm_hook_get_pcm(snd_pcm_hook_t *hook)
         return hook->pcm;
  }

+/**
+ * \brief Get hw_params handle for a PCM hook
+ * \param hook PCM hook handle
+ * \return hw_params handle
+ */
+snd_pcm_hw_params_t *snd_pcm_hook_get_hw_params(snd_pcm_hook_t *hook)
+{
+       assert(hook);
+       return hook->params;
+}
+
  /**
   * \brief Get callback function private data for a PCM hook
   * \param hook PCM hook handle
@@ -609,6 +622,7 @@ int snd_pcm_hook_add(snd_pcm_hook_t **hookp, 
snd_pcm_t *pcm,
         if (!h)
                 return -ENOMEM;
         h->pcm = pcm;
+       h->params = NULL;
         h->func = func;
         h->private_data = private_data;
         hooks = pcm->private_data;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, back to index

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-13 20:59 Accessing pending hw_params in SND_PCM_HOOK_TYPE_HW_PARAMS call back alsa

Alsa-Devel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/alsa-devel/0 alsa-devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 alsa-devel alsa-devel/ https://lore.kernel.org/alsa-devel \
		alsa-devel@alsa-project.org
	public-inbox-index alsa-devel

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.alsa-project.alsa-devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git