2026-03-27 21:45:40 -04:00
|
|
|
#ifndef FRAME_QUEUE_H
|
|
|
|
|
#define FRAME_QUEUE_H
|
|
|
|
|
|
|
|
|
|
#include <SDL2/SDL.h>
|
|
|
|
|
|
2026-03-27 23:19:42 -04:00
|
|
|
#define FRAME_QUEUE_CAPACITY 12
|
2026-03-27 21:45:40 -04:00
|
|
|
|
|
|
|
|
typedef struct FrameData {
|
2026-03-27 22:59:37 -04:00
|
|
|
unsigned char *buffer;
|
|
|
|
|
unsigned char *plane_y;
|
|
|
|
|
unsigned char *plane_u;
|
|
|
|
|
unsigned char *plane_v;
|
2026-03-27 21:45:40 -04:00
|
|
|
int width;
|
|
|
|
|
int height;
|
2026-03-27 22:59:37 -04:00
|
|
|
int pitch_y;
|
|
|
|
|
int pitch_u;
|
|
|
|
|
int pitch_v;
|
2026-03-27 21:45:40 -04:00
|
|
|
double pts_seconds;
|
|
|
|
|
} FrameData;
|
|
|
|
|
|
|
|
|
|
typedef struct FrameQueue {
|
|
|
|
|
FrameData frames[FRAME_QUEUE_CAPACITY];
|
|
|
|
|
int head;
|
|
|
|
|
int count;
|
|
|
|
|
SDL_mutex *mutex;
|
|
|
|
|
SDL_cond *cond;
|
|
|
|
|
} FrameQueue;
|
|
|
|
|
|
|
|
|
|
int frame_queue_init(FrameQueue *queue);
|
|
|
|
|
void frame_queue_destroy(FrameQueue *queue);
|
|
|
|
|
void frame_queue_clear(FrameQueue *queue);
|
|
|
|
|
int frame_queue_push(FrameQueue *queue, FrameData *frame);
|
|
|
|
|
int frame_queue_pop_latest(FrameQueue *queue, FrameData *out);
|
2026-03-27 22:59:37 -04:00
|
|
|
int frame_queue_peek_first(FrameQueue *queue, FrameData *out);
|
|
|
|
|
int frame_queue_pop_first(FrameQueue *queue, FrameData *out);
|
2026-03-27 21:45:40 -04:00
|
|
|
void frame_data_free(FrameData *frame);
|
|
|
|
|
|
|
|
|
|
#endif
|