amlvideosink: send preroll buf only once [1/1]
PD#SWPL-59183
Problem:
send preroll buf to render lib twice
Solution:
send preroll buf only once
Verify:
send preroll buf only once
Change-Id: Ifdb358def8022b5680a41eb7a3587fadafdd2fcf
Signed-off-by: xuesong.jiang <xuesong.jiang@amlogic.com>
diff --git a/src/gstamlvideosink.c b/src/gstamlvideosink.c
index b60f0d2..9e92d31 100644
--- a/src/gstamlvideosink.c
+++ b/src/gstamlvideosink.c
@@ -60,12 +60,13 @@
#define RENDER_DEVICE_NAME "wayland"
#define USE_DMABUF TRUE
-#define DRMBP_EXTRA_BUF_SZIE_FOR_DISPLAY 6
+#define DRMBP_EXTRA_BUF_SZIE_FOR_DISPLAY 10
#define DRMBP_LIMIT_MAX_BUFSIZE_TO_BUFSIZE 1
#define DRMBP_UNLIMIT_MAX_BUFSIZE 0
struct _GstAmlVideoSinkPrivate
{
+ GstBuffer *preroll_buffer;
gchar *render_device_name;
void *render_device_handle;
GstVideoInfo video_info;
@@ -411,7 +412,7 @@
RenderBuffer *tunnel_lib_buf_wrap = NULL;
GST_OBJECT_LOCK(vsink);
- GST_LOG_OBJECT(sink, "revice buffer:%p, from pool:%p", buffer, buffer->pool);
+ GST_LOG_OBJECT(sink, "revice buffer:%p, from pool:%p, need_preroll:%d", buffer, buffer->pool, ((GstBaseSink *)sink)->need_preroll);
if (!sink_priv->render_device_handle)
{
@@ -419,6 +420,18 @@
goto error;
}
+ if (sink_priv->preroll_buffer && sink_priv->preroll_buffer == buffer)
+ {
+ GST_LOG_OBJECT(sink, "get preroll buffer:%p 2nd time, goto done", buffer);
+ sink_priv->preroll_buffer = NULL;
+ goto done;
+ }
+ if (G_UNLIKELY(((GstBaseSink *)sink)->need_preroll))
+ {
+ GST_LOG_OBJECT(sink, "get preroll buffer 1st time, buf:%p", buffer);
+ sink_priv->preroll_buffer = buffer;
+ }
+
// TODO should call tunnel lib flush func
if (sink_priv->is_flushing)
{