我在做一个tvp5158的项目,要求将四路视频接入并显示,但是我对其中四路视频的解析不是很明白,有这方面的例程吗?如果有请发一份wwzhutou123@126.com.万分感谢
Wei Jiang:
先ITU656采集到内存,然后DMA按行进行分析和转移.
先看看手册中的行采集模式
wei wang:
回复 Wei Jiang:
那采集进来后如何确定每行的首地址呢?如果这个确定错了的话,那接下来的解析也就无意义了
Wei Jiang:
回复 wei wang:
手册描述很清楚~
Coolen Xue:
回复 wei wang:
你可以参考tvp5158的datasheet中如下章节:
3.8.3.4 Metadata Insertion for Line-Interleaved Mode
简单的说,tvp5158在每一行的SAV之后插入了四字节的metadata,其中包含了该行的顶场底场与行号的信息,据此进行四路视频的解析。
wei wang:
回复 Coolen Xue:
现在的情况是我进来的数据只查到第一路的前四个字节有metadata,而且好像还不全,其余几路均没有发现metadata,这是什么原因??
Coolen Xue:
回复 wei wang:
你是怎么定位metadata的?
你可以取几帧,把整个superframe存下来,然后查看它的二进制数据,在里面根据数据特征去找。
我觉得,不会存在你说的那种情况,可能是你寻找metadata的方法不对。
shuai zhou:
回复 Coolen Xue:
dm8168 dvr里面的demo例子就有tvp8158+hdmi输出的实例,还可以做多路转码。
wei wang:
回复 shuai zhou:
我的memory中的视频数据如下
地址:0x84000000 数据:0x606080800x80807070
地址:0x840002E0 数据:0xCE801480 0xDF80E180
地址:0x840005A0 数据:0xE07EE080 0xDF7EE080
地址:0x840008A0 数据:0x60608080 0x80805E5E
我的视频是CIF格式,每行数据长度为2E0,由上面四个地址的首八个数据可以看出,只要00处跟8A0处的起始数据时正确的,而且首字节为0x80,即全部都是第一路的数据。
我怀疑是vpfe的问题,这是我vpfe的设置:
width = 364;
height = 1052; //263*4
acHeight = 960;//240*4
offsetH = (width * 2 +31) & 0xffffffe0;
VPFE_CCDC_SYN_MODE = 0x00032F84; // interlaced, with VD pority as negative
VPFE_CCDC_HD_VD_WID = 0;
VPFE_CCDC_PIX_LINES = ((width-1) << 17) | (height >> 1);
VPFE_CCDC_HORZ_INFO = width << 1; // Horizontal lines
VPFE_CCDC_HSIZE_OFF = ch_info->offsetH; // Horizontal line offset
VPFE_CCDC_VERT_START = 0; // Vertical start line
VPFE_CCDC_VDINT = 0;
VPFE_CCDC_VERT_LINES = acHeight >> 1; // Vertical lines
VPFE_CCDC_CULLING = 0xFFFF00FF; // Disable cullng
/*
* Interleave the two fields
*/
VPFE_CCDC_SDOFST = 0x00000249;
VPFE_CCDC_SDR_ADDR = video_buffer;
VPFE_CCDC_CLAMP = 0;
VPFE_CCDC_DCSUB = 0;
VPFE_CCDC_COLPTN = 0xEE44EE44;
VPFE_CCDC_BLKCMP = 0;
VPFE_CCDC_FPC_ADDR = 0x86800000;
VPFE_CCDC_FPC = 0;
VPFE_CCDC_VDINT = 0;
VPFE_CCDC_ALAW = 0;
VPFE_CCDC_REC656IF = 0x00000003;
/*
* Input format is Cb:Y:Cr:Y, w/ Y in odd-pixel position
*/
VPFE_CCDC_CCDCFG = 0x00000800;
VPFE_CCDC_FMTCFG = 0;
VPFE_CCDC_FMT_HORZ = width;
VPFE_CCDC_FMT_VERT = acHeight;
VPFE_CCDC_FMT_ADDR0 = 0;
VPFE_CCDC_FMT_ADDR1 = 0;
VPFE_CCDC_FMT_ADDR2 = 0;
VPFE_CCDC_FMT_ADDR3 = 0;
VPFE_CCDC_FMT_ADDR4 = 0;
VPFE_CCDC_FMT_ADDR5 = 0;
VPFE_CCDC_FMT_ADDR6 = 0;
VPFE_CCDC_FMT_ADDR7 = 0;
VPFE_CCDC_PRGEVEN_0 = 0;
VPFE_CCDC_PRGEVEN_1 = 0;
VPFE_CCDC_PRGODD_0 = 0;
VPFE_CCDC_PRGODD_1 = 0;
VPFE_CCDC_VP_OUT = ((acHeight-1) << 17) | (ch_info->width << 4);
VPFE_CCDC_PCR = 0x00000001; // Enable CCDC
这样设置有问题吗??
Shane Huang:
回复 wei wang:
4路CIF每行长度应该是848字节
TI中文支持网