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,否则返回错误代码。