static u32 frame_detect_receive_count;
static u32 frame_detect_drop_count;
+static u32 vpp_hold_setting_cnt;
+
#ifdef FIQ_VSYNC
#define BRIDGE_IRQ INT_TIMER_C
#define BRIDGE_IRQ_SET() WRITE_CBUS_REG(ISA_TIMERC, 1)
}
if (pip_property_changed) {
- first_picture = 1;
+ force_toggle = true;
pip_property_changed = 0;
}
if (cur_pipbuf != vf)
if (video_property_changed) {
property_changed_true = 2;
video_property_changed = 0;
- first_picture = 1;
+ force_toggle = true;
}
if (property_changed_true > 0) {
property_changed_true--;
- first_picture = 1;
+ force_toggle = true;
}
if ((debug_flag & DEBUG_FLAG_BLACKOUT)
(is_dolby_vision_on() &&
is_dolby_vision_stb_mode()), 1);
- if (iret == VppFilter_Success_and_Changed)
- video_property_changed = 1;
-
memcpy(&gPic_info[0], &vf->pic_mode,
sizeof(struct vframe_pic_mode_s));
- /* apply new vpp settings */
- frame_par_ready_to_set = 1;
+ if ((iret == VppFilter_Success_and_Changed)
+ || (iret == VppFilter_Changed_but_Hold))
+ video_property_changed = 1;
+
+ if (iret == VppFilter_Changed_but_Hold) {
+ video_notify_flag |=
+ VIDEO_NOTIFY_NEED_NO_COMP;
+ vpp_hold_setting_cnt++;
+ if (debug_flag & DEBUG_FLAG_BLACKOUT)
+ pr_info("toggle_frame vpp hold setting cnt: %d\n",
+ vpp_hold_setting_cnt);
+ } else {/* apply new vpp settings */
+ if ((next_frame_par->vscale_skip_count <= 1)
+ && (vf->type & VIDTYPE_SUPPORT_COMPRESS)) {
+ video_notify_flag |=
+ VIDEO_NOTIFY_NEED_NO_COMP;
+ if (debug_flag & DEBUG_FLAG_BLACKOUT)
+ pr_info("disable no compress mode\n");
+ }
+ vpp_hold_setting_cnt = 0;
+ frame_par_ready_to_set = 1;
+ }
if (((vf->width > 1920) && (vf->height > 1088)) ||
((vf->type & VIDTYPE_COMPRESS) &&
video_notify_flag &=
~(VIDEO_NOTIFY_PROVIDER_GET | VIDEO_NOTIFY_PROVIDER_PUT);
}
+ if (video_notify_flag & VIDEO_NOTIFY_NEED_NO_COMP) {
+ /* FIXME: can not use fixed provider name */
+ vf_notify_provider_by_name("vdin0",
+ VFRAME_EVENT_RECEIVER_NEED_NO_COMP,
+ (void *)&vpp_hold_setting_cnt);
+ video_notify_flag &= ~VIDEO_NOTIFY_NEED_NO_COMP;
+ }
#ifdef CONFIG_CLK81_DFS
check_and_set_clk81();
#endif
}
if ((vf->type & VIDTYPE_COMPRESS) &&
+ !(vf->type & VIDTYPE_NO_DW) &&
(vf->canvas0Addr != 0) &&
(!next_frame_par->nocomp)) {
if ((next_frame_par->vscale_skip_count > 1)
next_frame_par->vscale_skip_count;
}
+ if ((next_frame_par->vscale_skip_count > 1)
+ && (vf->type & VIDTYPE_COMPRESS)
+ && (vf->type & VIDTYPE_NO_DW))
+ ret = VppFilter_Changed_but_Hold;
return ret;
}
/*
}
if ((vf->type & VIDTYPE_COMPRESS) &&
+ !(vf->type & VIDTYPE_NO_DW) &&
(vf->canvas0Addr != 0) &&
(!next_frame_par->nocomp)) {
if ((next_frame_par->vscale_skip_count > 1)
next_frame_par->VPP_line_in_length_ >>= 1;
}
+ if ((next_frame_par->vscale_skip_count > 1)
+ && (vf->type & VIDTYPE_COMPRESS)
+ && (vf->type & VIDTYPE_NO_DW))
+ ret = VppFilter_Changed_but_Hold;
return ret;
}
vinfo->width, vinfo->height,
vinfo, vpp_flags, next_frame_par, vf);
+ /* bypass sr since the input w/h may be wrong */
+ if (ret == VppFilter_Changed_but_Hold)
+ bypass_sr = true;
/*config super scaler after set next_frame_par is calc ok for pps*/
if (local_input.layer_id == 0)
vpp_set_super_scaler(