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不是有效的開啟檔案描述符。 |
|