amlvideosink: CB0 Time sequence problem
between show_frame and flush_start [1/1]
PD#SWPL-143739
Problem:
the last data was sent to render_lib before seeking
Solution:
not send the last data before seeking
Verify:
ah212
Change-Id: Ieca65318d364e501061fecb4097d37ed362c22e4
Signed-off-by: hanghang.luo <hanghang.luo@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index 45cc2c9..b51dfe5 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -1011,23 +1011,6 @@
{
GST_LOG_OBJECT(sink, "get preroll buffer 1st time, buf:%p", buffer);
sink_priv->preroll_buffer = buffer;
- // goto flushing;
- }
-
- // TODO should call tunnel lib flush func
- if (sink_priv->is_flushing)
- {
- // gst_buffer_unref(buffer);
- if (render_flush(sink_priv->render_device_handle) == 0)
- {
- GST_DEBUG_OBJECT(sink, "in flushing flow, release the buffer directly");
- goto flushing;
- }
- else
- {
- GST_ERROR_OBJECT(sink, "render lib: flush error");
- goto error;
- }
}
if (sink_priv->window_set.window_change)
@@ -1069,21 +1052,35 @@
GST_ERROR_OBJECT(sink, "render lib: alloc buffer wrap fail");
goto error;
}
+
if (!gst_aml_video_sink_tunnel_buf(sink, buffer, tunnel_lib_buf_wrap))
{
GST_ERROR_OBJECT(sink, "construc render buffer fail");
goto error;
}
-
GST_OBJECT_UNLOCK(vsink);
-
if (render_display_frame(sink_priv->render_device_handle, tunnel_lib_buf_wrap) == -1)
{
GST_ERROR_OBJECT(sink, "render lib: display frame fail");
- goto error;
+ return GST_FLOW_CUSTOM_ERROR_2;
}
+ GST_OBJECT_LOCK(vsink);
sink->queued++;
+ if (sink_priv->is_flushing)
+ {
+ if (render_flush(sink_priv->render_device_handle) == 0)
+ {
+ GST_DEBUG_OBJECT(sink, "in flushing flow, release the buffer directly");
+ goto flushing;
+ }
+ else
+ {
+ GST_ERROR_OBJECT(sink, "render lib: flush error");
+ goto error;
+ }
+ }
+
//gst_aml_video_sink_dump_stat(sink, GST_DUMP_STAT_FILENAME);
GST_DEBUG_OBJECT(sink, "GstBuffer:%p, pts: %" GST_TIME_FORMAT " queued ok, queued:%d", buffer, GST_TIME_ARGS(GST_BUFFER_PTS(buffer)), sink->queued);
sink->quit_eos_detect_thread = FALSE;
@@ -1092,7 +1089,7 @@
GST_DEBUG_OBJECT(sink, "start eos detect thread");
sink->eos_detect_thread_handle = g_thread_new("video_sink_eos", eos_detection_thread, sink);
}
- return ret;
+ goto ret;
error:
GST_DEBUG_OBJECT(sink, "GstBuffer:%p queued error", buffer);
@@ -1100,6 +1097,7 @@
goto ret;
flushing:
GST_DEBUG_OBJECT(sink, "flushing when buf:%p", buffer);
+ ret = GST_FLOW_FLUSHING;
goto ret;
ret:
GST_OBJECT_UNLOCK(vsink);