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, 色彩空間傳輸函式