7.35. ioctl VIDIOC_G_MODULATOR, VIDIOC_S_MODULATOR

7.35.1. 名稱

VIDIOC_G_MODULATOR - VIDIOC_S_MODULATOR - 獲取或設定調製器屬性

7.35.2. 概要

VIDIOC_G_MODULATOR

int ioctl(int fd, VIDIOC_G_MODULATOR, struct v4l2_modulator *argp)

VIDIOC_S_MODULATOR

int ioctl(int fd, VIDIOC_S_MODULATOR, const struct v4l2_modulator *argp)

7.35.3. 引數

fd

open() 返回的檔案描述符。

argp

指向 struct v4l2_modulator 的指標。

7.35.4. 描述

要查詢調製器的屬性,應用程式初始化 index 欄位並將 struct v4l2_modulatorreserved 陣列清零,並使用指向此結構的指標呼叫 VIDIOC_G_MODULATOR ioctl。 當索引超出範圍時,驅動程式會填充結構的其餘部分或返回 EINVAL 錯誤程式碼。 要列舉所有調製器,應用程式應從索引零開始,每次遞增 1,直到驅動程式返回 EINVAL。

調製器具有兩個可寫屬性,一個是音訊調製集,另一個是無線電頻率。 要更改調製的音訊子程式,應用程式初始化 indextxsubchans 欄位以及 reserved 陣列,並呼叫 VIDIOC_S_MODULATOR ioctl。 如果無法滿足請求,驅動程式可能會選擇不同的音訊調製。 但是,這是一個只寫 ioctl,它不會返回實際選擇的音訊調製。

SDR 特定調製器型別是 V4L2_TUNER_SDRV4L2_TUNER_RF。 對於 SDR 裝置,txsubchans 欄位必須初始化為零。 在這種情況下,“調製器”一詞表示 SDR 發射器。

要更改無線電頻率,可以使用 VIDIOC_S_FREQUENCY ioctl。

type v4l2_modulator
struct v4l2_modulator

__u32

index

標識調製器,由應用程式設定。

__u8

name[32]

調製器的名稱,一個以 NUL 結尾的 ASCII 字串。

此資訊供使用者使用。

__u32

capability

調製器功能標誌。 未為此欄位定義標誌,因此相應地使用 struct v4l2_tuner 中的調諧器標誌。 音訊標誌指示編碼音訊子節目的能力。 它們不會因當前影片標準而改變。

__u32

rangelow

最低可調頻率,單位為 62.5 KHz;如果設定了 capability 標誌 V4L2_TUNER_CAP_LOW,則單位為 62.5 Hz;如果設定了 capability 標誌 V4L2_TUNER_CAP_1HZ,則單位為 1 Hz。

__u32

rangehigh

最高可調頻率,單位為 62.5 KHz;如果設定了 capability 標誌 V4L2_TUNER_CAP_LOW,則單位為 62.5 Hz;如果設定了 capability 標誌 V4L2_TUNER_CAP_1HZ,則單位為 1 Hz。

__u32

txsubchans

透過此欄位,應用程式可以確定音訊子載波的調製方式。 它包含一組標誌,如 調製器音訊傳輸標誌 中所定義。

注意

重用了調諧器 rxsubchans 標誌,但語義不同。 假定影片輸出裝置具有帶有 1-3 個通道的模擬或 PCM 音訊輸入。txsubchans 標誌選擇一個或多個通道進行調製,以及一些音訊子節目指示器,例如,立體聲引導音。

__u32

type

調製器的型別,請參閱 v4l2_tuner_type

__u32

reserved[3]

保留供將來擴充套件。

驅動程式和應用程式必須將陣列設定為零。

調製器音訊傳輸標誌

V4L2_TUNER_SUB_MONO

0x0001

將通道 1 調製為單聲道音訊;當輸入具有多個通道時,將通道 1 和 2 混音。 此標誌不與 V4L2_TUNER_SUB_STEREOV4L2_TUNER_SUB_LANG1 組合。

V4L2_TUNER_SUB_STEREO

0x0002

將通道 1 和 2 調製為立體聲音訊訊號的左右聲道。 當輸入只有一個通道或兩個通道並且還設定了 V4L2_TUNER_SUB_SAP 時,通道 1 被編碼為左右聲道。 此標誌不與 V4L2_TUNER_SUB_MONOV4L2_TUNER_SUB_LANG1 組合。 當驅動程式不支援立體聲音訊時,應回退到單聲道。

V4L2_TUNER_SUB_LANG1

0x0008

將通道 1 和 2 調製為雙語音訊訊號的主要語言和輔助語言。 當輸入只有一個通道時,它用於兩種語言。 無法僅編碼主要語言或輔助語言。 此標誌不與 V4L2_TUNER_SUB_MONOV4L2_TUNER_SUB_STEREOV4L2_TUNER_SUB_SAP 組合。 如果硬體不支援相應的音訊矩陣,或者當前影片標準不允許雙語音訊,則 VIDIOC_S_MODULATOR ioctl 應返回 EINVAL 錯誤程式碼,並且驅動程式應回退到單聲道或立體聲模式。

V4L2_TUNER_SUB_LANG2

0x0004

V4L2_TUNER_SUB_SAP 效果相同。

V4L2_TUNER_SUB_SAP

0x0004

當與 V4L2_TUNER_SUB_MONO 組合時,第一個通道被編碼為單聲道音訊,最後一個通道被編碼為第二音訊節目。 當輸入只有一個通道時,它用於兩個音軌。 當輸入有三個通道時,單聲道音軌是通道 1 和 2 的混音。 當與 V4L2_TUNER_SUB_STEREO 組合時,通道 1 和 2 被編碼為左右立體聲音訊,通道 3 被編碼為第二音訊節目。 當輸入只有兩個通道時,第一個通道被編碼為左右聲道,第二個通道被編碼為 SAP。 當輸入只有一個通道時,它用於所有音軌。 無法僅編碼第二音訊節目。 此標誌必須與 V4L2_TUNER_SUB_MONOV4L2_TUNER_SUB_STEREO 組合。 如果硬體不支援相應的音訊矩陣,或者當前影片標準不允許 SAP,則 VIDIOC_S_MODULATOR ioctl 應返回 EINVAL 錯誤程式碼,並且驅動程式應回退到單聲道或立體聲模式。

V4L2_TUNER_SUB_RDS

0x0010

為無線電 FM 發射器啟用 RDS 編碼器。

7.35.5. 返回值

成功時返回 0,出錯時返回 -1,並適當設定 errno 變數。 通用錯誤程式碼在 通用錯誤程式碼 章節中描述。

EINVAL

struct v4l2_modulator index 超出範圍。