<SECTION>
<FILE>gstvaapisurface</FILE>
GstVaapiChromaType
+GstVaapiSurfaceStatus
GstVaapiSurfaceRenderFlags
<TITLE>GstVaapiSurface</TITLE>
GstVaapiSurface
gst_vaapi_surface_associate_subpicture
gst_vaapi_surface_deassociate_subpicture
gst_vaapi_surface_sync
+gst_vaapi_surface_query_status
<SUBSECTION Standard>
GST_VAAPI_SURFACE
GST_VAAPI_IS_SURFACE
return TRUE;
}
+
+/**
+ * gst_vaapi_surface_query_status:
+ * @surface: a #GstVaapiSurface
+ * @pstatus: return location for the #GstVaapiSurfaceStatus
+ *
+ * Finds out any pending operations on the @surface. The
+ * #GstVaapiSurfaceStatus flags are returned into @pstatus.
+ *
+ * Return value: %TRUE on success
+ */
+gboolean
+gst_vaapi_surface_query_status(
+ GstVaapiSurface *surface,
+ GstVaapiSurfaceStatus *pstatus
+)
+{
+ VASurfaceStatus surface_status;
+ VAStatus status;
+
+ g_return_val_if_fail(GST_VAAPI_IS_SURFACE(surface), FALSE);
+
+ GST_VAAPI_OBJECT_LOCK_DISPLAY(surface);
+ status = vaQuerySurfaceStatus(
+ GST_VAAPI_OBJECT_VADISPLAY(surface),
+ GST_VAAPI_OBJECT_ID(surface),
+ &surface_status
+ );
+ GST_VAAPI_OBJECT_UNLOCK_DISPLAY(surface);
+ if (!vaapi_check_status(status, "vaQuerySurfaceStatus()"))
+ return FALSE;
+
+ if (pstatus)
+ *pstatus = to_GstVaapiSurfaceStatus(surface_status);
+ return TRUE;
+}
G_BEGIN_DECLS
typedef enum _GstVaapiChromaType GstVaapiChromaType;
+typedef enum _GstVaapiSurfaceStatus GstVaapiSurfaceStatus;
typedef enum _GstVaapiSurfaceRenderFlags GstVaapiSurfaceRenderFlags;
/**
};
/**
+ * GstVaapiSurfaceStatus:
+ * @GST_VAAPI_SURFACE_STATUS_IDLE:
+ * the surface is not being rendered or displayed
+ * @GST_VAAPI_SURFACE_STATUS_RENDERING:
+ * the surface is used for rendering (decoding to the surface in progress)
+ * @GST_VAAPI_SURFACE_STATUS_DISPLAYING:
+ * the surface is being displayed to screen
+ * @GST_VAAPI_SURFACE_STATUS_SKIPPED:
+ * indicates a skipped frame during encode
+ *
+ * The set of all surface status for #GstVaapiSurface.
+ */
+enum _GstVaapiSurfaceStatus {
+ GST_VAAPI_SURFACE_STATUS_IDLE = 1 << 0,
+ GST_VAAPI_SURFACE_STATUS_RENDERING = 1 << 1,
+ GST_VAAPI_SURFACE_STATUS_DISPLAYING = 1 << 2,
+ GST_VAAPI_SURFACE_STATUS_SKIPPED = 1 << 3
+};
+
+/**
* GstVaapiSurfaceRenderFlags
* @GST_VAAPI_PICTURE_STRUCTURE_TOP_FIELD:
* selects the top field of the surface
gboolean
gst_vaapi_surface_sync(GstVaapiSurface *surface);
+gboolean
+gst_vaapi_surface_query_status(
+ GstVaapiSurface *surface,
+ GstVaapiSurfaceStatus *pstatus
+);
+
G_END_DECLS
#endif /* GST_VAAPI_SURFACE_H */
return va_fields|va_csc;
}
+
+/**
+ * to_GstVaapiSurfaceStatus:
+ * @flags: the #GstVaapiSurfaceStatus flags to translate
+ *
+ * Converts vaQuerySurfaceStatus() @flags to #GstVaapiSurfaceStatus
+ * flags.
+ *
+ * Return value: the #GstVaapiSurfaceStatus flags
+ */
+guint to_GstVaapiSurfaceStatus(guint va_flags)
+{
+ guint flags;
+ const guint va_flags_mask = (VASurfaceReady|
+ VASurfaceRendering|
+ VASurfaceDisplaying);
+
+ /* Check for core status */
+ switch (va_flags & va_flags_mask) {
+ case VASurfaceReady:
+ flags = GST_VAAPI_SURFACE_STATUS_IDLE;
+ break;
+ case VASurfaceRendering:
+ flags = GST_VAAPI_SURFACE_STATUS_RENDERING;
+ break;
+ case VASurfaceDisplaying:
+ flags = GST_VAAPI_SURFACE_STATUS_DISPLAYING;
+ break;
+ default:
+ flags = 0;
+ break;
+ }
+
+ /* Check for encoder status */
+ if (va_flags & VASurfaceSkipped)
+ flags |= GST_VAAPI_SURFACE_STATUS_SKIPPED;
+
+ return flags;
+}
guint get_PutSurface_flags_from_GstVaapiSurfaceRenderFlags(guint flags)
attribute_hidden;
+guint to_GstVaapiSurfaceStatus(guint va_flags)
+ attribute_hidden;
+
#endif /* GST_VAAPI_UTILS_H */