amlvideosink: CB2 Set a reasonable fence value [1/1]

PD#SWPL-129180

Problem:
What the fence default value should be set to?

Solution:
The value of the fence is obtained by the decoder by sending the event

Verify:
AM301

Change-Id: If058b3c43d3f03d9e90fae024dc99d74929ae4f5
Signed-off-by: hanghang.luo <hanghang.luo@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index b3c0768..1121044 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -135,8 +135,8 @@
 #define DRMBP_EXTRA_BUF_SZIE_FOR_DISPLAY 1
 #define DRMBP_LIMIT_MAX_BUFSIZE_TO_BUFSIZE 1
 #define DRMBP_UNLIMIT_MAX_BUFSIZE 0
-#define GST_AML_WAIT_FENCE 8
 #define GST_AML_WAIT_TIME  5000
+#define GST_AML_DEFAULT_FENCE_NUM 99 // disable fence_num if set 99;
 
 typedef struct _GstAmlVideoSinkWindowSet
 {
@@ -389,6 +389,7 @@
     sink->secure_mode = FALSE;
     sink->eos_detect_thread_handle = NULL;
     sink->quit_eos_detect_thread = FALSE;
+    sink->fence_num = GST_AML_DEFAULT_FENCE_NUM;
     g_mutex_init(&sink->eos_lock);
     g_cond_init(&sink->eos_cond);
 
@@ -975,11 +976,12 @@
     q_num = sink->queued;
     dq_num = sink->dequeued;
     GST_OBJECT_UNLOCK(sink);
+    GST_DEBUG_OBJECT(sink, "q_num %d , dq_num %d ,sink->fence_num %d",q_num , dq_num,sink->fence_num);
 
-    while ((q_num - dq_num > GST_AML_WAIT_FENCE) && sink->video_playing)
+    while ((q_num >= sink->fence_num + dq_num) && sink->video_playing)
     {
         g_usleep(GST_AML_WAIT_TIME);
-        GST_TRACE_OBJECT(sink, "wait fence condition update: q_num %d , dq_num %d",q_num , dq_num);
+        GST_DEBUG_OBJECT(sink, "waiting render_lib release buff......");
         GST_OBJECT_LOCK(sink);
         q_num = sink->queued;
         dq_num = sink->dequeued;
@@ -1186,6 +1188,20 @@
             sink->secure_mode = TRUE;
             GST_OBJECT_UNLOCK(sink);
         }
+
+        if (gst_event_has_name(event, "video_fence"))
+        {
+            guint fence_num;
+            GST_OBJECT_LOCK(sink);
+            GST_DEBUG_OBJECT(sink, "Got video_fence Event");
+            const GstStructure *s = gst_event_get_structure(event);
+            if (s)
+            {
+                gst_structure_get_uint(s,"fence_num",&fence_num);
+                sink->fence_num = fence_num;
+            }
+            GST_OBJECT_UNLOCK(sink);
+        }
         gst_event_unref(event);
         return result;
     }
diff --git a/src/gstamlvideosink.h b/src/gstamlvideosink.h
index bc8da5c..f4478c7 100644
--- a/src/gstamlvideosink.h
+++ b/src/gstamlvideosink.h
@@ -68,6 +68,7 @@
   gboolean video_playing;
 
   gboolean secure_mode;
+  guint fence_num;
 
   GstAmlVideoSinkPrivate *priv;
 };