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

类型定义:时序检查回调

语法

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

标准时序的 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 Enhanced 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;
};

成员

色彩空间

enum v4l2_colorspace,色彩空间

ycbcr_enc

enum v4l2_ycbcr_encoding,Y'CbCr 编码

量化

enum v4l2_quantization,色彩空间量化

xfer_func

enum v4l2_xfer_func,色彩空间传递函数