6.2. V4L2 API 的變更¶
V4L API 被新增到核心後不久,它因過於僵化而受到批評。1998 年 8 月,Bill Dirks 提出了一些改進建議,並開始著手編寫文件、示例驅動和應用程式。在其他志願者的幫助下,這最終發展成為 V4L2 API,它不僅僅是 V4L API 的擴充套件,更是對其的替代。然而,又經過了四年和兩個穩定的核心版本釋出,這個新 API 才最終以其當前的形式被接受並納入核心。
6.2.1. 早期版本¶
1998-08-20:第一個版本。
1998-08-27:引入了 select() 函式。
1998-09-10:新的影片標準介面。
1998-09-18:VIDIOC_NONCAP ioctl 被替換為原本無意義的 O_TRUNC open() 標誌,並定義了別名 O_NONCAP 和 O_NOIO。應用程式如果只打算訪問控制,而不是需要獨佔訪問的捕獲應用程式,可以設定此標誌。VIDEO_STD_XXX 識別符號現在是序號而不是標誌,並且 video_std_construct() 輔助函式接受 id 和傳輸引數。
1998-09-28:影片標準重新設計。使影片控制元件可單獨列舉。
1998-10-02:從結構體 video_standard 中移除了 id 欄位,並重新命名了彩色副載波欄位。ioctl VIDIOC_QUERYSTD, VIDIOC_SUBDEV_QUERYSTD ioctl 被重新命名為 ioctl VIDIOC_ENUMSTD, VIDIOC_SUBDEV_ENUMSTD,VIDIOC_G_INPUT 被重新命名為 ioctl VIDIOC_ENUMINPUT。Codec API 的初稿釋出。
1998-11-08:許多微小改動。大多數符號已重新命名。對 struct v4l2_capability 進行了一些實質性修改。
1998-11-12:一些 ioctl 的讀/寫方向定義錯誤。
1998-11-14:V4L2_PIX_FMT_RGB24 變更為 V4L2_PIX_FMT_BGR24,V4L2_PIX_FMT_RGB32 變更為 V4L2_PIX_FMT_BGR32。現在可以使用以 V4L2_CID_AUDIO 開頭的名稱,透過 VIDIOC_G_CTRL 和 VIDIOC_S_CTRL ioctl 訪問音訊控制。V4L2_MAJOR 定義從 videodev.h 中移除,因為它只在 videodev 核心模組中使用了一次。添加了 YUV422 和 YUV411 平面圖像格式。
1998-11-28:少數 ioctl 符號發生變化。添加了用於編解碼器和影片輸出裝置的介面。
1999-01-14:添加了原始 VBI 捕獲介面。
1999-01-19:VIDIOC_NEXTBUF ioctl 被移除。
6.2.2. V4L2 版本 0.16 1999-01-31¶
1999-01-27:現在只有一個 QBUF ioctl,VIDIOC_QWBUF 和 VIDIOC_QRBUF 已移除。VIDIOC_QBUF 接受一個 v4l2_buffer 作為引數。添加了數字變焦(裁剪)控制。
6.2.3. V4L2 版本 0.18 1999-03-16¶
在 videodev.c 中添加了一個 v4l 到 V4L2 ioctl 相容層。驅動編寫者請注意,這改變了您實現 ioctl 處理器的方式。請參閱《驅動編寫者指南》。添加了更多的控制 id 程式碼。
6.2.4. V4L2 版本 0.19 1999-06-05¶
1999-03-18:在將 v4l2_queryctrl 物件的 category 和 catname 欄位傳遞給驅動程式之前,請填寫它們。這需要對示例驅動程式中的 VIDIOC_QUERYCTRL 處理器進行少量更改。
1999-03-31:v4l 記憶體捕獲 ioctl 的相容性更好。需要更改驅動程式以完全支援新的相容性特性,請參閱《驅動編寫者指南》和 v4l2cap.c。添加了新的控制 ID:V4L2_CID_HFLIP, _VFLIP。將 V4L2_PIX_FMT_YUV422P 更改為 _YUV422P,將 _YUV411P 更改為 _YUV411P。
1999-04-04:添加了更多的控制 ID。
1999-04-07:添加了按鈕控制型別。
1999-05-02:修復了 videodev.h 中的一個錯別字,並添加了 V4L2_CTRL_FLAG_GRAYED(後來改為 V4L2_CTRL_FLAG_GRABBED)標誌。
1999-05-20:VIDIOC_G_CTRL 的定義有誤,導致此 ioctl 功能異常。
1999-06-05:更改了 V4L2_CID_WHITENESS 的值。
6.2.5. V4L2 版本 0.20 (1999-09-10)¶
版本 0.20 引入了一些與 0.19 及更早版本不向後相容的更改。這些更改的目的是簡化 API,同時使其更具可擴充套件性並遵循常見的 Linux 驅動程式 API 約定。
修復了
V4L2_FMT_FLAG符號中的一些錯別字。為了與 v4l 相容,更改了struct v4l2_clip。(1999-08-30)V4L2_TUNER_SUB_LANG1已新增。(1999-09-05)所有使用整數引數的 ioctl() 命令現在都接受一個指向整數的指標。在有意義的情況下,ioctl 將在引數指向的整數中返回實際的新值,這是 V4L2 API 中的常見約定。受影響的 ioctl 包括:VIDIOC_PREVIEW, VIDIOC_STREAMON, VIDIOC_STREAMOFF, VIDIOC_S_FREQ, VIDIOC_S_INPUT, VIDIOC_S_OUTPUT, VIDIOC_S_EFFECT。例如
err = ioctl (fd, VIDIOC_XXX, V4L2_XXX);
變為
int a = V4L2_XXX; err = ioctl(fd, VIDIOC_XXX, &a);
所有不同的獲取和設定格式命令都被合併到單個 VIDIOC_G_FMT 和 VIDIOC_S_FMT ioctl 中,它們接受一個聯合體和一個選擇聯合體成員的型別欄位作為引數。目的是透過消除多個 ioctl 來簡化 API,並允許新的和驅動私有的資料流,而無需新增新的 ioctl。
此更改廢棄了以下 ioctl:
VIDIOC_S_INFMT,VIDIOC_G_INFMT,VIDIOC_S_OUTFMT,VIDIOC_G_OUTFMT,VIDIOC_S_VBIFMT和VIDIOC_G_VBIFMT。影像格式struct v4l2_format被重新命名為struct v4l2_pix_format,而struct v4l2_format現在是所有格式協商的封裝結構體。與上述更改類似,
VIDIOC_G_PARM和VIDIOC_S_PARMioctl 與VIDIOC_G_OUTPARM和VIDIOC_S_OUTPARM合併。新的struct v4l2_streamparm中的type欄位選擇相應的聯合體成員。此更改廢棄了
VIDIOC_G_OUTPARM和VIDIOC_S_OUTPARMioctl。控制列舉得到簡化,引入了兩個新的控制標誌並刪除一個。
catname欄位被group欄位取代。驅動程式現在可以使用
V4L2_CTRL_FLAG_DISABLED和V4L2_CTRL_FLAG_GRABBED分別標記不支援和暫時不可用的控制元件。group名稱表示可能比category更窄的分類。換句話說,一個類別中可能有多個組。一個組內的控制元件通常會繪製在一個組框內。不同類別的控制元件可能會有更大的間隔,甚至可能出現在單獨的視窗中。結構體
v4l2_buffer的timestamp欄位變更為 64 位整數,其中包含幀的取樣或輸出時間(納秒)。此外,時間戳將是絕對系統時間,而不是從流開始時的零點。時間戳的資料型別名為 stamp_t,定義為有符號 64 位整數。輸出裝置不應在時間戳欄位中的時間到達之前傳送緩衝區。我希望遵循 SGI 的做法,採用像其 UST(未調整系統時間)這樣的多媒體時間戳系統。請參閱 http://web.archive.org/web/*/http://reality.sgi.com /cpirazzi_engr/lg/time/intro.html。UST 使用 64 位有符號整數(而不是 struct timeval)作為時間戳,單位為納秒。UST 時鐘在系統啟動時從零開始,並持續均勻執行。UST 溢位大約需要 292 年。無法設定 UST 時鐘。常規的 Linux 日期時間時鐘可以定期更改,如果將其用於多媒體流的時間戳,可能會導致錯誤。真正的 UST 風格時鐘將需要核心中尚不存在的一些支援。但為了預見未來,我將把時間戳欄位更改為 64 位整數,並將 v4l2_masterclock_gettime() 函式(僅由驅動程式使用)更改為返回 64 位整數。結構體
v4l2_buffer中添加了一個sequence欄位。sequence欄位計算捕獲的幀數,輸出裝置會忽略它。當捕獲驅動程式丟棄一幀時,該幀的序列號將被跳過。
6.2.6. V4L2 版本 0.20 增量更改¶
1999-12-23:在 struct v4l2_vbi_format 中,reserved1 欄位變更為 offset。此前,驅動程式需要清除 reserved1 欄位。
2000-01-13:添加了 V4L2_FMT_FLAG_NOT_INTERLACED 標誌。
2000-07-31:為了與原始的 videodev.h 檔案相容,videodev.h 標頭檔案現在包含 linux/poll.h。
2000-11-20:添加了 V4L2_TYPE_VBI_OUTPUT 和 V4L2_PIX_FMT_Y41P。
2000-11-25:添加了 V4L2_TYPE_VBI_INPUT。
2000-12-04:修復了符號名稱中的幾個錯別字。
2001-01-18:為了避免名稱空間衝突,videodev.h 標頭檔案中定義的 fourcc 宏被重新命名為 v4l2_fourcc。
2001-01-25:修復了 Linux 2.4.0 中的 videodev.h 檔案與 videodevX 補丁中包含的 videodev.h 檔案之間可能存在的驅動級相容性問題。Linux 2.4.0 上 videodevX 早期版本的使用者應重新編譯其 V4L 和 V4L2 驅動程式。
2001-01-26:修復了 videodevX 補丁中的 videodev.h 檔案與應用了 devfs 補丁的 Linux 2.2.x 中 videodev.h 檔案之間可能存在的核心級不相容性。
2001-03-02:某些 V4L ioctl 儘管定義為只讀引數,但卻雙向傳遞資料,透過向後相容層無法正常工作。[解決方案?]
2001-04-13:添加了大端 16 位 RGB 格式。
2001-09-17:添加了新的 YUV 格式以及 VIDIOC_G_FREQUENCY 和 VIDIOC_S_FREQUENCY ioctl。(舊的 VIDIOC_G_FREQ 和 VIDIOC_S_FREQ ioctl 沒有考慮多個調諧器。)
2000-09-18:添加了 V4L2_BUF_TYPE_VBI。這可能會破壞相容性,因為如果結構體 v4l2_fmt 的 type 欄位不包含 V4L2_BUF_TYPE_VBI,則 VIDIOC_G_FMT 和 VIDIOC_S_FMT ioctl 現在可能會失敗。在 struct v4l2_vbi_format 的文件中,offset 欄位中模糊的短語“上升沿”更改為“前沿”。
6.2.7. V4L2 版本 0.20 2000-11-23¶
對原始 VBI 介面進行了一些更改。
V4L2 API 規範中添加了闡明行編號方案的圖。
start[0] 和start[1] 欄位不再從零開始計數行號。理由:a) 以前的定義不明確。b)start[] 值是序數。c) 沒有必要發明新的行編號方案。我們現在使用 ITU-R 定義的行號。相容性:將起始值加一。依賴於先前語義的應用程式可能無法正常執行。限制“count[0] > 0 且 count[1] > 0”已放寬為“(count[0] + count[1]) > 0”。理由:驅動程式可以按掃描行粒度分配資源,並且某些資料服務僅在第一個欄位上傳輸。關於兩個
count值通常會相等的註釋具有誤導性且毫無意義,已被刪除。此更改破壞了與早期版本的相容性:驅動程式可能返回EINVAL,應用程式可能無法正常執行。驅動程式再次被允許返回負(未知)的起始值,如之前所提議。此功能為何被刪除尚不清楚。此更改可能破壞依賴於起始值為正數的應用程式的相容性。澄清了 VIDIOC_S_FMT ioctl 中
EBUSY和EINVAL錯誤程式碼的使用。EBUSY錯誤程式碼最終被文件化,以及此前只在videodev.h標頭檔案中提及的reserved2欄位。添加了新的緩衝區型別
V4L2_TYPE_VBI_INPUT和V4L2_TYPE_VBI_OUTPUT。前者是舊V4L2_TYPE_VBI的別名,後者在videodev.h檔案中缺失。
6.2.8. V4L2 版本 0.20 2002-07-25¶
添加了切片 VBI 介面提案。
6.2.9. Linux 2.5.46 中的 V4L2,2002-10¶
大約在 2002 年 10 月至 11 月,在 Linux 2.5 宣佈功能凍結之前,API 經過修訂,借鑑了 V4L2 0.20 的經驗。這個未命名的版本最終合併到 Linux 2.5.46 中。
如 相關裝置 中所述,驅動程式必須在所有次裝置號下提供相關裝置功能。
open()函式要求訪問模式為O_RDWR,無論裝置型別如何。所有與應用程式交換資料的 V4L2 驅動程式都必須支援O_NONBLOCK標誌。用於指示無資料交換(面板應用程式)訪問的O_NOIO標誌(一個將無意義的O_TRUNC別名化的 V4L2 符號)已被移除。驅動程式必須保持在“面板模式”,直到應用程式嘗試啟動資料交換,請參閱 開啟和關閉裝置。結構體
v4l2_capability發生了巨大變化。請注意,結構體的大小也發生了變化,這編碼在 ioctl 請求程式碼中,因此舊的 V4L2 裝置將對新的 ioctl VIDIOC_QUERYCAP ioctl 返回EINVAL錯誤程式碼。新增了用於識別驅動程式的欄位,一個新的 RDS 裝置功能
V4L2_CAP_RDS_CAPTURE,V4L2_CAP_AUDIO標誌指示裝置是否具有任何音訊聯結器,另一個 I/O 能力V4L2_CAP_ASYNCIO可以被標記。為了響應這些變化,type欄位變為一個位集併合併到flags欄位中。V4L2_FLAG_TUNER被重新命名為V4L2_CAP_TUNER,V4L2_CAP_VIDEO_OVERLAY替換了V4L2_FLAG_PREVIEW,V4L2_CAP_VBI_CAPTURE和V4L2_CAP_VBI_OUTPUT替換了V4L2_FLAG_DATA_SERVICE。V4L2_FLAG_READ和V4L2_FLAG_WRITE合併到V4L2_CAP_READWRITE中。冗餘欄位
inputs、outputs和audios已被移除。這些屬性可以按照 影片輸入和輸出 以及 音訊輸入和輸出 中的描述來確定。相對不穩定且因此幾乎無用的欄位
maxwidth,maxheight,minwidth,minheight,maxframerate已被移除。這些資訊可參見 資料格式 和 影片標準 中的描述獲取。V4L2_FLAG_SELECT已被移除。我們認為select()函式足夠重要,以至於所有與應用程式交換資料的 V4L2 驅動程式都必須支援它。冗餘的V4L2_FLAG_MONOCHROME標誌已移除,此資訊可參見 資料格式 中的描述獲取。在
struct v4l2_input中,assoc_audio欄位和capability欄位及其唯一的標誌V4L2_INPUT_CAP_AUDIO被新的audioset欄位取代。該欄位不再將一個影片輸入連結到一個音訊輸入,而是報告此影片輸入組合的所有音訊輸入。新增的欄位是
tuner(反轉了以前從調諧器到影片輸入的連結)、std和status。相應地,
struct v4l2_output失去了capability和assoc_audio欄位。取而代之的是添加了audioset、modulator和std。為了與其他結構體保持一致,
struct v4l2_audio欄位audio被重新命名為index。添加了一個新的能力標誌V4L2_AUDCAP_STEREO,以指示相關的音訊輸入是否支援立體聲。V4L2_AUDCAP_EFFECTS和相應的V4L2_AUDMODE標誌被移除。這可以使用控制元件輕鬆實現。(然而,這同樣適用於 AVL,它仍然存在。)同樣為了保持一致性,
struct v4l2_audioout欄位audio被重新命名為index。struct v4l2_tuner的input欄位被index欄位取代,允許裝置具有多個調諧器。影片輸入和調諧器之間的連結現在被反轉,輸入指向其調諧器。std子結構體變為一個簡單集(更多內容見下文),並移至struct v4l2_input中。添加了type欄位。因此,在
struct v4l2_modulator中,output被index欄位取代。在
struct v4l2_frequency中,port欄位被tuner欄位取代,該欄位包含相應的調諧器或調製器索引號。添加了一個調諧器type欄位,並且reserved欄位變大以支援未來擴充套件(特別是衛星調諧器)。完全透明影片標準的想法被放棄了。經驗表明,應用程式必須能夠處理影片標準,而不僅僅是向用戶呈現選單。應用程式現在可以透過 v4l2_std_id 和
videodev2.h標頭檔案中定義的符號來引用標準,而不是透過 ioctl 列舉支援的標準。詳情請參閱 影片標準。VIDIOC_G_STD 和 VIDIOC_S_STD 現在以指向此型別的指標作為引數。如果硬體具有此功能,則添加了 ioctl VIDIOC_QUERYSTD, VIDIOC_SUBDEV_QUERYSTD 以自動檢測接收到的標準。在struct v4l2_standard中,為 ioctl VIDIOC_ENUMSTD, VIDIOC_SUBDEV_ENUMSTD 添加了一個index欄位。添加了一個名為id的 v4l2_std_id 欄位作為機器可讀識別符號,也取代了transmission欄位。具有誤導性的framerate欄位被重新命名為frameperiod。現在已廢棄的colorstandard資訊(最初用於區分標準變體)已被刪除。結構體
v4l2_enumstd不再存在。ioctl VIDIOC_ENUMSTD, VIDIOC_SUBDEV_ENUMSTD 現在直接採用指向struct v4l2_standard的指標。特定影片輸入或輸出所支援標準的資訊已分別移至struct v4l2_input和struct v4l2_output中名為std的欄位。結構體 v4l2_queryctrl 中的
category和group欄位並未普及和/或未按預期實現,因此被移除。添加了 VIDIOC_TRY_FMT ioctl,用於像 VIDIOC_S_FMT 一樣協商資料格式,但無需硬體程式設計開銷,也無需考慮正在進行的 I/O。
在
struct v4l2_format中,fmt聯合體已擴充套件,包含struct v4l2_window。現在所有影像格式協商都可以透過VIDIOC_G_FMT、VIDIOC_S_FMT和VIDIOC_TRY_FMTioctl 進行。用於準備影片疊加的VIDIOC_G_WIN和VIDIOC_S_WINioctl 已被移除。type欄位更改為型別enum v4l2_buf_type,並且緩衝區型別名稱更改如下。舊定義
V4L2_BUF_TYPE_CAPTUREV4L2_BUF_TYPE_VIDEO_CAPTUREV4L2_BUF_TYPE_CODECIN暫時省略
V4L2_BUF_TYPE_CODECOUT暫時省略
V4L2_BUF_TYPE_EFFECTSIN暫時省略
V4L2_BUF_TYPE_EFFECTSIN2暫時省略
V4L2_BUF_TYPE_EFFECTSOUT暫時省略
V4L2_BUF_TYPE_VIDEOOUTV4L2_BUF_TYPE_VIDEO_OUTPUT-V4L2_BUF_TYPE_VIDEO_OVERLAY-V4L2_BUF_TYPE_VBI_CAPTURE-V4L2_BUF_TYPE_VBI_OUTPUT-V4L2_BUF_TYPE_SLICED_VBI_CAPTURE-V4L2_BUF_TYPE_SLICED_VBI_OUTPUTV4L2_BUF_TYPE_PRIVATE_BASEV4L2_BUF_TYPE_PRIVATE(但已廢棄)在
struct v4l2_fmtdesc中,添加了一個名為type的enum v4l2_buf_type欄位,與struct v4l2_format中相同。VIDIOC_ENUM_FBUFFMTioctl 不再需要,並已被移除。這些呼叫可以用型別為V4L2_BUF_TYPE_VIDEO_OVERLAY的 ioctl VIDIOC_ENUM_FMT 代替。在
struct v4l2_pix_format中,depth欄位已被移除,因為假設透過四字元程式碼識別格式的應用程式已經知道顏色深度,而其他應用程式則不關心它。同樣的理由導致V4L2_FMT_FLAG_COMPRESSED標誌被移除。V4L2_FMT_FLAG_SWCONVECOMPRESSED標誌被移除,因為驅動程式不應在核心空間中轉換影像。相反,應提供一個使用者層的轉換函式庫。V4L2_FMT_FLAG_BYTESPERLINE標誌是多餘的。應用程式可以將bytesperline欄位設定為零以獲得合理的預設值。由於其餘標誌也已被替換,flags欄位本身也已被移除。隔行掃描標誌已被新新增的
field欄位中的enum v4l2_field值取代。舊標誌
V4L2_FMT_FLAG_NOT_INTERLACED?
V4L2_FMT_FLAG_INTERLACED=V4L2_FMT_FLAG_COMBINEDV4L2_FIELD_INTERLACEDV4L2_FMT_FLAG_TOPFIELD=V4L2_FMT_FLAG_ODDFIELDV4L2_FIELD_TOPV4L2_FMT_FLAG_BOTFIELD=V4L2_FMT_FLAG_EVENFIELDV4L2_FIELD_BOTTOM-V4L2_FIELD_SEQ_TB-V4L2_FIELD_SEQ_BT-V4L2_FIELD_ALTERNATE顏色空間標誌已被新新增的
colorspace欄位中的enum v4l2_colorspace值取代,其中V4L2_COLORSPACE_SMPTE170M、V4L2_COLORSPACE_BT878、V4L2_COLORSPACE_470_SYSTEM_M或V4L2_COLORSPACE_470_SYSTEM_BG中的一個取代V4L2_FMT_CS_601YUV。在
struct v4l2_requestbuffers中,type欄位被正確定義為enum v4l2_buf_type。緩衝區型別如上所述發生了變化。添加了一個型別為 enum v4l2_memory 的新memory欄位,以區分使用驅動程式或應用程式分配的緩衝區的 I/O 方法。詳情請參閱 輸入/輸出。在
struct v4l2_buffer中,type欄位被正確定義為enum v4l2_buf_type。緩衝區型別如上所述發生了變化。添加了一個型別為enum v4l2_field的field欄位,以指示緩衝區是否包含頂場或底場。舊的欄位標誌已被移除。由於未能按計劃在核心中新增未調整的系統時間時鐘,timestamp欄位從型別 stamp_t(一個表示納秒級取樣時間的無符號64位整數)改回 struct timeval。隨著第二種記憶體對映方法的新增,offset欄位移入了聯合體m中,並添加了一個型別為 enum v4l2_memory 的新memory欄位,以區分 I/O 方法。詳情請參閱 輸入/輸出。V4L2_BUF_REQ_CONTIG標誌曾被 V4L 相容層使用,但在程式碼更改後不再需要。V4L2_BUF_ATTR_DEVICEMEM標誌將指示緩衝區是否確實分配在裝置記憶體中,而非支援 DMA 的系統記憶體中。它幾乎沒有用處,因此被移除。在
struct v4l2_framebuffer中,預期在離屏影片記憶體中進行雙緩衝和三緩衝的base[3]陣列(但未定義同步機制)已被單個指標取代。V4L2_FBUF_CAP_SCALEUP和V4L2_FBUF_CAP_SCALEDOWN標誌已被移除。應用程式可以使用新的裁剪和縮放介面更準確地確定此功能。V4L2_FBUF_CAP_CLIPPING標誌已被V4L2_FBUF_CAP_LIST_CLIPPING和V4L2_FBUF_CAP_BITMAP_CLIPPING取代。在
struct v4l2_clip中,x、y、width和height欄位已移至型別為struct v4l2_rect的c子結構體中。x和y欄位已重新命名為left和top,即相對於上下文相關原點的偏移量。在
struct v4l2_window中,x、y、width和height欄位已如上所述移至w子結構體中。添加了一個型別為enum v4l2_field的field欄位,以區分場和幀(隔行)疊加。數字變焦介面,包括 struct
v4l2_zoomcap、structv4l2_zoom、V4L2_ZOOM_NONCAP和V4L2_ZOOM_WHILESTREAMING,已被新的裁剪和縮放介面取代。以前未使用的struct v4l2_cropcap和struct v4l2_crop為此目的重新定義。詳情請參閱 影像裁剪、插入和縮放 -- CROP API。在
struct v4l2_vbi_format中,SAMPLE_FORMAT欄位現在包含一個用於識別影片影像格式的四字元程式碼,並且V4L2_PIX_FMT_GREY取代了V4L2_VBI_SF_UBYTE定義。reserved欄位已擴充套件。在
struct v4l2_captureparm中,timeperframe欄位的型別從 unsigned long 變為struct v4l2_fract。這允許精確表達 NTSC-M 幀速率 30000 / 1001 的倍數。添加了一個新欄位readbuffers,用於控制讀取 I/O 模式下的驅動程式行為。struct v4l2_outputparm也進行了類似更改。結構體
v4l2_performance和VIDIOC_G_PERFioctl 已被移除。除了使用 讀/寫 I/O 方法(無論如何都有限制)外,此資訊應用程式已可獲得。舊版 V4L2 文件中 RGB 到 YCbCr 顏色空間的轉換示例不準確,這已在 影像格式 中得到更正。
6.2.10. V4L2 2003-06-19¶
為無線電裝置添加了一個新的功能標誌
V4L2_CAP_RADIO。在此更改之前,無線電裝置僅透過擁有一個型別欄位為V4L2_TUNER_RADIO的調諧器來識別。添加了一個可選的驅動程式訪問優先順序機制,詳情請參閱 應用程式優先順序。
發現音訊輸入和輸出介面不完整。
以前 VIDIOC_G_AUDIO ioctl 會列舉可用的音訊輸入。不存在一個 ioctl 來確定當前的音訊輸入(如果多個音訊輸入與當前影片輸入結合)。因此
VIDIOC_G_AUDIO被重新命名為VIDIOC_G_AUDIO_OLD,此 ioctl 在 Kernel 2.6.39 中被移除。添加了 ioctl VIDIOC_ENUMAUDIO ioctl 來列舉音訊輸入,而 VIDIOC_G_AUDIO 現在報告當前的音訊輸入。VIDIOC_G_AUDOUT 和 VIDIOC_ENUMAUDOUT 也進行了相同的更改。
在此之前,“videodev”模組將自動在新舊 ioctl 之間進行轉換,但驅動程式和應用程式必須更新才能再次成功編譯。
ioctl VIDIOC_OVERLAY ioctl 被錯誤地定義為讀寫引數。它被更改為只寫,而讀寫版本被重新命名為
VIDIOC_OVERLAY_OLD。舊的 ioctl 在 Kernel 2.6.39 中被移除。在此之前,“videodev”核心模組將自動轉換為新版本,因此驅動程式必須重新編譯,但應用程式不必。影片疊加介面 錯誤地指出裁剪矩形定義了影片可見的區域。正確的說法是裁剪矩形定義了*不*顯示影片的區域,因此可以看到圖形表面。
VIDIOC_S_PARM 和 VIDIOC_S_CTRL ioctl 被定義為只寫引數,這與其他修改其引數的 ioctl 不一致。它們被更改為讀寫,而只寫版本則添加了
_OLD字尾。舊的 ioctl 在 Kernel 2.6.39 中被移除。假設引數不變的驅動程式和應用程式需要更新。
6.2.11. V4L2 2003-11-05¶
在 RGB 格式 中,以下畫素格式從 Bill Dirks 的 V4L2 規範中錯誤地轉移過來。下面的描述指記憶體中的位元組,按地址升序排列。
符號
本文件 0.5 版修訂前
已更正
V4L2_PIX_FMT_RGB24B, G, R
R, G, B
V4L2_PIX_FMT_BGR24R, G, B
B, G, R
V4L2_PIX_FMT_RGB32B, G, R, X
R, G, B, X
V4L2_PIX_FMT_BGR32R, G, B, X
B, G, R, X
V4L2_PIX_FMT_BGR24示例始終是正確的。在 影像屬性 中,V4L
VIDEO_PALETTE_RGB24和VIDEO_PALETTE_RGB32格式到 V4L2 畫素格式的對映已相應更正。與上述修復無關,驅動程式可能仍然以不同方式解釋某些 V4L2 RGB 畫素格式。這些問題尚待解決,詳情請參閱 RGB 格式。
6.2.12. V4L2 in Linux 2.6.6, 2004-05-09¶
ioctl VIDIOC_CROPCAP ioctl 被錯誤地定義為只讀引數。它現在被定義為讀寫 ioctl,而只讀版本被重新命名為
VIDIOC_CROPCAP_OLD。舊的 ioctl 在 Kernel 2.6.39 中被移除。
6.2.13. V4L2 in Linux 2.6.8¶
struct v4l2_buffer中添加了一個新欄位input(以前是reserved[0])。此欄位的目的是在影片捕獲過程中與影片輸入(例如攝像機)交替。必須使用新的V4L2_BUF_FLAG_INPUT標誌啟用此功能。flags欄位不再是隻讀的。
6.2.14. V4L2 spec erratum 2004-08-01¶
V4L2 open() 函式的返回值被錯誤地記錄。
音訊輸出 ioctl 以 -AUDOUT 結尾,而不是 -AUDIOOUT。
在當前音訊輸入示例中,
VIDIOC_G_AUDIOioctl 採用了錯誤的引數。ioctl VIDIOC_QBUF, VIDIOC_DQBUF 和 VIDIOC_DQBUF ioctl 的文件沒有提到
struct v4l2_buffer的memory欄位。示例中也缺少它。此外,在VIDIOC_DQBUF頁面上,EIO錯誤程式碼未被記錄。
6.2.15. V4L2 in Linux 2.6.14¶
添加了一個新的切片 VBI 介面。它在 切片 VBI 資料介面 中有所記載,並取代了 V4L2 規範 0.8 中首次提出的介面。
6.2.16. V4L2 in Linux 2.6.15¶
添加了 ioctl VIDIOC_LOG_STATUS ioctl。
定義了新的影片標準
V4L2_STD_NTSC_443、V4L2_STD_SECAM_LC、V4L2_STD_SECAM_DK(SECAM D、K 和 K1 的集合)以及V4L2_STD_ATSC(V4L2_STD_ATSC_8_VSB和V4L2_STD_ATSC_16_VSB的集合)。請注意,V4L2_STD_525_60集現在包含V4L2_STD_NTSC_443。另請參閱 typedef v4l2_std_id。VIDIOC_G_COMP和VIDIOC_S_COMPioctl 分別重新命名為VIDIOC_G_MPEGCOMP和VIDIOC_S_MPEGCOMP。它們的引數被 structv4l2_mpeg_compression指標取代。(VIDIOC_G_MPEGCOMP和VIDIOC_S_MPEGCOMPioctl 在 Linux 2.6.25 中被移除。)
6.2.17. V4L2 spec erratum 2005-11-27¶
影片捕獲示例中呼叫 VIDIOC_S_CROP ioctl 時未檢查是否支援裁剪。在影片標準選擇示例中,VIDIOC_S_STD 呼叫使用了錯誤的引數型別。
6.2.18. V4L2 spec erratum 2006-01-10¶
struct v4l2_input中的V4L2_IN_ST_COLOR_KILL標誌不僅指示顏色殺手是否啟用,還指示它是否處於活動狀態。(顏色殺手在檢測到影片訊號中沒有顏色時停用顏色解碼以提高影像質量。)VIDIOC_S_PARM 是一個讀寫 ioctl,而不是其參考頁面上所述的只寫 ioctl。此 ioctl 已在 2003 年更改,如上所述。
6.2.19. V4L2 spec erratum 2006-02-03¶
在
struct v4l2_captureparm和struct v4l2_outputparm中,timeperframe欄位表示時間以秒為單位,而不是微秒。
6.2.20. V4L2 spec erratum 2006-02-04¶
struct v4l2_window中的clips欄位必須指向struct v4l2_clip的陣列,而不是連結串列,因為驅動程式會忽略struct v4l2_clip的next指標。
6.2.21. V4L2 in Linux 2.6.17¶
添加了新的影片標準宏:
V4L2_STD_NTSC_M_KR(NTSC M 韓國),以及集合V4L2_STD_MN、V4L2_STD_B、V4L2_STD_GH和V4L2_STD_DK。V4L2_STD_NTSC和V4L2_STD_SECAM集合現在分別包含V4L2_STD_NTSC_M_KR和V4L2_STD_SECAM_LC。定義了新的
V4L2_TUNER_MODE_LANG1_LANG2以錄製雙語節目的兩種語言。為此目的使用V4L2_TUNER_MODE_STEREO現已棄用。詳見 VIDIOC_G_TUNER 部分。
6.2.22. V4L2 規範勘誤 2006-09-23 (草案 0.15)¶
在多處,切片 VBI 介面的
V4L2_BUF_TYPE_SLICED_VBI_CAPTURE和V4L2_BUF_TYPE_SLICED_VBI_OUTPUT未與其他緩衝區型別一同提及。在 VIDIOC_G_AUDIO 中,澄清了
struct v4l2_audio的mode欄位是一個標誌欄位。ioctl VIDIOC_QUERYCAP 未提及切片 VBI 和無線電功能標誌。
在 VIDIOC_G_FREQUENCY 中,澄清了應用程式在呼叫 VIDIOC_S_FREQUENCY 之前必須初始化
struct v4l2_frequency的調諧器type欄位。struct v4l2_requestbuffers中的reserved陣列有 2 個元素,而不是 32 個。在“影片輸出介面”和“原始 VBI 資料介面”中,從未普及的裝置檔名
/dev/vout被/dev/video取代。在 Linux 2.6.15 中,VBI 裝置次要號的可能範圍從 224-239 擴充套件到 224-255。因此,現在可以使用裝置檔名
/dev/vbi0到/dev/vbi31。
6.2.23. Linux 2.6.18 中的 V4L2¶
添加了新的 ioctl 命令 VIDIOC_G_EXT_CTRLS、VIDIOC_S_EXT_CTRLS 和 VIDIOC_TRY_EXT_CTRLS,以及一個跳過不支援的控制的標誌,配合 ioctls VIDIOC_QUERYCTRL, VIDIOC_QUERY_EXT_CTRL 和 VIDIOC_QUERYMENU 使用;新增了控制型別
V4L2_CTRL_TYPE_INTEGER64和V4L2_CTRL_TYPE_CTRL_CLASS(enum v4l2_ctrl_type);以及新的控制標誌V4L2_CTRL_FLAG_READ_ONLY、V4L2_CTRL_FLAG_UPDATE、V4L2_CTRL_FLAG_INACTIVE和V4L2_CTRL_FLAG_SLIDER(控制標誌)。詳見擴充套件控制 API。
6.2.24. Linux 2.6.19 中的 V4L2¶
在
struct v4l2_sliced_vbi_cap中,添加了一個緩衝區型別欄位,替換了一個保留欄位。請注意,在enum型別大小與int型別大小不同的架構上,該結構的大小已發生變化。VIDIOC_G_SLICED_VBI_CAP ioctl 從只讀重新定義為讀寫。應用程式現在必須初始化type欄位並清除保留欄位。這些更改可能會 破壞 與舊版驅動程式和應用程式的 相容性。添加了 ioctl 命令 ioctl VIDIOC_ENUM_FRAMESIZES 和 ioctl VIDIOC_ENUM_FRAMEINTERVALS。
添加了新的畫素格式
V4L2_PIX_FMT_RGB444(RGB 格式)。
6.2.25. V4L2 規範勘誤 2006-10-12 (草案 0.17)¶
V4L2_PIX_FMT_HM12(保留影像格式) 是 YUV 4:2:0 格式,而不是 4:2:2 格式。
6.2.26. Linux 2.6.21 中的 V4L2¶
videodev2.h標頭檔案現在採用 GNU 通用公共許可證第二版或更高版本,以及三條款 BSD 風格許可證雙重許可。
6.2.27. Linux 2.6.22 中的 V4L2¶
添加了兩種新的欄位順序
V4L2_FIELD_INTERLACED_TB和V4L2_FIELD_INTERLACED_BT。詳見enum v4l2_field。影片疊加介面添加了三種新的剪裁/混合方法,帶有全域性或直向或反轉的區域性 alpha 值。詳見 VIDIOC_G_FBUF 和 VIDIOC_S_FBUF ioctl 的描述。
struct v4l2_window中添加了一個新的global_alpha欄位,擴充套件了該結構。這可能會**破壞**直接使用struct v4l2_window的應用程式的**相容性**。然而,VIDIOC_G/S/TRY_FMT ioctl 命令不受影響,這些命令接受指向struct v4l2_format父結構(末尾帶有填充位元組)的指標。struct v4l2_window中chromakey欄位的格式從“主機位元組序 RGB32”更改為與幀緩衝區相同格式的畫素值。這可能會**破壞**現有應用程式的**相容性**。目前尚不清楚是否有驅動程式支援“主機位元組序 RGB32”格式。
6.2.28. Linux 2.6.24 中的 V4L2¶
添加了畫素格式
V4L2_PIX_FMT_PAL8、V4L2_PIX_FMT_YUV444、V4L2_PIX_FMT_YUV555、V4L2_PIX_FMT_YUV565和V4L2_PIX_FMT_YUV32。
6.2.29. Linux 2.6.25 中的 V4L2¶
添加了畫素格式 V4L2_PIX_FMT_Y16 和 V4L2_PIX_FMT_SBGGR16。
添加了新的控制功能:
V4L2_CID_POWER_LINE_FREQUENCY、V4L2_CID_HUE_AUTO、V4L2_CID_WHITE_BALANCE_TEMPERATURE、V4L2_CID_SHARPNESS和V4L2_CID_BACKLIGHT_COMPENSATION。控制V4L2_CID_BLACK_LEVEL、V4L2_CID_WHITENESS、V4L2_CID_HCENTER和V4L2_CID_VCENTER已棄用。添加了一個攝像頭控制類,包含新的控制:
V4L2_CID_EXPOSURE_AUTO、V4L2_CID_EXPOSURE_ABSOLUTE、V4L2_CID_EXPOSURE_AUTO_PRIORITY、V4L2_CID_PAN_RELATIVE、V4L2_CID_TILT_RELATIVE、V4L2_CID_PAN_RESET、V4L2_CID_TILT_RESET、V4L2_CID_PAN_ABSOLUTE、V4L2_CID_TILT_ABSOLUTE、V4L2_CID_FOCUS_ABSOLUTE、V4L2_CID_FOCUS_RELATIVE和V4L2_CID_FOCUS_AUTO。VIDIOC_G_MPEGCOMP和VIDIOC_S_MPEGCOMPioctl 命令在 Linux 2.6.18 中已被擴充套件控制介面取代,最終從videodev2.h標頭檔案中移除。
6.2.30. Linux 2.6.26 中的 V4L2¶
添加了畫素格式
V4L2_PIX_FMT_Y16和V4L2_PIX_FMT_SBGGR16。添加了使用者控制
V4L2_CID_CHROMA_AGC和V4L2_CID_COLOR_KILLER。
6.2.31. Linux 2.6.27 中的 V4L2¶
添加了 ioctl VIDIOC_S_HW_FREQ_SEEK ioctl 命令和
V4L2_CAP_HW_FREQ_SEEK功能。添加了畫素格式
V4L2_PIX_FMT_YVYU、V4L2_PIX_FMT_PCA501、V4L2_PIX_FMT_PCA505、V4L2_PIX_FMT_PCA508、V4L2_PIX_FMT_PCA561、V4L2_PIX_FMT_SGBRG8、V4L2_PIX_FMT_PAC207和V4L2_PIX_FMT_PJPG。
6.2.32. Linux 2.6.28 中的 V4L2¶
添加了
V4L2_MPEG_AUDIO_ENCODING_AAC和V4L2_MPEG_AUDIO_ENCODING_AC3MPEG 音訊編碼。添加了
V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVCMPEG 影片編碼。添加了畫素格式
V4L2_PIX_FMT_SGRBG10和V4L2_PIX_FMT_SGRBG10DPCM8。
6.2.33. Linux 2.6.29 中的 V4L2¶
VIDIOC_G_CHIP_IDENTioctl 命令已重新命名為VIDIOC_G_CHIP_IDENT_OLD,並引入了VIDIOC_DBG_G_CHIP_IDENT取代它。舊的struct v4l2_chip_ident已重新命名為struct v4l2_chip_ident_old。添加了畫素格式
V4L2_PIX_FMT_VYUY、V4L2_PIX_FMT_NV16和V4L2_PIX_FMT_NV61。添加了攝像頭控制
V4L2_CID_ZOOM_ABSOLUTE、V4L2_CID_ZOOM_RELATIVE、V4L2_CID_ZOOM_CONTINUOUS和V4L2_CID_PRIVACY。
6.2.34. Linux 2.6.30 中的 V4L2¶
添加了新的控制標誌
V4L2_CTRL_FLAG_WRITE_ONLY。添加了新的控制
V4L2_CID_COLORFX。
6.2.35. Linux 2.6.32 中的 V4L2¶
為了便於比較 V4L2 API 和核心版本,現在 V4L2 API 使用 Linux 核心版本編號。
RDS 捕獲 API 已最終確定。詳見 RDS 介面。
為調製器和 RDS 編碼器添加了新功能。
添加了 libv4l API 的描述。
透過新型別
V4L2_CTRL_TYPE_STRING添加了對字串控制的支援。添加了
V4L2_CID_BAND_STOP_FILTER文件。添加了 FM 調製器(FM TX)擴充套件控制類:
V4L2_CTRL_CLASS_FM_TX及其控制 ID。添加了 FM 接收器(FM RX)擴充套件控制類:
V4L2_CTRL_CLASS_FM_RX及其控制 ID。添加了遙控器章節,描述了媒體裝置的預設遙控器對映。
6.2.36. Linux 2.6.33 中的 V4L2¶
添加了數字影片時序支援,以支援 HDTV 接收器和發射器。
6.2.37. Linux 2.6.34 中的 V4L2¶
為攝像頭控制類添加了
V4L2_CID_IRIS_ABSOLUTE和V4L2_CID_IRIS_RELATIVE控制。
6.2.38. Linux 2.6.37 中的 V4L2¶
移除了 vtx(圖文電視/字幕電視)API。該 API 已不再使用,也沒有硬體可驗證該 API。也未發現任何使用它的使用者空間應用程式。它原定於 2.6.35 版本中移除。
6.2.39. Linux 2.6.39 中的 V4L2¶
移除了舊的 VIDIOC_*_OLD 符號和 V4L1 支援。
添加了多平面 API。不影響當前驅動程式和應用程式的相容性。詳見多平面 API。
6.2.40. Linux 3.1 中的 V4L2¶
VIDIOC_QUERYCAP 現在返回每個子系統版本,而不是每個驅動程式版本。
對無效 ioctl 進行了錯誤程式碼標準化。
添加了 V4L2_CTRL_TYPE_BITMASK。
6.2.41. Linux 3.2 中的 V4L2¶
添加了 V4L2_CTRL_FLAG_VOLATILE 以向用戶空間指示易失性控制。
添加了用於裁剪和合成的擴充套件控制的選擇 API。不影響當前驅動程式和應用程式的相容性。詳見選擇 API。
6.2.42. Linux 3.3 中的 V4L2¶
為使用者控制類添加了
V4L2_CID_ALPHA_COMPONENT控制。struct v4l2_capabilities中添加了device_caps欄位,並添加了新的V4L2_CAP_DEVICE_CAPS功能。
6.2.43. Linux 3.4 中的 V4L2¶
6.2.44. Linux 3.5 中的 V4L2¶
添加了整數選單,新型別將是
V4L2_CTRL_TYPE_INTEGER_MENU。添加了 V4L2 子裝置介面的選擇 API:ioctl VIDIOC_SUBDEV_G_SELECTION, VIDIOC_SUBDEV_S_SELECTION 和 VIDIOC_SUBDEV_S_SELECTION。
為
V4L2_CID_COLORFX控制添加了V4L2_COLORFX_ANTIQUE、V4L2_COLORFX_ART_FREEZE、V4L2_COLORFX_AQUA、V4L2_COLORFX_SILHOUETTE、V4L2_COLORFX_SOLARIZATION、V4L2_COLORFX_VIVID和V4L2_COLORFX_ARBITRARY_CBCR選單項。添加了
V4L2_CID_COLORFX_CBCR控制。添加了攝像頭控制
V4L2_CID_AUTO_EXPOSURE_BIAS、V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE、V4L2_CID_IMAGE_STABILIZATION、V4L2_CID_ISO_SENSITIVITY、V4L2_CID_ISO_SENSITIVITY_AUTO、V4L2_CID_EXPOSURE_METERING、V4L2_CID_SCENE_MODE、V4L2_CID_3A_LOCK、V4L2_CID_AUTO_FOCUS_START、V4L2_CID_AUTO_FOCUS_STOP、V4L2_CID_AUTO_FOCUS_STATUS和V4L2_CID_AUTO_FOCUS_RANGE。
6.2.45. Linux 3.6 中的 V4L2¶
將
struct v4l2_buffer中的input替換為reserved2並移除了V4L2_BUF_FLAG_INPUT。添加了
V4L2_CAP_VIDEO_M2M和V4L2_CAP_VIDEO_M2M_MPLANE功能。添加了對頻帶列舉的支援:ioctl VIDIOC_ENUM_FREQ_BANDS。
6.2.46. Linux 3.9 中的 V4L2¶
在
struct v4l2_buffer的flags欄位中添加了時間戳型別。詳見緩衝區標誌。添加了
V4L2_EVENT_CTRL_CH_RANGE控制事件更改標誌。詳見控制更改。
6.2.47. Linux 3.10 中的 V4L2¶
移除了過時且未使用的 DV_PRESET ioctl 命令 VIDIOC_G_DV_PRESET、VIDIOC_S_DV_PRESET、VIDIOC_QUERY_DV_PRESET 和 VIDIOC_ENUM_DV_PRESET。移除了相關的
v4l2_input/output功能標誌V4L2_IN_CAP_PRESETS和V4L2_OUT_CAP_PRESETS。添加了新的除錯 ioctl 命令 ioctl VIDIOC_DBG_G_CHIP_INFO。
6.2.48. Linux 3.11 中的 V4L2¶
移除了過時的
VIDIOC_DBG_G_CHIP_IDENTioctl 命令。
6.2.49. Linux 3.14 中的 V4L2¶
在
struct v4l2_rect中,width和height欄位的型別從 _s32 更改為 _u32。
6.2.50. Linux 3.15 中的 V4L2¶
添加了軟體定義無線電(SDR)介面。
6.2.51. Linux 3.16 中的 V4L2¶
添加了事件
V4L2_EVENT_SOURCE_CHANGE。
6.2.52. Linux 3.17 中的 V4L2¶
擴充套件了
struct v4l2_pix_format。添加了格式標誌。添加了複合控制型別和 VIDIOC_QUERY_EXT_CTRL。
6.2.53. Linux 3.18 中的 V4L2¶
添加了
V4L2_CID_PAN_SPEED和V4L2_CID_TILT_SPEED攝像頭控制。
6.2.54. Linux 3.19 中的 V4L2¶
重寫了顏色空間章節,在
struct v4l2_pix_format、struct v4l2_pix_format_mplane和struct v4l2_mbus_framefmt中添加了新的enum v4l2_ycbcr_encoding和enum v4l2_quantization欄位。
6.2.55. Linux 4.4 中的 V4L2¶
將
V4L2_TUNER_ADC重新命名為V4L2_TUNER_SDR。V4L2_TUNER_ADC的使用現已棄用。添加了
V4L2_CID_RF_TUNER_RF_GAIN射頻調諧器控制。為軟體定義無線電(SDR)介面添加了發射器支援。
6.2.56. V4L2 與其他 Linux 多媒體 API 的關係¶
6.2.56.1. X 影片擴充套件¶
X 影片擴充套件(簡稱 XVideo 或 Xv)是 X Window 系統的一個擴充套件,例如由 XFree86 專案實現。其範圍類似於 V4L2,是一個為 X 客戶端提供影片捕獲和輸出裝置的 API。Xv 允許應用程式在視窗中顯示即時影片,將視窗內容傳送到電視輸出,並在 XPixmaps 中捕獲或輸出靜態影像 [1]。透過它們的實現,XFree86 使該擴充套件可在許多作業系統和架構上使用。
由於驅動程式嵌入在 X 伺服器中,Xv 相對於 V4L2 的影片疊加介面具有多項優勢。驅動程式可以輕鬆確定疊加目標,即可見圖形記憶體或用於破壞性疊加的螢幕外緩衝區。它可以對 RAMDAC 進行程式設計,以實現非破壞性疊加、縮放或色度鍵控,或實現影片捕獲硬體的剪裁功能,始終與繪圖操作或視窗移動或更改其堆疊順序保持同步。
為了結合 Xv 和 V4L 的優勢,XFree86 和 XOrg 中存在一個特殊的 Xv 驅動程式,它只對找到的任何支援疊加的 Video4Linux 裝置進行程式設計。要啟用它,/etc/X11/XF86Config 必須包含以下行
Section "Module"
Load "v4l"
EndSection
截至 XFree86 4.2,此驅動程式仍然僅支援 V4L ioctl 命令,但透過 V4L2 向後相容層,它應該可以很好地與所有 V4L2 裝置配合使用。由於 V4L2 允許多次開啟,因此當 X 客戶端請求影片疊加時,如果 V4L2 驅動程式支援,則可以捕獲影片。有關同時捕獲和疊加的限制,請參閱影片疊加介面中的討論。
僅與 V4L2 略有相關,XFree86 擴充套件了 Xv 以支援硬體 YUV 到 RGB 轉換和縮放,從而實現更快的影片播放,並添加了 MPEG-2 解碼硬體介面。此 API 對於顯示使用 V4L2 裝置捕獲的影像很有用。
6.2.56.2. 數字影片¶
V4L2 不支援數字地面、有線或衛星廣播。存在一個針對數字接收器的獨立專案。您可以在 https://linuxtv.org 找到其主頁。Linux DVB API 與 V4L2 API 沒有關聯,除非混合硬體的驅動程式可能同時支援兩者。
6.2.56.3. 音訊介面¶
[待辦 - OSS/ALSA]
6.2.57. 實驗性 API 元素¶
以下 V4L2 API 元素目前處於實驗階段,未來可能會發生變化。
6.2.58. 廢棄的 API 元素¶
以下 V4L2 API 元素已被新介面取代,不應在新的驅動程式中實現。
VIDIOC_G_MPEGCOMP和VIDIOC_S_MPEGCOMPioctl 命令。請使用擴充套件控制,擴充套件控制 API。VIDIOC_G_DV_PRESET, VIDIOC_S_DV_PRESET, VIDIOC_ENUM_DV_PRESETS 和 VIDIOC_QUERY_DV_PRESET ioctl 命令。請使用 DV 時序 API (數字影片 (DV) 時序)。
VIDIOC_SUBDEV_G_CROP和VIDIOC_SUBDEV_S_CROPioctl 命令。請使用VIDIOC_SUBDEV_G_SELECTION和VIDIOC_SUBDEV_S_SELECTION,ioctl VIDIOC_SUBDEV_G_SELECTION, VIDIOC_SUBDEV_S_SELECTION。