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)