summaryrefslogtreecommitdiff
path: root/gst/vaapi
diff options
context:
space:
mode:
Diffstat (limited to 'gst/vaapi')
-rw-r--r--gst/vaapi/gstvaapisink.c10
-rw-r--r--gst/vaapi/gstvaapisink.h1
2 files changed, 10 insertions, 1 deletions
diff --git a/gst/vaapi/gstvaapisink.c b/gst/vaapi/gstvaapisink.c
index cacf087b..45d81557 100644
--- a/gst/vaapi/gstvaapisink.c
+++ b/gst/vaapi/gstvaapisink.c
@@ -298,6 +298,7 @@ static inline gboolean
gst_vaapisink_ensure_display(GstVaapiSink *sink)
{
GstVaapiDisplayType display_type;
+ GstVaapiRenderMode render_mode;
if (!gst_vaapi_ensure_display(sink, sink->display_type, &sink->display))
return FALSE;
@@ -307,6 +308,11 @@ gst_vaapisink_ensure_display(GstVaapiSink *sink)
GST_INFO("created %s %p", get_display_type_name(display_type),
sink->display);
sink->display_type = display_type;
+
+ sink->use_overlay =
+ gst_vaapi_display_get_render_mode(sink->display, &render_mode) &&
+ render_mode == GST_VAAPI_RENDER_MODE_OVERLAY;
+ GST_DEBUG("use %s rendering mode", sink->use_overlay ? "overlay" : "texture");
}
return TRUE;
}
@@ -778,7 +784,8 @@ gst_vaapisink_show_frame(GstBaseSink *base_sink, GstBuffer *buffer)
return GST_FLOW_UNEXPECTED;
/* Retain VA surface until the next one is displayed */
- gst_buffer_replace(&sink->video_buffer, buffer);
+ if (sink->use_overlay)
+ gst_buffer_replace(&sink->video_buffer, buffer);
return GST_FLOW_OK;
}
@@ -955,4 +962,5 @@ gst_vaapisink_init(GstVaapiSink *sink)
sink->synchronous = FALSE;
sink->display_type = DEFAULT_DISPLAY_TYPE;
sink->use_reflection = FALSE;
+ sink->use_overlay = FALSE;
}
diff --git a/gst/vaapi/gstvaapisink.h b/gst/vaapi/gstvaapisink.h
index 0e8709f3..eae1665b 100644
--- a/gst/vaapi/gstvaapisink.h
+++ b/gst/vaapi/gstvaapisink.h
@@ -84,6 +84,7 @@ struct _GstVaapiSink {
guint fullscreen : 1;
guint synchronous : 1;
guint use_reflection : 1;
+ guint use_overlay : 1;
};
struct _GstVaapiSinkClass {