2.17. V4L2 DV 时序函数

struct v4l2_fract v4l2_calc_timeperframe(const struct v4l2_dv_timings *t)

辅助函数,用于基于 v4l2_dv_timings 字段计算 timeperframe。

参数

const struct v4l2_dv_timings *t

视频模式的时序。

描述

使用像素时钟值和水平/垂直测量值计算预期 timeperframe。这意味着 v4l2_dv_timings 结构必须正确且完全填充。

v4l2_check_dv_timings_fnc

Typedef: 时序检查回调

语法

bool v4l2_check_dv_timings_fnc (const struct v4l2_dv_timings *t, void *handle)

参数

const struct v4l2_dv_timings *t

v4l2_dv_timings 结构。

void *handle

来自驱动程序的句柄。

描述

如果给定的时序有效,则返回 true。

bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t, const struct v4l2_dv_timings_cap *cap, v4l2_check_dv_timings_fnc fnc, void *fnc_handle)

这些时序有效吗?

参数

const struct v4l2_dv_timings *t

v4l2_dv_timings 结构。

const struct v4l2_dv_timings_cap *cap

v4l2_dv_timings_cap 功能。

v4l2_check_dv_timings_fnc fnc

用于检查此时序是否正常的回调。可以为 NULL。

void *fnc_handle

传递给 fnc 的句柄。

描述

如果给定的 dv_timings 结构受硬件功能和回调函数(如果非 NULL)支持,则返回 true,否则返回 false。

int v4l2_enum_dv_timings_cap(struct v4l2_enum_dv_timings *t, const struct v4l2_dv_timings_cap *cap, v4l2_check_dv_timings_fnc fnc, void *fnc_handle)

辅助函数,用于基于功能枚举可能的 DV 时序

参数

struct v4l2_enum_dv_timings *t

v4l2_enum_dv_timings 结构。

const struct v4l2_dv_timings_cap *cap

v4l2_dv_timings_cap 功能。

v4l2_check_dv_timings_fnc fnc

用于检查此时序是否正常的回调。可以为 NULL。

void *fnc_handle

传递给 fnc 的句柄。

描述

这将使用可能的 CEA-861 和 DMT 时序的完整列表枚举 dv_timings,从而根据硬件功能和回调函数(如果非 NULL)过滤掉任何不受支持的时序。

如果找到给定索引的有效时序,它将填充 t 并返回 0,否则返回 -EINVAL。

bool v4l2_find_dv_timings_cap(struct v4l2_dv_timings *t, const struct v4l2_dv_timings_cap *cap, unsigned pclock_delta, v4l2_check_dv_timings_fnc fnc, void *fnc_handle)

找到最接近的时序结构

参数

struct v4l2_dv_timings *t

v4l2_enum_dv_timings 结构。

const struct v4l2_dv_timings_cap *cap

v4l2_dv_timings_cap 功能。

unsigned pclock_delta

t->pixelclock 与正在考虑的时序结构之间的最大增量。

v4l2_check_dv_timings_fnc fnc

用于检查给定时序结构是否正常的。可以为 NULL。

void *fnc_handle

传递给 fnc 的句柄。

描述

此函数尝试将给定的时序映射到可能的 CEA-861 和 DMT 时序的完整列表中的条目,从而根据硬件功能和回调函数(如果非 NULL)过滤掉任何不受支持的时序。

成功时,它将使用找到的时序填充 t 并返回 true。失败时,它将返回 false。

bool v4l2_find_dv_timings_cea861_vic(struct v4l2_dv_timings *t, u8 vic)

基于 CEA-861 VIC 查找时序

参数

struct v4l2_dv_timings *t

时序数据。

u8 vic

CEA-861 VIC 代码

描述

成功时,它将使用找到的时序填充 t 并返回 true。失败时,它将返回 false。

bool v4l2_match_dv_timings(const struct v4l2_dv_timings *measured, const struct v4l2_dv_timings *standard, unsigned pclock_delta, bool match_reduced_fps)

两个时序是否匹配?

参数

const struct v4l2_dv_timings *measured

测量的时序数据。

const struct v4l2_dv_timings *standard

根据标准的时序。

unsigned pclock_delta

standard->pixelclock 和测量的时序之间的最大 Hz 增量。

bool match_reduced_fps

如果为 true,则在 V4L2_DV_FL_REDUCED_FPS 不匹配时失败。

描述

如果两个时序匹配,则返回 true,否则返回 false。

void v4l2_print_dv_timings(const char *dev_prefix, const char *prefix, const struct v4l2_dv_timings *t, bool detailed)

记录 dv_timings 结构的内容

参数

const char *dev_prefix

每行日志的设备前缀。

const char *prefix

每行日志的附加前缀,可以为 NULL。

const struct v4l2_dv_timings *t

时序数据。

bool detailed

如果为 true,则提供详细的日志。

bool v4l2_detect_cvt(unsigned int frame_height, unsigned int hfreq, unsigned int vsync, unsigned int active_width, u32 polarities, bool interlaced, const struct v4l2_dv_timings_cap *cap, struct v4l2_dv_timings *fmt)

检测给定的时序是否遵循 CVT 标准

参数

unsigned int frame_height

帧的总高度(包括消隐),以行为单位。

unsigned int hfreq

水平频率,以 Hz 为单位。

unsigned int vsync

垂直同步的高度,以行为单位。

unsigned int active_width

图像的活动宽度(不包括消隐)。只有在版本 2 的减少消隐的情况下才需要此信息。在其他情况下,此参数对时序没有任何影响。

u32 polarities

水平和垂直极性(与 struct v4l2_bt_timings 极性相同)。

bool interlaced

如果此标志为 true,则表示隔行格式

const struct v4l2_dv_timings_cap *cap

v4l2_dv_timings_cap 功能。

struct v4l2_dv_timings *fmt

生成的时序。

描述

此函数将尝试检测给定的值是否对应于有效的 CVT 格式。如果是,则它将返回 true,并且 fmt 将填充找到的 CVT 时序。

bool v4l2_detect_gtf(unsigned int frame_height, unsigned int hfreq, unsigned int vsync, u32 polarities, bool interlaced, struct v4l2_fract aspect, const struct v4l2_dv_timings_cap *cap, struct v4l2_dv_timings *fmt)

检测给定的时序是否遵循 GTF 标准

参数

unsigned int frame_height

帧的总高度(包括消隐),以行为单位。

unsigned int hfreq

水平频率,以 Hz 为单位。

unsigned int vsync

垂直同步的高度,以行为单位。

u32 polarities

水平和垂直极性(与 struct v4l2_bt_timings 极性相同)。

bool interlaced

如果此标志为 true,则表示隔行格式

struct v4l2_fract aspect

首选宽高比。GTF 没有从图像高度推导出图像宽度的方法,因此必须显式传递它。通常使用屏幕原生宽高比。如果未正确填写,则将假定为 16:9。

const struct v4l2_dv_timings_cap *cap

v4l2_dv_timings_cap 功能。

struct v4l2_dv_timings *fmt

生成的时序。

描述

此函数将尝试检测给定的值是否对应于有效的 GTF 格式。如果是,则它将返回 true,并且 fmt 将填充找到的 GTF 时序。

struct v4l2_fract v4l2_calc_aspect_ratio(u8 hor_landscape, u8 vert_portrait)

根据 EDID 中的字节 0x15 和 0x16 计算宽高比。

参数

u8 hor_landscape

EDID 中的字节 0x15。

u8 vert_portrait

EDID 中的字节 0x16。

描述

从 EDID 确定宽高比。请参阅 VESA 增强型 EDID 标准,版本 A,修订版 2,第 3.6.2 节:“水平和垂直屏幕尺寸或宽高比”

struct v4l2_fract v4l2_dv_timings_aspect_ratio(const struct v4l2_dv_timings *t)

基于 v4l2_dv_timings 信息计算宽高比。

参数

const struct v4l2_dv_timings *t

时序数据。

bool can_reduce_fps(struct v4l2_bt_timings *bt)

检查是否满足降低 fps 的条件。

参数

struct v4l2_bt_timings *bt

v4l2 时序结构

描述

对于不同的时序,如果满足以下条件,则允许降低 fps

  • 对于 CVT 时序:如果减少消隐 v2 (vsync == 8) 为 true。

  • 对于 CEA861 时序:如果 V4L2_DV_FL_CAN_REDUCE_FPS 标志为 true。

struct v4l2_hdmi_colorimetry

描述 HDMI 色度信息

定义:

struct v4l2_hdmi_colorimetry {
    enum v4l2_colorspace colorspace;
    enum v4l2_ycbcr_encoding ycbcr_enc;
    enum v4l2_quantization quantization;
    enum v4l2_xfer_func xfer_func;
};

成员

colorspace

enum v4l2_colorspace,色彩空间

ycbcr_enc

enum v4l2_ycbcr_encoding, Y’CbCr 编码

quantization

enum v4l2_quantization, 色彩空间量化

xfer_func

enum v4l2_xfer_func, 色彩空间传输函数