📄 tskvideocapturevp1.c
字号:
/*
* Copyright 2004 by SEED Incorporated.
* All rights reserved. Property of SEED Incorporated.
* Restricted rights to use, duplicate or disclose this code are
* granted through contract.
*
*/
#include <std.h>
#include <tsk.h>
#include <vport.h>
#include <vportcap.h>
#include <tvp51xx.h>
#include <csl_edma.h>
#include <fvid.h>
#include <csl_dat.h>
#include <csl_cache.h>
#include <scom.h>
#include "seeddm642.h"
#include "seedvpm642cfg.h"
#include "seedvpm642_vcapparams.h"
#include "seedvpm642_tskvp1.h"
#pragma DATA_ALIGN(Y1Array,8)
#pragma DATA_ALIGN(Cb1Array,8)
#pragma DATA_ALIGN(Cr1Array,8)
#pragma DATA_SECTION(Y1Array,".spec_data")
#pragma DATA_SECTION(Cb1Array,".spec_data")
#pragma DATA_SECTION(Cr1Array,".spec_data")
unsigned char Y1Array[288*720*2];
unsigned char Cb1Array[(288*720*2)>>1];
unsigned char Cr1Array[(288*720*2)>>1];
//extern MBX_Obj VP1CAPTURE;
extern int EXTERNALHEAP;
FVID_Handle capChanCh1;
FVID_Frame *capFrameBuf1;
/*
* ======== tskVideoCaptureVp1Init ========
* video capture function init.
*/
void VideoCaptureVp1Init()
{
int status;
SEEDVPM642_vCapParamsChan.segId = EXTERNALHEAP ;//EXTERNALHEAP;
SEEDVPM642_vCapParamsTVP5150.hI2C = SEEDVPM642_I2C_hI2C; /*打开驱动程序*/
/******************************************************/
/* initialization of capture driver */
/******************************************************/
/*打开第二通路*/
capChanCh1 = FVID_create( "/VP1ACAPTURE/A/1",
IOM_INPUT,
&status,
(Ptr)&SEEDVPM642_vCapParamsChan,
NULL);
/******************************************************/
/* configure video encoder */
/******************************************************/
/*配置第一通路的TVP5150*/
FVID_control( capChanCh1,
VPORT_CMD_EDC_BASE+EDC_CONFIG,
(Ptr)&SEEDVPM642_vCapParamsTVP5150);
}
/*
* ======== tskVideoCaptureVp1Start ========
* video capture function start.
*/
void VideoCaptureVp1Start()
{
/*启动采集*/
FVID_control(capChanCh1, VPORT_CMD_START, NULL);
}
/*
* ======== tskVideoCaptureVp1 ========
* video capture function.
*/
void tskVideoCaptureVp1()
{
SCOM_Handle fromInput1toPRO,fromPROtoInput1;
//SCOM_Handle fromInput1toDIS,fromDIStoInput1;
char *out1Buf[3];
char *in1Buf[3];
ScomMessage scomMsg1;
ScomMessage *pMsgBuf1;
fromInput1toPRO = SCOM_open("IN1TOPRO");
fromPROtoInput1 = SCOM_open("PROTOIN1");
//fromInput1toDIS = SCOM_open("IN1TODIS");
//fromDIStoInput1 = SCOM_open("DISTOIN1");
FVID_alloc(capChanCh1, &capFrameBuf1);
pMsgBuf1 = &scomMsg1;
while(1)
{
int i;
//UTL_stsStart( stsCapTime );
in1Buf[0] = capFrameBuf1->frame.iFrm.y1;
in1Buf[1] = capFrameBuf1->frame.iFrm.cb1;
in1Buf[2] = capFrameBuf1->frame.iFrm.cr1;
out1Buf[0] = (char *)Y1Array;
out1Buf[1] = (char *)Cb1Array;
out1Buf[2] = (char *)Cr1Array;
for(i = 0; i < 576; i ++)
{
DAT_copy(in1Buf[0] + i * 720,
out1Buf[0]+i*720,
720);
DAT_copy(in1Buf[1] + i * (720 >> 1),
out1Buf[1]+i*(720>>1),
720>>1);
DAT_copy(in1Buf[2] + i * (720 >> 1),
out1Buf[2] + i * (720>> 1),
720>>1);
}
DAT_wait(DAT_XFRID_WAITALL);
//CACHE_clean(CACHE_L2ALL,NULL,NULL);
//yuv422to420(inBuf,outBuf, 720, 576);
//UTL_stsStop( stsCapTime );
pMsgBuf1->bufY = Y1Array;
pMsgBuf1->bufU = Cb1Array;
pMsgBuf1->bufV = Cr1Array;
//SCOM_putMsg(fromInput1toDIS,pMsgBuf1);
SCOM_putMsg(fromInput1toPRO, pMsgBuf1);
// Calculate how long it takes to capture one frame
//UTL_stsPeriod( stsCycleTime );
FVID_exchange(capChanCh1, &capFrameBuf1);
//pMsgBuf1 = SCOM_getMsg(fromDIStoInput1, SYS_FOREVER);
pMsgBuf1 = SCOM_getMsg(fromPROtoInput1, SYS_FOREVER);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -