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