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.
PSP_VPFECcdcConfigParams ccdcParams =
{
FVID_CCDC_YCBCR_8, // dataFlow
FVID_FRAME_MODE, // ffMode
4204, // height
400, // width
(400*2),
0, // horzStartPix
0, // vertStartPix
NULL, // appCallback
{
TVP5158_Open, // extVD Fxn
TVP5158_Close,
TVP5158_Control,
},
0, //segId
};
PSP_VPFECcdcConfigParams ccdcParamsGAO =
{
FVID_CCDC_YCBCR_8, // dataFlow
FVID_FRAME_MODE, // ffMode
480, // height 0xB40=2880/1050/525
720, // width width=pitch,0xb40/2
(720*2),
0, // horzStartPix
0, // vertStartPix
NULL, // appCallback
{
TVP5158_Open, // extVD Fxn
TVP5158_Close,
TVP5158_Control,
},
0, //segId
};
/******************************************************************************
void GAOOneCamera(void)
{
PSP_VPBEChannelParams beinitParams;
PSP_VPFEChannelParams feinitParams; //id,params
FVID_Frame *CcdcallocFB[3]={NULL};
FVID_Frame *VidallocFB[3] ={NULL};
FVID_Frame *GaoFrameBuff;
FVID_Handle CcdcHandle2;
FVID_Handle Vid0Handle2;
FVID_Handle VencHandle2;
GIO_Attrs gioAttrs = GIO_ATTRS;
Uint8 i;
// Create Ccdc Channel
feinitParams.id = PSP_VPFE_CCDC;
feinitParams.params = (PSP_VPFECcdcConfigParams*)&ccdcParamsGAO;
CcdcHandle2 = FVID_create("/VPFE0",IOM_INOUT,NULL,&feinitParams,&gioAttrs); //&feinitParams由下层mini driver返回的状态值
if(NULL == CcdcHandle2)
{
return;
}
..........
............
while(0==a_OneCameraFlage)
{
/* grab a fresh video input frame */
FVID_exchange(CcdcHandle2, &GaoFrameBuff);
/* display the video frame */
FVID_exchange(Vid0Handle2, &GaoFrameBuff);
Uart_Read(); // process the uart
}
FVID_freeBuffer(CcdcHandle2,CcdcallocFB[0]);
FVID_freeBuffer(CcdcHandle2,CcdcallocFB[1]);
FVID_freeBuffer(CcdcHandle2,CcdcallocFB[2]);
FVID_freeBuffer(Vid0Handle2, VidallocFB[0]);
FVID_freeBuffer(Vid0Handle2, VidallocFB[1]);
FVID_freeBuffer(Vid0Handle2, VidallocFB[2]);
// * Delete Channels
FVID_delete(CcdcHandle2);
FVID_delete(Vid0Handle2);
FVID_delete(VencHandle2);
// Free Memory Buffers
MEM_free(0,GaoFrameBuff->frame.frameBufferPtr,(720*480*2));
MEM_free(0,GaoFrameBuff,sizeof(FVID_Frame));
return;
}
//******************************************************************************
void FourCamera()
{
FVID_Handle CcdcHandle;
FVID_Handle Vid0Handle;
FVID_Handle VencHandle;
FVID_Handle osd0Handle;
PSP_VPBEChannelParams beinitParams;
PSP_VPFEChannelParams feinitParams; //id,params
GIO_Attrs gioAttrs = GIO_ATTRS;
FVID_Frame *FBAddr = NULL;
FVID_Frame *disFBAddr = NULL;
Uint16 *vidBuffer = NULL;
// Create Ccdc Channel
feinitParams.id = PSP_VPFE_CCDC;
feinitParams.params = (PSP_VPFECcdcConfigParams*)&ccdcParams;
CcdcHandle = FVID_create("/VPFE0",IOM_INOUT,NULL,&feinitParams,&gioAttrs);
//&feinitParams由下层mini driver返回的状态值
if(NULL == CcdcHandle)
{
return;
}
.........
............
while(1==a_OneCameraFlage)
{
ReadImageData(); // capture CCD data to DDR
...........
}
memset(osd0Buffer,0,480*420*2); //轨迹全透明
FVID_freeBuffer(CcdcHandle,FBAddr);
FVID_freeBuffer(Vid0Handle, FBAddr);
// * Delete Channels
FVID_delete(CcdcHandle);
FVID_delete(Vid0Handle);
FVID_delete(VencHandle);
VPSS_DBG("VPSS: Loopback Application Ended \r\n");
}
//******************************************************************************
void echo(void)
{
// int msg=0;
Uint8 m=0xff;
。。。。。。。。
while(1)
{
if( 1==a_OneCameraFlage)
{
FourCamera();
PAL_osWaitMsecs(250u);
}
else if( 0==a_OneCameraFlage)
{
GAOOneCamera();
PAL_osWaitMsecs(250u);
}
Uart_Read();
}
}
//******************************************************************************
由于我的项目需要用到 单路 和多路 摄像机视频 ,所以进行了 单路和多路视频切换时 初始化VPFE
两个方式 都可独立运行 没有问题
由多路切换到单路 没有问题
由单路切换到多路时
在函数 FourCamera()中
CcdcHandle = FVID_create("/VPFE0",IOM_INOUT,NULL,&feinitParams,&gioAttrs); //&feinitParams由下层mini driver返回的状态值
if(NULL == CcdcHandle)
{
return; 总进入这里
}
总不成功,谁遇到过,请帮忙