Milestone, fix black screen and initial frame issues
This commit is contained in:
parent
f4fa723863
commit
0a250b05f3
11 changed files with 708 additions and 47 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue