Skip to content

Commit

Permalink
Merge pull request #56 from 916BGAI/main
Browse files Browse the repository at this point in the history
boost sc035gs fps to 180
  • Loading branch information
Z2Z-GuGu authored Oct 16, 2024
2 parents 75fc0b5 + 835cae0 commit e011830
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 138 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ static CVI_S32 cmos_get_ae_default(VI_PIPE ViPipe, AE_SENSOR_DEFAULT_S *pstAeSns
pstAeSnsDft->u32FullLinesStd = pstSnsState->u32FLStd;
pstAeSnsDft->u32FlickerFreq = 50 * 256;
pstAeSnsDft->u32FullLinesMax = SC035GS_FULL_LINES_MAX;
pstAeSnsDft->u32HmaxTimes = (1000000) / (pstSnsState->u32FLStd * 120);
pstAeSnsDft->u32HmaxTimes = (1000000) / (pstSnsState->u32FLStd * 240);

pstAeSnsDft->stIntTimeAccu.enAccuType = AE_ACCURACY_LINEAR;
pstAeSnsDft->stIntTimeAccu.f32Accuracy = 0.0625; /* unit = 1/16 line */
Expand All @@ -109,7 +109,7 @@ static CVI_S32 cmos_get_ae_default(VI_PIPE ViPipe, AE_SENSOR_DEFAULT_S *pstAeSns
pstAeSnsDft->u32MaxISPDgainTarget = 2 << pstAeSnsDft->u32ISPDgainShift;

if (g_au32LinesPer500ms[ViPipe] == 0)
pstAeSnsDft->u32LinesPer500ms = pstSnsState->u32FLStd * 120 / 2;
pstAeSnsDft->u32LinesPer500ms = pstSnsState->u32FLStd * 240 / 2;
else
pstAeSnsDft->u32LinesPer500ms = g_au32LinesPer500ms[ViPipe];
pstAeSnsDft->u32SnsStableFrame = 0;
Expand Down Expand Up @@ -714,7 +714,7 @@ static CVI_S32 cmos_set_image_mode(VI_PIPE ViPipe, ISP_CMOS_SENSOR_IMAGE_MODE_S
u8SensorImageMode = pstSnsState->u8ImgMode;
pstSnsState->bSyncInit = CVI_FALSE;

if (pstSensorImageMode->f32Fps <= 120) {
if (pstSensorImageMode->f32Fps <= 240) {
if (pstSnsState->enWDRMode == WDR_MODE_NONE) {
if (SC035GS_RES_IS_480P(pstSensorImageMode->u16Width, pstSensorImageMode->u16Height)) {
u8SensorImageMode = SC035GS_MODE_640X480P120;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,18 @@ static const SC035GS_MODE_S g_astSC035GS_mode[SC035GS_MODE_NUM] = {
.u32Height = 480,
},
},
.f32MaxFps = 120,
.f32MinFps = 1.25, /* 515 * 120 / 0xFFFF */
.f32MaxFps = 240,
.f32MinFps = 0.31, /* 515 * 120 / 0xFFFF */
.u32HtsDef = 1136, // 0x320c/d 036b=878 0470=1136
.u32VtsDef = 528, // 0x320e/f 02ab=683 0210=528
.u32VtsDef = 86, // 0x320e/f 02ab=683 0210=528
// .u32VtsDef = 68, // 0x320e/f 02ab=683 0210=528
// .u32VtsDef = 512, // 0x320e/f 30fps
// .u32VtsDef = 256, // 0x320e/f 60fps
// .u32VtsDef = 128, // 0x320e/f 120fps
.stExp[0] = {
.u16Min = 1,
.u16Max = 677 << 4,// (vts - 6) * 16
.u16Def = 400 << 4,
.u16Max = 80 << 4,// (vts - 6) * 16
.u16Def = 40 << 4,
.u16Step = 1,
},
.stAgain[0] = {
Expand Down Expand Up @@ -101,7 +105,7 @@ struct combo_dev_attr_s sc035gs_rx_attr = {
.mac_clk = RX_MAC_CLK_600M,
.mipi_attr = {
.raw_data_type = RAW_DATA_10BIT,
.lane_id = {4, 3, 2, -1, -1},
.lane_id = {4, 3, -1, -1, -1},
.pn_swap = {0, 0, 0, 0, 0},
.wdr_mode = CVI_MIPI_WDR_MODE_NONE,
.dphy = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,138 +208,135 @@ void sc035gs_exit(VI_PIPE ViPipe)
/* 1296P30 and 1296P25 */
static void sc035gs_linear_1296P30_init(VI_PIPE ViPipe)
{
printf("########### PinMux #######################################################################\n");
system("devmem 0x0300116C 32 0x3");
system("devmem 0x03001170 32 0x3");
system("devmem 0x03001174 32 0x3");
system("devmem 0x03001178 32 0x3");
system("devmem 0x0300117C 32 0x3");
system("devmem 0x03001180 32 0x3");
system("devmem 0x03001184 32 0x3");
system("devmem 0x03001188 32 0x3");
system("devmem 0x0300118C 32 0x5");
system("devmem 0x03001190 32 0x3");
printf("########### PinMux End #######################################################################\n");

//=============================================================================================================================================
// MTK6739 - 60FPS
sc035gs_write_register(ViPipe, 0x0103, 0x01);
// 180FPS
sc035gs_write_register(ViPipe, 0x0103, 0x01);
delay_ms(33);
sc035gs_write_register(ViPipe, 0x0100, 0x00);
sc035gs_write_register(ViPipe, 0x3000, 0x00);
sc035gs_write_register(ViPipe, 0x3001, 0x00);
sc035gs_write_register(ViPipe, 0x300f, 0x0f);
sc035gs_write_register(ViPipe, 0x3018, 0x33);
sc035gs_write_register(ViPipe, 0x3019, 0xfc);
sc035gs_write_register(ViPipe, 0x301c, 0x78);
sc035gs_write_register(ViPipe, 0x301f, 0xa2);
sc035gs_write_register(ViPipe, 0x3031, 0x0a);
sc035gs_write_register(ViPipe, 0x3037, 0x20);
sc035gs_write_register(ViPipe, 0x303f, 0x01);

// MTK6739 - 60FPS
sc035gs_write_register(ViPipe, 0x320c, 0x03); // 852
sc035gs_write_register(ViPipe, 0x320d, 0x54);
sc035gs_write_register(ViPipe, 0x320e, 0x02); // 2112
sc035gs_write_register(ViPipe, 0x320f, 0x0e);
sc035gs_write_register(ViPipe, 0x3252, 0x02);
sc035gs_write_register(ViPipe, 0x3253, 0x08);
sc035gs_write_register(ViPipe, 0x3217, 0x00);
sc035gs_write_register(ViPipe, 0x3218, 0x00);
sc035gs_write_register(ViPipe, 0x3220, 0x10);
sc035gs_write_register(ViPipe, 0x3223, 0x48);
sc035gs_write_register(ViPipe, 0x3226, 0x74);
sc035gs_write_register(ViPipe, 0x3227, 0x07);
sc035gs_write_register(ViPipe, 0x323b, 0x00);
sc035gs_write_register(ViPipe, 0x3250, 0xf0);
sc035gs_write_register(ViPipe, 0x3251, 0x02);
sc035gs_write_register(ViPipe, 0x3254, 0x02);
sc035gs_write_register(ViPipe, 0x3255, 0x07);
sc035gs_write_register(ViPipe, 0x3304, 0x48);
sc035gs_write_register(ViPipe, 0x3305, 0x00);
sc035gs_write_register(ViPipe, 0x3306, 0x60);
sc035gs_write_register(ViPipe, 0x3309, 0x50);
sc035gs_write_register(ViPipe, 0x330a, 0x00);
sc035gs_write_register(ViPipe, 0x330b, 0xc0);
sc035gs_write_register(ViPipe, 0x330c, 0x18);
sc035gs_write_register(ViPipe, 0x330f, 0x40);
sc035gs_write_register(ViPipe, 0x3310, 0x10);
sc035gs_write_register(ViPipe, 0x3314, 0x1e);
sc035gs_write_register(ViPipe, 0x3315, 0x30);
sc035gs_write_register(ViPipe, 0x3316, 0x68);
sc035gs_write_register(ViPipe, 0x3317, 0x1b);
sc035gs_write_register(ViPipe, 0x3329, 0x5c);
sc035gs_write_register(ViPipe, 0x332d, 0x5c);
sc035gs_write_register(ViPipe, 0x332f, 0x60);
sc035gs_write_register(ViPipe, 0x3335, 0x64);
sc035gs_write_register(ViPipe, 0x3344, 0x64);
sc035gs_write_register(ViPipe, 0x335b, 0x80);
sc035gs_write_register(ViPipe, 0x335f, 0x80);
sc035gs_write_register(ViPipe, 0x3366, 0x06);
sc035gs_write_register(ViPipe, 0x3385, 0x31);
sc035gs_write_register(ViPipe, 0x3387, 0x39);
sc035gs_write_register(ViPipe, 0x3389, 0x01);
sc035gs_write_register(ViPipe, 0x33b1, 0x03);
sc035gs_write_register(ViPipe, 0x33b2, 0x06);
sc035gs_write_register(ViPipe, 0x33bd, 0xe0);
sc035gs_write_register(ViPipe, 0x33bf, 0x10);
sc035gs_write_register(ViPipe, 0x3621, 0xa4);
sc035gs_write_register(ViPipe, 0x3622, 0x05);
sc035gs_write_register(ViPipe, 0x3624, 0x47);
sc035gs_write_register(ViPipe, 0x3630, 0x4a);
sc035gs_write_register(ViPipe, 0x3631, 0x58);
sc035gs_write_register(ViPipe, 0x3633, 0x52);
sc035gs_write_register(ViPipe, 0x3635, 0x03);
sc035gs_write_register(ViPipe, 0x3636, 0x25);
sc035gs_write_register(ViPipe, 0x3637, 0x8a);
sc035gs_write_register(ViPipe, 0x3638, 0x0f);
sc035gs_write_register(ViPipe, 0x3639, 0x08);
sc035gs_write_register(ViPipe, 0x363a, 0x00);
sc035gs_write_register(ViPipe, 0x363b, 0x48);
sc035gs_write_register(ViPipe, 0x363c, 0x86);
sc035gs_write_register(ViPipe, 0x363d, 0x00);
sc035gs_write_register(ViPipe, 0x363e, 0xf8);
sc035gs_write_register(ViPipe, 0x3640, 0x00);
sc035gs_write_register(ViPipe, 0x3641, 0x01);
sc035gs_write_register(ViPipe, 0x36e9, 0x80);
sc035gs_write_register(ViPipe, 0x36ea, 0x37);
sc035gs_write_register(ViPipe, 0x36eb, 0x0e);
sc035gs_write_register(ViPipe, 0x36ec, 0x1e);
sc035gs_write_register(ViPipe, 0x36ed, 0x23);
sc035gs_write_register(ViPipe, 0x36f9, 0x80);
sc035gs_write_register(ViPipe, 0x36fa, 0x37);
sc035gs_write_register(ViPipe, 0x36fb, 0x00);
sc035gs_write_register(ViPipe, 0x36fc, 0x02);
sc035gs_write_register(ViPipe, 0x36fd, 0x03);
sc035gs_write_register(ViPipe, 0x3908, 0x91);
sc035gs_write_register(ViPipe, 0x391b, 0x81);
sc035gs_write_register(ViPipe, 0x3d08, 0x01);
sc035gs_write_register(ViPipe, 0x3e01, 0x83);
sc035gs_write_register(ViPipe, 0x3e02, 0x80);
sc035gs_write_register(ViPipe, 0x3e03, 0x2b);
sc035gs_write_register(ViPipe, 0x3e06, 0x0c);
sc035gs_write_register(ViPipe, 0x3f04, 0x03);
sc035gs_write_register(ViPipe, 0x3f05, 0x34);
sc035gs_write_register(ViPipe, 0x4500, 0x59);
sc035gs_write_register(ViPipe, 0x4501, 0xc4);
sc035gs_write_register(ViPipe, 0x4603, 0x00);
sc035gs_write_register(ViPipe, 0x4800, 0x64);
sc035gs_write_register(ViPipe, 0x4809, 0x01);
sc035gs_write_register(ViPipe, 0x4810, 0x00);
sc035gs_write_register(ViPipe, 0x4811, 0x01);
sc035gs_write_register(ViPipe, 0x4837, 0x26);
sc035gs_write_register(ViPipe, 0x5011, 0x00);
sc035gs_write_register(ViPipe, 0x5988, 0x02);
sc035gs_write_register(ViPipe, 0x598e, 0x03);
sc035gs_write_register(ViPipe, 0x598f, 0x01);
sc035gs_write_register(ViPipe, 0x36e9, 0x24);
sc035gs_write_register(ViPipe, 0x36f9, 0x20);
sc035gs_write_register(ViPipe, 0x0100, 0x01);
sc035gs_write_register(ViPipe, 0x0100, 0x00);

sc035gs_write_register(ViPipe, 0x36e9, 0x80);
sc035gs_write_register(ViPipe, 0x36f9, 0x80);
sc035gs_write_register(ViPipe, 0x3000, 0x00);
sc035gs_write_register(ViPipe, 0x3001, 0x00);

sc035gs_write_register(ViPipe, 0x300f, 0x0f);
sc035gs_write_register(ViPipe, 0x3018, 0x13);

sc035gs_write_register(ViPipe, 0x3019, 0xfc);
sc035gs_write_register(ViPipe, 0x301c, 0x78);

sc035gs_write_register(ViPipe, 0x301f, 0x87);
sc035gs_write_register(ViPipe, 0x3031, 0x0a);
sc035gs_write_register(ViPipe, 0x3037, 0x20);
sc035gs_write_register(ViPipe, 0x303f, 0x01);

sc035gs_write_register(ViPipe, 0x320c, 0x03);
sc035gs_write_register(ViPipe, 0x320d, 0x6e);
sc035gs_write_register(ViPipe, 0x320e, 0x02);
sc035gs_write_register(ViPipe, 0x320f, 0x00);

sc035gs_write_register(ViPipe, 0x3217, 0x00);
sc035gs_write_register(ViPipe, 0x3218, 0x00);
sc035gs_write_register(ViPipe, 0x3220, 0x10);
sc035gs_write_register(ViPipe, 0x3223, 0x48);
sc035gs_write_register(ViPipe, 0x3226, 0x74);
sc035gs_write_register(ViPipe, 0x3227, 0x07);
sc035gs_write_register(ViPipe, 0x323b, 0x00);

sc035gs_write_register(ViPipe, 0x3250, 0xf0);
sc035gs_write_register(ViPipe, 0x3251, 0x02);
sc035gs_write_register(ViPipe, 0x3252, 0x02);
sc035gs_write_register(ViPipe, 0x3253, 0x08);
sc035gs_write_register(ViPipe, 0x3254, 0x02);
sc035gs_write_register(ViPipe, 0x3255, 0x07);

sc035gs_write_register(ViPipe, 0x3304, 0x48);
sc035gs_write_register(ViPipe, 0x3305, 0x00);
sc035gs_write_register(ViPipe, 0x3306, 0x60);
sc035gs_write_register(ViPipe, 0x3309, 0x50);
sc035gs_write_register(ViPipe, 0x330a, 0x00);
sc035gs_write_register(ViPipe, 0x330b, 0xc0);
sc035gs_write_register(ViPipe, 0x330c, 0x18);
sc035gs_write_register(ViPipe, 0x330f, 0x40);
sc035gs_write_register(ViPipe, 0x3310, 0x10);
sc035gs_write_register(ViPipe, 0x3314, 0x1e);
sc035gs_write_register(ViPipe, 0x3315, 0x30);
sc035gs_write_register(ViPipe, 0x3316, 0x68);
sc035gs_write_register(ViPipe, 0x3317, 0x1b);
sc035gs_write_register(ViPipe, 0x3329, 0x5c);
sc035gs_write_register(ViPipe, 0x332d, 0x5c);
sc035gs_write_register(ViPipe, 0x332f, 0x60);
sc035gs_write_register(ViPipe, 0x3335, 0x64);
sc035gs_write_register(ViPipe, 0x3344, 0x64);
sc035gs_write_register(ViPipe, 0x335b, 0x80);
sc035gs_write_register(ViPipe, 0x335f, 0x80);
sc035gs_write_register(ViPipe, 0x3366, 0x06);
sc035gs_write_register(ViPipe, 0x3385, 0x31);
sc035gs_write_register(ViPipe, 0x3387, 0x39);
sc035gs_write_register(ViPipe, 0x3389, 0x01);
sc035gs_write_register(ViPipe, 0x33b1, 0x03);
sc035gs_write_register(ViPipe, 0x33b2, 0x06);
sc035gs_write_register(ViPipe, 0x33bd, 0xe0);
sc035gs_write_register(ViPipe, 0x33bf, 0x10);
sc035gs_write_register(ViPipe, 0x3621, 0xa4);
sc035gs_write_register(ViPipe, 0x3622, 0x05);
sc035gs_write_register(ViPipe, 0x3624, 0x47);
sc035gs_write_register(ViPipe, 0x3630, 0x4a);
sc035gs_write_register(ViPipe, 0x3631, 0x58);
sc035gs_write_register(ViPipe, 0x3633, 0x52);
sc035gs_write_register(ViPipe, 0x3635, 0x03);
sc035gs_write_register(ViPipe, 0x3636, 0x25);
sc035gs_write_register(ViPipe, 0x3637, 0x8a);
sc035gs_write_register(ViPipe, 0x3638, 0x0f);
sc035gs_write_register(ViPipe, 0x3639, 0x08);
sc035gs_write_register(ViPipe, 0x363a, 0x00);
sc035gs_write_register(ViPipe, 0x363b, 0x48);
sc035gs_write_register(ViPipe, 0x363c, 0x86);

sc035gs_write_register(ViPipe, 0x363d, 0x10);
sc035gs_write_register(ViPipe, 0x363e, 0xf8);
sc035gs_write_register(ViPipe, 0x3640, 0x00);
sc035gs_write_register(ViPipe, 0x3641, 0x01);
sc035gs_write_register(ViPipe, 0x36ea, 0x37);
sc035gs_write_register(ViPipe, 0x36eb, 0x0e);
sc035gs_write_register(ViPipe, 0x36ec, 0x0e); //
sc035gs_write_register(ViPipe, 0x36ed, 0x23);
sc035gs_write_register(ViPipe, 0x36fa, 0x37);
sc035gs_write_register(ViPipe, 0x36fb, 0x00);
sc035gs_write_register(ViPipe, 0x36fc, 0x02);
sc035gs_write_register(ViPipe, 0x36fd, 0x03);
sc035gs_write_register(ViPipe, 0x3908, 0x91);
sc035gs_write_register(ViPipe, 0x391b, 0x81);
sc035gs_write_register(ViPipe, 0x3d08, 0x01);

sc035gs_write_register(ViPipe, 0x3e01, 0x02);
sc035gs_write_register(ViPipe, 0x3e02, 0xD2);
sc035gs_write_register(ViPipe, 0x3e03, 0x2b);
sc035gs_write_register(ViPipe, 0x3e06, 0x0c);
sc035gs_write_register(ViPipe, 0x3e08, 0x00);
sc035gs_write_register(ViPipe, 0x3e09, 0x10);
sc035gs_write_register(ViPipe, 0x3f04, 0x03);
sc035gs_write_register(ViPipe, 0x3f05, 0x34);
sc035gs_write_register(ViPipe, 0x4500, 0x59);
sc035gs_write_register(ViPipe, 0x4501, 0xc4);
sc035gs_write_register(ViPipe, 0x4603, 0x00);
sc035gs_write_register(ViPipe, 0x4800, 0x64);
sc035gs_write_register(ViPipe, 0x4809, 0x01);
sc035gs_write_register(ViPipe, 0x4810, 0x00);
sc035gs_write_register(ViPipe, 0x4811, 0x01);

sc035gs_write_register(ViPipe, 0x4837, 0x13);
sc035gs_write_register(ViPipe, 0x5011, 0x00);
sc035gs_write_register(ViPipe, 0x5988, 0x02);
sc035gs_write_register(ViPipe, 0x598e, 0x03); //
sc035gs_write_register(ViPipe, 0x598f, 0x20); //
sc035gs_write_register(ViPipe, 0x36e9, 0x24);
sc035gs_write_register(ViPipe, 0x36f9, 0x20);
sc035gs_write_register(ViPipe, 0x0100, 0x01);
delay_ms(20);
sc035gs_write_register(ViPipe, 0x4418, 0x0a);
sc035gs_write_register(ViPipe, 0x363d, 0x10);
sc035gs_write_register(ViPipe, 0x4419, 0x80);
sc035gs_write_register(ViPipe, 0x4418, 0x0a);
sc035gs_write_register(ViPipe, 0x4419, 0x80);


printf("ViPipe:%d,===SC035GS 480P 120fps 12bit LINE Init OK!===\n", ViPipe);
printf("ViPipe:%d,===SC035GS 480P 180fps 10bit LINE Init OK!===\n", ViPipe);
}

0 comments on commit e011830

Please sign in to comment.