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;