Chinaunix首页 | 论坛 | 博客
  • 博客访问: 537490
  • 博文数量: 119
  • 博客积分: 3391
  • 博客等级: 中校
  • 技术积分: 981
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-12 11:49
文章分类

全部博文(119)

文章存档

2014年(3)

2013年(1)

2011年(18)

2010年(27)

2009年(70)

我的朋友

分类: LINUX

2010-04-09 15:55:14

1.5 音频输入或输出

音频输入和输出是一个设备的物理连接体。每一个视频捕获设备有零或若干个输入端,每一个输出设备有零或若干个输入端。广播设备没有音频输入或输出。他们只有一个实际上是音频源的调谐器,但是这个API仅将这些调谐器与视频输入或输出连接,而无线电设备没有这些。电视卡中能够将收到的音频信号回送至音频卡的连接器,我们不认为是是一种视频输出。

音频和视频的输出和输入是关联的。在选择了一个视频源的同时也选择了一个音频源。当视、音频源是一个调谐器时这一点显示的最明显。更多的音频连接器能够连接不止一个的视频输入或输出。假设存在两个混合的视频输入和两个音频输入,这里可能最多有4个有效的结合体。视频和音频连接器的关系定义在各自结构体v4l2_inputstruct v4l2_output中的audioset域中。在这些结构体中,每一个元素都代表着一个音频输入或输出的索引号,该所引号从零开始。

可以通过分别使用VIDIOC_ENUMAUDIOVIDIOC_ENUMAUDOUTioctl来获得可见的输入和输出应用的数目和属性。当当前的音频输入被询问时,由VIDIOC_ENUMAUDIOioctl返回的结构体v4l2_audio也含有适当的信号属性信息。

通过使用参数是VIDIOC_G_AUDIOVIDIOC_G_AUDOUTioctl可以分别得到当前的音频输入和输出信息。请注意,像VIDIOC_ENUMAUDIOVIDIOC_ENUMAUDOUT这样的ioctl返回一个结构体,而并不像VIDIOC_G_INPUTVIDIOC_G_OUTPUT那样,只返回一个索引号。

应用程序通过调用参数是VIDIOC_S_AUDIOioctl来选择一个音频输入并更改它的属性。同样的,应用程序通过调用参数是VIDIOC_S_AUDOUTioctl来选择一个音频输出(当前还没有可更改的属性)。

当设备具有一个或更多的输入时,驱动程序必须执行所有控制输入的ioctl;与此相类似,当设备具有一个或更多的输出时,驱动程序必须执行所有控制输出的ioctl。当设备没有音频输入或输出时,驱动程序必须设定结构体v4l2_capability中的V4L2_CAP_AUDIO标志位,而该结构体是由参数是VIDIOC_QUERYCAPioctl返回的。

 

1-3 获取当前音频输入的信息

struct v4l2_audio audio;

memset (&audio, 0, sizeof (audio));

if (-1 == ioctl (fd, VIDIOC_G_AUDIO, &audio)) {

perror ("VIDIOC_G_AUDIO");

exit (EXIT_FAILURE);

}

printf ("Current input: %s\n", audio.name);

 

1-4 切换到第一个音频输入

struct v4l2_audio audio;

memset (&audio, 0, sizeof (audio)); /* 清除audio.mode, audio.reserved */

audio.index = 0;

if (-1 == ioctl (fd, VIDIOC_S_AUDIO, &audio)) {

perror ("VIDIOC_S_AUDIO");

exit (EXIT_FAILURE);

}

阅读(2172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~