diff --git a/spa/plugins/vulkan/meson.build b/spa/plugins/vulkan/meson.build index ba631bcec..e9e23b543 100644 --- a/spa/plugins/vulkan/meson.build +++ b/spa/plugins/vulkan/meson.build @@ -1,5 +1,6 @@ spa_vulkan_sources = [ 'plugin.c', + 'pixel-formats.c', 'vulkan-compute-filter.c', 'vulkan-compute-source.c', 'vulkan-compute-utils.c', diff --git a/spa/plugins/vulkan/pixel-formats.c b/spa/plugins/vulkan/pixel-formats.c new file mode 100644 index 000000000..06144d758 --- /dev/null +++ b/spa/plugins/vulkan/pixel-formats.c @@ -0,0 +1,33 @@ +/* Spa */ +/* SPDX-FileCopyrightText: Copyright © 2023 columbarius */ +/* SPDX-License-Identifier: MIT */ + +#include "pixel-formats.h" + +#include +#include + +struct pixel_info { + uint32_t format; + uint32_t bpp; +} pixel_infos[] = { + { SPA_VIDEO_FORMAT_RGBA_F32, 16 }, + { SPA_VIDEO_FORMAT_BGRA, 4 }, + { SPA_VIDEO_FORMAT_RGBA, 4 }, + { SPA_VIDEO_FORMAT_BGRx, 4 }, + { SPA_VIDEO_FORMAT_RGBx, 4 }, + { SPA_VIDEO_FORMAT_BGR, 3 }, + { SPA_VIDEO_FORMAT_RGB, 3 }, +}; + +bool get_pixel_format_info(uint32_t format, struct pixel_format_info *info) +{ + struct pixel_info *p; + SPA_FOR_EACH_ELEMENT(pixel_infos, p) { + if (p->format != format) + continue; + info->bpp = p->bpp; + return true; + } + return false; +} diff --git a/spa/plugins/vulkan/pixel-formats.h b/spa/plugins/vulkan/pixel-formats.h new file mode 100644 index 000000000..949733107 --- /dev/null +++ b/spa/plugins/vulkan/pixel-formats.h @@ -0,0 +1,12 @@ +/* Spa */ +/* SPDX-FileCopyrightText: Copyright © 2023 columbarius */ +/* SPDX-License-Identifier: MIT */ + +#include +#include + +struct pixel_format_info { + uint32_t bpp; // bytes per pixel +}; + +bool get_pixel_format_info(uint32_t format, struct pixel_format_info *info);