3.1. 數字電視通用功能

3.1.1. DVB 裝置

這些函式負責處理 DVB 裝置節點。

enum dvb_device_type

數字電視裝置的型別

常量

DVB_DEVICE_SEC

數字電視獨立通用介面 (CI)

DVB_DEVICE_FRONTEND

數字電視前端。

DVB_DEVICE_DEMUX

數字電視解複用器。

DVB_DEVICE_DVR

數字電視數字影片錄影 (DVR)。

DVB_DEVICE_CA

數字電視條件訪問 (CA)。

DVB_DEVICE_NET

數字電視網路。

DVB_DEVICE_VIDEO

數字電視影片解碼器。已棄用。僅在 av7110-av 上使用。

DVB_DEVICE_AUDIO

數字電視音訊解碼器。已棄用。僅在 av7110-av 上使用。

DVB_DEVICE_OSD

數字電視螢幕顯示 (OSD)。已棄用。僅在 av7110 上使用。

struct dvb_adapter

表示使用 Linux DVB API 的數字電視介面卡

定義:

struct dvb_adapter {
    int num;
    struct list_head list_head;
    struct list_head device_list;
    const char *name;
    u8 proposed_mac [6];
    void* priv;
    struct device *device;
    struct module *module;
    int mfe_shared;
    struct dvb_device *mfe_dvbdev;
    struct mutex mfe_lock;
#if defined(CONFIG_MEDIA_CONTROLLER_DVB);
    struct mutex mdev_lock;
    struct media_device *mdev;
    struct media_entity *conn;
    struct media_pad *conn_pads;
#endif;
};

成員

num

介面卡的編號

list_head

包含 DVB 介面卡的列表

device_list

包含 DVB 裝置的列表

name

介面卡的名稱

proposed_mac

介面卡建議的 MAC 地址

priv

私有資料

device

指向 struct device 的指標

module

指向 struct module 的指標

mfe_shared

指示互斥前端。1 = 傳統排除行為:阻止任何 open() 呼叫 2 = 增強的排除行為,模擬繁忙前端的標準行為:允許只讀共享,否則當任何前端已經以寫入訪問方式開啟時,立即返回 -EBUSY。

mfe_dvbdev

正在使用的前端裝置,在 MFE 的情況下

mfe_lock

用於在使用 MFE 時防止使用其他前端的鎖。

mdev_lock

保護對 mdev 指標的訪問。

mdev

指向 struct media_device 的指標,在使用媒體控制器時使用。

conn

射頻聯結器。僅當裝置沒有單獨的調諧器時才使用。

conn_pads

指向與 conn 關聯的 struct media_pad 的指標;

struct dvb_device

表示 DVB 裝置節點

定義:

struct dvb_device {
    struct list_head list_head;
    struct kref ref;
    const struct file_operations *fops;
    struct dvb_adapter *adapter;
    enum dvb_device_type type;
    int minor;
    u32 id;
    int readers;
    int writers;
    int users;
    wait_queue_head_t wait_queue;
    int (*kernel_ioctl)(struct file *file, unsigned int cmd, void *arg);
#if defined(CONFIG_MEDIA_CONTROLLER_DVB);
    const char *name;
    struct media_intf_devnode *intf_devnode;
    unsigned tsout_num_entities;
    struct media_entity *entity, *tsout_entity;
    struct media_pad *pads, *tsout_pads;
#endif;
    void *priv;
};

成員

list_head

包含所有 DVB 裝置的列表頭

ref

此裝置的引用計數

fops

指向 struct file_operations 的指標

adapter

指向持有此裝置節點的介面卡的指標

type

裝置的型別,由 enum dvb_device_type 定義。

minor

裝置節點次裝置號。主裝置號始終為 DVB_MAJOR。

id

裝置 ID 號,在介面卡內部

readers

由呼叫者初始化。每次以只讀模式呼叫 open() 都會使此計數器減一。

writers

由呼叫者初始化。每次以讀/寫模式呼叫 open() 都會使此計數器減一。

users

由呼叫者初始化。每次以任何模式呼叫 open() 都會使此計數器減一。

wait_queue

等待佇列,用於等待 DVB API 呼叫者內部的某些事件

kernel_ioctl

用於處理來自使用者空間的 ioctl 呼叫的回撥函式。

name

要在媒體控制器中用於裝置的名稱

intf_devnode

指向 media_intf_devnode 的指標。由 dvbdev 核心用於儲存 MC 裝置節點介面

tsout_num_entities

傳輸流輸出實體的數量

entity

指向與裝置節點關聯的 struct media_entity 的指標

tsout_entity

包含與每個 TS 輸出節點關聯的 MC 實體的陣列

pads

指向與 entity 關聯的 struct media_pad 的指標;

tsout_pads

包含每個 tsout_entity 的源焊盤的陣列

priv

私有資料

描述

此結構由 DVB 核心(前端、CA、net、解複用器)用於建立裝置節點。通常,驅動程式不應直接初始化此結構。

struct dvbdevfops_node

在 dvbdevfops_list 中註冊的 fops 節點

定義:

struct dvbdevfops_node {
    struct file_operations *fops;
    enum dvb_device_type type;
    const struct dvb_device *template;
    struct list_head list_head;
};

成員

fops

為 ->owner 註冊動態分配的 fops

type

dvb_device 的型別

template

用於註冊的 dvb_device

list_head

dvbdevfops_list 的 list_head

struct dvb_device *dvb_device_get(struct dvb_device *dvbdev)

增加 dvb_device 引用

引數

struct dvb_device *dvbdev

指向 struct dvb_device 的指標

void dvb_device_put(struct dvb_device *dvbdev)

減少 dvb_device 引用

引數

struct dvb_device *dvbdev

指向 struct dvb_device 的指標

int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct module *module, struct device *device, short *adapter_nums)

註冊新的 DVB 介面卡

引數

struct dvb_adapter *adap

指向 struct dvb_adapter 的指標

const char *name

介面卡的名稱

struct module *module

在呼叫者處使用 THIS_MODULE 初始化

struct device *device

指向與裝置驅動程式對應的 struct device 的指標

short *adapter_nums

包含 dvb_register_adapter 的編號列表的陣列;用於從中選擇。通常,使用以下內容初始化:DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nums)

int dvb_unregister_adapter(struct dvb_adapter *adap)

登出 DVB 介面卡

引數

struct dvb_adapter *adap

指向 struct dvb_adapter 的指標

int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, const struct dvb_device *template, void *priv, enum dvb_device_type type, int demux_sink_pads)

註冊新的 DVB 裝置

引數

struct dvb_adapter *adap

指向 struct dvb_adapter 的指標

struct dvb_device **pdvbdev

指向將儲存新的 struct dvb_device 的位置的指標

const struct dvb_device *template

用於建立 pdvbdev 的模板;

void *priv

私有資料

enum dvb_device_type type

裝置的型別,由 enum dvb_device_type 定義。

int demux_sink_pads

解複用器輸出的數量,用於透過媒體控制器建立 TS 輸出。

void dvb_remove_device(struct dvb_device *dvbdev)

刪除已註冊的 DVB 裝置

引數

struct dvb_device *dvbdev

指向 struct dvb_device 的指標

描述

這不會釋放記憶體。當引用計數器為空時,dvb_free_device() 將執行此操作

void dvb_unregister_device(struct dvb_device *dvbdev)

登出 DVB 裝置

引數

struct dvb_device *dvbdev

指向 struct dvb_device 的指標

int dvb_create_media_graph(struct dvb_adapter *adap, bool create_rf_connector)

為裝置的數字電視部分建立媒體圖。

引數

struct dvb_adapter *adap

指向 struct dvb_adapter 的指標

bool create_rf_connector

如果為真,則也會建立射頻聯結器

描述

此函式檢查媒體控制器實體中的所有 DVB 相關函式,併為媒體圖建立所需的連結。它能夠處理多個調諧器或多個前端,但如果裝置有多個調諧器和多個前端,或者裝置有多個複用器,則不會建立連結。在這種情況下,呼叫方驅動程式應手動建立剩餘的連結。

void dvb_register_media_controller(struct dvb_adapter *adap, struct media_device *mdev)

在 DVB 介面卡處註冊媒體控制器

引數

struct dvb_adapter *adap

指向 struct dvb_adapter 的指標

struct media_device *mdev

指向 struct media_device 的指標

struct media_device *dvb_get_media_controller(struct dvb_adapter *adap)

獲取關聯的媒體控制器

引數

struct dvb_adapter *adap

指向 struct dvb_adapter 的指標

int dvb_generic_open(struct inode *inode, struct file *file)

DVB 裝置使用的數字電視開啟函式

引數

struct inode *inode

指向 struct inode 的指標。

struct file *file

指向 struct file 的指標。

描述

檢查 DVB 裝置節點是否仍然有效,許可權是否正確,並遞增負使用計數。

int dvb_generic_release(struct inode *inode, struct file *file)

DVB 裝置使用的數字電視關閉函式

引數

struct inode *inode

指向 struct inode 的指標。

struct file *file

指向 struct file 的指標。

描述

檢查 DVB 裝置節點是否仍然有效,許可權是否正確,並遞減負使用計數。

long dvb_generic_ioctl(struct file *file, unsigned int cmd, unsigned long arg)

DVB 裝置使用的數字電視關閉函式

引數

struct file *file

指向 struct file 的指標。

unsigned int cmd

Ioctl 名稱。

unsigned long arg

Ioctl 引數。

描述

檢查 DVB 裝置節點和 struct dvbdev.kernel_ioctl 是否仍然有效。如果有效,則呼叫 dvb_usercopy()

int dvb_usercopy(struct file *file, unsigned int cmd, unsigned long arg, int (*func)(struct file *file, unsigned int cmd, void *arg))

在發出 ioctl 時,從/向用戶空間記憶體複製資料。

引數

struct file *file

指向 struct file 的指標。

unsigned int cmd

Ioctl 名稱。

unsigned long arg

Ioctl 引數。

int (*func)(struct file *file, unsigned int cmd, void *arg)

實際處理 ioctl 的函式

描述

輔助函式,使用 ioctl 方向和大小從使用者空間複製。然後,它呼叫 func,如果需要,將資料複製回用戶空間。

struct i2c_client *dvb_module_probe(const char *module_name, const char *name, struct i2c_adapter *adap, unsigned char addr, void *platform_data)

用於探測 I2C 模組的輔助例程

引數

const char *module_name

要探測的 I2C 模組的名稱

const char *name

I2C 模組的可選名稱。用於除錯目的。如果為 NULL,則預設為 module_name

struct i2c_adapter *adap

指向描述將繫結模組的 I2C 介面卡的 struct i2c_adapter 的指標。

unsigned char addr

介面卡的 I2C 地址,以 7 位表示法。

void *platform_data

要傳遞給探測的 I2C 模組的平臺數據。

描述

此函式將 I2C 裝置繫結到 DVB 核心。所有使用 I2C 匯流排控制硬體的驅動程式都應使用此函式。使用 dvb_module_probe() 繫結的模組應使用 dvb_module_release() 解繫結。

注意

過去,DVB 模組(主要是前端)透過 dvb_attach() 宏繫結,該宏使用 I2C 底層函式進行醜陋的駭客攻擊。這種用法已棄用,並將很快刪除。相反,請使用此例程。

返回

成功時,返回一個指向繫結的 I2C 裝置的 struct i2c_clientNULL 否則。

void dvb_module_release(struct i2c_client *client)

釋放使用 dvb_module_probe() 分配的 I2C 裝置。

引數

struct i2c_client *client

指向要釋放的 I2C 客戶端的 struct i2c_client 的指標。可以為 NULL

描述

此函式應用於釋放 dvb_module_probe() 保留的所有資源,並解除 I2C 硬體的繫結。

dvb_attach

dvb_attach (FUNCTION, ARGS...)

將 DVB 前端附加到 DVB 核心。

引數

FUNCTION

要呼叫的前端模組上的函式。

ARGS...

FUNCTION 引數。

描述

此輔助函式在執行時載入前端模組,並在其中使用 ARGS 執行 FUNCTION 函式。由於它會遞增符號使用計數,因此在取消註冊時,應呼叫 dvb_detach()

注意

過去,DVB 模組(主要是前端)透過 dvb_attach() 宏繫結,該宏使用 I2C 底層函式進行醜陋的駭客攻擊。這種用法已棄用,並將很快刪除。相反,您應該使用 dvb_module_probe()

dvb_detach

dvb_detach (FUNC)

分離透過 dvb_attach() 載入的 DVB 前端

引數

FUNC

附加函式

描述

遞減先前透過 dvb_attach() 呼叫的函式的使用計數。

3.1.2. 數字電視環形緩衝區

這些例程實現用於處理數字電視資料並將其從/向用戶空間複製的環形緩衝區。

注意

  1. 出於效能原因,讀取和寫入例程不會檢查緩衝區大小和/或可用/空閒的位元組數。這必須在呼叫這些例程之前完成。例如

/* write @buflen: bytes */
free = dvb_ringbuffer_free(rbuf);
if (free >= buflen)
        count = dvb_ringbuffer_write(rbuf, buffer, buflen);
else
        /* do something */

/* read min. 1000, max. @bufsize: bytes */
avail = dvb_ringbuffer_avail(rbuf);
if (avail >= 1000)
        count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize));
else
        /* do something */
  1. 如果只有一個讀取器和一個寫入器,則無需鎖定讀取或寫入操作。必須相互鎖定兩個或多個讀取器。重新整理緩衝區算作讀取操作。重置緩衝區算作讀取和寫入操作。必須相互鎖定兩個或多個寫入器。

struct dvb_ringbuffer

描述 DVB 框架中使用的環形緩衝區

定義:

struct dvb_ringbuffer {
    u8 *data;
    ssize_t size;
    ssize_t pread;
    ssize_t pwrite;
    int error;
    wait_queue_head_t queue;
    spinlock_t lock;
};

成員

data

寫入環形緩衝區資料的區域

size

環形緩衝區的大小

pread

要讀取的下一個位置

pwrite

要寫入的下一個位置

error

由環形緩衝區客戶端用於指示發生了錯誤。

queue

環形緩衝區客戶端用於指示緩衝區已滿的等待佇列

用於保護環形緩衝區的自旋鎖

void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len)

初始化環形緩衝區、鎖和佇列

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

void *data

指向將儲存資料的緩衝區的指標

size_t len

從環形緩衝區到 buf 的位元組數

int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf)

測試緩衝區是否為空

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf)

返回緩衝區中空閒位元組的數量

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

返回

緩衝區中空閒位元組的數量

ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf)

返回緩衝區中等待的位元組數

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

返回

緩衝區中等待的位元組數

void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf)

將環形緩衝區重置為初始狀態

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

描述

將讀取和寫入指標重置為零並重新整理緩衝區。

這算作讀取和寫入操作

void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf)

重新整理緩衝區

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf)

重新整理受自旋鎖保護的緩衝區並喚醒等待任務

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

DVB_RINGBUFFER_PEEK

DVB_RINGBUFFER_PEEK (rbuf, offs)

檢視緩衝區中位元組 offs

引數

rbuf

指向 struct dvb_ringbuffer 的指標

offs

環形緩衝區內的偏移量

DVB_RINGBUFFER_SKIP

DVB_RINGBUFFER_SKIP (rbuf, num)

將讀取指標前進 num 位元組

引數

rbuf

指向 struct dvb_ringbuffer 的指標

num

要前進的位元組數

ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf, u8 __user *buf, size_t len)

將緩衝區讀取到使用者指標中

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

u8 __user *buf

指向將儲存資料的緩衝區的指標

size_t len

從環形緩衝區到 buf 的位元組數

描述

此變體假設緩衝區是使用者空間中的記憶體。因此,它將在內部呼叫 copy_to_user()。

返回

傳輸的位元組數或 -EFAULT

void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf, size_t len)

將緩衝區讀取到指標中

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

u8 *buf

指向將儲存資料的緩衝區的指標

size_t len

從環形緩衝區到 buf 的位元組數

描述

此變體假設緩衝區是核心空間中的記憶體

返回

傳輸的位元組數或 -EFAULT

DVB_RINGBUFFER_WRITE_BYTE

DVB_RINGBUFFER_WRITE_BYTE (rbuf, byte)

將單個位元組寫入環形緩衝區

引數

rbuf

指向 struct dvb_ringbuffer 的指標

位元組

要寫入的位元組

ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf, size_t len)

將緩衝區寫入環形緩衝區

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

const u8 *buf

指向將讀取資料的緩衝區的指標

size_t len

從環形緩衝區到 buf 的位元組數

描述

此變體假設緩衝區是核心空間中的記憶體

返回

傳輸的位元組數或 -EFAULT

ssize_t dvb_ringbuffer_write_user(struct dvb_ringbuffer *rbuf, const u8 __user *buf, size_t len)

寫入透過使用者指標接收的緩衝區

引數

struct dvb_ringbuffer *rbuf

指向 struct dvb_ringbuffer 的指標

const u8 __user *buf

指向將讀取資料的緩衝區的指標

size_t len

從環形緩衝區到 buf 的位元組數

描述

此變體假設緩衝區是使用者空間中的記憶體。因此,它將在內部呼叫 copy_from_user()。

返回

傳輸的位元組數或 -EFAULT

ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8 *buf, size_t len)

將資料包寫入環形緩衝區。

引數

struct dvb_ringbuffer *rbuf

要寫入的環形緩衝區。

u8 *buf

要寫入的緩衝區。

size_t len

緩衝區長度(當前限制為最大 65535 位元組)。

返回

寫入的位元組數,或 -EFAULT、-ENOMEM、-EINVAL。

ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, size_t idx, int offset, u8 __user *buf, size_t len)

從環形緩衝區中的資料包讀取。

引數

struct dvb_ringbuffer *rbuf

相關的環形緩衝區。

size_t idx

dvb_ringbuffer_pkt_next() 返回的資料包索引。

int offset

要從中讀取的資料包中的偏移量。

u8 __user *buf

資料的目標緩衝區。

size_t len

目標緩衝區的大小。

返回

讀取的位元組數,或 -EFAULT。

描述

注意

dvb_ringbuffer_read() 不同,這 不會 更新環形緩衝區中的讀取指標。您必須使用 dvb_ringbuffer_pkt_dispose() 將資料包標記為不再需要。

ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx, int offset, u8 *buf, size_t len)

從環形緩衝區中的資料包讀取。

引數

struct dvb_ringbuffer *rbuf

相關的環形緩衝區。

size_t idx

dvb_ringbuffer_pkt_next() 返回的資料包索引。

int offset

要從中讀取的資料包中的偏移量。

u8 *buf

資料的目標緩衝區。

size_t len

目標緩衝區的大小。

注意

dvb_ringbuffer_read_user() 不同,這 確實 更新了環形緩衝區中的讀取指標。

返回

讀取的位元組數,或 -EFAULT。

void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx)

處理環形緩衝區中的資料包。

引數

struct dvb_ringbuffer *rbuf

相關的環形緩衝區。

size_t idx

dvb_ringbuffer_pkt_next() 返回的資料包索引。

ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t *pktlen)

獲取環形緩衝區中下一個資料包的索引。

引數

struct dvb_ringbuffer *rbuf

相關的環形緩衝區。

size_t idx

上一個資料包索引,或 -1 以返回第一個資料包索引。

size_t *pktlen

成功後,將被更新以包含資料包的長度(以位元組為單位)。返回資料包索引(如果 >=0),如果沒有可用的資料包,則返回 -1。

3.1.3. 數字電視 VB2 處理程式

enum dvb_buf_type

數字電視記憶體對映緩衝區型別

常量

DVB_BUF_TYPE_CAPTURE

緩衝區由核心填充,包含接收到的數字電視流

enum dvb_vb2_states

用於控制 VB2 狀態機的狀態

常量

DVB_VB2_STATE_NONE

VB2 引擎尚未初始化、初始化失敗或 VB2 已釋放。

DVB_VB2_STATE_INIT

VB2 引擎已初始化。

DVB_VB2_STATE_REQBUFS

已請求緩衝區

DVB_VB2_STATE_STREAMON

VB2 正在流式傳輸。呼叫者不應直接檢查它。相反,他們應該使用 dvb_vb2_is_streaming()

注意

描述

呼叫者不應直接接觸狀態機。這在 dvb_vb2.c 內部處理。

struct dvb_buffer

v4l2 的影片緩衝區資訊。

定義:

struct dvb_buffer {
    struct vb2_buffer       vb;
    struct list_head        list;
};

成員

vb

嵌入式結構 vb2_buffer

list

struct dvb_buffer 的列表。

struct dvb_vb2_ctx

VB2 處理程式的控制結構

定義:

struct dvb_vb2_ctx {
    struct vb2_queue        vb_q;
    struct mutex            mutex;
    spinlock_t slock;
    struct list_head        dvb_q;
    struct dvb_buffer       *buf;
    int offset;
    int remain;
    int state;
    int buf_siz;
    int buf_cnt;
    int nonblocking;
    enum dmx_buffer_flags flags;
    u32 count;
    char name[DVB_VB2_NAME_MAX + 1];
};

成員

vb_q

指向具有 videobuf2 佇列的 struct vb2_queue 的指標。

mutex

用於序列化 vb2 操作的互斥鎖。由 vb2 核心 wait_preparewait_finish 操作使用。

slock

用於保護 dvb_vb2.c 中的緩衝區填充的自旋鎖。

dvb_q

尚未填充的緩衝區的列表。

buf

指向當前正在填充的緩衝區的指標。

offset

buf 中要填充的下一個位置的索引。

remain

buf 中還剩多少位元組要填充。

state

enum dvb_vb2_states 定義的緩衝區狀態的位掩碼。

buf_siz

每個 VB2 緩衝區的大小。

buf_cnt

VB2 緩衝區的數量。

nonblocking

如果與零不同,則裝置以非阻塞模式執行。

flags

enum dmx_buffer_flags 定義的緩衝區標誌。僅在 DMX_DQBUF 處填充。DMX_QBUF 應該將此欄位清零。

count

填充緩衝區的單調計數器。有助於識別資料流丟失。僅在 DMX_DQBUF 處填充。DMX_QBUF 應該將此欄位清零。

name

裝置型別的名稱。目前,它可以是“dvr”或“demux_filter”。

int dvb_vb2_init(struct dvb_vb2_ctx *ctx, const char *name, int non_blocking)

初始化 VB2 處理程式

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

const char *name

VB2 處理程式的名稱

int non_blocking

如果不為零,則表示裝置處於非阻塞模式

int dvb_vb2_release(struct dvb_vb2_ctx *ctx)

釋放 VB2 處理程式分配的資源,並將 ctx 置於 DVB_VB2_STATE_NONE 狀態。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

int dvb_vb2_is_streaming(struct dvb_vb2_ctx *ctx)

檢查 VB2 處理程式是否正在流式傳輸

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

返回

如果不流式傳輸,則為 0,否則為 1。

int dvb_vb2_fill_buffer(struct dvb_vb2_ctx *ctx, const unsigned char *src, int len, enum dmx_buffer_flags *buffer_flags)

填充 VB2 緩衝區

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

const unsigned char *src

資料儲存的位置

int len

要從 src 複製的位元組數

enum dmx_buffer_flags *buffer_flags

指向由 enum dmx_buffer_flags 定義的緩衝區標誌的指標。可以為 NULL。

__poll_t dvb_vb2_poll(struct dvb_vb2_ctx *ctx, struct file *file, poll_table *wait)

用於數字電視緩衝區處理的 vb2_core_streamon() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

struct file *file

傳遞給輪詢檔案操作處理程式的 struct file 引數。

poll_table *wait

傳遞給輪詢檔案操作處理程式的 poll_table 等待引數。

描述

實現輪詢 syscall() 邏輯。

int dvb_vb2_stream_on(struct dvb_vb2_ctx *ctx)

用於數字電視緩衝區處理的 vb2_core_streamon() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

描述

啟動 dvb 流式傳輸

int dvb_vb2_stream_off(struct dvb_vb2_ctx *ctx)

用於數字電視緩衝區處理的 vb2_core_streamoff() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

描述

停止 dvb 流式傳輸

int dvb_vb2_reqbufs(struct dvb_vb2_ctx *ctx, struct dmx_requestbuffers *req)

用於數字電視緩衝區處理的 vb2_core_reqbufs() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

struct dmx_requestbuffers *req

從使用者空間傳遞的 struct dmx_requestbuffers,以便處理 DMX_REQBUFS

描述

透過請求多個緩衝區來啟動流式傳輸。如果 req->count 為零,也用於釋放先前請求的緩衝區。

int dvb_vb2_querybuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)

用於數字電視緩衝區處理的 vb2_core_querybuf() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

struct dmx_buffer *b

從使用者空間傳遞的 struct dmx_buffer,以便處理 DMX_QUERYBUF

int dvb_vb2_expbuf(struct dvb_vb2_ctx *ctx, struct dmx_exportbuffer *exp)

用於數字電視緩衝區處理的 vb2_core_expbuf() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

struct dmx_exportbuffer *exp

從使用者空間傳遞的 struct dmx_exportbuffer,以便處理 DMX_EXPBUF

描述

將緩衝區匯出為檔案描述符。

int dvb_vb2_qbuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)

用於數字電視緩衝區處理的 vb2_core_qbuf() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

struct dmx_buffer *b

為了處理 DMX_QBUF,從使用者空間傳遞的 struct dmx_buffer

描述

根據使用者空間請求,將數字電視緩衝區入隊

int dvb_vb2_dqbuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)

用於數字電視緩衝區處理的 vb2_core_dqbuf() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

struct dmx_buffer *b

為了處理 DMX_DQBUF,從使用者空間傳遞的 struct dmx_buffer

描述

將數字電視緩衝區出隊到使用者空間

int dvb_vb2_mmap(struct dvb_vb2_ctx *ctx, struct vm_area_struct *vma)

用於數字電視緩衝區處理的 vb2_mmap() 的包裝器。

引數

struct dvb_vb2_ctx *ctx

VB2 處理程式的控制結構

struct vm_area_struct *vma

指向 struct vm_area_struct 的指標,該指標帶有傳遞給驅動程式中 mmap 檔案操作處理程式的 vma。

描述

將數字電視影片緩衝區對映到應用程式地址空間。