Project import generated by Copybara. GitOrigin-RevId: 6fdb70c0a8da5f875482280d5ddcdd8b3bd8a2c2 Change-Id: Id3853d5b6d350181ae886bfd04474b7ed7a5896b
diff --git a/drivers/media/enhancement/amdolby_vision/amdv.c b/drivers/media/enhancement/amdolby_vision/amdv.c index 65d68c3..8744eb5 100644 --- a/drivers/media/enhancement/amdolby_vision/amdv.c +++ b/drivers/media/enhancement/amdolby_vision/amdv.c
@@ -640,6 +640,8 @@ static bool hdmi_in_allm; static bool local_allm; #define MAX_PARAM 8 + +static bool clear_amdv_ahead_pkt; bool is_aml_gxm(void) { if (dv_meson_dev.cpu_id == _CPU_MAJOR_ID_GXM) @@ -1810,12 +1812,25 @@ dv_inst[i].amdv_wait_init = false; dv_inst[i].amdv_wait_count = 0; } + clear_amdv_ahead_pkt = false; } else { amdv_wait_init = false; amdv_wait_count = 0; } } +void clear_ahead_dv_pkt(void) +{ + struct vinfo_s *vinfo = get_current_vinfo(); + + if (vinfo && vinfo->vout_device && + vinfo->vout_device->fresh_tx_vsif_pkt) { + vinfo->vout_device->fresh_tx_vsif_pkt + (0, 0, NULL, true); + clear_dolby_vision_wait(); + } +} + void set_frame_count(int val) { if (!multi_dv_mode) @@ -1845,6 +1860,7 @@ pr_info("reset dv param\n"); dolby_vision_on = false; amdv_wait_on = false; + clear_amdv_ahead_pkt = false; dolby_vision_status = BYPASS_PROCESS; amdv_target_mode = AMDV_OUTPUT_MODE_BYPASS; dolby_vision_mode = AMDV_OUTPUT_MODE_BYPASS; @@ -10879,6 +10895,7 @@ /* to distinguish play start and netflix exit*/ send_hdmi_pkt_ahead(FORMAT_DOVI, vinfo); dv_inst[dv_id].amdv_wait_count--; + clear_amdv_ahead_pkt = true; } else { /*exit netflix, still process vf after video disable,*/ /*wait init will be on, need reset wait init */ @@ -12223,6 +12240,11 @@ static int last_pri_input; bool pri_change = false; + if (!vf && get_disable_video_flag(VD1_PATH) && amdv_wait_on && + dolby_vision_policy == 1 && clear_amdv_ahead_pkt) { + clear_ahead_dv_pkt(); + } + if (vf) { if (dv_inst_valid(vf->src_fmt.dv_id)) dv_id = vf->src_fmt.dv_id;