examples: fix modifier handling

Use a preallocated array of modifiers instead of using a dynamically
allocated one that is too small.
This commit is contained in:
Wim Taymans 2022-06-08 15:13:03 +02:00
parent 74646d1be5
commit 5b23adbb65

View file

@ -45,6 +45,7 @@
#define HEIGHT 480 #define HEIGHT 480
#define MAX_BUFFERS 64 #define MAX_BUFFERS 64
#define MAX_MOD 8
#include "sdl.h" #include "sdl.h"
@ -61,7 +62,7 @@ struct pw_version {
struct modifier_info { struct modifier_info {
uint32_t spa_format; uint32_t spa_format;
uint32_t n_modifiers; uint32_t n_modifiers;
uint64_t *modifiers; uint64_t modifiers[MAX_MOD];
}; };
struct data { struct data {
@ -83,7 +84,7 @@ struct data {
struct spa_rectangle size; struct spa_rectangle size;
uint32_t n_mod_info; uint32_t n_mod_info;
struct modifier_info mod_info[1]; struct modifier_info mod_info[2];
int counter; int counter;
}; };
@ -107,14 +108,12 @@ static void init_modifiers(struct data *data)
data->n_mod_info = 1; data->n_mod_info = 1;
data->mod_info[0].spa_format = SPA_VIDEO_FORMAT_RGB; data->mod_info[0].spa_format = SPA_VIDEO_FORMAT_RGB;
data->mod_info[0].n_modifiers = 2; data->mod_info[0].n_modifiers = 2;
data->mod_info[0].modifiers = (uint64_t*)malloc(2*sizeof(uint32_t));
data->mod_info[0].modifiers[0] = DRM_FORMAT_MOD_LINEAR; data->mod_info[0].modifiers[0] = DRM_FORMAT_MOD_LINEAR;
data->mod_info[0].modifiers[1] = DRM_FORMAT_MOD_INVALID; data->mod_info[0].modifiers[1] = DRM_FORMAT_MOD_INVALID;
} }
static void destroy_modifiers(struct data *data) static void destroy_modifiers(struct data *data)
{ {
free(data->mod_info[0].modifiers);
data->mod_info[0].n_modifiers = 0; data->mod_info[0].n_modifiers = 0;
} }