1.1.6.15 Qualcomm Camera Subsystem driver

Introduction
The Qualcomm Camera Subsystem driver是位于drivers/media/platform/qcom/camss下的驱动程序,本文件记录了该驱动程序。
当前版本的驱动程序支持位于Qualcomm MSM8916/APQ8016和MSM8996/APQ8096处理器上的Camera Subsystem。
驱动程序实现了V4L2、Media controller和V4L2子设备接口。支持在内核中使用V4L2子设备接口的摄像头传感器。
该驱动程序是使用Qualcomm Camera Subsystem driver for Android作为参考实现的,在Code Aurora中可以找到此驱动程序。
Qualcomm Camera Subsystem hardware
驱动程序支持的8x16 / 8x96处理器上的Camera Subsystem硬件由以下组成:
• 2 / 3个CSIPHY模块。它们处理CSI2接收器的物理层。每个CSIPHY模块都可以连接一个单独的摄像头传感器;
• 2 / 4个CSID (CSI解码器)模块。它们处理CSI2接收器的协议和应用层。每个CSID都可以解码来自任何CSIPHY的数据流。每个CSID还包含一个TG (Test Generator测试生成器)模块,可用于生成人工输入数据以进行测试;
• ISPIF (ISP接口)模块。处理从CSIDs到VFE输入的数据流路由;
• 1 / 2个VFE (视频前端)模块。包含一系列图像处理硬件块的管道。VFE具有不同的输入接口。PIX (Pixel像素)输入接口将输入数据馈送到图像处理管道。图像处理管道末端还包含缩放和裁剪模块。三个RDI (Raw Dump Interface原始转储接口)输入接口绕过了图像处理管道。VFE还包含AXI总线接口,用于将输出数据写入内存。
高通的IFE和IPE具体解释下:
IFE是指“Image Front End”,中文名为“图像前端”,是高通芯片上的一个硬件处理单元。IFE负责接收来自摄像头传感器的原始数据,并进行处理,包括基于ISP(Image Signal Processor,图像信号处理器)的降噪和色彩校正等功能。IFE可将处理后的图像数据传递给IPE或其他处理器进行进一步处理。
IPE是指 “Image Processing Engine”,中文名为“图像处理引擎”,也是高通芯片上的一个硬件处理单元,主要负责对IFE处理后的图像数据进行二次处理,包括图像去噪、锐化、对比度调整、色彩映射等功能,最终将处理完的图像数据输出给显示屏或编码器。同时,IPE还可以利用GPU进行加速处理,提升处理性能。
总之,IFE和IPE都是高通芯片上的图像处理硬件模块,IFE主要负责处理原始数据,而IPE则进一步对处理后的数据进行优化和增强,两者结合起来可以实现高质量和高效率的图像处理。
Supported functionality
当前版本的驱动程序支持以下功能:
• 通过CSIPHY从相机传感器读取输入数据;
• 在CSID中由TG生成测试输入数据;
• VFE的RDI接口
=将输入数据原始转储到内存
支持的格式包括:
*YUYV/UYVY/YVYU/VYUY(打包的YUV 4:2:2格式 - V4L2_PIX_FMT_YUYV/V4L2_PIX_FMT_UYVY/V4L2_PIX_FMT_YVYU/V4L2_PIX_FMT_VYUY);
*MIPI RAW8(8位Bayer RAW格式 - V4L2_PIX_FMT_SRGGB8/V4L2_PIX_FMT_SGRBG8/V4L2_PIX_FMT_SGBRG8/V4L2_PIX_FMT_SBGGR8);
*MIPI RAW10(10位打包Bayer RAW格式 - V4L2_PIX_FMT_SBGGR10P/V4L2_PIX_FMT_SGBRG10P/V4L2_PIX_FMT_SGRBG10P/V4L2_PIX_FMT_SRGGB10P/V4L2_PIX_FMT_Y10P);
*MIPI RAW12 (12位打包Bayer RAW格式 - V4L2_PIX_FMT_SRGGB12P/V4L2_PIX_FMT_SGBRG12P/V4L2_PIX_FMT_SGRBG12P/V4L2_PIX_FMT_SRGGB12P);
*(仅限8x96)MIPI RAW14(14位打包Bayer RAW格式 - V4L2_PIX_FMT_SRGGB14P/V4L2_PIX_FMT_SGBRG14P/V4L2_PIX_FMT_SGRBG14P/V4L2_PIX_FMT_SRGGB14P);
=(仅限8x96)输入数据的格式转换
支持的输入格式包括:
*MIPI RAW10(10位打包Bayer RAW格式 - V4L2_PIX_FMT_SBGGR10P/V4L2_PIX_FMT_Y10P)
支持的输出格式包括:
*Plain16 RAW10(10位未打包Bayer RAW格式 - V4L2_PIX_FMT_SBGGR10/V4L2_PIX_FMT_Y10)
• VFE的PIX接口
=输入数据的格式转换。
支持的输入格式包括:
*YUYV/UYVY/YVYU/VYUY(打包的YUV 4:2:2格式 - V4L2_PIX_FMT_YUYV/V4L2_PIX_FMT_UYVY/V4L2_PIX_FMT_YVYU/V4L2_PIX_FMT_VYUY),
支持的输出格式包括:
*NV12/NV21(两个平面的YUV 4:2:0格式 - V4L2_PIX_FMT_NV12/V4L2_PIX_FMT_NV21)
*NV16/NV61(两个平面的YUV 4:2:2格式 - V4L2_PIX_FMT_NV16/V4L2_PIX_FMT_NV61)。
*(仅限8x96) YUYV/UYVY/YVYU/VYUY(打包的YUV 4:2:2格式 -V4L2_PIX_FMT_YUYV/V4L2_PIX_FMT_UYVY/V4L2_PIX_FMT_YVYU/V4L2_PIX_FMT_VYUY)。
=缩放支持。
配置VFE编码器比例模块进行最多16倍的缩小。
=裁剪支持。
配置VFE编码器裁剪模块。
• 两个(8x96:三个)数据输入的并发且独立使用——可以是相机传感器和/或TG。
Driver Architecture and Design
驱动程序实现了V4L2子设备接口。为了模拟模块之间的硬件连接并公开一个清晰、逻辑和可用的接口,驱动程序被分成以下V4L2子设备(8x16 / 8x96):
• 2 / 3个CSIPHY子设备 - 每个CSIPHY由单个子设备表示;
• 2 / 4个CSID子设备 - 每个CSID由单个子设备表示;
• 2 / 4个ISPIF子设备 - ISPIF由等于CSID子设备数量的子设备表示;
• 4 / 8个VFE子设备 - 每个VFE由等于输入接口数量的子设备表示(每个VFE有3个RDI和1个PIX)。
将驱动程序拆分成这种特定方式的考虑如下:
• 通过为每个模块设置单独的子设备来表示CSIPHY和CSID模块,可以模拟这些模块之间的硬件连接;
• 通过为每个输入接口设置单独的子设备来表示VFE,使得可以并发且独立地使用输入接口,因为硬件支持这样做;
• 通过为ISPIF设置等于CSID子设备数量的子设备数量,可以在同时使用两个摄像头时创建线性媒体控制器管道。这避免了管道中的分支,否则将需要a)用户空间和b)媒体框架(例如开关机操作)来假设从接收器垫到单个媒体实体上的来源垫的数据流。
每个VFE子设备都链接到一个单独的视频设备节点。媒体控制器管道图如下(连接了两个/三个OV5645相机传感器):

Fig. 5: Media pipeline graph 8x16

Fig. 6: Media pipeline graph 8x96
Implementation
目前支持的功能不需要对硬件进行运行时配置(在流处理过程中更新设置)。每个硬件模块的完整配置都是基于当前活动的媒体链接、格式和控制集在STREAMON ioctl上应用的。
VFE中缩放器模块的输出大小是使用“msm_vfe0_pix”实体的接收器垫上的实际组合选择矩形来配置的。
VFE中裁剪模块的裁剪输出区域是使用“msm_vfe0_pix”实体的来源垫上的实际裁剪选择矩形来配置的。
Documentation
APQ8016是高通的骁龙410处理器,而APQ8096是骁龙820E处理器。
APQ8016 Specifification:
https://developer.qualcomm.com/download/sd410/snapdragon-410-processor-device-specification.pdf 
Referenced 2016-11-24.
APQ8096 Specifification:
https://developer.qualcomm.com/download/sd820e/qualcomm-snapdragon-820e-processor-apq8096sge-device-specification.pdf
Referenced 2018-06-22.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值