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)

获取与第一个接收器垫连接的实体

参数

struct media_entity *ent

参考媒体实体

描述

辅助函数,返回包含与给定媒体实体垫列表中的第一个接收器垫链接的源垫的媒体实体。

返回

源垫,如果未找到则返回 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 实体的指针

描述

初始化流结构。遍历实体图以构建稍后在流媒体线程上使用的管道。调用 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,否则返回错误代码。