0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 13:08:50 +02:00

linux-capture: Unify format lookups

Merge all format lookup functions into a single one, with all
out parameters optional.
This commit is contained in:
Georges Basile Stavracas Neto 2021-12-27 11:14:40 -03:00 committed by Georges Basile Stavracas Neto
parent f0026142f0
commit 64bb5a0974

View File

@ -352,29 +352,20 @@ static const struct {
#define N_SUPPORTED_FORMATS \
(sizeof(supported_formats) / sizeof(supported_formats[0]))
static bool spa_pixel_format_to_drm_format(uint32_t spa_format,
uint32_t *out_format)
static bool lookup_format_info_from_spa_format(
uint32_t spa_format, uint32_t *out_drm_format,
enum gs_color_format *out_gs_format, bool *out_swap_red_blue)
{
for (size_t i = 0; i < N_SUPPORTED_FORMATS; i++) {
if (supported_formats[i].spa_format != spa_format)
continue;
*out_format = supported_formats[i].drm_format;
return true;
}
return false;
}
static bool spa_pixel_format_to_obs_format(uint32_t spa_format,
enum gs_color_format *out_format,
bool *swap_red_blue)
{
for (size_t i = 0; i < N_SUPPORTED_FORMATS; i++) {
if (supported_formats[i].spa_format != spa_format)
continue;
*out_format = supported_formats[i].gs_format;
*swap_red_blue = supported_formats[i].swap_red_blue;
if (out_drm_format)
*out_drm_format = supported_formats[i].drm_format;
if (out_gs_format)
*out_gs_format = supported_formats[i].gs_format;
if (out_swap_red_blue)
*out_swap_red_blue = supported_formats[i].swap_red_blue;
return true;
}
return false;
@ -661,8 +652,9 @@ static void on_process_cb(void *user_data)
obs_pw->format.info.raw.size.width,
obs_pw->format.info.raw.size.height);
if (!spa_pixel_format_to_drm_format(
obs_pw->format.info.raw.format, &drm_format)) {
if (!lookup_format_info_from_spa_format(
obs_pw->format.info.raw.format, &drm_format, NULL,
NULL)) {
blog(LOG_ERROR,
"[pipewire] unsupported DMA buffer format: %d",
obs_pw->format.info.raw.format);
@ -698,8 +690,8 @@ static void on_process_cb(void *user_data)
blog(LOG_DEBUG, "[pipewire] Buffer has memory texture");
enum gs_color_format obs_format;
if (!spa_pixel_format_to_obs_format(
obs_pw->format.info.raw.format, &obs_format,
if (!lookup_format_info_from_spa_format(
obs_pw->format.info.raw.format, NULL, &obs_format,
&swap_red_blue)) {
blog(LOG_ERROR,
"[pipewire] unsupported DMA buffer format: %d",
@ -751,8 +743,8 @@ read_metadata:
if (bitmap && bitmap->size.width > 0 &&
bitmap->size.height > 0 &&
spa_pixel_format_to_obs_format(bitmap->format, &format,
&swap_red_blue)) {
lookup_format_info_from_spa_format(
bitmap->format, NULL, &format, &swap_red_blue)) {
const uint8_t *bitmap_data;
bitmap_data =