diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12memory.cpp b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12memory.cpp index bb09adb07a..d0feece58e 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12memory.cpp +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12memory.cpp @@ -994,6 +994,36 @@ gst_d3d12_memory_set_external_fence (GstD3D12Memory * mem, ID3D12Fence * fence, gst_d3d12_memory_set_external_fence_unlocked (mem, fence, fence_val); } +/** + * gst_d3d12_memory_get_external_fence: + * @mem: a #GstD3D12Memory + * @fence: (out) (transfer full) (nullable): a ID3D12Fence + * @fence_val: (out): fence value + * + * Gets configured external fence and fence value + * + * Returns: %TRUE if external fence was configured in @mem + * + * Since: 1.26 + */ +gboolean +gst_d3d12_memory_get_external_fence (GstD3D12Memory * mem, ID3D12Fence ** fence, + guint64 * fence_val) +{ + auto priv = mem->priv; + + std::lock_guard < std::mutex > lk (priv->lock); + if (priv->external_fence) { + *fence = priv->external_fence.Get (); + (*fence)->AddRef (); + *fence_val = priv->external_fence_val; + + return TRUE; + } + + return FALSE; +} + /** * gst_d3d12_memory_get_d3d11_texture: * @mem: a #GstD3D12Memory diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12memory.h b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12memory.h index 650dc67ae5..9f8f7286ba 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12memory.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/d3d12/gstd3d12memory.h @@ -222,6 +222,11 @@ void gst_d3d12_memory_set_external_fence (GstD3D12Memory * mem, ID3D12Fence * fence, guint64 fence_val); +GST_D3D12_API +gboolean gst_d3d12_memory_get_external_fence (GstD3D12Memory * mem, + ID3D12Fence ** fence, + guint64 * fence_val); + GST_D3D12_API ID3D11Texture2D * gst_d3d12_memory_get_d3d11_texture (GstD3D12Memory * mem, ID3D11Device * device11);