[FFmpeg-devel] [PATCH] ALSA for libavdevice
Nicolas George
nicolas.george
Mon Dec 29 12:43:11 CET 2008
Le nonidi 9 niv?se, an CCXVII, Luca Abeni a ?crit?:
> Ok; since I had some non working alsa installations, I decided to have a
> better look at this issue... I downloaded the source for the latest alsa
> 1) It seems that my alsa library is configured to use
> "pcm_dsnoop" (whatever it is :), whereas Nicolas is probably using
> "pcm_hw". Now, I do not really know what "dsnoop" is, nor why my alsa is
> trying to use it (I did not change anything in my alsa
> configuration...).
Thanks for your efforts. I could reproduce the problem and submit an entry
to the ALSA bug tracking system:
https://bugtrack.alsa-project.org/alsa-bug/view.php?id=4308
dsnoop is a plugin, the equivalent for capture to the playback-only plugin
"dmix". What they do is: they put the memory buffer of the hardware device
in a shared memory segment, thus allowing several process to
capture from / playback to the same device at the same time (which is a very
commonly wanted feature and rarely available in hardware) without the need
of a running server (like esd or artsd).
I suppose that most distributions come with a default setup that looks like
that:
,-> dsnoop -.
default -> plug -> asym < >-> hw
'-> dmix -'
(asym is a plugin that can connect to a different PCM for capture and
playback; plug is a plugin that converts any input format into the nearest
possible output format)
As for me, I always set the device explicitly when I do capture, so I did
not bother to configure anything for the capture in my default chain.
> This is probably why Nicolas is not seeing the
> problem I am experiencing. How can I use "pcm_hw" instead of this broken
> dsnoop?
I suppose you used something like "-f alsa -i ''"? You just need to give as
input the name of a PCM that does not have the dsnoop plugin in it. You
probably want to use either "-f alsa -ac 2 -i hw" or "-f alsa -i plughw"
(optionally with hw:42 instead of just hw if you want tu use the sound card
#42 in your system).
Can you confirm this works for you?
> I think that your current code is the best solution in the long term,
> but we really need a fallback solution until alsa lib is fixed (or we
> need to document how to use "pcm_hw" instead of "pcm_dsnoop").
> Maybe a possible solution is to have a configure check for the presence
> of snd_pcm_htimestamp(), and to provide some mechanism for allowing the
> user to disable the usage of such function (if alsalib provides it, but
> it is broken)...
With the results of our common analysis of the problem, I do not think it is
worth cluttering ffmpeg with workarounds for this bug: documenting that
ffmpeg does not work with the dsnoop plugin is enough.
As for where put that documentation, I am not really sure. Maybe something
like that:
if (snd_pcm_type(s->h) != SND_PCM_TYPE_HW)
av_log(s1, AV_LOG_WARNING,
"capture with some ALSA plugins, especially dsnoop, "
"may hang.\n");
Adding more details, including a link to the bug-tracker entry, somewhere
would be nice, but I have absolutely no idea where to put it.
Regards,
--
Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20081229/122a6e2d/attachment.pgp>
More information about the ffmpeg-devel
mailing list