9.1.12. 虛擬媒體控制器驅動 (vimc)

9.1.12.1. 原始碼文件

9.1.12.1.1. vimc-streamer

struct vimc_stream

表示管道中流的結構體

定義:

struct vimc_stream {
    struct media_pipeline pipe;
    struct vimc_ent_device *ved_pipeline[VIMC_STREAMER_PIPELINE_MAX_SIZE];
    unsigned int pipe_size;
    struct task_struct *kthread;
};

成員

pipe

與此流關聯的媒體管道物件

ved_pipeline

包含參與流的所有實體的陣列。順序是從呼叫 stream_on 的影片裝置(通常是捕獲裝置)到生成要在管道中處理的第一個基本影像的實體。

pipe_size

ved_pipeline 的大小

kthread

生成流幀的執行緒。

描述

當用戶在影片裝置中呼叫 stream_on 時,struct vimc_stream 用於跟蹤生成和處理流幀的所有實體和子裝置。

struct media_entity *vimc_get_source_entity(struct media_entity *ent)

獲取與第一個 sink pad 連線的實體

引數

struct media_entity *ent

引用 media_entity

描述

輔助函式,返回包含與給定媒體實體 pad 列表中的第一個 sink pad 連結的 source pad 的媒體實體。

返回值

如果找到,則返回 source pad;否則返回 NULL。

void vimc_streamer_pipeline_terminate(struct vimc_stream *stream)

停用流中所有 ved 中的流

引數

struct vimc_stream *stream

指向要停用的管道的流結構的指標。

描述

呼叫 s_stream 以停用管道中每個實體的流

int vimc_streamer_pipeline_init(struct vimc_stream *stream, struct vimc_ent_device *ved)

初始化流結構

引數

struct vimc_stream *stream

指向要初始化的流結構的指標

struct vimc_ent_device *ved

指向初始化流的 vimc 實體的指標

描述

初始化流結構。遍歷實體圖以構建稍後在 streamer 執行緒上使用的管道。呼叫 vimc_streamer_s_stream() 以啟用管道中所有實體的流。

返回值

成功則返回 0,否則返回錯誤程式碼。

int vimc_streamer_thread(void *data)

透過管道處理幀

引數

void *data

當前流的 vimc_stream 結構

描述

從源到目標,從每個子裝置獲取一個幀,並以固定的幀速率將其傳送到管道的下一個子裝置。

返回值

始終為零(建立為 int 而不是 void 以符合 kthread API)。

int vimc_streamer_s_stream(struct vimc_stream *stream, struct vimc_ent_device *ved, int enable)

啟動/停止媒體管道上的流式傳輸

引數

struct vimc_stream *stream

指向當前流的流結構的指標

struct vimc_ent_device *ved

指向流的實體的 vimc 實體的指標

int enable

確定是否應啟動/停止流的標誌

描述

啟動時,檢查是否沒有分配 stream->kthread。 這應該表明流已經在執行。 然後,它初始化管道,建立並執行一個 kthread 以透過管道消耗緩衝區。 停止時,類似地檢查是否有流在執行,停止執行緒並終止管道。

返回值

成功則返回 0,否則返回錯誤程式碼。