vpp: used pre frame when frc phase0 and input size changed [2/2]

PD#SWPL-252854

Problem:
used pre frame when frc phase0 and input size changed

Solution:
used pre frame when frc phase0 and input size changed

Verify:
t6x

Change-Id: I834fe123a22d589741f2e50bb15883c387bfb35d
Signed-off-by: Pengcheng Chen <pengcheng.chen@amlogic.com>
This commit is contained in:
Pengcheng Chen
2025-12-15 08:34:48 +00:00
committed by gerrit autosubmit
parent 8a3099e126
commit 4fbf58c98e
5 changed files with 249 additions and 88 deletions
+34 -22
View File
@@ -1420,16 +1420,19 @@ void set_video_zorder_ext(int layer_index, int zorder)
void get_video_input_info(struct video_input_info *input_info)
{
if (!cur_frame_par[0])
struct vpp_frame_par_s *cur_frame_par;
cur_frame_par = get_cur_frame_par(&vd_layer[0]);
if (!cur_frame_par)
return;
input_info->height = cur_frame_par[0]->video_input_h;
input_info->width = cur_frame_par[0]->video_input_w;
input_info->crop_top = cur_frame_par[0]->crop_top;
input_info->crop_bottom = cur_frame_par[0]->crop_bottom;
input_info->crop_left = cur_frame_par[0]->crop_left;
input_info->crop_right = cur_frame_par[0]->crop_right;
input_info->vscale_skip_count = cur_frame_par[0]->vscale_skip_count;
input_info->hscale_skip_count = cur_frame_par[0]->hscale_skip_count;
input_info->height = cur_frame_par->video_input_h;
input_info->width = cur_frame_par->video_input_w;
input_info->crop_top = cur_frame_par->crop_top;
input_info->crop_bottom = cur_frame_par->crop_bottom;
input_info->crop_left = cur_frame_par->crop_left;
input_info->crop_right = cur_frame_par->crop_right;
input_info->vscale_skip_count = cur_frame_par->vscale_skip_count;
input_info->hscale_skip_count = cur_frame_par->hscale_skip_count;
}
bool is_crop_from_vf(struct vframe_s *vf)
@@ -1827,7 +1830,8 @@ s32 primary_render_frame(struct video_layer_s *layer,
force_setting = true;
glayer_info[layer->layer_id].fgrain_force_update = false;
}
frame_par = layer->cur_frame_par;
//frame_par = layer->cur_frame_par;
frame_par = get_cur_frame_par(layer);
if (layer->switch_vf && layer->vf_ext)
dispbuf = layer->vf_ext;
else
@@ -3261,14 +3265,17 @@ static int amvideo_early_proc(u8 layer_id)
hdmi_in_delay_maxmin_old(vf);
#if defined(CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_VECM)
if (cur_frame_par[0] &&
struct vpp_frame_par_s *cur_frame_par = NULL;
cur_frame_par = get_cur_frame_par(&vd_layer[0]);
if (cur_frame_par &&
(vd1_path_id == VFM_PATH_AMVIDEO ||
vd1_path_id == VFM_PATH_DEF)) {
/*need call every vsync*/
if (vf_tmp)
frame_lock_process(vf_tmp, cur_frame_par[0], line);
frame_lock_process(vf_tmp, cur_frame_par, line);
else
frame_lock_process(NULL, cur_frame_par[0], line);
frame_lock_process(NULL, cur_frame_par, line);
}
#endif
@@ -3722,6 +3729,7 @@ static struct vframe_s *do_renderx_toggle_frame
#if defined(CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_VECM)
u16 line = glayer_info[0].layer_top;
#endif
struct vpp_frame_par_s *cur_frame_par = NULL;
/* video_render.x toggle frame */
if (gvideo_recv[path_index]) {
@@ -3740,18 +3748,19 @@ static struct vframe_s *do_renderx_toggle_frame
if (tvin_vf_is_keeped(gvideo_recv[0]->cur_buf))
new_frame_count = 0;
}
cur_frame_par = get_cur_frame_par(&vd_layer[0]);
#if defined(CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_VECM)
if (vd_path_id[0] == VFM_PATH_VIDEO_RENDER0 &&
cur_frame_par[0]) {
cur_frame_par) {
/*need call every vsync*/
if (path_new_frame)
frame_lock_process(path_new_frame,
cur_frame_par[0], line);
cur_frame_par, line);
else if (vd_layer[0].dispbuf)
frame_lock_process(vd_layer[0].dispbuf,
cur_frame_par[0], line);
cur_frame_par, line);
else
frame_lock_process(NULL, cur_frame_par[0], line);
frame_lock_process(NULL, cur_frame_par, line);
}
#endif
}
@@ -6260,12 +6269,15 @@ LATE_PROC:
int get_current_frame_para(int *top, int *left, int *bottom, int *right)
{
if (!cur_frame_par[0])
struct vpp_frame_par_s *cur_frame_par;
cur_frame_par = get_cur_frame_par(&vd_layer[0]);
if (!cur_frame_par)
return -1;
*top = cur_frame_par[0]->VPP_vd_start_lines_;
*left = cur_frame_par[0]->VPP_hd_start_lines_;
*bottom = cur_frame_par[0]->VPP_vd_end_lines_;
*right = cur_frame_par[0]->VPP_hd_end_lines_;
*top = cur_frame_par->VPP_vd_start_lines_;
*left = cur_frame_par->VPP_hd_start_lines_;
*bottom = cur_frame_par->VPP_vd_end_lines_;
*right = cur_frame_par->VPP_hd_end_lines_;
return 0;
}
+30 -16
View File
@@ -8517,7 +8517,8 @@ void config_dvel_position(struct video_layer_s *layer,
return;
bl_vf = layer->dispbuf;
cur_frame_par = layer->cur_frame_par;
//cur_frame_par = layer->cur_frame_par;
cur_frame_par = get_cur_frame_par(layer);
setting->id = 1;
setting->p_vd_mif_reg = &vd_layer[1].vd_mif_reg;
@@ -8600,7 +8601,7 @@ void config_dvel_position(struct video_layer_s *layer,
}
if ((bl_vf->type & VIDTYPE_COMPRESS) &&
!layer->cur_frame_par->nocomp)
!cur_frame_par->nocomp)
setting->skip_afbc = false;
else
setting->skip_afbc = true;
@@ -8650,7 +8651,8 @@ s32 config_dvel_pps(struct video_layer_s *layer,
setting->support =
glayer_info[1].pps_support;
setting->frame_par = layer->cur_frame_par;
//setting->frame_par = layer->cur_frame_par;
setting->frame_par = get_cur_frame_par(layer);
setting->id = 1;
setting->misc_reg_offt = vd_layer[1].misc_reg_offt;
@@ -8673,7 +8675,8 @@ s32 config_dvel_blend(struct video_layer_s *layer,
if (!layer || !layer->cur_frame_par || !setting)
return -1;
setting->frame_par = layer->cur_frame_par;
//setting->frame_par = layer->cur_frame_par;
setting->frame_par = get_cur_frame_par(layer);
setting->id = 1;
setting->misc_reg_offt = vd_layer[1].misc_reg_offt;
setting->layer_alpha = layer->layer_alpha;
@@ -8715,7 +8718,8 @@ static void get_3d_horz_pos(struct video_layer_s *layer,
if (!vf || !layer->cur_frame_par)
return;
cur_frame_par = layer->cur_frame_par;
//cur_frame_par = layer->cur_frame_par;
cur_frame_par = get_cur_frame_par(layer);
vpp_3d_mode = cur_frame_par->vpp_3d_mode;
crop_sx = info->crop_left;
crop_ex = info->crop_right;
@@ -8777,7 +8781,8 @@ static void get_3d_vert_pos(struct video_layer_s *layer,
if (!vf || !layer->cur_frame_par)
return;
cur_frame_par = layer->cur_frame_par;
//cur_frame_par = layer->cur_frame_par;
cur_frame_par = get_cur_frame_par(layer);
vpp_3d_mode = cur_frame_par->vpp_3d_mode;
crop_sy = info->crop_top;
crop_ey = info->crop_bottom;
@@ -8973,7 +8978,8 @@ s32 config_3d_vd2_blend(struct video_layer_s *layer,
memcpy(setting, &layer->bld_setting, sizeof(struct blend_setting_s));
setting->id = 1;
cur_frame_par = layer->cur_frame_par;
//cur_frame_par = layer->cur_frame_par;
cur_frame_par = get_cur_frame_par(layer);
x_lines = layer->end_x_lines /
(cur_frame_par->hscale_skip_count + 1);
y_lines = layer->end_y_lines /
@@ -9066,7 +9072,8 @@ void switch_3d_view_per_vsync(struct video_layer_s *layer)
src_end_y_lines -= 1;
misc_off = layer->misc_reg_offt;
cur_frame_par = layer->cur_frame_par;
//cur_frame_par = layer->cur_frame_par;
cur_frame_par = get_cur_frame_par(layer);
if (FA_enable && toggle_3d_fa_frame == OUT_FA_A_FRAME) {
if (get_cpu_type() < MESON_CPU_MAJOR_ID_SC2 &&
cur_dev->display_module == OLD_DISPLAY_MODULE) {
@@ -9274,10 +9281,13 @@ s32 config_vd_position_internal(struct video_layer_s *layer,
u32 blank;
u32 start_x_lines, end_x_lines, start_y_lines, end_y_lines;
int h_chrm_ratio = 1, v_chrm_ratio = 1;
struct vpp_frame_par_s *cur_frame_par;
if (!layer || !layer->cur_frame_par || !layer->dispbuf || !setting)
return -1;
cur_frame_par = get_cur_frame_par(layer);
if (layer->switch_vf && layer->vf_ext)
dispbuf = layer->vf_ext;
else
@@ -9352,8 +9362,8 @@ s32 config_vd_position_internal(struct video_layer_s *layer,
setting->end_x_lines = end_x_lines;
setting->start_y_lines = start_y_lines;
setting->end_y_lines = end_y_lines;
setting->h_skip = layer->cur_frame_par->hscale_skip_count;
setting->v_skip = layer->cur_frame_par->vscale_skip_count;
setting->h_skip = cur_frame_par->hscale_skip_count;
setting->v_skip = cur_frame_par->vscale_skip_count;
/* afbc is nv12 as default */
setting->hc_skip = 2;
setting->vc_skip = 2;
@@ -9369,7 +9379,7 @@ s32 config_vd_position_internal(struct video_layer_s *layer,
}
if ((dispbuf->type & VIDTYPE_COMPRESS) &&
!layer->cur_frame_par->nocomp)
!cur_frame_par->nocomp)
setting->skip_afbc = false;
else
setting->skip_afbc = true;
@@ -9442,7 +9452,7 @@ s32 config_vd_position_internal(struct video_layer_s *layer,
}
#endif
setting->vpp_3d_mode =
layer->cur_frame_par->vpp_3d_mode;
cur_frame_par->vpp_3d_mode;
return 0;
}
@@ -9452,7 +9462,8 @@ static void config_vd_param_internal(struct video_layer_s *layer,
u32 zoom_start_y, zoom_end_y, blank = 0;
struct vpp_frame_par_s *frame_par = NULL;
frame_par = layer->cur_frame_par;
//frame_par = layer->cur_frame_par;
frame_par = get_cur_frame_par(layer);
/* progressive or decode interlace case height 1:1 */
/* vdin afbc and interlace case height 1:1 */
@@ -9540,7 +9551,8 @@ s32 config_vd_pps_internal(struct video_layer_s *layer,
} else {
setting->vsr_safa_support = glayer_info[layer->layer_id].vsr_safa_support;
}
cur_frame_par = layer->cur_frame_par;
//cur_frame_par = layer->cur_frame_par;
cur_frame_par = get_cur_frame_par(layer);
vpp_filter = &cur_frame_par->vpp_filter;
setting->frame_par = cur_frame_par;
setting->id = layer->layer_id;
@@ -9733,7 +9745,8 @@ s32 config_vd_blend_mosaic(struct video_layer_s *layer,
struct video_layer_s *virtual_layer;
/* t6x mosaic hardware path: pps->preblend->postblend */
cur_frame_par = layer->cur_frame_par;
//cur_frame_par = layer->cur_frame_par;
cur_frame_par = get_cur_frame_par(layer);
setting->frame_par = cur_frame_par;
setting->id = layer->layer_id;
setting->misc_reg_offt = layer->misc_reg_offt;
@@ -9788,7 +9801,8 @@ s32 config_vd_blend(struct video_layer_s *layer,
dispbuf = layer->vf_ext;
else
dispbuf = layer->dispbuf;
cur_frame_par = layer->cur_frame_par;
//cur_frame_par = layer->cur_frame_par;
cur_frame_par = get_cur_frame_par(layer);
setting->frame_par = cur_frame_par;
setting->id = layer->layer_id;
setting->misc_reg_offt = layer->misc_reg_offt;
+1
View File
@@ -1404,6 +1404,7 @@ void update_vd_amvecm_info(struct video_layer_s *layer);
int VSYNC_WR_VIDEO_TABLE_REG_BITS(u32 adr, u32 val, u32 start, u32 len);
int PRE_VSYNC_WR_VIDEO_TABLE_REG_BITS(u32 adr, u32 val, u32 start, u32 len);
struct vpp_frame_par_s *get_cur_frame_par(struct video_layer_s *layer);
#ifndef CONFIG_AMLOGIC_MEDIA_FRAME_SYNC
enum avevent_e {
+163 -50
View File
@@ -41,7 +41,7 @@
#include <linux/amlogic/media/frc/frc_common.h>
#endif
#include "../common/uvm_process/meson_uvm_nn_processor.h"
#include <linux/amlogic/media/dpss/dpss_frc.h>
#include <linux/amlogic/media/frame_provider/tvin/tvin.h>
#include "video_priv.h"
#include "vpp_pq.h"
@@ -2001,6 +2001,24 @@ static void format_support_adjust(struct video_layer_s *layer,
next_frame_par->hscale_skip_count);
}
static struct vpp_frame_par_save_s frame_par_save;
struct vpp_frame_par_s *get_cur_frame_par(struct video_layer_s *layer)
{
#ifdef ENABLE_DPSS_FRC
if (cur_dev->display_module == T6W_DISPLAY_MODULE &&
layer->layer_id == 0 &&
is_frc_link_on(layer) &&
!mc_phase0_ready() &&
frame_par_save.used_saved_parm)
return &frame_par_save.frame_par;
else
return layer->cur_frame_par;
#else
return layer->cur_frame_par;
#endif
}
static int vpp_set_filters_internal
(struct disp_info_s *input,
struct ar_frac_s *ext_ar,
@@ -2010,7 +2028,7 @@ static int vpp_set_filters_internal
u32 hei_out,
const struct vinfo_s *vinfo,
u32 vpp_flags,
struct vpp_frame_par_s *next_frame_par, struct vframe_s *vf)
struct vpp_frame_par_s *next_frame_par, struct vframe_s *vf, bool used_pre_pam)
{
u32 screen_width = 0, screen_height = 0;
s32 start, end;
@@ -2155,58 +2173,65 @@ static int vpp_set_filters_internal
video_source_crop_top = 0;
video_source_crop_bottom = 0;
} else {
video_source_crop_left = input->crop_left;
video_source_crop_right = input->crop_right;
video_source_crop_top = input->crop_top;
video_source_crop_bottom = input->crop_bottom;
if (used_pre_pam) {
video_source_crop_top = frame_par_save.video_source_crop_top_pre;
video_source_crop_left = frame_par_save.video_source_crop_left_pre;
video_source_crop_bottom = frame_par_save.video_source_crop_bottom_pre;
video_source_crop_right = frame_par_save.video_source_crop_right_pre;
} else {
video_source_crop_left = input->crop_left;
video_source_crop_right = input->crop_right;
video_source_crop_top = input->crop_top;
video_source_crop_bottom = input->crop_bottom;
if (video_source_crop_left < 0)
video_source_crop_left = 0;
if (video_source_crop_right < 0)
video_source_crop_right = 0;
if (video_source_crop_top < 0)
video_source_crop_top = 0;
if (video_source_crop_bottom < 0)
video_source_crop_bottom = 0;
if (video_source_crop_left < 0)
video_source_crop_left = 0;
if (video_source_crop_right < 0)
video_source_crop_right = 0;
if (video_source_crop_top < 0)
video_source_crop_top = 0;
if (video_source_crop_bottom < 0)
video_source_crop_bottom = 0;
/* AFD calculation will apply all crop parameters */
/* Only apply other crop parameters under non-AFD case */
/* apply src crop and user crop together */
if (!(vpp_flags & VPP_FLAG_FORCE_NO_SRC_CROP)) {
s32 src_crop_top = 0, src_crop_left = 0;
s32 src_crop_right = 0, src_crop_bottom = 0;
/* AFD calculation will apply all crop parameters */
/* Only apply other crop parameters under non-AFD case */
/* apply src crop and user crop together */
if (!(vpp_flags & VPP_FLAG_FORCE_NO_SRC_CROP)) {
s32 src_crop_top = 0, src_crop_left = 0;
s32 src_crop_right = 0, src_crop_bottom = 0;
if (is_src_crop_valid(input->src_crop)) {
if (cur_super_debug)
pr_info("%s:vf src crop(%d/%d/%d/%d)\n", __func__,
vf->src_crop.top, vf->src_crop.left,
vf->src_crop.bottom, vf->src_crop.right);
if (vf->type & VIDTYPE_COMPRESS) {
src_crop_top = vf->src_crop.top;
src_crop_left = vf->src_crop.left;
src_crop_bottom = vf->src_crop.bottom;
src_crop_right = vf->src_crop.right;
} else {
src_crop_top = vf->src_crop.top;
src_crop_left = vf->src_crop.left;
if (is_src_crop_valid(input->src_crop)) {
if (cur_super_debug)
pr_info("vf src crop(%d/%d/%d/%d)\n",
vf->src_crop.top, vf->src_crop.left,
vf->src_crop.bottom, vf->src_crop.right);
if (vf->type & VIDTYPE_COMPRESS) {
src_crop_top = vf->src_crop.top;
src_crop_left = vf->src_crop.left;
src_crop_bottom = vf->src_crop.bottom;
src_crop_right = vf->src_crop.right;
} else {
src_crop_top = vf->src_crop.top;
src_crop_left = vf->src_crop.left;
}
}
video_source_crop_top += src_crop_top;
video_source_crop_left += src_crop_left;
video_source_crop_bottom += src_crop_bottom;
video_source_crop_right += src_crop_right;
}
if (nr_pps_h_scaler_rate) {
video_source_crop_left =
video_source_crop_left * (nr_pps_h_scaler_rate + 1);
video_source_crop_right =
video_source_crop_right * (nr_pps_h_scaler_rate + 1);
}
if (nr_pps_v_scaler_rate) {
video_source_crop_top =
video_source_crop_top * (nr_pps_v_scaler_rate + 1);
video_source_crop_bottom =
video_source_crop_bottom * (nr_pps_v_scaler_rate + 1);
}
video_source_crop_top += src_crop_top;
video_source_crop_left += src_crop_left;
video_source_crop_bottom += src_crop_bottom;
video_source_crop_right += src_crop_right;
}
if (nr_pps_h_scaler_rate) {
video_source_crop_left =
video_source_crop_left * (nr_pps_h_scaler_rate + 1);
video_source_crop_right =
video_source_crop_right * (nr_pps_h_scaler_rate + 1);
}
if (nr_pps_v_scaler_rate) {
video_source_crop_top =
video_source_crop_top * (nr_pps_v_scaler_rate + 1);
video_source_crop_bottom =
video_source_crop_bottom * (nr_pps_v_scaler_rate + 1);
}
if (cur_super_debug)
pr_info("%s:line=%d, video_source_crop(%d/%d/%d/%d)\n",
@@ -4066,6 +4091,94 @@ RESTART:
pr_info("layer%d: frc,switch the display to vf_ext %p->%p\n",
input->layer_id, vf, vf->vf_ext);
}
#ifdef ENABLE_DPSS_FRC
if (!used_pre_pam && cur_dev->display_module == T6W_DISPLAY_MODULE &&
input->layer_id == 0 &&
frame_par_save.used_saved_parm) {
frame_par_save.used_saved_parm = false;
if (cur_super_debug)
pr_info("clear frame_par_save.used_saved_parm=%d\n",
frame_par_save.used_saved_parm);
}
if (!used_pre_pam && cur_dev->display_module == T6W_DISPLAY_MODULE &&
input->layer_id == 0) {
if (is_frc_link_on(&vd_layer[input->layer_id]) &&
!mc_phase0_ready() &&
(frame_par_save.VPP_hd_start_lines_save !=
next_frame_par->VPP_hd_start_lines_ ||
frame_par_save.VPP_hd_end_lines_save !=
next_frame_par->VPP_hd_end_lines_ ||
frame_par_save.VPP_vd_start_lines_save !=
next_frame_par->VPP_vd_start_lines_ ||
frame_par_save.VPP_vd_end_lines_save !=
next_frame_par->VPP_vd_end_lines_)) {
if (cur_super_debug)
pr_info("used pre frame input info:pre %d,%d,%d,%d, cur:%d,%d,%d,%d, output pre:%d,%d,%d,%d, cur:%d,%d,%d,%d\n",
frame_par_save.VPP_hd_start_lines_save,
frame_par_save.VPP_hd_end_lines_save,
frame_par_save.VPP_vd_start_lines_save,
frame_par_save.VPP_vd_end_lines_save,
next_frame_par->VPP_hd_start_lines_,
next_frame_par->VPP_hd_end_lines_,
next_frame_par->VPP_vd_start_lines_,
next_frame_par->VPP_vd_end_lines_,
frame_par_save.VPP_hsc_startp_save,
frame_par_save.VPP_hsc_endp_save,
frame_par_save.VPP_vsc_startp_save,
frame_par_save.VPP_vsc_endp_save,
next_frame_par->VPP_hsc_startp,
next_frame_par->VPP_hsc_endp,
next_frame_par->VPP_vsc_startp,
next_frame_par->VPP_vsc_endp);
//if output changed, bypass frc
if (frame_par_save.VPP_hsc_startp_save !=
next_frame_par->VPP_hsc_startp ||
frame_par_save.VPP_hsc_endp_save !=
next_frame_par->VPP_hsc_endp ||
frame_par_save.VPP_vsc_startp_save !=
next_frame_par->VPP_vsc_startp ||
frame_par_save.VPP_vsc_endp_save !=
next_frame_par->VPP_vsc_endp) {
vd_layer[input->layer_id].frc_link_bypass_check = true;
} else {
memset(&frame_par_save.frame_par, 0,
sizeof(struct vpp_frame_par_s));
frame_par_save.used_saved_parm = true;
//used pre video_source_crop
vpp_set_filters_internal(input, ext_ar,
frame_par_save.width_in_pre,
frame_par_save.height_in_pre,
wid_out, hei_out, vinfo, vpp_flags,
&frame_par_save.frame_par, vf, true);
}
//force update for next frame
vd_layer[input->layer_id].property_changed = true;
}
//save current
frame_par_save.VPP_hd_start_lines_save =
next_frame_par->VPP_hd_start_lines_;
frame_par_save.VPP_hd_end_lines_save =
next_frame_par->VPP_hd_end_lines_;
frame_par_save.VPP_vd_start_lines_save =
next_frame_par->VPP_vd_start_lines_;
frame_par_save.VPP_vd_end_lines_save =
next_frame_par->VPP_vd_end_lines_;
frame_par_save.video_source_crop_left_pre = video_source_crop_left;
frame_par_save.video_source_crop_right_pre = video_source_crop_right;
frame_par_save.video_source_crop_top_pre = video_source_crop_top;
frame_par_save.video_source_crop_bottom_pre = video_source_crop_bottom;
frame_par_save.width_in_pre = width_in;
frame_par_save.height_in_pre = height_in;
frame_par_save.VPP_hsc_startp_save = next_frame_par->VPP_hsc_startp;
frame_par_save.VPP_hsc_endp_save = next_frame_par->VPP_hsc_endp;
frame_par_save.VPP_vsc_startp_save = next_frame_par->VPP_vsc_startp;
frame_par_save.VPP_vsc_endp_save = next_frame_par->VPP_vsc_endp;
}
#endif
return ret;
}
@@ -6794,7 +6907,7 @@ RERTY:
(&local_input, &dst_ar,
src_width, src_height,
dst_width, dst_height,
vinfo, vpp_flags, next_frame_par, vf);
vinfo, vpp_flags, next_frame_par, vf, false);
} else {
if (get_pi_enabled(input->layer_id)) {
dst_width = vinfo->width >> 1;
@@ -206,6 +206,27 @@ struct vpp_frame_par_s {
u32 frc_v_size;
};
struct vpp_frame_par_save_s {
struct vpp_frame_par_s frame_par;
bool used_saved_parm;
u32 width_in_pre;
u32 height_in_pre;
u32 video_source_crop_left_pre;
u32 video_source_crop_right_pre;
u32 video_source_crop_top_pre;
u32 video_source_crop_bottom_pre;
u32 VPP_hd_start_lines_save;
u32 VPP_hd_end_lines_save;
u32 VPP_vd_start_lines_save;
u32 VPP_vd_end_lines_save;
u32 VPP_hsc_startp_save;
u32 VPP_hsc_endp_save;
u32 VPP_vsc_startp_save;
u32 VPP_vsc_endp_save;
};
struct disp_info_s {
u8 layer_id;
u8 layer_support;