I would like to access the mic input on my laptop through V4L2. I thought the best way to start would be to locate the API doc, read it and write a small program. The problem is, I don't know which device file to open. I have several device files that look related to audio, but when I try to perform a VIDIOC_ENUMAUDIO or VIDIOC_ENUMAUDOUT, the ioctl returns an error (usually 'Invalid Argument'). I have tried /dev/audio/ and /dev/mixer and the various files under /dev/snd. I believe the /dev/snd are ALSA devices and I believe these are what show up in /proc/asound/devices. There is no /dev/video device file.

I would like to go through V4L2 if for nothing more than to learn more about it. If I must use ALSA, then I guess I will. In any event, here is the code - hopefully it will help:

int main(int argc, char *argv[])
{
struct v4l2_audio audioParms;
int fdAudio;

fdAudio= open("/dev/snd/pcmC0D0p", O_RDWR);
if (fdAudio >= 0)
{
memset(&audioParms,0,sizeof(struct v4l2_audio));
if (ioctl(fdAudio,VIDIOC_ENUMAUDOUT,&audioParms) == 0)
{
printf("GOT PARMS\n");
}
else
{
printf("v4ltest: ERROR %d trying VIDIOC_ENUMAUDOUT on index %d\n",errno,audioParms.index);
perror("v4ltest: ioctl error ");
}
close(fdAudio);
}
else
{
perror("v4ltest: ERROR opening audio device ");
}
return (0);
}