pod: add and use reserve_bytes helper

This commit is contained in:
Wim Taymans 2020-02-19 11:02:00 +01:00
parent cc1ed84f9f
commit 11086f23ea
2 changed files with 13 additions and 6 deletions

View file

@ -298,6 +298,14 @@ spa_pod_builder_bytes(struct spa_pod_builder *builder, const void *bytes, uint32
res = r;
return res;
}
static inline void *
spa_pod_builder_reserve_bytes(struct spa_pod_builder *builder, uint32_t len)
{
uint32_t offset = builder->state.offset;
if (spa_pod_builder_bytes(builder, NULL, len) < 0)
return NULL;
return SPA_POD_BODY(spa_pod_builder_deref(builder, offset));
}
#define SPA_POD_INIT_Pointer(type,value) (struct spa_pod_pointer){ { sizeof(struct spa_pod_pointer_body), SPA_TYPE_Pointer }, { type, 0, value } }

View file

@ -973,7 +973,7 @@ static int midi_play(struct data *d, void *src, unsigned int n_frames)
d->clock_time = last_frame;
while (1) {
uint32_t frame, offset;
uint32_t frame;
uint8_t *buf;
res = midi_file_peek_event(&d->midi.mf, &ev);
@ -993,11 +993,10 @@ static int midi_play(struct data *d, void *src, unsigned int n_frames)
break;
spa_pod_builder_control(&b, frame, SPA_CONTROL_Midi);
offset = b.state.offset;
spa_pod_builder_bytes(&b, NULL, ev.size + 1);
buf = SPA_POD_BODY(spa_pod_builder_deref(&b, offset));
buf[0] = ev.status;
memcpy(&buf[1], ev.data, ev.size);
if ((buf = spa_pod_builder_reserve_bytes(&b, ev.size + 1)) != NULL) {
buf[0] = ev.status;
memcpy(&buf[1], ev.data, ev.size);
}
next:
midi_file_consume_event(&d->midi.mf, &ev);
}