amlvideosink: CF1 add output index for renderlib [1/1]
PD#SWPL-91524
Problem:
add output index for renderlib
Solution:
add output index for renderlib
Verify:
(detail info)
Change-Id: Ic4bc6faf943414f0010469edb95c1e445a8d2fb3
Signed-off-by: xuesong.jiang <xuesong.jiang@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index 2094f58..a189642 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -100,6 +100,7 @@
PROP_VIDEO_FRAME_DROP_NUM,
PROP_WINDOW_SET,
PROP_RES_USAGE,
+ PROP_DISPLAY_OUTPUT,
#if GST_IMPORT_LGE_PROP
PROP_LGE_RESOURCE_INFO,
PROP_LGE_CURRENT_PTS,
@@ -302,6 +303,12 @@
"Flags to indicate intended usage",
G_MININT, G_MAXINT, 0, G_PARAM_WRITABLE));
+ g_object_class_install_property(
+ G_OBJECT_CLASS(klass), PROP_DISPLAY_OUTPUT,
+ g_param_spec_int("display-output", "display output index",
+ "display output index, 0 is primary output and default value; 1 is extend display output",
+ G_MININT, G_MAXINT, 0, G_PARAM_READWRITE));
+
#if GST_IMPORT_LGE_PROP
g_object_class_install_property(
G_OBJECT_CLASS(klass), PROP_LGE_RESOURCE_INFO,
@@ -364,6 +371,7 @@
sink->droped = 0;
sink->avsync_mode = GST_DEFAULT_AVSYNC_MODE;
sink->pip_mode = 0;
+ sink->display_output_index = 0;
sink->secure_mode = FALSE;
g_mutex_init(&sink->eos_lock);
g_cond_init(&sink->eos_cond);
@@ -407,6 +415,13 @@
g_value_set_int(value, sink->droped);
GST_OBJECT_UNLOCK(sink);
break;
+ case PROP_DISPLAY_OUTPUT:
+ {
+ GST_OBJECT_LOCK(sink);
+ g_value_set_int(value, sink->display_output_index);
+ GST_OBJECT_UNLOCK(sink);
+ break;
+ }
#if GST_IMPORT_LGE_PROP
case PROP_LGE_CURRENT_PTS:
{
@@ -510,6 +525,23 @@
GST_OBJECT_UNLOCK(sink);
break;
}
+ case PROP_DISPLAY_OUTPUT:
+ {
+ GST_OBJECT_LOCK(sink);
+ gint index = g_value_get_int(value);
+ if (index == 0 || index == 1)
+ {
+ sink->display_output_index = index;
+ if (sink_priv->render_device_handle)
+ {
+ if (render_set(sink_priv->render_device_handle, KEY_SELECT_DISPLAY_OUTPUT, &sink->display_output_index) == -1)
+ GST_ERROR_OBJECT(sink, "render lib update output index error");
+ }
+ }
+ GST_DEBUG_OBJECT(sink, "update display output index to:%d", sink->display_output_index);
+ GST_OBJECT_UNLOCK(sink);
+ break;
+ }
#if GST_IMPORT_LGE_PROP
case PROP_LGE_RESOURCE_INFO:
{
@@ -647,6 +679,12 @@
}
case GST_STATE_CHANGE_READY_TO_PAUSED:
{
+
+ if (render_set(sink_priv->render_device_handle, KEY_SELECT_DISPLAY_OUTPUT, &sink->display_output_index) == -1)
+ {
+ GST_ERROR_OBJECT(sink, "render lib first set output index error");
+ goto error;
+ }
if (render_connect(sink_priv->render_device_handle) == -1)
{
GST_ERROR_OBJECT(sink, "render lib connect device fail");
diff --git a/src/gstamlvideosink.h b/src/gstamlvideosink.h
index b505256..a7685e4 100644
--- a/src/gstamlvideosink.h
+++ b/src/gstamlvideosink.h
@@ -58,6 +58,7 @@
gint droped;
gint avsync_mode;
gboolean pip_mode;
+ gint display_output_index;
GMutex eos_lock;
GCond eos_cond;