amlvideosink: send preroll buf only once [1/1]

PD#SWPL-59183

Problem:
send preroll buf to render lib twice

Solution:
send preroll buf only once

Verify:
send preroll buf only once

Change-Id: Ifdb358def8022b5680a41eb7a3587fadafdd2fcf
Signed-off-by: xuesong.jiang <xuesong.jiang@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index b60f0d2..9e92d31 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -60,12 +60,13 @@
 #define RENDER_DEVICE_NAME "wayland"
 #define USE_DMABUF TRUE
 
-#define DRMBP_EXTRA_BUF_SZIE_FOR_DISPLAY      6
+#define DRMBP_EXTRA_BUF_SZIE_FOR_DISPLAY      10
 #define DRMBP_LIMIT_MAX_BUFSIZE_TO_BUFSIZE    1
 #define DRMBP_UNLIMIT_MAX_BUFSIZE             0
 
 struct _GstAmlVideoSinkPrivate
 {
+    GstBuffer *preroll_buffer;
     gchar *render_device_name;
     void *render_device_handle;
     GstVideoInfo video_info;
@@ -411,7 +412,7 @@
     RenderBuffer *tunnel_lib_buf_wrap = NULL;
 
     GST_OBJECT_LOCK(vsink);
-    GST_LOG_OBJECT(sink, "revice buffer:%p, from pool:%p", buffer, buffer->pool);
+    GST_LOG_OBJECT(sink, "revice buffer:%p, from pool:%p, need_preroll:%d", buffer, buffer->pool, ((GstBaseSink *)sink)->need_preroll);
 
     if (!sink_priv->render_device_handle)
     {
@@ -419,6 +420,18 @@
         goto error;
     }
 
+    if (sink_priv->preroll_buffer && sink_priv->preroll_buffer == buffer)
+    {
+        GST_LOG_OBJECT(sink, "get preroll buffer:%p 2nd time, goto done", buffer);
+        sink_priv->preroll_buffer = NULL;
+        goto done;
+    }
+    if (G_UNLIKELY(((GstBaseSink *)sink)->need_preroll))
+    {
+        GST_LOG_OBJECT(sink, "get preroll buffer 1st time, buf:%p", buffer);
+        sink_priv->preroll_buffer = buffer;
+    }
+
     // TODO should call tunnel lib flush func
     if (sink_priv->is_flushing)
     {