ADV7619芯片分辨率、帧率、I/P 格式获取

ADV7619芯片数据获取

1、ADV7619

  ADV7619是一款高质量、双输入、单输出(2:1)多路复用高清多媒体接口(HDMI)接收器。现需要获取输入视频数据的分辨率、色彩空间、I制/P制和帧率信息。

  • 分辨率:单位英寸中所包含的像素点数。如 1920 x 1080。
  • 色彩空间:一定的色彩范围,是一种色彩模型。如 RGB、YUV。
  • I制/P制:I 表示采用交错式扫描视频显示方式,P 表示逐行扫描视频显示方式。
  • 帧率:用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second,简称:FPS)或“赫兹”(Hz)。

2、数据获取

  adv7619 芯片分为多个 IIC 从地址,对应地址如下:

#define IO_I2C_addr         0x98    /* same of the ADV7619_I2C */
#define CEC_I2C_addr        0x80
#define INFO_I2C_addr       0x7c
#define DPLL_I2C_addr       0x4c
#define KSV_I2C_addr        0x64
#define EDID_I2C_addr       0x6c
#define HDMI_I2C_addr       0x68
#define CP_I2C_addr         0x44

  从对应的IIC地址中,读取相关寄存器,获取需要的视频信息。

2.1 颜色空间

  从 HDMI 地址中获取寄存器数据,IIC 地址:0x68(HDMI_I2C_addr),寄存器地址:0x53。
ADV7619芯片分辨率、帧率、I/P 格式获取_第1张图片
  假设读到的寄存器的值为 0xXX ,根据(0xXX & 0x0F)的值得到相对应的颜色空间。

2.2 I/P 格式

  读取输入视频流的格式是 I 制还是 P 制。
  从 HDMI 地址中获取寄存器数据,IIC 地址:0x68,寄存器地址:0x0B。
在这里插入图片描述

  假设读到的寄存器的值为 0xXX,计算(0xXX & 0x20),结果大于 0 表示输入视频流为 I 制,否则为 P 制。

2.3 分辨率

  视频分辨率分为像素宽和像素高。
  像素宽从 HDMI 地址中获取寄存器数据,IIC地址:0x68,寄存器地址:0x07和0x08。
在这里插入图片描述
  假设从寄存器 0x07 读到的值为 0xAA,从寄存器 0x08 读到的值为 0xBB,计算((0xAA & 0x1F) * 256 + 0xBB),得到的即为像素宽。
  
  像素高从 HDMI 地址中获取寄存器数据,IIC 地址:0x68,如果输入视频流为P制,寄存器地址:0x09 和 0x0A,如果输入视频流为 I 制,寄存器地址:0x0B 和 0x0C。
在这里插入图片描述在这里插入图片描述
  假设从寄存器 0x09 或 0x0B 读到的值为 0xAA,从寄存器 0x0A 或 0x0C 读到的为 0xBB,计算((0xAA & 0x1F) * 256 + 0xBB),得到的即为像素高。
  
  注意,以上获取的为有效像素数。

2.4 获取帧率

  帧率计算公式如下:


f p s = T M D S W i d t h ∗ H e i g h fps = \frac{TMDS}{Width * Heigh} fps=WidthHeighTMDS

  其中:

  • TMDS:时钟频率。
  • Width:每行像素数(实际像素数,非有效像素数)。
  • Height:行数。

  
  以 1080P60 为例,相关参数对应的寄存器如下:
  
  1. TMDS
  从 HDMI 地址中获取寄存器数据,IIC 地址:0x68,寄存器地址:0x51 和 0x52。
ADV7619芯片分辨率、帧率、I/P 格式获取_第2张图片

  0x51 寄存器计算出的频率单位为 MHz,0x52 寄存器计算出的频率单位为 1/128MHz。
  
  以 1080P60 为例,0x51 和 0x52 寄存器数据分别为 0x4A(74) 和 0x3E(62)。计算实际的时钟频率为:


74 ∗ 2 + 62 128 = 148.484375 M H z 74 * 2 + \frac{62}{128} = 148.484375 MHz 742+12862=148.484375MHz

  
   2.Width
  从 HDMI 地址中获取寄存器数据,IIC 地址:0x68,寄存器地址:0x1E 和 0x1F。
在这里插入图片描述
  以 1080P60 为例,0x1E 和 0x1F 寄存器数据分别为 0x8 和 0x98,计算每行像素数为 (0x8 & 0x3F)*256 + 0x98,结果为 2200。
  
   3.Height
  从 HDMI 中获取寄存器数据,IIC 地址:0x68,如果输入视频流为 P 制,寄存器地址:0x26 和 0x27;如果输入视频流为 I 制,寄存器地址为 0x28 和 0x29。
ADV7619芯片分辨率、帧率、I/P 格式获取_第3张图片

  获得结果后,要将值除以 2。
  
  以 1080P60 为例,0x26 和 0x27 寄存器数据分别为 0x8 和 0xCA,计算行数为:((0x8 & 0x3F)*256 + 0xCA)/2,结果为 1125。
  
  4.计算结果
  根据公式,1080P60 的帧率计算结果为:


148.484375 M H z 2200 ∗ 1125 = 59.994 H z \frac{148.484375MHz}{2200 * 1125} = 59.994Hz 22001125148.484375MHz=59.994Hz

  取值为 60 HZ。

3、中断

  当输入视频流的分辨率和帧率发生变化时,需要通知应用层重新获取视频信息。
  
  由驱动程序获取中断后向应用层发送信号实现。需要分辨率和帧率变化时能产生相应中断。格式变化时会造成像素时钟频率的变化。
  
  相关寄存器:

寄存器 地址 说明
NEW_TMDS_FRQ_MB1
IO 0x87 bit[1]
使能 INT1 上的像素时钟频率变化中断
NEW_TMDS_FRQ_ST
IO 0x84 bit[1]
像素时钟频率变化状态寄存器
NEW_TMDS_FRQ_CLR
IO 0x85 bit[1]
清除 NEW_TMDS_FRQ_ST。清除后,下次像素时钟频率变化时才会产生中断

  
  
  ADV7619 寄存器手册:
  链接:https://pan.baidu.com/s/1r1onF-uk1FYgX2YXGOz__A
  提取码:x48g

你可能感兴趣的:(ARM)