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;
};