Skip to content

Instantly share code, notes, and snippets.

@lucmann
Last active September 13, 2024 04:30
Show Gist options
  • Save lucmann/bc2a970e0d5700b0e4da3bde7a8cf4f8 to your computer and use it in GitHub Desktop.
Save lucmann/bc2a970e0d5700b0e4da3bde7a8cf4f8 to your computer and use it in GitHub Desktop.
similarities between media and DRM subsystems
  • Interact Methods (open/close, ioctls, mmap)

  • DMABUF (V4L2 Streaming I/O)

  • Image Formats

    • v4l2_pix_format vs drm_format (V4L2_PIX_FMT_ in videodev2.h vs DRM_FORMAT_ in drm_fourcc.h)
    • FourCC (Four Character Codes)
    • ColorSpaces
    • Depth Format (V4L2_PIX_FMT_Z16 vs DRM 没有 Depth Format)
    • Popular Data Formats
      • RGB565
  • Platform-specific Device Support

    • 对于那些 Embedded SoC 场景下,它们的驱动模型都是 Platform device
  • Kernel Mode Driver Framework

    • V4L2
      layer data structure description
      2/3 CSIPHY struct csiphy_device CSIPHY 的主要功能是连接和处理来自 camera sensor 的数据流,一个CSIPHY 可以连接一个独立 camera sensor
      2/4 CSID struct csid_device Decoder
      2/4 ISPIF struct ispif_device ISP Interface
      4/8 VFE struct vfe_device Video Front End
      • for example drivers/media/platform/qcom/camss
      Kconfig
      Makefile
      camss-csid-4-1.c
      camss-csid-4-7.c
      camss-csid-gen1.h
      camss-csid-gen2.c
      camss-csid-gen2.h
      camss-csid.c
      camss-csid.h
      camss-csiphy-2ph-1-0.c
      camss-csiphy-3ph-1-0.c
      camss-csiphy.c
      camss-csiphy.h
      camss-format.c
      camss-format.h
      camss-ispif.c
      camss-ispif.h
      camss-vfe-17x.c
      camss-vfe-4-1.c
      camss-vfe-4-7.c
      camss-vfe-4-8.c
      camss-vfe-480.c
      camss-vfe-gen1.c
      camss-vfe-gen1.h
      camss-vfe.c
      camss-vfe.h
      camss-video.c
      camss-video.h
      camss.c
      camss.h
      
    • KMS
      layer data structure description
      1~n Framebuffer struct drm_framebuffer FB
      1~n Plane struct drm_plane Where pixels come from
      1 CRTC struct drm_crtc Overall Display Pipeline (blending & display timings )
      1~n Encoder struct drm_encoder Where pixels go to
      1~n Connector struct drm_connector Display sinks
    • 为什么前者是 Decoder, 而后者是 Encoder?
      • 首先 camera sensor (CMOS/CCD) 将信号,转换成信号再经过ADC 输出 digital value (0/1),CSIPHY 起的作用是连接和处理来自 sensor 的0/1数据以及通道管理 lane management,功耗控制 LP,传输速率 Gbps 等, 接下来由 CSI Decoder 将 MIPI CSI-2 串行数据流解码成并行数据流(图像帧格式)并输出给 ISP 芯片。不管是 CSIPHY 还是 CSI Decoder 都是 CSI-2 协议里的一个实体。
      • 后者则是将 framebuffer 里的并行 RGB 数据转换成另一种数据格式(如HDMI 的 TMDS),这个过程是一种数据格式到另一种数据格式的 Encoder 编码。
  • Mode Setting vs Set Control (V4L2_CID_)

    • KMS
      • 显示分辨率, Fresh Hz, hblank(hsync), vblank(vsync)
      • framebuffer size
    • V4L2 set control
      • hblank, vblank
  • 片上互连 (SoC 内部 IP 互连)

  • Vertical Blanking Interval (垂直同步)

  • Libraries

    • libv4l
      • libv4lconvert
      • libv4l1
      • libv4l2
    • libkms (deprecated)
  • Utilities

    • v4l-utils (v4l2-ctl) vs mesa-utils (glxinfo, glxgears)
    • libcamera vs libdrm
    • cam vs drm_info (xrandr)
  • Pipeline

    • Camera pipeline of image processing vs GPU pipeline of triangle rendering vs Display pipeline of framebuffer presenting
  • Interface vs Infrastructure

    • CSI/2/3 (Camera Serial Interface) vs DRI/2/3 (Direct Rendering Infrastructure) (仅仅字面上的共同点,它俩一个是图像数据传输协议,一个是驱动框架,但它们都有 3 个版本,目前 CSI2 使用应该最多,DRI2/DRI3 都有在使用)
  • Standards

    • MIPI (Mobile Industry Processor Interface 联盟)
      • MIPI CSI (Camera Serial Interface, 包括 Camera Control Interface (CCI) 实现 v4l2-cci.c)
      • MIPI DSI (Display Serial Interface, 实现 drm_mipi_dsi.c)
      • MIPI DBI (Display Bus Interface, 实现 drm_mipi_dbi.c)
      • MIPI CCS (Camera Command Set)
      • MIPI DCS (Display Command Set)
      • SMIA (Standard Mobile Imaging Architecture)
      • SMIA++
    • VESA (Video Electronic Standards Association 视频电子标准协会)
      • FDMI (Flat Display Mounting Interface)
      • DisplayPort
      • DisplayHDR
  • Specifications

    • CSI-2 Low-Level Protocol, 面向硬件实现
    • Graphics High-Level Protocol, 面向软件编程
  • Ecosystem (Open-Sourced drivers)

  • 驱动知识点

    • camera
      • DT
      • I2C
      • V4L2
      • MIPI_D-PHY, MIPI_CSI-2
      • ISP 驱动
    • gpu
      • DT (Linux 嵌入式应该都会涉及到)
      • PCIe
      • DRM
      • ??? (五花八门,似乎没有一个统一的标准规定 gpu 应该如何如何)
      • GPU 驱动
  • 相似的数据结构

    • struct v4l2_rect vs struct drm_rect
    • V4L2_PIX_FMT_ 宏 vs DRM_FORMAT_ 宏 (都使用 fourcc)
  • 都使用到的数据结构

    • struct fb_info
  • Data Struct

    • media_device
    • media_pipeline
    • media_entity
    • media_link
    • media_interface
  • Subdevice Operations

    • v4l2_subdev_video_ops
    • v4l2_subdev_vbi_ops
    • v4l2_subdev_sensor_ops
  • Media Bus

    • V4L2_MBUS_PARALLEL
    • V4L2_MBUS_BT656
    • V4L2_MBUS_CSI1
    • V4L2_MBUS_CCP2 (Compact Camera Port 2)
    • V4L2_MBUS_CSI2_DPHY
      • D-PHY 将每个字节串行化,并以最低有效位(LSB) 优先的顺序进行传输,速率 2.5Gbps, 低速低功耗
    • V4L2_MBUS_CSI2_CPHY
      • C-PHY 将每 16 位字组成 7 个符号,并以最低有效符号(LSS) 优先的顺序进行传输,速率 17.1Gbps, 高速高带宽
    • V4L2_MBUS_DPI (MIPI VIDEO DPI 接口)
  • LP-11/LP-111 是 CSI2 总线状态,不是模式

    • LP-11
      • 数据通道时钟通道同时处于高电平状态,多数设备在数据传输完成后会返回此状态,所以它相当于是一个 Stop State
    • LP-111
      • 是扩展的低功能状态,通常用于更复杂的控制信号序列
@lucmann
Copy link
Author

lucmann commented Aug 30, 2024

  • CSI2
    • transmitter (发射器)
    • receiver (接收器
  • v4l2_subdev_video_ops
    • pre_streamon: 在 streaming 开始前,设置 CSI2 发射器为 LP-11 或 LP-111 模式

@lucmann
Copy link
Author

lucmann commented Sep 12, 2024

  • 一个 ISP 芯片包括哪些核心模块?
    • A/D converter (如果 Sensor 有 ADC 功能,可能就需要在 ISP 芯片里了)
    • Digital Signal Processor
    • Memory Unit
  • 数据流
    • image senor -> bayer CFA -> raw image data -> analog signal -> A/D converter -> digital value -> CSI transmitter -> CSI receiver -> ISP
      • CSI 是一个数据传输协议,它的 transmitter 应该实现在 Sensor 芯片侧,它 receiver 应该实现在 ISP 芯片侧
      • OOC: Bayer 的滤波片阵列中 R, G, B 滤片的数量是 1:2:1, G 通道分为 Gr, Gb
  • image sensors
    • CCD (Charge-Coupled Device) - 电荷耦合器件
    • CMOS (Complementary Metal-Oxide-Semiconductor) - 互补金属氧化物半导体 (氧化物一般是二氧化硅)
      • OOC: 这里的金属氧化物是要分开断句的,金属-氧化物-半导体, 分别是 MOSFET 晶体管结构中栅极-绝缘层-基底的材料
  • ISP 主要功能
    • AE (Automatic Exposure) - 自动曝光
    • AF (Automatic Focus) - 自动对焦
    • AWB (Automatic White Balance) - 自动白平衡
    • BLC (Black Level Correction) - 黑电平校正
    • BPC (Bad Point Correction) - 坏点校正
    • CCM (Color Correction Matrix) - 颜色校正
    • Demosaic - 去除马赛克 (也叫颜色差值)
    • Denoise - 去除噪声
    • Gamma Correction - Gamma 校正
    • GB (Green Balance) - 绿平衡
    • LSC (Lens Shade Correction) - 镜头阴影校正
    • RGB2YUV
    • Sharp - 锐化
    • TestPattern 测试图像 (内核实现 media/common/v4l2-tpg/v4l2-tpg-core.c)
    • WDR (Wide Dynamic Range) - 宽动态

@lucmann
Copy link
Author

lucmann commented Sep 12, 2024

CMOS-image-sensor-pipeline-3

Photoelectric 光电的

@lucmann
Copy link
Author

lucmann commented Sep 12, 2024

isp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment