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