amlvideosink: CF2 control showing first video feature [1/1]

PD#SWPL-148092

Problem:
add property to control mediasync showing first video frame

Solution:
add property to control mediasync showing first video frame

Verify:
ah212

Change-Id: I2bc80da1c069fae28723daf0f1432bd5f40da604
Signed-off-by: fei.deng <fei.deng@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index b51dfe5..2a14b3d 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -104,6 +104,7 @@
     PROP_WINDOW_SET,
     PROP_RES_USAGE,
     PROP_DISPLAY_OUTPUT,
+    PROP_SHOW_FIRST_FRAME_ASAP,
 #if GST_IMPORT_LGE_PROP
     PROP_LGE_RESOURCE_INFO,
     PROP_LGE_CURRENT_PTS,
@@ -180,6 +181,7 @@
     /* property params */
     gboolean fullscreen;
     gboolean mute;
+    gboolean show_first_frame_asap;
 
 #if GST_IMPORT_LGE_PROP
     GstAmlVideoSinkLgeCtxt lge_ctxt;
@@ -317,6 +319,12 @@
                          "display output index, 0 is primary output and default value; 1 is extend display output",
                          G_MININT, G_MAXINT, 0, G_PARAM_READWRITE));
 
+    g_object_class_install_property(
+        G_OBJECT_CLASS(klass), PROP_SHOW_FIRST_FRAME_ASAP,
+        g_param_spec_boolean("show-first-frame-asap", "show first video frame asap",
+                             "Whether showing first video frame asap, default is disable",
+                             FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
     g_signals[SIGNAL_FIRSTFRAME]= g_signal_new( "first-video-frame-callback",
                                                G_TYPE_FROM_CLASS(GST_ELEMENT_CLASS(klass)),
                                                (GSignalFlags) (G_SIGNAL_RUN_LAST),
@@ -589,6 +597,12 @@
         GST_OBJECT_UNLOCK(sink);
         break;
     }
+    case PROP_SHOW_FIRST_FRAME_ASAP:
+    {
+        sink_priv->show_first_frame_asap = g_value_get_boolean(value);
+        GST_DEBUG_OBJECT(sink, "set show first frame asap %d",sink_priv->show_first_frame_asap);
+        break;
+    }
 #if GST_IMPORT_LGE_PROP
     case PROP_LGE_RESOURCE_INFO:
     {
@@ -701,6 +715,9 @@
     {
     case GST_STATE_CHANGE_NULL_TO_READY:
     {
+        if (!sink_priv->show_first_frame_asap) {
+            setenv("vendor_mediasync_show_firstframe_nosync", "0", 0);
+        }
         sink_priv->render_device_handle = render_open();
         if (sink_priv->render_device_handle == NULL)
         {
@@ -717,6 +734,11 @@
             GST_ERROR_OBJECT(sink, "tunnel lib: set pip error");
             goto error;
         }
+        //check if showing first frame no sync
+        if (sink_priv->show_first_frame_asap) {
+            int show_frame_asap = 1;
+            render_set_value(sink_priv->render_device_handle, KEY_SHOW_FRIST_FRAME_NOSYNC, &show_frame_asap);
+        }
 
         GST_DEBUG_OBJECT(sink, "set qos fail");
         gst_base_sink_set_qos_enabled((GstBaseSink *)sink, FALSE);
@@ -1370,6 +1392,7 @@
     memset(sink_priv, 0, sizeof(GstAmlVideoSinkPrivate));
     sink_priv->use_dmabuf = USE_DMABUF;
     sink_priv->mediasync_instanceid = -1;
+    sink_priv->show_first_frame_asap = FALSE;
 }
 
 static void gst_render_msg_callback(void *userData, RenderMsgType type, void *msg)