gst amlvideosink: CB2 update display time when recv segment event [1/1]

PD#SWPL-80254

Problem:
yts player query display time for checking pipeline buffer health
yts player do pause before seek and set playing when buffer health check
ok
yts player want to got new segement start time before set pipline to
playing

Solution:
update display time when got new segment event

Verify:
(detail info)

Change-Id: Ia0760a49d3ec0de61d7d75083c1b5cfee3946190
Signed-off-by: xuesong.jiang <xuesong.jiang@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index dda929b..b3093f7 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -328,6 +328,7 @@
     GstBaseSink *basesink = (GstBaseSink *)sink;
 
     sink->last_displayed_buf_pts = 0;
+    sink->last_dec_buf_pts = 0;
     /* init eos detect */
     sink->queued = 0;
     sink->dequeued = 0;
@@ -656,7 +657,15 @@
     }
     case GST_STATE_CHANGE_PAUSED_TO_READY:
     {
-        render_disconnect(sink_priv->render_device_handle);
+        GST_DEBUG_OBJECT(sink, "before disconnect rlib");
+        if (render_disconnect(sink_priv->render_device_handle) == -1)
+        {
+            GST_ERROR_OBJECT(sink, "render lib disconnect device fail");
+            goto error;
+        }
+        GST_DEBUG_OBJECT(sink, "after disconnect rlib");
+        GST_DEBUG_OBJECT(sink, "buf stat | queued:%d, dequeued:%d, droped:%d, rendered:%d",
+                         sink->queued, sink->dequeued, sink->droped, sink->rendered);
         break;
     }
     case GST_STATE_CHANGE_READY_TO_NULL:
@@ -699,6 +708,7 @@
         {
             GST_OBJECT_LOCK(sink);
             gint64 position = sink->last_displayed_buf_pts;
+            // gint64 position = sink->last_dec_buf_pts;
             GST_OBJECT_UNLOCK(sink);
             GST_LOG_OBJECT(sink, "got position: %" GST_TIME_FORMAT, GST_TIME_ARGS(position));
             gst_query_set_position(query, GST_FORMAT_TIME, position);
@@ -822,6 +832,9 @@
                    buffer, GST_TIME_ARGS(GST_BUFFER_PTS(buffer)), GST_TIME_ARGS(GST_BUFFER_DURATION(buffer)),
                    buffer->pool, ((GstBaseSink *)sink)->need_preroll);
 
+    sink->last_dec_buf_pts = GST_BUFFER_PTS(buffer);
+    GST_DEBUG_OBJECT(sink, "set last_dec_buf_pts %" GST_TIME_FORMAT, GST_TIME_ARGS(sink->last_dec_buf_pts));
+
     if (!sink_priv->render_device_handle)
     {
         GST_ERROR_OBJECT(sink, "flow error, render_device_handle == NULL");
@@ -932,6 +945,7 @@
         {
             GST_INFO_OBJECT(sink, "recv flush start and set render lib flushing succ");
         }
+        GST_INFO_OBJECT(sink, "flush start done");
         GST_OBJECT_UNLOCK(sink);
         break;
     }
@@ -956,6 +970,7 @@
         sink->droped = 0;
         sink_priv->got_eos = FALSE;
         sink_priv->is_flushing = FALSE;
+        GST_INFO_OBJECT(sink, "flush stop done");
         GST_OBJECT_UNLOCK(sink);
         break;
     }
@@ -964,7 +979,8 @@
         GST_OBJECT_LOCK(sink);
         gst_event_copy_segment(event, &sink_priv->segment);
         GST_INFO_OBJECT(sink, "configured segment %" GST_SEGMENT_FORMAT, &sink_priv->segment);
-        // TODO set play rate to tunnel lib, 切换rate这部分是不是只需要audio那边set即可
+        sink->last_displayed_buf_pts = sink_priv->segment.position;
+        GST_INFO_OBJECT(sink, "update cur pos to %" GST_TIME_FORMAT, GST_TIME_ARGS(sink->last_displayed_buf_pts));
         GST_OBJECT_UNLOCK(sink);
         break;
     }
diff --git a/src/gstamlvideosink.h b/src/gstamlvideosink.h
index 95fe307..594f476 100644
--- a/src/gstamlvideosink.h
+++ b/src/gstamlvideosink.h
@@ -49,6 +49,7 @@
   GstVideoSink parent;
 
   GstClockTime last_displayed_buf_pts;
+  GstClockTime last_dec_buf_pts;
 
   /* eos detect */
   gint queued;