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变量。 泛型错误代码在通用错误代码章节中描述。