我在做一个tvp5158的项目,要求将四路视频接入并显示,但是我对其中四路视频的解析不是很明白,有这方面的例程吗?如果有请发一份wwzhutou123@126.com.万分感谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你可以参考tvp5158的datasheet中如下章节:
3.8.3.4 Metadata Insertion for Line-Interleaved Mode
简单的说,tvp5158在每一行的SAV之后插入了四字节的metadata,其中包含了该行的顶场底场与行号的信息,据此进行四路视频的解析。
你是怎么定位metadata的?
你可以取几帧,把整个superframe存下来,然后查看它的二进制数据,在里面根据数据特征去找。
我觉得,不会存在你说的那种情况,可能是你寻找metadata的方法不对。
dm8168 dvr里面的demo例子就有tvp8158+hdmi输出的实例,还可以做多路转码。
我的memory中的视频数据如下
地址:0x84000000 数据:0x60608080 0x80807070
地址: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
这样设置有问题吗??