mirror of
https://github.com/hardkernel/kernel_common_drivers.git
synced 2026-06-25 12:03:48 +09:00
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:
committed by
gerrit autosubmit
parent
8a3099e126
commit
4fbf58c98e
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user