va: allocator: try to create surface without fourcc but chroma only

There are, in VPP, surfaces that doesn't support 4:2:2 fourccs but it
supports the chroma. So this patch gives that opportunity to the
driver.

This patch also simplifiies
gst_va_video_surface_format_from_image_format() to just an iterator
for surfaces available formats.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1529>
This commit is contained in:
Víctor Manuel Jáquez Leal 2020-09-12 13:10:18 +02:00
parent 482a7d7d7e
commit 20e493981b
2 changed files with 15 additions and 18 deletions

View file

@ -885,7 +885,7 @@ gst_va_allocator_alloc (GstAllocator * allocator,
{ {
GstVaAllocator *self; GstVaAllocator *self;
GstVaMemory *mem; GstVaMemory *mem;
GstVideoFormat format; GstVideoFormat format, img_format;
VAImage image = { 0, }; VAImage image = { 0, };
VASurfaceID surface; VASurfaceID surface;
guint32 fourcc, rt_format; guint32 fourcc, rt_format;
@ -894,20 +894,22 @@ gst_va_allocator_alloc (GstAllocator * allocator,
self = GST_VA_ALLOCATOR (allocator); self = GST_VA_ALLOCATOR (allocator);
format = img_format = GST_VIDEO_INFO_FORMAT (&params->info);
gst_va_video_surface_format_from_image_format (GST_VIDEO_INFO_FORMAT
(&params->info), self->surface_formats); format = gst_va_video_surface_format_from_image_format (img_format,
self->surface_formats);
if (format == GST_VIDEO_FORMAT_UNKNOWN) { if (format == GST_VIDEO_FORMAT_UNKNOWN) {
GST_ERROR_OBJECT (allocator, "Unsupported format: %s", /* try a surface without fourcc but rt_format only */
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&params->info))); fourcc = 0;
return NULL; rt_format = gst_va_chroma_from_video_format (img_format);
} else {
fourcc = gst_va_fourcc_from_video_format (format);
rt_format = gst_va_chroma_from_video_format (format);
} }
fourcc = gst_va_fourcc_from_video_format (format); if (rt_format == 0) {
rt_format = gst_va_chroma_from_video_format (format); GST_ERROR_OBJECT (allocator, "Unsupported image format: %s",
if (fourcc == 0 || rt_format == 0) { gst_video_format_to_string (img_format));
GST_ERROR_OBJECT (allocator, "Unsupported format: %s",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&params->info)));
return NULL; return NULL;
} }

View file

@ -210,7 +210,7 @@ gst_va_video_surface_format_from_image_format (GstVideoFormat image_format,
GArray * surface_formats) GArray * surface_formats)
{ {
GstVideoFormat surface_format; GstVideoFormat surface_format;
guint i, image_chroma, surface_chroma; guint i, image_chroma;
if (image_format == GST_VIDEO_FORMAT_UNKNOWN) if (image_format == GST_VIDEO_FORMAT_UNKNOWN)
return GST_VIDEO_FORMAT_UNKNOWN; return GST_VIDEO_FORMAT_UNKNOWN;
@ -227,11 +227,6 @@ gst_va_video_surface_format_from_image_format (GstVideoFormat image_format,
if (surface_format == image_format) if (surface_format == image_format)
return surface_format; return surface_format;
surface_chroma = gst_va_chroma_from_video_format (surface_format);
if (surface_chroma == image_chroma)
return surface_format;
} }
return GST_VIDEO_FORMAT_UNKNOWN; return GST_VIDEO_FORMAT_UNKNOWN;