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.

DM6437 初始化VPFE 不成功的问题

Other Parts Discussed in Thread: TVP5158


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;  总进入这里     
     }
 总不成功,谁遇到过,请帮忙