6.2.3.2. DVB音频设备¶
注意
不要在新驱动程序中使用!请参阅:通用说明
DVB音频设备控制DVB硬件的MPEG2音频解码器。可以通过/dev/dvb/adapter?/audio?
访问它。可以通过在应用程序中包含linux/dvb/audio.h
来访问数据类型和ioctl定义。
请注意,大多数DVB卡没有自己的MPEG解码器,这导致省略音频和视频设备。
V4L2也使用这些ioctl来控制在V4L2中实现的MPEG解码器。为此目的使用这些ioctl已被废弃,并且已经创建了适当的V4L2 ioctl或控件来替换该功能。新驱动程序请使用V4L2 ioctl!
6.2.3.2.1. 音频数据类型¶
本节描述了与音频设备通信时使用的结构体、数据类型和定义。
6.2.3.2.1.1. audio_stream_source_t¶
6.2.3.2.1.1.1. 概要¶
-
enum audio_stream_source_t¶
typedef enum {
AUDIO_SOURCE_DEMUX,
AUDIO_SOURCE_MEMORY
} audio_stream_source_t;
6.2.3.2.1.1.2. 常量¶
|
选择多路分解器(由前端或DVR设备馈送)作为视频流的源。 |
|
|
选择来自应用程序的流,该流通过write()系统调用。 |
6.2.3.2.1.1.3. 描述¶
音频流源通过AUDIO_SELECT_SOURCE调用设置,并且可以采用以下值,具体取决于我们是从内部(多路分解器)还是外部(用户写入)源重放。
馈送到解码器的数据也由PID过滤器控制。输出选择:dmx_output
DMX_OUT_DECODER
。
6.2.3.2.1.2. audio_play_state_t¶
6.2.3.2.1.2.1. 概要¶
-
enum audio_play_state_t¶
typedef enum {
AUDIO_STOPPED,
AUDIO_PLAYING,
AUDIO_PAUSED
} audio_play_state_t;
6.2.3.2.1.2.2. 常量¶
|
音频已停止。 |
|
音频当前正在播放。 |
|
音频已冻结。 |
6.2.3.2.1.2.3. 描述¶
这些值可以由AUDIO_GET_STATUS调用返回,表示音频播放的状态。
6.2.3.2.1.3. audio_channel_select_t¶
6.2.3.2.1.3.1. 概要¶
-
enum audio_channel_select_t¶
typedef enum {
AUDIO_STEREO,
AUDIO_MONO_LEFT,
AUDIO_MONO_RIGHT,
AUDIO_MONO,
AUDIO_STEREO_SWAPPED
} audio_channel_select_t;
6.2.3.2.1.3.2. 常量¶
|
立体声。 |
|
单声道,选择左立体声道作为源。 |
|
单声道,选择右立体声道作为源。 |
|
仅单声道源。 |
|
立体声,交换L&R。 |
6.2.3.2.1.3.3. 描述¶
通过AUDIO_CHANNEL_SELECT选择的音频声道由此值确定。
6.2.3.2.1.4. audio_mixer_t¶
6.2.3.2.1.4.1. 概要¶
-
struct audio_mixer¶
typedef struct audio_mixer {
unsigned int volume_left;
unsigned int volume_right;
} audio_mixer_t;
6.2.3.2.1.4.2. 变量¶
|
左声道音量。有效范围:0 ... 255 |
|
右声道音量。有效范围:0 ... 255 |
6.2.3.2.1.4.3. 描述¶
此结构体由AUDIO_SET_MIXER调用用于设置音频音量。
6.2.3.2.1.5. audio_status¶
6.2.3.2.1.5.1. 概要¶
-
struct audio_status¶
typedef struct audio_status {
int AV_sync_state;
int mute_state;
audio_play_state_t play_state;
audio_stream_source_t stream_source;
audio_channel_select_t channel_select;
int bypass_mode;
audio_mixer_t mixer_state;
} audio_status_t;
6.2.3.2.1.5.2. 变量¶
|
显示A/V同步是ON还是OFF。 |
|
TRUE(!= 0) |
AV同步ON。 |
|
FALSE(== 0) |
AV同步OFF。 |
|
|
指示音频是否已静音。 |
|
TRUE(!= 0) |
静音音频 |
|
FALSE(== 0) |
取消静音音频 |
|
audio_play_state_t |
当前播放状态。 |
|
audio_stream_source_t |
当前数据源。 |
|
|
是否启用或禁用DVB子系统中当前音频流的解码。 |
|
TRUE(!= 0) |
禁用旁路。 |
|
FALSE(== 0) |
启用旁路。 |
|
audio_mixer_t |
当前音量设置。 |
6.2.3.2.1.5.3. 描述¶
AUDIO_GET_STATUS调用返回此结构体作为有关播放操作各种状态的信息。
6.2.3.2.1.6. 音频编码¶
6.2.3.2.1.6.1. 概要¶
#define AUDIO_CAP_DTS 1
#define AUDIO_CAP_LPCM 2
#define AUDIO_CAP_MP1 4
#define AUDIO_CAP_MP2 8
#define AUDIO_CAP_MP3 16
#define AUDIO_CAP_AAC 32
#define AUDIO_CAP_OGG 64
#define AUDIO_CAP_SDDS 128
#define AUDIO_CAP_AC3 256
6.2.3.2.1.6.2. 常量¶
|
硬件接受DTS音轨。 |
|
|
硬件接受具有线性脉冲编码调制(LPCM)的未压缩音频 |
|
|
硬件接受MPEG-1音频层1。 |
|
|
硬件接受MPEG-1音频层2。也称为MUSICAM。 |
|
|
硬件接受MPEG-1音频层III。通常称为.mp3。 |
|
|
硬件接受AAC(高级音频编码)。 |
|
|
硬件接受Vorbis音轨。 |
|
|
硬件接受索尼动态数字声音(SDDS)。 |
|
|
硬件接受杜比数字ATSC A/52音频。也称为AC-3。 |
6.2.3.2.1.6.3. 描述¶
调用AUDIO_GET_CAPABILITIES返回一个无符号整数,其中根据硬件功能设置了以下位。
6.2.3.2.2. 音频功能调用¶
6.2.3.2.2.1. AUDIO_STOP¶
6.2.3.2.2.1.1. 概要¶
-
AUDIO_STOP¶
int ioctl(int fd, int request = AUDIO_STOP)
6.2.3.2.2.1.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.2.2.1.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用要求音频设备停止播放当前流。
6.2.3.2.2.1.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.2. AUDIO_PLAY¶
6.2.3.2.2.2.1. 概要¶
-
AUDIO_PLAY¶
int ioctl(int fd, int request = AUDIO_PLAY)
6.2.3.2.2.2.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.2.2.2.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用要求音频设备开始播放来自所选源的音频流。
6.2.3.2.2.2.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.3. AUDIO_PAUSE¶
6.2.3.2.2.3.1. 概要¶
-
AUDIO_PAUSE¶
int ioctl(int fd, int request = AUDIO_PAUSE)
6.2.3.2.2.3.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.2.2.3.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用挂起正在播放的音频流。解码和播放已暂停。然后可以使用AUDIO_CONTINUE命令再次重新启动音频流的解码和播放过程。
6.2.3.2.2.3.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.4. AUDIO_CONTINUE¶
6.2.3.2.2.4.1. 概要¶
-
AUDIO_CONTINUE¶
int ioctl(int fd, int request = AUDIO_CONTINUE)
6.2.3.2.2.4.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.2.2.4.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl重新启动先前使用AUDIO_PAUSE命令暂停的解码和播放过程。
6.2.3.2.2.4.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.5. AUDIO_SELECT_SOURCE¶
6.2.3.2.2.5.1. 概要¶
-
AUDIO_SELECT_SOURCE¶
int ioctl(int fd, int request = AUDIO_SELECT_SOURCE,
audio_stream_source_t source)
6.2.3.2.2.5.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
audio_stream_source_t |
指示要用于音频流的源。 |
6.2.3.2.2.5.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用通知音频设备应将哪个源用于输入数据。可能的来源是多路分解器或内存。如果选择了AUDIO_SOURCE_MEMORY
,则通过write命令将数据馈送到音频设备。如果选择了AUDIO_SOURCE_DEMUX
,则数据直接从板载多路分解设备传输到解码器。注意:到目前为止,这仅支持具有一个多路分解器和一个解码器的DVB设备。
6.2.3.2.2.5.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.6. AUDIO_SET_MUTE¶
6.2.3.2.2.6.1. 概要¶
-
AUDIO_SET_MUTE¶
int ioctl(int fd, int request = AUDIO_SET_MUTE, int state)
6.2.3.2.2.6.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
指示音频设备是否应静音。 |
|
TRUE(!= 0) |
静音音频 |
|
FALSE(== 0) |
取消静音音频 |
6.2.3.2.2.6.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl仅适用于DVB设备。要控制V4L2解码器,请使用V4L2 ioctl VIDIOC_DECODER_CMD, VIDIOC_TRY_DECODER_CMD,并使用V4L2_DEC_CMD_START_MUTE_AUDIO
标志代替。
此ioctl调用要求音频设备将当前正在播放的流静音。
6.2.3.2.2.6.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.7. AUDIO_SET_AV_SYNC¶
6.2.3.2.2.7.1. 概要¶
-
AUDIO_SET_AV_SYNC¶
int ioctl(int fd, int request = AUDIO_SET_AV_SYNC, int state)
6.2.3.2.2.7.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
告诉DVB子系统是否应启用或禁用A/V同步。 |
|
TRUE(!= 0) |
AV同步ON。 |
|
FALSE(== 0) |
AV同步OFF。 |
6.2.3.2.2.7.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用要求音频设备打开或关闭A/V同步。
6.2.3.2.2.7.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.8. AUDIO_SET_BYPASS_MODE¶
6.2.3.2.2.8.1. 概要¶
-
AUDIO_SET_BYPASS_MODE¶
int ioctl(int fd, int request = AUDIO_SET_BYPASS_MODE, int mode)
6.2.3.2.2.8.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
在DVB子系统中启用或禁用当前音频流的解码。 |
|
TRUE(!= 0) |
禁用旁路 |
|
FALSE(== 0) |
启用旁路 |
6.2.3.2.2.8.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用要求音频设备绕过音频解码器并转发流而不进行解码。如果要解码DVB系统无法处理的流,则应使用此模式。如果硬件可以处理,Dolby DigitalTM流将自动由DVB子系统转发。
6.2.3.2.2.8.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.9. AUDIO_CHANNEL_SELECT¶
6.2.3.2.2.9.1. 概要¶
-
AUDIO_CHANNEL_SELECT¶
int ioctl(int fd, int request = AUDIO_CHANNEL_SELECT,
audio_channel_select_t)
6.2.3.2.2.9.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
选择音频的输出格式(单声道左/右,立体声)。 |
6.2.3.2.2.9.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl仅适用于DVB设备。要控制V4L2解码器,请改用V4L2 V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK
控件。
此ioctl调用要求音频设备选择请求的声道(如果可能)。
6.2.3.2.2.9.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.10. AUDIO_GET_STATUS¶
6.2.3.2.2.10.1. 概要¶
-
AUDIO_GET_STATUS¶
int ioctl(int fd, int request = AUDIO_GET_STATUS,
struct audio_status *status)
6.2.3.2.2.10.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于AUDIO_GET_STATUS。 |
|
|
返回音频设备的当前状态。 |
6.2.3.2.2.10.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用要求音频设备返回音频设备的当前状态。
6.2.3.2.2.10.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.11. AUDIO_GET_CAPABILITIES¶
6.2.3.2.2.11.1. 概要¶
-
AUDIO_GET_CAPABILITIES¶
int ioctl(int fd, int request = AUDIO_GET_CAPABILITIES,
unsigned int *cap)
6.2.3.2.2.11.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
返回支持的声音格式的位数组。位在音频编码中定义。 |
6.2.3.2.2.11.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用要求音频设备告诉我们音频硬件的解码功能。
6.2.3.2.2.11.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.12. AUDIO_CLEAR_BUFFER¶
6.2.3.2.2.12.1. 概要¶
-
AUDIO_CLEAR_BUFFER¶
int ioctl(int fd, int request = AUDIO_CLEAR_BUFFER)
6.2.3.2.2.12.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
6.2.3.2.2.12.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl调用要求音频设备清除音频解码器设备的所有软件和硬件缓冲区。
6.2.3.2.2.12.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.13. AUDIO_SET_ID¶
6.2.3.2.2.13.1. 概要¶
-
AUDIO_SET_ID¶
int ioctl(int fd, int request = AUDIO_SET_ID, int id)
6.2.3.2.2.13.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
音频子流ID。 |
6.2.3.2.2.13.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
如果将程序或系统流发送到视频设备,则此ioctl选择要解码的子流。
如果未设置音频流类型,则对于MPEG声音,ID必须在[0xC0,0xDF]范围内,对于AC3,ID必须在[0x80,0x87]范围内,对于LPCM,ID必须在[0xA0,0xA7]范围内。有关更多描述,请参见ITU-T H.222.0 | ISO/IEC 13818-1。
如果使用AUDIO_SET_STREAMTYPE设置了流类型,则ID仅指定音频流的子流ID,并且仅识别前5位(& 0x1F)。
6.2.3.2.2.13.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.14. AUDIO_SET_MIXER¶
6.2.3.2.2.14.1. 概要¶
-
AUDIO_SET_MIXER¶
int ioctl(int fd, int request = AUDIO_SET_MIXER, audio_mixer_t *mix)
6.2.3.2.2.14.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
混音器设置。 |
6.2.3.2.2.14.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl使您可以调整音频解码器的混音器设置。
6.2.3.2.2.14.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.15. AUDIO_SET_STREAMTYPE¶
6.2.3.2.2.15.1. 概要¶
-
AUDIO_SET_STREAMTYPE¶
int ioctl(fd, int request = AUDIO_SET_STREAMTYPE, int type)
6.2.3.2.2.15.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
流类型。 |
6.2.3.2.2.15.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl告诉驱动程序要期望的音频流的种类。如果流提供多个音频子流(如LPCM和AC3),这将非常有用。
使用ITU-T H.222.0 | ISO/IEC 13818-1中定义的流类型。
6.2.3.2.2.15.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
|
Type不是有效或支持的流类型。 |
6.2.3.2.2.16. AUDIO_BILINGUAL_CHANNEL_SELECT¶
6.2.3.2.2.16.1. 概要¶
-
AUDIO_BILINGUAL_CHANNEL_SELECT¶
int ioctl(int fd, int request = AUDIO_BILINGUAL_CHANNEL_SELECT,
audio_channel_select_t)
6.2.3.2.2.16.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
对于此命令,等于 |
|
|
选择音频的输出格式(单声道左/右,立体声)。 |
6.2.3.2.2.16.3. 描述¶
注意
不要在新驱动程序中使用!请参阅:通用说明
此ioctl已被V4L2 V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK
控件替换,用于通过V4L2控制的MPEG解码器。
此ioctl调用要求音频设备选择双语流的请求声道(如果可能)。
6.2.3.2.2.16.4. 返回值¶
成功时返回0,出错时返回-1,并适当设置errno
变量。通用错误代码在通用错误代码章节中描述。
6.2.3.2.2.17. open()¶
6.2.3.2.2.17.1. 概要¶
#include <fcntl.h>
-
int open(const char *deviceName, int flags)¶
6.2.3.2.2.17.2. 参数¶
|
特定音频设备的名称。 |
|
|
以下标志的按位OR |
|
|
只读访问 |
|
|
读/写访问 |
|
|
以非阻塞模式打开
(阻塞模式为默认模式)
|
6.2.3.2.2.17.3. 描述¶
此系统调用打开一个命名的音频设备(例如/dev/dvb/adapter0/audio0
)供后续使用。当open()
调用成功后,该设备将可以使用。阻塞或非阻塞模式的意义在存在差异的函数的文档中描述。它不会影响open()
调用本身的语义。可以使用fcntl系统调用的F_SETFL命令将以阻塞模式打开的设备稍后置于非阻塞模式(反之亦然)。这是一个标准系统调用,记录在fcntl的Linux手册页中。只有一个用户可以在O_RDWR模式下打开音频设备。以这种模式打开设备的所有其他尝试都会失败,并返回错误代码。如果在O_RDONLY模式下打开音频设备,则可以使用的唯一ioctl调用是AUDIO_GET_STATUS。所有其他调用都将返回错误代码。
6.2.3.2.2.17.4. 返回值¶
|
设备驱动程序未加载/不可用。 |
|
设备或资源忙。 |
|
无效的参数。 |
6.2.3.2.2.18. close()¶
6.2.3.2.2.18.1. 概要¶
-
int close(int fd)¶
6.2.3.2.2.18.2. 参数¶
|
先前调用open()返回的文件描述符。 |
6.2.3.2.2.18.3. 描述¶
此系统调用关闭先前打开的音频设备。
6.2.3.2.2.18.4. 返回值¶
|
Fd不是有效的打开文件描述符。 |
6.2.3.2.2.19. write()¶
6.2.3.2.2.19.1. 概要¶
size_t write(int fd, const void *buf, size_t count)
6.2.3.2.2.19.2. 参数¶
|
先前调用open()返回的文件描述符。 |
|
|
指向包含PES数据的缓冲区的指针。 |
|
|
buf的大小。 |
6.2.3.2.2.19.3. 描述¶
仅当在ioctl调用AUDIO_SELECT_SOURCE中选择了AUDIO_SOURCE_MEMORY
时,才能使用此系统调用。提供的数据应为PES格式。如果未指定O_NONBLOCK
,则该函数将阻塞,直到缓冲区空间可用。要传输的数据量由count隐含。
6.2.3.2.2.19.4. 返回值¶
|
未选择模式 |
|
|
尝试写入的数据超过内部缓冲区可以容纳的数据量。 |
|
|
Fd不是有效的打开文件描述符。 |