• EDID


    HDMI EDID的长度一般是256字节,分成2个Block,分别是Block0和Block1
    PS:VGA和DVI接口的EDID,是只有一个Block而已,即Block0,共128字节

    如果想了解更多EDID的知识,可以参考这篇文章
    https://www.cnblogs.com/fire909090/p/10523604.html

    Block0

    EDID Block0,共128字节,该block的格式是固定的,即每个字段的摆放位置是固定的,因此代码解析起来会相对简单些
    一张长图了解一下,如图中的Example Data作为例子,对照来看就明白其中各个字节代表的意思了
    在这里插入图片描述

    注意:上图有一个First Detailed Timing Descriptor和一个Second Detailed Timing Descriptor,所谓Detailed Timing Descriptor,这里简称DTD,是用来详细描述一个分辨率(时序)的,一个DTD占18字节

    Block1

    CEA Extension Header

    Block1的开头4个字节,名为CEA Extension Header,格式如下

    • Byte0:CEA Extension Tag,固定是0x02
    • Byte1:Revision Number,现在一般是0x03
    • Byte2:是一个DTD的偏移,假设该值是0x50,表示从0x50位置开始就是描述DTD的了
    • Byte3:看下图的解释就明白该字节各个bit代表的意思了

    在这里插入图片描述

    例如下图EDID的黄色背景部分,就是Block1的头(后面会以这个EDID来举例说明)
    在这里插入图片描述

    Tag 分类

    接下来,Block1里的各个字段(Tag)的位置是不固定的,需要解析Tag类型才知道接下来的数据属于什么Tag数据
    具体有哪些Tag类型呢?
    常见的EDID,一般会有以下几种Tag类型,至今还在用
    一般会有Video Data Block、Audio Data Block、Speaker Allocation Data Block、Vendor Specific Data Block(VSDB)
    在这里插入图片描述

    具体是哪种类型,由第1个字节的bit7~bit5这3bits决定,3bits的数据就决定了它最多只有8种类型
    后5bits表示紧接着该Tag的数据长度
    在这里插入图片描述

    后续又添加了新的Tag,发现3bits的位宽不够,新的Tag有如下这些
    在这里插入图片描述

    不过幸好上面3bits最后一种情况是Use Extended Tag,即使用扩展的Tag,所以就有了下图的定义
    意思是如果第1个字节的bit7~bit5的值是7(Use Extended Tag),就要看第2个字节了,根据第2个字节的值才知道是什么Tag类型的
    在这里插入图片描述

    接下来会用一个实际的EDID来分析各个Tag,在此我用三星电视的一个HDMI 2.0 EDID来作为例子说明
    只截取它的Block1来分析就好

    Video Data Block

    看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0x57,bit7~bit5是010,即十进制的2,2对应的Tag是Video Data Block;bit4~bit0是10111,即十进制的23,表示0x57后面还有23个字节,这23个字节都是属于Video Data Block的,即上图的黄色背景部分

    接着就要看看这23个字节代表的是什么意思了
    每一个字节都叫做Short Video Descriptor(SVD),SVD里包含着Video Identification Code(VIC)
    如下图,有两种
    第一种VIC是1~64的,bit7是表示该VIC是不是native分辨率,native有最佳分辨率的意思。最佳分辨率也可以是EDID Block0里的第一个DTD
    在这里插入图片描述

    第二种VIC是超过64的
    在这里插入图片描述

    这23个字节里的每一个字节都是独立的,VIC是HDMI里面用来表示分辨率的代号,VIC的值都是HDMI标准定义好的,如下3张图
    在这里插入图片描述

    4K30、4K25、4K24这几个一般会放在VSDB里,但也有放在Video Data Block里的,也有两处都放的
    放在VSDB里的VIC分别是1、2、3,后续还会讲到;放在Video Data Block里的VIC分别是95、94、93
    在这里插入图片描述

    4K50和4K60
    在这里插入图片描述

    所以分析得到这23个字节分别表示三星电视支持的23种分辨率,列一下

    VIC(十六进制)VIC(十进制)分辨率
    0x61 97 3840x2160P@60
    0x10 16 1920x1080P@60
    0x1F 21 1920x1080P@50
    0x04 4 1280x720P@60
    0x13 19 1280x720P@50
    0x05 5 1920x1080I@60
    0x14 20 1920x1080I@50
    0x20 32 1920x1080P@24
    0x21 33 1920x1080P@25
    0x22 34 1920x1080P@30
    0x5D 93 3840x2160P@24
    0x5E 94 3840x2160P@25
    0x5F 95 3840x2160P@30
    0x60 96 3840x2160P@50
    0x65 101 4096x2160P@50
    0x66 102 4096x2160P@60
    0x62 98 4096x2160P@24
    0x63 99 4096x2160P@25
    0x64 100 4096x2160P@30
    0x07 7 720x480I@60
    0x16 22 720x576I@50
    0x03 3 720x480P@60
    0x12 18 720x576P@50

    Audio Data Block

    接着看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0x29,bit7~bit5是001,即十进制的1,1对应的Tag是Audio Data Block;bit4~bit0是01001,即十进制的9,表示0x29后面还有9个字节,这9个字节都是属于Audio Data Block的,即上图的黄色背景部分

    接着就要看看这9个字节代表的是什么意思了,它是3个字节成一组,所以此处有3组声音相关的描述,如下图
    在这里插入图片描述

    Byte1的bit6~bit3表示一种音频格式,有如下几种格式
    在这里插入图片描述

    当Audio Format Codes是 2 ~ 8 时,Byte3的意思又有新的含义了,如下图
    在这里插入图片描述

    当Audio Format Codes是 9 ~ 15 时,Byte3的意思又有新的含义了,如下图
    在这里插入图片描述

    所以分析得到这9个字节分别表示三星电视支持的3种音频格式,列一下

    IndexAudio FormatMax ChannelsSample Rates(kHz)Max Bit Rate
    ADB1 LPCM 2 32, 44.1, 48 16bit, 20bit, 24bit
    ADB2 AC-3 6 32, 44.1, 48 640kHz
    ADB3 DTS 6 48 1536kHz

    Speaker Allocation Data Block

    按部就班,接着看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0x83,bit7~bit5是100,即十进制的4,4对应的Tag是Speaker Allocation Data Block;bit4~bit0是00011,即十进制的3,表示0x83后面还有3个字节,这3个字节都是属于Speaker Allocation Data Block的,即上图的黄色背景部分

    接着就要看看这3个字节代表的是什么意思了,它是3个字节成一组,所以此处有1组喇叭位置相关的描述,如下图
    在这里插入图片描述

    主要是看Byte1,所以分析得到三星电视只有 FL/FR (前左和前右)两个喇叭,这个Data Block的数据一般很少用

    Video Capability Data Block

    按部就班,接着看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0xE2,bit7~bit5是111,即十进制的7,7对应的Tag是Use Extended Tag;所以还要看第2个字节才知道是什么Tag,第1个字节的bit4~bit0是00010,即十进制的2,表示0xE2后面还有2个字节,而第2个字节的值是0,对应的是Video Capability Data Block(VCDB),所以最后描述该Data Block的就剩下第3个字节了,即上图的黄色背景部分

    接着就要看看这1个字节代表的是什么意思了
    在这里插入图片描述

    Byte3各个Bit的意思如下图
    在这里插入图片描述

    bit1~bit0:是否支持 CE video,如 480p, 480i, 576p, 576i, 240p, and 288p, 1080i, 1080p, and 720p,默认用 Limited range
    bit3~bit2:是否支持 IT video,默认用 Full range
    bit5~bit4:看字面意思,一般是0
    bit6:QS,即 Quantization Range Selectable,RGB only. 如果该bit是1,则sink端接收到AVI info里的Q=1时用的是 Limited range,收到AVI info里的Q=2时用的是 Full range
    bit7:QY,YCC only. 如果该bit是1,则sink端接收到AVI info里的YQ=0时用的是 Limited range,收到AVI info里的YQ=1时用的是 Full range

    所以分析得到Byte3这1个字节分别表示三星电视支持CE mode的overscan和underscan,也支持IT mode的overscan和underscan

    Colorimetry Data Block

    接着看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0xE3,bit7~bit5是111,即十进制的7,7对应的Tag是Use Extended Tag;所以还要看第2个字节才知道是什么Tag,第1个字节的bit4~bit0是00011,即十进制的3,表示0xE3后面还有3个字节,而第2个字节的值是5,对应的是Colorimetry Data Block,所以最后描述该Data Block的就剩下最后2个字节了,即上图的黄色背景部分

    接着就要看看最后这2个字节代表的是什么意思了
    在这里插入图片描述

    Byte3的各个bit如果是1表示支持某种色域,Byte4的各个bit如果是1表示支持某种Metadata Profile

    所以分析得到该三星电视支持的色域有:xvYCC-601、xvYCC-709、BT.2020-YCC、BT.2020-RGB,支持的Metadata有:Metadata Profile 0

    支持BT.2020色域的,一般后面还会声明HDR Static Metadata Data Block,表明该电视支持HDR格式

    Vendor Specific Data Block

    在此要注意一下,现在HDMI 2.0的EDID,VSDB会有两种,一种是H14b VSDB,另一种是HF-VSDB。其中H14b VSDB是必须要有的,HF-VSDB则不一定

    H14b VSDB

    按部就班,接着看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0x6E,bit7~bit5是011,即十进制的3,3对应的Tag是Vendor Specific Data Block(VSDB);第1个字节的bit4~bit0是01110,即十进制的14,表示0x6E后面还有14个字节,即上图的黄色背景部分

    接着就要看看这14个字节代表的是什么意思了,如下图
    在这里插入图片描述

    对照上图,一个个字节解析它即可

    • Byte0:上面已经解释过,tag=3,Length=14

    • Byte1~Byte3:这个IEEE规定的3个字节,固定为0x000C03,表示这是H14b VSDB

    • Byte4~Byte5:CEC物理地址,此处是1.0.0.0,可以看出这份EDID是三星电视HDMI1口的EDID

    • Byte6

      bit7:Support_AI,支持ACP、ISRC1/ISRC2包的处理
      bit6:支持deep color为48bits,即16bits。此处为0表示不支持
      bit5:支持deep color为36bits,即12bits。此处为1表示支持
      bit4:支持deep color为30bits,即10bits。此处为1表示支持
      bit3:支持YUV444的deep color mode。此处为1表示三星电视最高支持YUV444 12bits
      bit0:DVI_Dual,支持DVI dual-link。此处为0表示不支持

    • Byte7:Max_TMDS_Clock,表示支持的最大TMDS时钟速率,该字节需要乘以5MHz,此处是 0x3C * 5 = 300MHz。即最大带宽为:300MHz * 10bit(TMDS为10bit编码) * 3(3个TMDS数据通道) = 9Gbps

    • Byte8

      bit7:Latency_Fields_Present,如果此bit是1,表示接下来会有2个字节分别是指示Video_Latency和Audio_Latency的,这两个字节是告诉HDMI发送端对音视频做delay再发送出来,单位是ms,解决某些场合下音视频不同步的问题。此处是0表示不支持,则不存在这两个字节,即跳过上图中的Byte(9)、Byte(10)
      bit6:I_Latency_Fields_Present,如果此bit是1,表示接下来还会有另外2个字节分别是指示Interlaced_Video_Latency和Interlaced_Audio_Latency的,这两个字节是告诉HDMI发送端对I mode的音视频做delay再发送出来,单位是ms,解决某些场合下音视频不同步的问题。此处是0表示不支持,则不存在这两个字节,即跳过上图中的Byte(11)、Byte(12)
      bit5:HDMI_Video_present,如果此bit是1,表示接下来有多个字节,意思如上图Byte(13)、Byte(14)、Byte(15) …

      bit3~bit0:表示分别支持对Game、Cinema、Photo、Graphics图像的特殊处理。此处是0表示不支持

    • Byte9:因为Byte8的bit5 HDMI_Video_present=1,该字节包含3D_present相关的flag

      bit7:3D_present,表示是否有3D相关的描述。此处是0说明三星电视不支持3D视频输入
      bit6~bit5:3D_Multi_present:如果3D_Multi_present = 01,3D_Structure_ALL_15…0有效;如果3D_Multi_present = 10,3D_Structure_ALL_15…0和3D_MASK_15…0两个都有效。3D_Structure_ALL_15…0和3D_MASK_15…0各占2个字节
      3D_Structure_ALL_15…0各个bit的含义是支持的3D格式,如下图
      在这里插入图片描述
      3D_MASK_15…0各个bit含义其实是一个bit map,对应Video Data Block前16个VIC,某个bit=1,则对应的VIC分辨率支持3D
      bit4~bit3:Image_Size,这个跟屏幕尺寸有关,跟EDID Block0的0x15(屏幕最大水平尺寸)、0x16(屏幕最大垂直尺寸)有关系,此处是10,看三星电视的EDID Block0 0x15=>89cm,0x16=>50cm

      Image_Size具体含义
      00 无额外信息
      01 EDID Block0的0x15、0x16的值的比例是对的,尺寸不一定对
      10 EDID Block0的0x15、0x16写的尺寸是对的
      11 EDID Block0的0x15、0x16写的尺寸,要乘以5才是屏幕实际尺寸
    • Byte10:因为Byte8的bit5 HDMI_Video_present=1,该字节包含HDMI_VIC_LEN和HDMI_3D_LEN

      bit7~bit5:HDMI_VIC_LEN,表示接下来有多少个字节用以描述VIC,一个VIC占一个字节。此处是100,十进制的4,表示有4个VIC跟着在后面

      bit4~bit0:HDMI_3D_LEN,同理,如果不为0,在HDMI_VIC后面还会跟着有3D的信息。此处为0

    • Byte11~Byte14,值分别是0x01、0x02、0x03、0x04,参照下图可知是4K30、4K25、4K24、4096x2160P@24
      在这里插入图片描述

    到此,H14b VSDB已经分析完

    HF-VSDB

    接着看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0x67,bit7~bit5是011,即十进制的3,3对应的Tag又是Vendor Specific Data Block(VSDB);第1个字节的bit4~bit0是00111,即十进制的7,表示0x67后面还有7个字节,即上图的黄色背景部分

    接着就要看看这7个字节代表的是什么意思了,如下图
    在这里插入图片描述

    对照上图,一个个字节解析它即可

    • Byte0:上面已经解释过,tag=3,Length=7
    • Byte1~Byte3:这个也是IEEE规定的3个字节,固定为0xC45DD8,表示这是HF-VSDB
    • Byte4:Version,目前固定为0x01
    • Byte5:Max_TMDS_Character_Rate,表示支持的最大TMDS时钟速率,该字节需要乘以5MHz,此处是 0x78 * 5 = 600MHz。虽然之前的H14b VSDB声明的是300MHz,但要以现在600MHz的为准。即最大带宽为:600MHz * 10bit(TMDS为10bit编码) * 3(3个TMDS数据通道) = 18Gbps
    • Byte6:bit7,SCDC_Present,表示支持SCDC功能;其它bits参考上图即可
    • Byte7:bit2~bit0,分别是声明支持YUV420 deep color的,可知该三星电视支持YUV420的10bits和12bits

    HDR Static Metadata Data Block

    接着看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0xE3,bit7~bit5是111,即十进制的7,7对应的Tag是Use Extended Tag;所以还要看第2个字节才知道是什么Tag,第1个字节的bit4~bit0是00011,即十进制的3,表示0xE3后面还有3个字节,而第2个字节的值是6,对应的是HDR Static Metadata Data Block,所以最后描述该Data Block的就剩下最后2个字节了,即上图的黄色背景部分

    接着就要看看最后这2个字节代表的是什么意思了
    在这里插入图片描述

    主要看Byte3,Byte4,分别的含义如下两图

    Byte3的含义
    在这里插入图片描述

    可知该三星电视支持HDR格式的HDMI输入,支持的格式类型是Traditional gamma SDR和SMPTE ST 2084 [2]

    Byte4的含义
    在这里插入图片描述

    可知该三星电视支持Type 1

    YCbCr 4:2:0 Capability Map Data Block

    接着看下图EDID的黄色背景部分
    在这里插入图片描述

    第1个字节是0xE3,bit7~bit5是111,即十进制的7,7对应的Tag是Use Extended Tag;所以还要看第2个字节才知道是什么Tag,第1个字节的bit4~bit0是00011,即十进制的3,表示0xE3后面还有3个字节,而第2个字节的值是15,对应的是YCbCr 4:2:0 Capability Map Data Block(Y420CMDB),所以最后描述该Data Block的就剩下最后2个字节了,即上图的黄色背景部分

    该Data Block声明支持YUV420的分辨率有哪些,YUV420传输的好处是带宽只占YUV444的一半

    接着就要看看最后这2个字节代表的是什么意思了
    在这里插入图片描述

    在此Byte3、Byte4的含义跟前面所介绍的Video Data Block其实是一个bit map对应关系,Byte3、Byte4两个字节所组成的16bits map,对应着Video Data Block里的SVD(分辨率),如果某bit=1,说明对应的SVD支持YUV420格式

    Byte3=0x01、Byte4=0xE0,组成的16bits map就是:1110_0000_0000_0001,bit0=1、bit13=1、bit14=1、bit15=1
    bit0对应着Video Data Block里的第1个SVD,即0x61,即分辨率3840x2160P@60支持YUV420
    同理
    bit13对应着Video Data Block里的第14个SVD,即0x60,即分辨率3840x2160P@50支持YUV420
    bit14对应着Video Data Block里的第15个SVD,即0x65,即分辨率4096x2160P@50支持YUV420
    bit15对应着Video Data Block里的第16个SVD,即0x66,即分辨率4096x2160P@60支持YUV420

    DTD

    接着看下图EDID的有色背景部分
    在这里插入图片描述

    这部分是继EDID Block0之后,描述的另外两个Detailed Timing,因为在EDID Block0里已经描述了两个Detailed Timing了

    怎么知道这是描述DTD的,因为在前面CEA Extension Header章节,那里的Byte2=0x50,这是个偏移量,即从EDID Block1的0地址开始偏移0x50之后,就是开始描述DTD了。DTD各个字节的含义可参考Block0章节的长图

    DTD之后的数据是0,因为后面没有用到的字节规定是要填充0的,最后一个为检验和

    YCbCr 4:2:0 Video Data Block

    到此,三星电视的EDID就分析完了,但是实际上还有另外一种有关YUV420的Data Block,那便是YCbCr 4:2:0 Video Data Block(Y420VDB),该Data Block是把only support YUV420的分辨率列出来。虽然该三星电视EDID没有声明,这里还是要介绍一下

    看图说话
    在这里插入图片描述

    这个也是从Byte3开始看起,但跟前面的Y420CMDB不同的是,这里是把支持YUV420的分辨率的SVD直接写在这的,并不是bit map了,例如该三星电视only support YUV420的是3840x2160P@60、3840x2160P@50、4096x2160P@50、4096x2160P@60这4个分辨率,则放在Y420VDB的话,它十六进制应该是这样的:E5 0E 61 60 65 66

    到此,常用的EDID Data Block就介绍完了

    HDMI信号带宽计算方法

    计算公式
    在这里插入图片描述

    参数详细说明
    10/8:TMDS编码8bits -> 10bits
    TMDS编码算法会将8位数据转换成10位数据,前8位数据由原始信号经运算后获得,第9位指示运算的方式,第10位用来对应直流平衡

    举例说明
    3840x2160@60Hz YUV444 8bit的速率是多少?
    查表得,HTotal = 4400,VTotal = 2250,计算单通道带宽为:
    4400 * 2250 * 60 * 1 * 8bit * 10/8 = 5.94Gbits/s
    HDMI TMDS传输有3个数据通道,所以共需要约18Gbits的带宽
    这也就是HDMI 2.0宣称它支持带宽为18Gbps的理论依据

    参考资料

    CEA-861-F
    CEA-861.3
    HDMI_Specification1_4b
    HDMI_Specification2_0b

    转自:https://blog.csdn.net/cfl927096306/article/details/108017501

  • 相关阅读:
    (面试题)抽象类和静态属性以及静态方法(2019年10月17日)
    抽象类和静态属性以及静态方法(2019年10月17日)
    (面试题)多态(2019年10月16日)
    多态(2019年10月16日)
    (面试题)封装和继承(2019年10月15日)
    封装和继承(2019年10月15日)
    武汉大学2009年数学分析试题解答
    武汉大学2010年数学分析试题解答
    武汉大学2011年数学分析试题解答
    武汉大学2007年数学分析试题解答
  • 原文地址:https://www.cnblogs.com/huang-y-x/p/13522519.html
Copyright © 2020-2023  润新知