mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-17 21:06:17 +00:00
va: Use GstVideoInfoDmaDrm in DMA allocator's get/set_format() API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4044>
This commit is contained in:
parent
ab9d11bc17
commit
d7d25de892
5 changed files with 40 additions and 33 deletions
|
@ -642,8 +642,8 @@ otherwise.</doc>
|
|||
<type name="Gst.Allocator" c:type="GstAllocator*"/>
|
||||
</parameter>
|
||||
<parameter name="info" direction="out" caller-allocates="1" transfer-ownership="none" optional="1" allow-none="1">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvaallocator.c">a #GstVideoInfo</doc>
|
||||
<type name="GstVideo.VideoInfo" c:type="GstVideoInfo*"/>
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvaallocator.c">a #GstVideoInfoDmaDrm</doc>
|
||||
<type name="GstVideo.VideoInfoDmaDrm" c:type="GstVideoInfoDmaDrm*"/>
|
||||
</parameter>
|
||||
<parameter name="usage_hint" direction="out" caller-allocates="0" transfer-ownership="full" optional="1" allow-none="1">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvaallocator.c">VA usage hint</doc>
|
||||
|
@ -676,9 +676,9 @@ otherwise.</doc>
|
|||
@allocator, and it tries the configuration, if @allocator has not
|
||||
allocated memories yet.
|
||||
|
||||
If @allocator has memory allocated already, and frame size and
|
||||
format in @info are the same as currently configured in @allocator,
|
||||
the rest of @info parameters are updated internally.</doc>
|
||||
If @allocator has memory allocated already, and frame size, format
|
||||
and modifier in @info are the same as currently configured in
|
||||
@allocator, the rest of @info parameters are updated internally.</doc>
|
||||
<source-position filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvaallocator.h"/>
|
||||
<return-value transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvaallocator.c">%TRUE if the configuration is valid or updated; %FALSE if
|
||||
|
@ -691,8 +691,8 @@ configuration is not valid or not updated.</doc>
|
|||
<type name="Gst.Allocator" c:type="GstAllocator*"/>
|
||||
</parameter>
|
||||
<parameter name="info" direction="out" caller-allocates="1" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvaallocator.c">a #GstVideoInfo</doc>
|
||||
<type name="GstVideo.VideoInfo" c:type="GstVideoInfo*"/>
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvaallocator.c">a #GstVideoInfoDmaDrm</doc>
|
||||
<type name="GstVideo.VideoInfoDmaDrm" c:type="GstVideoInfoDmaDrm*"/>
|
||||
</parameter>
|
||||
<parameter name="usage_hint" transfer-ownership="none">
|
||||
<doc xml:space="preserve" filename="../subprojects/gst-plugins-bad/gst-libs/gst/va/gstvaallocator.c">VA usage hint</doc>
|
||||
|
|
|
@ -445,6 +445,8 @@ gst_va_dmabuf_allocator_init (GstVaDmabufAllocator * self)
|
|||
self->parent_copy = allocator->mem_copy;
|
||||
allocator->mem_copy = gst_va_dmabuf_mem_copy;
|
||||
|
||||
gst_video_info_dma_drm_init (&self->info);
|
||||
|
||||
gst_va_memory_pool_init (&self->pool);
|
||||
}
|
||||
|
||||
|
@ -546,7 +548,7 @@ _va_create_surface_and_export_to_dmabuf (GstVaDisplay * display,
|
|||
VASurfaceAttribExternalBuffers *extbuf = NULL, ext_buf;
|
||||
GstVideoFormat format;
|
||||
VASurfaceID surface;
|
||||
guint64 prev_modifier;
|
||||
guint64 prev_modifier = DRM_FORMAT_MOD_INVALID;
|
||||
|
||||
_init_debug_category ();
|
||||
|
||||
|
@ -691,7 +693,7 @@ gst_va_dmabuf_allocator_setup_buffer_full (GstAllocator * allocator,
|
|||
g_return_val_if_fail (GST_IS_VA_DMABUF_ALLOCATOR (allocator), FALSE);
|
||||
|
||||
if (!_va_create_surface_and_export_to_dmabuf (self->display, self->usage_hint,
|
||||
NULL, 0, &self->info.vinfo, &surface, &desc))
|
||||
&self->info.drm_modifier, 1, &self->info.vinfo, &surface, &desc))
|
||||
return FALSE;
|
||||
|
||||
buf = gst_va_buffer_surface_new (surface);
|
||||
|
@ -956,16 +958,16 @@ gst_va_dmabuf_allocator_try (GstAllocator * allocator)
|
|||
/**
|
||||
* gst_va_dmabuf_allocator_set_format:
|
||||
* @allocator: a #GstAllocator
|
||||
* @info: (in) (out caller-allocates) (not nullable): a #GstVideoInfo
|
||||
* @info: (in) (out caller-allocates) (not nullable): a #GstVideoInfoDmaDrm
|
||||
* @usage_hint: VA usage hint
|
||||
*
|
||||
* Sets the configuration defined by @info and @usage_hint for
|
||||
* @allocator, and it tries the configuration, if @allocator has not
|
||||
* allocated memories yet.
|
||||
*
|
||||
* If @allocator has memory allocated already, and frame size and
|
||||
* format in @info are the same as currently configured in @allocator,
|
||||
* the rest of @info parameters are updated internally.
|
||||
* If @allocator has memory allocated already, and frame size, format
|
||||
* and modifier in @info are the same as currently configured in
|
||||
* @allocator, the rest of @info parameters are updated internally.
|
||||
*
|
||||
* Returns: %TRUE if the configuration is valid or updated; %FALSE if
|
||||
* configuration is not valid or not updated.
|
||||
|
@ -974,43 +976,40 @@ gst_va_dmabuf_allocator_try (GstAllocator * allocator)
|
|||
*/
|
||||
gboolean
|
||||
gst_va_dmabuf_allocator_set_format (GstAllocator * allocator,
|
||||
GstVideoInfo * info, guint usage_hint)
|
||||
GstVideoInfoDmaDrm * info, guint usage_hint)
|
||||
{
|
||||
GstVaDmabufAllocator *self;
|
||||
gboolean ret;
|
||||
|
||||
/* TODO: change API to pass GstVideoInfoDmaDrm, though ignoring the drm
|
||||
* modifier since that's set by the driver. Still we might want to pass the
|
||||
* list of available modifiers by upstream for the negotiated format */
|
||||
|
||||
g_return_val_if_fail (GST_IS_VA_DMABUF_ALLOCATOR (allocator), FALSE);
|
||||
g_return_val_if_fail (info, FALSE);
|
||||
|
||||
self = GST_VA_DMABUF_ALLOCATOR (allocator);
|
||||
|
||||
if (gst_va_memory_pool_surface_count (&self->pool) != 0) {
|
||||
if (GST_VIDEO_INFO_FORMAT (info)
|
||||
if (info->drm_modifier == self->info.drm_modifier
|
||||
&& GST_VIDEO_INFO_FORMAT (&info->vinfo)
|
||||
== GST_VIDEO_INFO_FORMAT (&self->info.vinfo)
|
||||
&& GST_VIDEO_INFO_WIDTH (info)
|
||||
&& GST_VIDEO_INFO_WIDTH (&info->vinfo)
|
||||
== GST_VIDEO_INFO_WIDTH (&self->info.vinfo)
|
||||
&& GST_VIDEO_INFO_HEIGHT (info)
|
||||
&& GST_VIDEO_INFO_HEIGHT (&info->vinfo)
|
||||
== GST_VIDEO_INFO_HEIGHT (&self->info.vinfo)
|
||||
&& usage_hint == self->usage_hint) {
|
||||
*info = self->info.vinfo; /* update callee info (offset & stride) */
|
||||
*info = self->info; /* update callee info (offset & stride) */
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
self->usage_hint = usage_hint;
|
||||
self->info.vinfo = *info;
|
||||
self->info = *info;
|
||||
|
||||
g_clear_pointer (&self->copy, gst_va_surface_copy_free);
|
||||
|
||||
ret = gst_va_dmabuf_allocator_try (allocator);
|
||||
|
||||
if (ret)
|
||||
*info = self->info.vinfo;
|
||||
*info = self->info;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1018,7 +1017,7 @@ gst_va_dmabuf_allocator_set_format (GstAllocator * allocator,
|
|||
/**
|
||||
* gst_va_dmabuf_allocator_get_format:
|
||||
* @allocator: a #GstAllocator
|
||||
* @info: (out) (optional): a #GstVideoInfo
|
||||
* @info: (out) (optional): a #GstVideoInfoDmaDrm
|
||||
* @usage_hint: (out) (optional): VA usage hint
|
||||
*
|
||||
* Gets current internal configuration of @allocator.
|
||||
|
@ -1030,7 +1029,7 @@ gst_va_dmabuf_allocator_set_format (GstAllocator * allocator,
|
|||
*/
|
||||
gboolean
|
||||
gst_va_dmabuf_allocator_get_format (GstAllocator * allocator,
|
||||
GstVideoInfo * info, guint * usage_hint)
|
||||
GstVideoInfoDmaDrm * info, guint * usage_hint)
|
||||
{
|
||||
GstVaDmabufAllocator *self = GST_VA_DMABUF_ALLOCATOR (allocator);
|
||||
|
||||
|
@ -1038,7 +1037,7 @@ gst_va_dmabuf_allocator_get_format (GstAllocator * allocator,
|
|||
return FALSE;
|
||||
|
||||
if (info)
|
||||
*info = self->info.vinfo;
|
||||
*info = self->info;
|
||||
if (usage_hint)
|
||||
*usage_hint = self->usage_hint;
|
||||
|
||||
|
|
|
@ -49,11 +49,11 @@ GST_VA_API
|
|||
void gst_va_dmabuf_allocator_flush (GstAllocator * allocator);
|
||||
GST_VA_API
|
||||
gboolean gst_va_dmabuf_allocator_set_format (GstAllocator * allocator,
|
||||
GstVideoInfo * info,
|
||||
GstVideoInfoDmaDrm * info,
|
||||
guint usage_hint);
|
||||
GST_VA_API
|
||||
gboolean gst_va_dmabuf_allocator_get_format (GstAllocator * allocator,
|
||||
GstVideoInfo * info,
|
||||
GstVideoInfoDmaDrm * info,
|
||||
guint * usage_hint);
|
||||
|
||||
GST_VA_API
|
||||
|
|
|
@ -426,8 +426,10 @@ gst_va_base_transform_decide_allocation (GstBaseTransform * trans,
|
|||
}
|
||||
|
||||
if (GST_IS_VA_DMABUF_ALLOCATOR (allocator)) {
|
||||
gst_va_dmabuf_allocator_get_format (allocator, &self->priv->srcpad_info,
|
||||
NULL);
|
||||
GstVideoInfoDmaDrm dma_info;
|
||||
|
||||
gst_va_dmabuf_allocator_get_format (allocator, &dma_info, NULL);
|
||||
self->priv->srcpad_info = dma_info.vinfo;
|
||||
} else if (GST_IS_VA_ALLOCATOR (allocator)) {
|
||||
gst_va_allocator_get_format (allocator, &self->priv->srcpad_info, NULL,
|
||||
NULL);
|
||||
|
|
|
@ -737,7 +737,10 @@ gst_va_compositor_decide_allocation (GstAggregator * agg, GstQuery * query)
|
|||
}
|
||||
|
||||
if (GST_IS_VA_DMABUF_ALLOCATOR (allocator)) {
|
||||
gst_va_dmabuf_allocator_get_format (allocator, &vagg->info, NULL);
|
||||
GstVideoInfoDmaDrm dma_info;
|
||||
|
||||
gst_va_dmabuf_allocator_get_format (allocator, &dma_info, NULL);
|
||||
vagg->info = dma_info.vinfo;
|
||||
} else if (GST_IS_VA_ALLOCATOR (allocator)) {
|
||||
gst_va_allocator_get_format (allocator, &vagg->info, NULL, NULL);
|
||||
}
|
||||
|
@ -819,7 +822,10 @@ _get_sinkpad_pool (GstVaCompositor * self, GstVaCompositorPad * pad)
|
|||
}
|
||||
|
||||
if (GST_IS_VA_DMABUF_ALLOCATOR (allocator)) {
|
||||
gst_va_dmabuf_allocator_get_format (allocator, &info, NULL);
|
||||
GstVideoInfoDmaDrm dma_info;
|
||||
|
||||
gst_va_dmabuf_allocator_get_format (allocator, &dma_info, NULL);
|
||||
info = dma_info.vinfo;
|
||||
} else if (GST_IS_VA_ALLOCATOR (allocator)) {
|
||||
gst_va_allocator_get_format (allocator, &info, NULL, NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue