mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 00:06:36 +00:00
va: allocator: export composed layer for YUY2 and UYVY
This is a result of an error reported by i965 driver which only can export composed layer for these formats. This seems to work too with iHD. These formats are not exposed as native surfaces in Gallium. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1529>
This commit is contained in:
parent
a4e535d5c1
commit
117453b947
1 changed files with 15 additions and 4 deletions
|
@ -476,6 +476,8 @@ gst_va_memory_dispose (GstMiniObject * mini_object)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* creates an exported VASurface and adds it as @buffer's memories
|
||||||
|
* qdata */
|
||||||
gboolean
|
gboolean
|
||||||
gst_va_dmabuf_setup_buffer (GstAllocator * allocator, GstBuffer * buffer,
|
gst_va_dmabuf_setup_buffer (GstAllocator * allocator, GstBuffer * buffer,
|
||||||
GstVaAllocationParams * params)
|
GstVaAllocationParams * params)
|
||||||
|
@ -505,10 +507,19 @@ gst_va_dmabuf_setup_buffer (GstAllocator * allocator, GstBuffer * buffer,
|
||||||
&surface, 1))
|
&surface, 1))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Each layer will contain exactly one plane. For example, an NV12
|
/* FIXME(victor): find a better way since this is just a hack for
|
||||||
* surface will be exported as two layers */
|
* i965 driver */
|
||||||
export_flags = VA_EXPORT_SURFACE_SEPARATE_LAYERS
|
if (fourcc == VA_FOURCC_YUY2 || fourcc == VA_FOURCC_UYVY) {
|
||||||
| VA_EXPORT_SURFACE_READ_WRITE;
|
/* These are not representable as separate planes */
|
||||||
|
export_flags = VA_EXPORT_SURFACE_COMPOSED_LAYERS;
|
||||||
|
} else {
|
||||||
|
/* Each layer will contain exactly one plane. For example, an NV12
|
||||||
|
* surface will be exported as two layers */
|
||||||
|
export_flags = VA_EXPORT_SURFACE_SEPARATE_LAYERS;
|
||||||
|
}
|
||||||
|
|
||||||
|
export_flags |= VA_EXPORT_SURFACE_READ_WRITE;
|
||||||
|
|
||||||
if (!_export_surface_to_dmabuf (self->display, surface, export_flags, &desc))
|
if (!_export_surface_to_dmabuf (self->display, surface, export_flags, &desc))
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue