BT1120数据格式分析

本文深入解析BT1120数据格式,通过SMPTE标准协议分析图像的基本格式、同步头、行列数以及校验。针对1080p/25Hz视频,详细阐述了数据结构,包括EAV、SAV、EIV和SIV,并提供了实际数据验证。同时,介绍了CRC校验的实现和应用。

1. 概述

本文将利用LMH0341所采集到的实际数据,对照SMPTE 292M和SMPTE 274M标准协议,对数据进行解析,以加深对于BT1120数据格式的理解。

2. 图像的基本格式

根据协议,图像数据基本格式如下:
BT1120图像基本格式
注:EAV = End of Active Video EIV = End of Inactive Video
SAV = Startof Active Video SIV = Start of Inactive Video

其中区域1,3,5为行消隐区,区域2,6为空白行,区域4为有效的图像数据

每一行数据以EAV/EIV为消隐区的开始 ,以SAV/SIV为数据区的开始,EAV/EIV和SAV/SIV的格式如下图
EAV格式SAV格式
LN0和LN1用于指示行数,YCR0和YCR1是CRC校验值,XYZ用于指示这一行所代表的数据。EAV/EIV,SAV/SIV分别对应不同XYZ数据,具体可以参考下表:

同步头数据说明
LMH0341输出数据采用Interleaved data stream格式,如下图所示
Interleaved data stream格式

3. 同步头分析

对照以上数据的基本格式,对于1080p/25Hz视频,同步头分别为:
EAV:0xFFFFF 0x00000 0x00000 0x9D274
SAV: 0xFFFFF 0x00000 0x00000 0x80200
EIV: 0xFFFFF 0x00000 0x00000 0xB62D8
SIV: 0xFFFFF 0x00000 0x00000 0xAB2AC

4.行列数分析

根据SMPTE 274M协议,对于1080p/25Hz视频,行列数规定如下:
不同图像的行列数
1080p/25Hz视频单帧图像的总列数为2640列,行数为1125行;其中有效的列数为1920列,行数为1080行;

从第1行到第41行,第1122行到1125行为消隐行,无有效图像数据;从第42行到1121行包含有效的图像数据;
对于每一行中各部分的word(1word = 20bits)数如下表

EAVLNCRC消隐区SAV图像数据
42270841920

本文所采用的数据:
https://download.csdn.net/download/Cesaroy/87240373?spm=1001.2014.3001.5503
https://download.csdn.net/download/Cesaroy/87315970?spm=1001.2014.3001.5503

从data21的数据来看:EIV(0xFFFFF 0x00000 0x00000 0xB62D8)到EAV(0xFFFFF 0x00000 0x00000 0x9D274)共有2640个数据,验证了单帧图像共有2640列。

data21中是连续的两行数据,刚好位于行消隐和行有效的交界处,由上面分析,EIV应该是第41行,而EAV应该是第42行。
data21中第一组EIV中的行数为:0xA92A4,0x80200,解析出来行数为41,第二组EAV中的行数为:0xAA2A8,0x80200,解析出来行数为42。

data31中同样是连续的两行数据,刚好位于行有效和行消隐的交界处,由上面分析,EAV应该是第1121行,而EIV应该是第1122行。
data31中第一组EAV中的行数为:0x61184,0x88220,解析出来行数为1121,第二组EIV中的行数为:0x62188,0x88220,解析出来行数为1122。

data32中同样是连续两行数据,前一帧图像最后一行EIV和下一帧图像第一行EIV,由上面分析,第一组EIV应该是第1125行,第二组EIV应该是第1行。
data32中第一组EIV中的行数为:0x65194,0x88220,解析出来行数为1125,第二组EIV中的行数为:0x81204,0x80200,解析出来行数为1。

5. 校验分析

根据SMPTE 292M协议,进行CRC校验数据包括:图像数据+EAV+LN;CRC校验使用的公式为 C R C ( X ) = X 18 + X 5 + X 4 + 1 CRC\left( X \right) =X^{18}+X^5+X^4+1 CRC(X)=X18+X5+X4+1。数据所含的两个CRC校验分别对应Y数据校验和U/V数据校验。

CRC校验可以利用CRC-GEN小工具生成,CRC-GEN可以自动生成VHDL或者Verilog代码。
CRC-GEN小工具地址:https://download.csdn.net/download/Cesaroy/87315972

SMPTE 292M协议是从高位开始生成,而CRC-GEN是从低位生成,所以在程序里面需要对高低位进行互换。利用CRC-GEN生成代码并转化为C代码如下

// data: 图像数据 + EAV + LN, length:1920 + 4 + 2 = 1926
uint32_t crc18_cal2(uint16_t *data, uint16_t length)
{
	uint32_t i;
	uint32_t crc = 0;
	uint32_t lfsr_q_u32 = 0x00000000;

	uint8_t lfsr_q[18] = {0};
	uint8_t lfsr_c[18] = {0};

	uint8_t data_in[10] = {0};

	for (i = 0; i < 18; i++) {
		lfsr_q[i] = (lfsr_q_u32 >> i) & 0x1;
	}

	while (length--) {
	
		for (i = 0; i < 10; i++) {	// 高低位互换
			data_in[i] = ((*data) >> (9 - i)) & 0x1;
		}
		data++;

		lfsr_c[0] = lfsr_q[8] ^ data_in[0];
		lfsr_c[1] = lfsr_q[9] ^ data_in[1];
		lfsr_c[2] = lfsr_q[10] ^ data_in[2];
		lfsr_c[3] = lfsr_q[11] ^ data_in[3];
		lfsr_c[4] = lfsr_q[8] ^ lfsr_q[12] ^ data_in[0] ^ data_in[4];
		lfsr_c[5] = lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[13] ^ data_in[0] ^ data_in[1] ^ data_in[5];
		lfsr_c[6] = lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[14] ^ data_in[1] ^ data_in[2] ^ data_in[6];
		lfsr_c[7] = lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[15] ^ data_in[2] ^ data_in[3] ^ data_in[7];
		lfsr_c[8] = lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[16] ^ data_in[3] ^ data_in[4] ^ data_in[8];
		lfsr_c[9] = lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[17] ^ data_in[4] ^ data_in[5] ^ data_in[9];
		lfsr_c[10] = lfsr_q[0] ^ lfsr_q[13] ^ lfsr_q[14] ^ data_in[5] ^ data_in[6];
		lfsr_c[11] = lfsr_q[1] ^ lfsr_q[14] ^ lfsr_q[15] ^ data_in[6] ^ data_in[7];
		lfsr_c[12] = lfsr_q[2] ^ lfsr_q[15] ^ lfsr_q[16] ^ data_in[7] ^ data_in[8];
		lfsr_c[13] = lfsr_q[3] ^ lfsr_q[16] ^ lfsr_q[17] ^ data_in[8] ^ data_in[9];
		lfsr_c[14] = lfsr_q[4] ^ lfsr_q[17] ^ data_in[9];
		lfsr_c[15] = lfsr_q[5];
		lfsr_c[16] = lfsr_q[6];
		lfsr_c[17] = lfsr_q[7];

		for (i = 0; i < 18; i++) { 
			lfsr_q[i] = lfsr_c[i];
		}
	}

	crc = 0;
	for (i = 0; i < 18; i++) {	// 高低位互换
		crc |= ((lfsr_q[17 - i] << i) & (0x1 << i));
	}

	return crc;
}

对于data31中的数据,Y分量计算出来的CRC为0x6de4,解码出来的CRC校验数据也是0x6de4。

6. 结束

本文旨在利用实际采集的数据反向理解BT1120数据格式。如有错误,欢迎指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值