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_sizeved_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,否則返回錯誤程式碼。