Milestone, fix black screen and initial frame issues

This commit is contained in:
markmental 2026-03-27 22:59:37 -04:00
commit 0a250b05f3
11 changed files with 708 additions and 47 deletions

View file

@ -1,5 +1,6 @@
#include "frame_queue.h"
#include <libavutil/mem.h>
#include <stdlib.h>
#include <string.h>
@ -8,7 +9,7 @@ void frame_data_free(FrameData *frame) {
return;
}
free(frame->pixels);
av_freep(&frame->buffer);
memset(frame, 0, sizeof(*frame));
}
@ -110,3 +111,41 @@ int frame_queue_pop_latest(FrameQueue *queue, FrameData *out) {
SDL_UnlockMutex(queue->mutex);
return 1;
}
int frame_queue_peek_first(FrameQueue *queue, FrameData *out) {
if (!queue || !out || !queue->mutex) {
return 0;
}
SDL_LockMutex(queue->mutex);
if (queue->count == 0) {
SDL_UnlockMutex(queue->mutex);
return 0;
}
*out = queue->frames[queue->head];
SDL_UnlockMutex(queue->mutex);
return 1;
}
int frame_queue_pop_first(FrameQueue *queue, FrameData *out) {
if (!queue || !out || !queue->mutex) {
return 0;
}
SDL_LockMutex(queue->mutex);
if (queue->count == 0) {
SDL_UnlockMutex(queue->mutex);
return 0;
}
*out = queue->frames[queue->head];
memset(&queue->frames[queue->head], 0, sizeof(queue->frames[queue->head]));
queue->head = (queue->head + 1) % FRAME_QUEUE_CAPACITY;
queue->count -= 1;
if (queue->count == 0) {
queue->head = 0;
}
SDL_UnlockMutex(queue->mutex);
return 1;
}