7.28. ioctl VIDIOC_G_ENC_INDEX

7.28.1. 名稱

VIDIOC_G_ENC_INDEX - 獲取有關壓縮影片流的元資料

7.28.2. 概要

VIDIOC_G_ENC_INDEX

int ioctl(int fd, VIDIOC_G_ENC_INDEX, struct v4l2_enc_idx *argp)

7.28.3. 引數

fd

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

argp

指向結構體v4l2_enc_idx的指標。

7.28.4. 描述

VIDIOC_G_ENC_INDEX ioctl 提供有關壓縮影片流的元資料,該影片流與當前從驅動程式讀取的相同或另一個應用程式,這對於隨機訪問流而無需解碼它非常有用。

要讀取資料,應用程式必須使用指向v4l2_enc_idx結構體的指標呼叫VIDIOC_G_ENC_INDEX。 成功後,驅動程式會填充entry陣列,將寫入的元素數量儲存在entries欄位中,並初始化entries_cap欄位。

entry陣列的每個元素都包含有關一個圖片的元資料。VIDIOC_G_ENC_INDEX呼叫從驅動程式緩衝區讀取最多V4L2_ENC_IDX_ENTRIES個條目,該緩衝區最多可容納entries_cap個條目。此數字可以小於或大於V4L2_ENC_IDX_ENTRIES,但不能為零。當應用程式未能及時讀取元資料時,最早的條目將丟失。當緩衝區為空或未進行捕獲/編碼時,entries將為零。

目前,此ioctl僅為MPEG-2程式流和影片基本流定義。

type v4l2_enc_idx
struct v4l2_enc_idx

__u32

條目數

驅動程式儲存在entry陣列中的條目數。

__u32

entries_cap

驅動程式可以緩衝的條目數。 必須大於零。

__u32

reserved[4]

保留供將來擴充套件。 驅動程式必須將陣列設定為零。

struct v4l2_enc_idx_entry

entry[V4L2_ENC_IDX_ENTRIES]

有關壓縮影片流的元資料。 陣列的每個元素都對應於一個圖片,按其offset升序排序。

type v4l2_enc_idx_entry
struct v4l2_enc_idx_entry

__u64

offset

從壓縮影片流的開頭到此圖片開頭的位元組偏移量,即ISO 13818-1中定義的PES資料包頭ISO 13818-2中定義的圖片頭。 停止編碼器時,驅動程式會將偏移量重置為零。

__u64

pts

ISO 13818-1中定義的此圖片的33位演示時間戳

__u32

length

此圖片的位元組長度。

__u32

flags

包含此圖片的編碼型別的標誌,請參閱索引條目標誌

__u32

reserved[2]

保留供將來擴充套件。 驅動程式必須將陣列設定為零。

索引條目標誌

V4L2_ENC_IDX_FRAME_I

0x00

這是一個幀內編碼圖片。

V4L2_ENC_IDX_FRAME_P

0x01

這是一個預測編碼圖片。

V4L2_ENC_IDX_FRAME_B

0x02

這是一個雙向預測編碼圖片。

V4L2_ENC_IDX_FRAME_MASK

0x0F

用此掩碼AND標誌欄位以獲取圖片編碼型別。

7.28.5. 返回值

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