video: rockchip: vehicle support drop vop show frames

sample usage:
cif_sensor: cif_sensor {
    nvp6324 {
        ...
        drop_frames = <4>; //frames to drop
        ...
    };
};

Signed-off-by: Wang Panzhenzhuan <randy.wang@rock-chips.com>
Change-Id: I7c7ad473471e2b90ab32600a3d7a31511870307d
This commit is contained in:
Wang Panzhenzhuan
2023-07-12 08:19:26 +00:00
committed by Tao Huang
parent 5d2e8c3cf9
commit a365675d53
5 changed files with 17 additions and 0 deletions

View File

@@ -63,6 +63,7 @@ struct vehicle_ad_dev {
u32 channel_reso[PAD_MAX];
u8 detect_status;
u8 last_detect_status;
int drop_frames;
};
int vehicle_generic_sensor_write(struct vehicle_ad_dev *ad, char reg, char *pval);

View File

@@ -1950,6 +1950,7 @@ int nvp6324_ad_get_cfg(struct vehicle_cfg **cfg)
}
nvp6324_g_addev->cfg.ad_ready = true;
nvp6324_g_addev->cfg.drop_frames = nvp6324_g_addev->drop_frames;
*cfg = &nvp6324_g_addev->cfg;

View File

@@ -139,6 +139,7 @@ struct vehicle_cfg {
/*0:no, 1:90; 2:180; 4:270; 0x10:mirror-y; 0x20:mirror-x*/
int rotate_mirror;
struct rkmodule_csi_dphy_param *dphy_param;
int drop_frames;
};
#endif

View File

@@ -1076,6 +1076,7 @@ static void rk_drm_vehicle_commit(struct flinger *flinger, struct graphic_buffer
rockchip_drm_direct_show_commit(flinger->drm_dev, &commit_info);
}
static int drop_frames_number;
static int rk_flinger_vop_show(struct flinger *flinger,
struct graphic_buffer *buffer)
{
@@ -1084,6 +1085,12 @@ static int rk_flinger_vop_show(struct flinger *flinger,
VEHICLE_DG("flinger vop show buffer wxh(%zux%zu)\n",
buffer->src.w, buffer->src.h);
if (drop_frames_number > 0) {
VEHICLE_INFO("%s discard the frame num(%d)!\n", __func__, drop_frames_number);
drop_frames_number--;
return 0;
}
if (!flinger->running)
return 0;
@@ -1444,6 +1451,7 @@ int vehicle_flinger_reverse_open(struct vehicle_cfg *v_cfg,
flg->cvbs_field_count = 0;
memcpy(&flg->v_cfg, v_cfg, sizeof(struct vehicle_cfg));
flg->running = true;
drop_frames_number = v_cfg->drop_frames;
return 0;
}

View File

@@ -285,6 +285,12 @@ int vehicle_parse_sensor(struct vehicle_ad_dev *ad)
if (of_property_read_u32(cp, "mclk_rate", &ad->mclk_rate))
VEHICLE_DGERR("Get %s mclk_rate failed!\n", cp->name);
if (of_property_read_u32(cp, "drop_frames",
&ad->drop_frames)) {
VEHICLE_DGERR("%s:Get sensor, drop-frames failed!\n", __func__);
ad->drop_frames = 0; //default drop frames;
}
if (of_property_read_u32(cp, "rst_active", &ad->rst_active))
VEHICLE_DGERR("Get %s rst_active failed!", cp->name);