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;