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.

求助DM648的视频采集和显示

Other Parts Discussed in Thread: TVP5154

DM648的VP1作为视频采集口,VP2作为视频显示口,框图如下:

时钟芯片供给TVP5154时钟为14.3M,供给SAA7105时钟为27M,TVP5154输出PORT_CLK给DM648的VP1采集口时钟为27M,时钟芯片供给VP2显示口时钟为27M。

代码基本仿照C:\dvsdk_1_11_00_00_DM648\examples\video_preview\evmDM648下面的video_preview.c来写,大致如下:

VOID DM648_VideoCapAndDisplay(VOID)
{
   capChan = FVID_create("/VP1CAPTURE/A/2", IOM_INPUT, &status, (Ptr)&vCapParamsChan, NULL);

   disChan = FVID_create("/VP2DISPLAY/SAA7105", IOM_OUTPUT, &status, (Ptr)&vDisParamsChan, NULL);

Cap和dis分别循环三次分配buffer并填入相应队列
   
        status = FVID_allocBuffer(capChan, &frameBuffPtr);
         status = FVID_queue(capChan, &frameBuffPtr);                      
   

        status = FVID_allocBuffer(disChan, &frameBuffPtr);
         status = FVID_queue(disChan, &frameBuffPtr);                     
 
  /* Configure external video encoders (SAA7105) & decoders (TVP5154) */
     /* Configure SAA7105 */
        status |= FVID_control(disChan,
                               VPORT_CMD_EDC_BASE + EDC_CONFIG,
                               (Ptr)&vDisParamsEncoder); 
                                            
       /* Configure TVP5154 */
        status |= FVID_control(capChan,
                               VPORT_CMD_EDC_BASE + EDC_CONFIG,
                               (Ptr)&vCapParamsDecoder);

   /* start capture & display operation */
         status |= FVID_control(disChan, VPORT_CMD_START, NULL);
          status |= FVID_control(capChan, VPORT_CMD_START, NULL);
 
  /* grab first buffer from input queue */
       status = FVID_dequeue(disChan, &frameBuffPtr); 

/* loop forever performing video capture and display */
    while (status == 0) {

 /* grab a fresh video input frame */
       FVID_exchange(capChan, &frameBuffPtr);

       /* display the video frame */
       FVID_exchange(disChan, &frameBuffPtr);
    }   
}

视频口参数配置也是按照TI例程video_preview.c,如下:

static VPORTCAP_Params vCapParamsChan = CAP_PARAMS_CHAN_BT656_DEFAULT(PAL);

 

/* TVP5154 EDC driver configuration.Using embedded sync and Composite Analog Channel A for all 8 decoders */

static TVP5154_ConfParams vCapParamsDecoder[MAX_CAP_CHAN] = {

                    CAP_PARAMS_TVP5154_EMBEDDED_DEFAULT(PAL, COMPOSITE_A),

                                               CAP_PARAMS_TVP5154_EMBEDDED_DEFAULT(PAL, COMPOSITE_A),

                                               CAP_PARAMS_TVP5154_EMBEDDED_DEFAULT(PAL, COMPOSITE_A),

                                               CAP_PARAMS_TVP5154_EMBEDDED_DEFAULT(PAL, COMPOSITE_A),

                                               CAP_PARAMS_TVP5154_EMBEDDED_DEFAULT(PAL, COMPOSITE_A),

                                              CAP_PARAMS_TVP5154_EMBEDDED_DEFAULT(PAL, COMPOSITE_A),

                                               CAP_PARAMS_TVP5154_EMBEDDED_DEFAULT(PAL, COMPOSITE_A),

                                               CAP_PARAMS_TVP5154_EMBEDDED_DEFAULT(PAL, COMPOSITE_A)

};

 

/* Vport Display driver configuration.Using embedded sync */

static VPORTDIS_Params vDisParamsChan = DIS_PARAMS_CHAN_BT656_DEFAULT(PAL);

 

/* SAA7105 EDC driver configuration.Using Svideo Analog output */

static SAA7105_ConfParams vDisParamsEncoder = DIS_PARAMS_SAA7105_SDTV_EMBEDDED_DEFAULT(PAL720, SVIDEO);

 

现在问题是代码走到红色处FVID_dequeue(disChan, &frameBuffPtr)时就出问题,display的chan->qOut链为空,导致_cmdDequeue函数中的if ((viop = (FVID_Frame *)QUE_dequeue(&chan->qOut)) != (FVID_Frame *)& chan->qOut)表达式不满足进而返回retVal = packet->status = IOM_PENDING;  求指导啊~~~~~