[alsa-devel] snd_pcm_hw_params_free() immediately after snd_pcm_hw_params() ???
Takashi Iwai
tiwai at suse.de
Thu Jan 21 07:59:41 CET 2010
At Thu, 21 Jan 2010 12:32:20 +0800,
Raymond Yau wrote:
>
> Refer to
> http://www.alsa-project.org/~tiwai/writing-an-alsa-driver/ch05s06.html#pcm-interface-operators-hw-free-callback
>
> hw_free callback
>
> static int snd_xxx_hw_free(struct snd_pcm_substream *substream);
>
> This is called to release the resources allocated via
> *hw_params*. For example, releasing the
> buffer via snd_pcm_lib_malloc_pages() is done by
> calling the following:
> snd_pcm_lib_free_pages(substream);
>
> This function is always called before the close callback is called.
> Also, the callback may be called multiple times, too.
> Keep track whether the resource was already released.
> Nearly all the examples in those ALSA tutorials in the web sites have the code
>
>
> if ((err = snd_pcm_hw_params (playback_handle, hw_params)) < 0) {
> fprintf (stderr, "cannot set parameters (%s)\n",
> snd_strerror (err));
> exit (1);
> }
>
> snd_pcm_hw_params_free (hw_params);
>
> This seem to violate "This function is always called before the close
> callback is called."
>
> and those hardware mixing sound cards (e.g cs46xx , au88x0, ... ) use
> snd_xxx_hw_free() to deallocate the hardware mixing path in the DSP.
>
> There are a number of audio package (e.g. gstreamer , wine , .... )
> call snd_pcm_hw_params_free immediately after snd_pcm_hw_params()
>
> Is this a bug of snd_pcm_hw_params_free() not change the state of the
> PCM stream ?
Confusingly, snd_pcm_hw_params_free() and snd_pcm_hw_free() are
different.
The former is just to free the malloced snd_pcm_hw_params struct
while the latter corresponds to snd_xxx_hw_free().
Takashi
More information about the Alsa-devel
mailing list