amlvideosink: CF2 add video latency [1/1]
PD#SWPL-190851
Problem:
add video latency feature to set extra
video latency
Solution:
add video latency feature to set extra
video latency. video latency's unit of
value is us
Verify:
ah212
Change-Id: Ic6e7836a9545c8f6d1246e3773fb927da44c98d1
Signed-off-by: fei.deng <fei.deng@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index e9d3044..471a0da 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -114,6 +114,7 @@
PROP_VIDEO_PTS,
PROP_ZORDER,
PROP_FRAME_STEP_ON_PREROLL,
+ PRO_VIDEO_LATENCY,
#if GST_IMPORT_LGE_PROP
PROP_LGE_RESOURCE_INFO,
PROP_LGE_CURRENT_PTS,
@@ -220,6 +221,8 @@
gint par_d;
gint fps_n;
gint fps_d;
+ gint video_latency;
+ gboolean set_video_latency;
#if GST_IMPORT_LGE_PROP
GstAmlVideoSinkLgeCtxt lge_ctxt;
@@ -405,6 +408,12 @@
"video plane zorder",
G_MININT, G_MAXINT, 0, G_PARAM_READWRITE));
+ g_object_class_install_property(
+ G_OBJECT_CLASS(klass), PRO_VIDEO_LATENCY,
+ g_param_spec_int("video-latency", "video latency",
+ "video extra latency,the unit of value is us",
+ G_MININT, G_MAXINT, 0, G_PARAM_READWRITE));
+
/*
* frame-step-on-preroll is for nts case VPEEK-001-TC2
* case step:
@@ -665,6 +674,13 @@
GST_OBJECT_UNLOCK(sink);
break;
}
+ case PRO_VIDEO_LATENCY:
+ {
+ GST_OBJECT_LOCK(sink);
+ g_value_set_int(value, sink_priv->video_latency);
+ GST_OBJECT_UNLOCK(sink);
+ break;
+ }
#if GST_IMPORT_LGE_PROP
case PROP_LGE_CURRENT_PTS:
{
@@ -863,6 +879,14 @@
}
}
} break;
+ case PRO_VIDEO_LATENCY:
+ {
+ GST_OBJECT_LOCK(sink);
+ sink_priv->video_latency = g_value_get_int(value);
+ sink_priv->set_video_latency = TRUE;
+ GST_DEBUG_OBJECT(sink, "set video latency:%d us",sink_priv->video_latency);
+ GST_OBJECT_UNLOCK(sink);
+ } break;
#if GST_IMPORT_LGE_PROP
case PROP_LGE_RESOURCE_INFO:
{
@@ -1516,6 +1540,10 @@
sink->update_zorder = FALSE;
render_set_value(sink_priv->render_device_handle, KEY_ZORDER, &sink->zorder);
}
+ if (sink_priv->set_video_latency) {
+ sink_priv->set_video_latency = FALSE;
+ render_set_value(sink_priv->render_device_handle, KEY_MEDIASYNC_VIDEOLATENCY, &sink_priv->video_latency);
+ }
tunnel_lib_buf_wrap = render_allocate_render_buffer_wrap(sink_priv->render_device_handle, BUFFER_FLAG_DMA_BUFFER);
if (!tunnel_lib_buf_wrap)
@@ -1886,6 +1914,8 @@
sink_priv->par_d = 0;
sink_priv->fps_n = 0;
sink_priv->fps_d = 0;
+ sink_priv->video_latency = 0;
+ sink_priv->set_video_latency = FALSE;
}
static void gst_set_report_info(void *userData, RenderMsgType type, int64_t pts, int64_t duration)