examples: use BGRA as the format

RGB is not supported by videoconvert.
This commit is contained in:
Wim Taymans 2025-09-09 15:54:21 +02:00
parent 2891e579a1
commit 862ac1f7c8
4 changed files with 18 additions and 14 deletions

View file

@ -22,7 +22,7 @@
#include <pipewire/pipewire.h>
#define BPP 3
#define BPP 4
#define CURSOR_WIDTH 64
#define CURSOR_HEIGHT 64
#define CURSOR_BPP 4
@ -404,7 +404,7 @@ int main(int argc, char *argv[])
SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video),
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
SPA_FORMAT_VIDEO_format, SPA_POD_Id(SPA_VIDEO_FORMAT_RGB),
SPA_FORMAT_VIDEO_format, SPA_POD_Id(SPA_VIDEO_FORMAT_RGBA),
SPA_FORMAT_VIDEO_size, SPA_POD_CHOICE_RANGE_Rectangle(
&SPA_RECTANGLE(320, 240),
&SPA_RECTANGLE(1, 1),

View file

@ -24,7 +24,7 @@
#include <pipewire/pipewire.h>
#define BPP 3
#define BPP 4
#define CURSOR_WIDTH 64
#define CURSOR_HEIGHT 64
#define CURSOR_BPP 4
@ -414,11 +414,11 @@ on_stream_param_changed(void *_data, uint32_t id, const struct spa_pod *param)
modifier = modifiers[rand()%n_modifiers];
}
params[0] = fixate_format(&b, SPA_VIDEO_FORMAT_RGB, &modifier);
params[0] = fixate_format(&b, SPA_VIDEO_FORMAT_RGBA, &modifier);
params[1] = build_format(&b, SPA_VIDEO_FORMAT_RGB,
params[1] = build_format(&b, SPA_VIDEO_FORMAT_RGBA,
supported_modifiers, sizeof(supported_modifiers)/sizeof(supported_modifiers[0]));
params[2] = build_format(&b, SPA_VIDEO_FORMAT_RGB,
params[2] = build_format(&b, SPA_VIDEO_FORMAT_RGBA,
NULL, 0);
printf("announcing fixated EnumFormats\n");
@ -540,9 +540,9 @@ int main(int argc, char *argv[])
* The server will select a format that matches and informs us about this
* in the stream param_changed event.
*/
params[0] = build_format(&b, SPA_VIDEO_FORMAT_RGB,
params[0] = build_format(&b, SPA_VIDEO_FORMAT_RGBA,
supported_modifiers, sizeof(supported_modifiers)/sizeof(supported_modifiers[0]));
params[1] = build_format(&b, SPA_VIDEO_FORMAT_RGB, NULL, 0);
params[1] = build_format(&b, SPA_VIDEO_FORMAT_RGBA, NULL, 0);
printf("announcing starting EnumFormats\n");
for (unsigned int i=0; i < 2; i++) {

View file

@ -22,7 +22,7 @@
#include <pipewire/pipewire.h>
#define BPP 3
#define BPP 4
#define CURSOR_WIDTH 64
#define CURSOR_HEIGHT 64
#define CURSOR_BPP 4
@ -373,7 +373,7 @@ static void on_reneg_timeout(void *userdata, uint64_t expirations)
SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video),
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
SPA_FORMAT_VIDEO_format, SPA_POD_Id(SPA_VIDEO_FORMAT_RGB),
SPA_FORMAT_VIDEO_format, SPA_POD_Id(SPA_VIDEO_FORMAT_RGBA),
SPA_FORMAT_VIDEO_size, SPA_POD_Rectangle(&SPA_RECTANGLE(width, height)),
SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&SPA_FRACTION(25, 1)));
@ -398,7 +398,7 @@ int main(int argc, char *argv[])
pw_init(&argc, &argv);
/* create a thread loop and start it */
data.loop = pw_thread_loop_new("video-src-alloc", NULL);
data.loop = pw_thread_loop_new("video-src-reneg", NULL);
/* take the lock around all PipeWire functions. In callbacks, the lock
* is already taken for you but it's ok to lock again because the lock is
@ -449,7 +449,7 @@ int main(int argc, char *argv[])
SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video),
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
SPA_FORMAT_VIDEO_format, SPA_POD_Id(SPA_VIDEO_FORMAT_RGB),
SPA_FORMAT_VIDEO_format, SPA_POD_Id(SPA_VIDEO_FORMAT_RGBA),
SPA_FORMAT_VIDEO_size, SPA_POD_CHOICE_RANGE_Rectangle(
&SPA_RECTANGLE(320, 240),
&SPA_RECTANGLE(1, 1),

View file

@ -16,10 +16,11 @@
#include <spa/param/video/format-utils.h>
#include <spa/param/tag-utils.h>
#include <spa/debug/pod.h>
#include <spa/debug/format.h>
#include <pipewire/pipewire.h>
#define BPP 3
#define BPP 4
#define CURSOR_WIDTH 64
#define CURSOR_HEIGHT 64
#define CURSOR_BPP 4
@ -224,6 +225,9 @@ on_stream_param_changed(void *_data, uint32_t id, const struct spa_pod *param)
if (param == NULL || id != SPA_PARAM_Format)
return;
fprintf(stderr, "got format:\n");
spa_debug_format(2, NULL, param);
spa_format_video_raw_parse(param, &data->format);
data->stride = SPA_ROUND_UP_N(data->format.size.width * BPP, 4);
@ -317,7 +321,7 @@ int main(int argc, char *argv[])
SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video),
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
SPA_FORMAT_VIDEO_format, SPA_POD_Id(SPA_VIDEO_FORMAT_RGB),
SPA_FORMAT_VIDEO_format, SPA_POD_Id(SPA_VIDEO_FORMAT_BGRA),
SPA_FORMAT_VIDEO_size, SPA_POD_CHOICE_RANGE_Rectangle(
&SPA_RECTANGLE(320, 240),
&SPA_RECTANGLE(1, 1),