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.

raw capture on dm6437

Hi!

I am making a software using video_loopback as basis 10-bit raw RGB with the CMOS sensor OV2715 (using 1080P(1920x1080) configuration).

I am using CCS 3.3, XDS510 Emulator, DVSDK_1_11_00_00, and PSPDriver_1_10_00_00 on DM6437.

The OV2715 is Specification fallowing:

  active array size: 1920x1080

output interfaces: 10-bit parallel / one-lane MIPI

output formats: RAW RGB (10-bit)

input clock frequency: 6 ~ 27 MHz

scan mode: progressive

maximum image transfer rate:  (1080p: 30 fps, cropped 720p: 60 fps, VGA: 120 fps, QVGA: 240 fps)

frame rate : Input format (1080p) ,resulution(1920x1080), frame rate(30fps), pixel clock(raw:80MHz)

The OV2715 sensor has an image array of 1952 columns by 1092 rows(2,131,584 pixels. The color filters are arranged in a Bayer pattern. The primary color BG/GR array is arranged in line-alternating fashing. Of the 2,131,574 pixels, 2,073,600(1920x1080) are active pixels and can be output.

 

    #define FRAME_WIDTH         1920 // 1280 //720

    #define FRAME_HEIGHT        1080 // 720  //480

    #define CAP_FRAME_WIDTH     (FRAME_WIDTH +16) /* Capture frame width to be set */

    #define CAP_FRAME_HEIGHT    (FRAME_HEIGHT + 6) /* Capture frame height to be set */

 

    CcdcParams->inpmod = FVID_CCDC_RAW_FORMAT;      /* dataFlow   */

    CcdcParams->ffMode = FVID_FRAME_MODE;        /* ffMode   */

    CcdcParams->height = CAP_FRAME_HEIGHT;                  /* height       */

    CcdcParams->width = CAP_FRAME_WIDTH;                     /* width        */

    CcdcParams->pitch = (CAP_FRAME_WIDTH * 2);             /* pitch        */

    CcdcParams->horzStartPix = 0;                                        /* horzStartPix */

    CcdcParams->vertStartPix = 0;                            /* vertStartPix */

    CcdcParams->appCallback = NULL;                                 /* appCallback  */

    CcdcParams->segId = 0;                                                  /*segId         */

    CcdcParams->rawParams.dataSize = PSP_VPFE_BITS10; /* dataSize     */

    CcdcParams->rawParams.pack8 = PSP_VPFE_PACK8_16BITS_PIXEL;        /* pack8  */

    CcdcParams->rawParams.dataPol = PSP_VPFE_DataPol_Normal;   /* dataPol  */

    CcdcParams->rawParams.VDSyncPol = PSP_VPFE_SyncPol_Positive; /* VDSyncPol */

    CcdcParams->rawParams.HDSyncPol = PSP_VPFE_SyncPol_Positive; /* HDSyncPol    */

    CcdcParams->rawParams.HDVDMaster = PSP_VPFE_SyncDir_Input; /* HDVDMaster   */

    CcdcParams->rawParams.HDSyncWidth = 16;     /* HDSyncWidth  */

    CcdcParams->rawParams.VDSyncWidth = 6;       /* VDSyncWidth  */

    CcdcParams->rawParams.numPxlPerLine = CAP_FRAME_WIDTH; /* numPxlPerLine */

    CcdcParams->rawParams.numLinPerFld = CAP_FRAME_HEIGHT; /* numLinPerFld */

    CcdcParams->rawParams.ALawEnable = PSP_VPFE_ALaw_Disable; /* ALawEnable   */

    CcdcParams->rawParams.ALaw_Width = PSP_VPFE_ALaw_bits15_6; /* ALaw_Width   */

    memset (&CcdcParams->extVDFxn, 0, sizeof (PSP_VPSS_ExtVideoDecoderFxns));   /* extVD Fxn */

 Here is my setup on Previewer.

    Uint32 uIndex = 0;

//  PrevParams->downSampleRate = PSP_PREVIEWER_DOWN_SAMPLE_RATE1;

    PrevParams->downSampleRate = PSP_PREVIEWER_DOWN_SAMPLE_RATE2;

    PrevParams->features = PSP_PREVIEWER_CFA | PSP_PREVIEWER_LUMA_ENHANCE;

    for(uIndex = 0; uIndex < PSP_PREVIEWER_CFA_COEFF_TABLE_SIZE; uIndex++)

        PrevParams->cfaCoeffsParam.coeffs[uIndex] = cfa_coef[uIndex];

    PrevParams->cfaCoeffsParam.vThreshold = 0x28;

    PrevParams->cfaCoeffsParam.hThreshold = 0x28;

    PrevParams->sizeParam.sph   = 2;

    PrevParams->sizeParam.eph   = (FRAME_WIDTH +1);

    PrevParams->sizeParam.slv   = 0;

    PrevParams->sizeParam.elv   = (FRAME_HEIGHT +4);

    PrevParams->sizeParam.pixelSize = PSP_PREVIEWER_INWIDTH_10BIT;

    PrevParams->sizeParam.inPitch   = ((CAP_FRAME_WIDTH) * 2u);

    PrevParams->sizeParam.outPitch  = ((FRAME_WIDTH / 2) * 2u);

    PrevParams->whiteBalanceParam.wbDgain   = 0x100;

    PrevParams->whiteBalanceParam.wbGain[0] = 0x40;

    PrevParams->whiteBalanceParam.wbGain[1] = 0x40;

    PrevParams->whiteBalanceParam.wbGain[2] = 0x40;

    PrevParams->whiteBalanceParam.wbGain[3] = 0x40;

 

    PrevParams->whiteBalanceParam.position[0][0] = 0;

    PrevParams->whiteBalanceParam.position[0][1] = 1;

    PrevParams->whiteBalanceParam.position[0][2] = 0;

    PrevParams->whiteBalanceParam.position[0][3] = 1;

    PrevParams->whiteBalanceParam.position[1][0] = 2;

    PrevParams->whiteBalanceParam.position[1][1] = 3;

    PrevParams->whiteBalanceParam.position[1][2] = 2;

    PrevParams->whiteBalanceParam.position[1][3] = 3;

    PrevParams->whiteBalanceParam.position[2][0] = 0;

    PrevParams->whiteBalanceParam.position[2][1] = 1;

    PrevParams->whiteBalanceParam.position[2][2] = 0;

    PrevParams->whiteBalanceParam.position[2][3] = 1;

    PrevParams->whiteBalanceParam.position[3][0] = 2;

    PrevParams->whiteBalanceParam.position[3][1] = 3;

    PrevParams->whiteBalanceParam.position[3][2] = 2;

    PrevParams->whiteBalanceParam.position[3][3] = 3;

 

    PrevParams->rgbBlendingParam.blending[0][0] = 0x1a1;

    PrevParams->rgbBlendingParam.blending[0][1] = 0xf8a;

    PrevParams->rgbBlendingParam.blending[0][2] = 0xfd5;

    PrevParams->rgbBlendingParam.blending[1][0] = 0xfa1;

    PrevParams->rgbBlendingParam.blending[1][1] = 0x1c4;

    PrevParams->rgbBlendingParam.blending[1][2] = 0xf9b;

    PrevParams->rgbBlendingParam.blending[2][0] = 0xfbd;

    PrevParams->rgbBlendingParam.blending[2][1] = 0xfb1;

    PrevParams->rgbBlendingParam.blending[2][2] = 0x192;

 

    PrevParams->rgbBlendingParam.offset[0] = 0;

    PrevParams->rgbBlendingParam.offset[1] = 0;

    PrevParams->rgbBlendingParam.offset[2] = 0;

 

    PrevParams->rgb2ycbcrParam.coeff[0][0] = 0x4C;

    PrevParams->rgb2ycbcrParam.coeff[0][1] = 0x96;

    PrevParams->rgb2ycbcrParam.coeff[0][2] = 0x1D;

    PrevParams->rgb2ycbcrParam.coeff[1][0] = 0x3d4;

    PrevParams->rgb2ycbcrParam.coeff[1][1] = 0x3ac;

    PrevParams->rgb2ycbcrParam.coeff[1][2] = 0x82;

    PrevParams->rgb2ycbcrParam.coeff[2][0] = 0x82;

    PrevParams->rgb2ycbcrParam.coeff[2][1] = 0x395;

    PrevParams->rgb2ycbcrParam.coeff[2][2] = 0x3eb;

    PrevParams->rgb2ycbcrParam.yOffset     = 0;

    PrevParams->rgb2ycbcrParam.cbOffset    = 0;

    PrevParams->rgb2ycbcrParam.crOffset    = 0;

 

    PrevParams->blackAdjParam.blueAdj      = 40;

    PrevParams->blackAdjParam.redAdj       = 40;

    PrevParams->blackAdjParam.greenAdj     = 0;

    PrevParams->brightness = 0x00u;

    PrevParams->contrast   = 0x20u;

    PrevParams->outPixelOrderParam = PSP_PREVIEWER_PIXELORDER_YCRYCB;

 

Someone have an idea what I’ m doing wrong?

Thanks!

Cyberkjs (Hitron Systems).

  • It will be easier if you just provide CCDC and IPIPE register dump. In addition, you need to make sure the sensor is configured properly. 

    Regards,

    Xiangdong

  • Hi Xiangdong!

    Thanks your answer.

    The CCDC Register Value are as follows:

    PID 0001FE00
    PCR 00000003
    SYN_MODE 00010600
    HD_VD_WID 00000000
    PIX_LINES 077F0437
    HORZ_INFO 0000077F
    VERT_START 000C000C
    VERT_LINES 00000437
    CULLING FFFF00FF
    HSIZE_OFF 00000F00
    SDOFST 00000000
    SDR_ADDR 80102F00
    CLAMP 00000010
    DCSUB 00000000
    COLPTN 00000000
    BLKCMP 00000000
    FPC 00000000
    FPC_ADDR 00000000
    VDINT 000C0000
    ALAW 00000004
    REC656IF 00000000
    CCDCFG 00000000
    FMTCFG 0000E000
    FMT_HORZ 00000780
    FMT_VERT 000C0438
    VP_OUT 086E7800

     I have caching the Raw image, but the image is worng.

    My images are as follows:

     

    Which part did wrong?

    Regards,

    Cyberkjs

    ps: my e-mail is cyberkjs@hitron.co.kr, cyberkjs@dreamwiz.com

     

     

  • Cyberkjs,

    What is the mode CCDC is operating at? Does it capture and store raw data to DDR? Or does it pass the raw data directly to the preview engine?

    Can you also post your register settings in the Preview engine?

    Regards,

    Xiangdong

  • Hi Xiangdong!

    Thank you for your quick response.

    I am setting CCDC and preview engine on DM6437 as fallows:

     

    #define FRAME_WIDTH         1920
    #define FRAME_HEIGHT        1080

    static const Char cfa_coef[] =
    {
     GR_PHASE,
     R_PHASE,
     B_PHASE,
     GB_PHASE
    };

     Uint32 i = 0;

     CcdcParams->inpmod = FVID_CCDC_RAW_FORMAT;  /* dataFlow     */
     CcdcParams->ffMode = FVID_FRAME_MODE;       /* ffMode       */
     CcdcParams->height = FRAME_HEIGHT;          /* height       */
     CcdcParams->width  = FRAME_WIDTH;           /* width        */
     CcdcParams->pitch  = (FRAME_WIDTH * 2);     /* pitch        */
     CcdcParams->horzStartPix = 0;               /* horzStartPix */
     CcdcParams->vertStartPix = 0;               /* vertStartPix */
     CcdcParams->appCallback = NULL;             /* appCallback  */
     CcdcParams->segId = 0;                      /*segId         */
     CcdcParams->rawParams.dataSize = PSP_VPFE_BITS10;            /* dataSize     */
     CcdcParams->rawParams.pack8 = PSP_VPFE_PACK8_16BITS_PIXEL;   /* pack8  */
     CcdcParams->rawParams.dataPol = PSP_VPFE_DataPol_Normal;     /* dataPol  */
     CcdcParams->rawParams.VDSyncPol = PSP_VPFE_SyncPol_Positive; /* VDSyncPol */
     CcdcParams->rawParams.HDSyncPol = PSP_VPFE_SyncPol_Positive; /* HDSyncPol    */
     CcdcParams->rawParams.HDVDMaster = PSP_VPFE_SyncDir_Input;   /* HDVDMaster   */
     CcdcParams->rawParams.HDSyncWidth = 1;      /* HDSyncWidth  */
     CcdcParams->rawParams.VDSyncWidth = 2;      /* VDSyncWidth  */
     CcdcParams->rawParams.numPxlPerLine = FRAME_WIDTH;  /* numPxlPerLine */
     CcdcParams->rawParams.numLinPerFld  = FRAME_HEIGHT; /* numLinPerFld */
     CcdcParams->rawParams.ALawEnable = PSP_VPFE_ALaw_Disable;    /* ALawEnable   */
     CcdcParams->rawParams.ALaw_Width = PSP_VPFE_ALaw_bits15_6;   /* ALaw_Width   */
     
     PrevParams->downSampleRate = PSP_PREVIEWER_DOWN_SAMPLE_RATE1;
     PrevParams->features = PSP_PREVIEWER_CFA | PSP_PREVIEWER_LUMA_ENHANCE;
     
     for (i = 0; i < PSP_PREVIEWER_CFA_COEFF_TABLE_SIZE; i++)
      PrevParams->cfaCoeffsParam.coeffs[i] = cfa_coef[i];
     
     PrevParams->cfaCoeffsParam.vThreshold = 0x28;
     PrevParams->cfaCoeffsParam.hThreshold = 0x28;
     
     PrevParams->sizeParam.sph   = 2;
     PrevParams->sizeParam.eph   = (FRAME_WIDTH + 1);
     PrevParams->sizeParam.slv   = 0;
     PrevParams->sizeParam.elv   = (FRAME_HEIGHT + 4);
     PrevParams->sizeParam.pixelSize = PSP_PREVIEWER_INWIDTH_10BIT;
     PrevParams->sizeParam.inPitch   = (FRAME_WIDTH * 2u);
     PrevParams->sizeParam.outPitch  = (FRAME_WIDTH * 2u);
     PrevParams->whiteBalanceParam.wbDgain   = 0x100;
     PrevParams->whiteBalanceParam.wbGain[0] = 0x40;
     PrevParams->whiteBalanceParam.wbGain[1] = 0x40;
     PrevParams->whiteBalanceParam.wbGain[2] = 0x40;
     PrevParams->whiteBalanceParam.wbGain[3] = 0x40;
     
     PrevParams->whiteBalanceParam.position[0][0] = 0;
     PrevParams->whiteBalanceParam.position[0][1] = 1;
     PrevParams->whiteBalanceParam.position[0][2] = 0;
     PrevParams->whiteBalanceParam.position[0][3] = 1;
     PrevParams->whiteBalanceParam.position[1][0] = 2;
     PrevParams->whiteBalanceParam.position[1][1] = 3;
     PrevParams->whiteBalanceParam.position[1][2] = 2;
     PrevParams->whiteBalanceParam.position[1][3] = 3;
     PrevParams->whiteBalanceParam.position[2][0] = 0;
     PrevParams->whiteBalanceParam.position[2][1] = 1;
     PrevParams->whiteBalanceParam.position[2][2] = 0;
     PrevParams->whiteBalanceParam.position[2][3] = 1;
     PrevParams->whiteBalanceParam.position[3][0] = 2;
     PrevParams->whiteBalanceParam.position[3][1] = 3;
     PrevParams->whiteBalanceParam.position[3][2] = 2;
     PrevParams->whiteBalanceParam.position[3][3] = 3;
     
     PrevParams->rgbBlendingParam.blending[0][0] = 0x1a1;
     PrevParams->rgbBlendingParam.blending[0][1] = 0xf8a;
     PrevParams->rgbBlendingParam.blending[0][2] = 0xfd5;
     PrevParams->rgbBlendingParam.blending[1][0] = 0xfa1;
     PrevParams->rgbBlendingParam.blending[1][1] = 0x1c4;
     PrevParams->rgbBlendingParam.blending[1][2] = 0xf9b;
     PrevParams->rgbBlendingParam.blending[2][0] = 0xfbd;
     PrevParams->rgbBlendingParam.blending[2][1] = 0xfb1;
     PrevParams->rgbBlendingParam.blending[2][2] = 0x192;
     
     PrevParams->rgbBlendingParam.offset[0] = 0;
     PrevParams->rgbBlendingParam.offset[1] = 0;
     PrevParams->rgbBlendingParam.offset[2] = 0;
     
     PrevParams->rgb2ycbcrParam.coeff[0][0] = 0x4C;
     PrevParams->rgb2ycbcrParam.coeff[0][1] = 0x96;
     PrevParams->rgb2ycbcrParam.coeff[0][2] = 0x1D;
     PrevParams->rgb2ycbcrParam.coeff[1][0] = 0x3d4;
     PrevParams->rgb2ycbcrParam.coeff[1][1] = 0x3ac;
     PrevParams->rgb2ycbcrParam.coeff[1][2] = 0x82;
     PrevParams->rgb2ycbcrParam.coeff[2][0] = 0x82;
     PrevParams->rgb2ycbcrParam.coeff[2][1] = 0x395;
     PrevParams->rgb2ycbcrParam.coeff[2][2] = 0x3eb;
     PrevParams->rgb2ycbcrParam.yOffset     = 0;
     PrevParams->rgb2ycbcrParam.cbOffset    = 0;
     PrevParams->rgb2ycbcrParam.crOffset    = 0;
     
     PrevParams->blackAdjParam.blueAdj      = 40;
     PrevParams->blackAdjParam.redAdj       = 40;
     PrevParams->blackAdjParam.greenAdj     = 0;
     PrevParams->brightness = 0x00u;
     PrevParams->contrast   = 0x20u;
     PrevParams->outPixelOrderParam = PSP_PREVIEWER_PIXELORDER_YCRYCB;

    Regards,

    Cyberkjs

     

     

     

  • Hi,

    I saw another way to try.
    A. Change to the size was 960x1080 to downsamplerate.
         PrevParams->downSampleRate = PSP_PREVIEWER_DOWN_SAMPLE_RATE2;

    B. Previewer of the output images were stored on DDR2.
         
    A result of the Resizer (960x1080-> 640x480) is shown below.

    Still come out the wrong color and the vertical black line appears in the phenomenon.

    I'm sure you do not know wrong from any part. Of you that you have someone you know about this problem, anyone wish you will reply.