gstamlvideosink: CB1 add keepLastFrameOnFlush property [1/3]

PD#SWPL-158207

Problem:
add property to set keep last frame when flush.
default is keep last frame,if set to 0,westeros will
clean last frame when flush

Solution:
add property for keep last frame on flush

Verify:
AH212

Signed-off-by: le.han <le.han@amlogic.com>
Change-Id: I94445515136d4a2fd7611f0cc4547a1573b35da3
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index 99e87f9..fca9e99 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -105,6 +105,7 @@
     PROP_RES_USAGE,
     PROP_DISPLAY_OUTPUT,
     PROP_SHOW_FIRST_FRAME_ASAP,
+    PROP_KEEP_LAST_FRAME_ON_FLUSH,
 #if GST_IMPORT_LGE_PROP
     PROP_LGE_RESOURCE_INFO,
     PROP_LGE_CURRENT_PTS,
@@ -290,6 +291,12 @@
                              "Whether set screen mute ",
                              FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+    g_object_class_install_property (
+        gobject_class, PROP_KEEP_LAST_FRAME_ON_FLUSH,
+        g_param_spec_boolean ("keep-last-frame-on-flush",
+                              "set keep last frame on flush or not,default is keep last frame",
+                              "0: clean; 1: keep", TRUE, G_PARAM_READWRITE));
+
     g_object_class_install_property(
         G_OBJECT_CLASS(klass), PROP_AVSYNC_MODE,
         g_param_spec_int("avsync-mode", "avsync mode",
@@ -422,6 +429,7 @@
     sink->frame_rate = 0.0;
     sink->pixel_aspect_ratio_changed = FALSE;
     sink->pixel_aspect_ratio = 1.0;
+    sink->keep_last_frame_on_flush = TRUE;
     g_mutex_init(&sink->eos_lock);
     g_cond_init(&sink->eos_cond);
 
@@ -475,6 +483,13 @@
         GST_OBJECT_UNLOCK(sink);
         break;
     }
+    case PROP_KEEP_LAST_FRAME_ON_FLUSH:
+    {
+        GST_OBJECT_LOCK(sink);
+        g_value_set_boolean(value, sink->keep_last_frame_on_flush);
+        GST_OBJECT_UNLOCK(sink);
+        break;
+    }
 #if GST_IMPORT_LGE_PROP
     case PROP_LGE_CURRENT_PTS:
     {
@@ -610,6 +625,14 @@
         GST_DEBUG_OBJECT(sink, "set show first frame asap %d",sink_priv->show_first_frame_asap);
         break;
     }
+    case PROP_KEEP_LAST_FRAME_ON_FLUSH:
+    {
+        GST_OBJECT_LOCK(sink);
+        sink->keep_last_frame_on_flush = g_value_get_boolean(value);
+        GST_DEBUG_OBJECT(sink, "keep last frame on flush %d", sink->keep_last_frame_on_flush);
+        GST_OBJECT_UNLOCK(sink);
+        break;
+    }
 #if GST_IMPORT_LGE_PROP
     case PROP_LGE_RESOURCE_INFO:
     {
@@ -1162,6 +1185,8 @@
         GST_INFO_OBJECT(sink, "flush start");
         GST_OBJECT_LOCK(sink);
         sink_priv->is_flushing = TRUE;
+        render_set_value(sink_priv->render_device_handle, KEY_KEEP_LAST_FRAME_ON_FLUSH, &sink->keep_last_frame_on_flush);
+
         if (render_flush(sink_priv->render_device_handle) == 0)
         {
             GST_INFO_OBJECT(sink, "recv flush start and set render lib flushing succ");
diff --git a/src/gstamlvideosink.h b/src/gstamlvideosink.h
index 804f780..865e893 100644
--- a/src/gstamlvideosink.h
+++ b/src/gstamlvideosink.h
@@ -73,6 +73,7 @@
   gboolean secure_mode;
   gboolean pixel_aspect_ratio_changed;
   double pixel_aspect_ratio;
+  gboolean keep_last_frame_on_flush;
 
   GstAmlVideoSinkPrivate *priv;
 };