原理
最基础的使用Demo
typdef struct {
int size;
audio_queue_t queue;
char *base;
}Queue;
Queue *q = malloc(sizeof(Queue));
q->size = 1024;
q->base= malloc((sizeof(audio_queue_t ) + q->size + 1 * sizeof(char)));
if (!q->base) {
goto err_malloc_queuebuffer;
}
q->queue = queue_init(q->base, q->size + 1);
Queue *q = getQueue(xxx);
queue_write(q->queue, data, data_size);
Queue *q = getQueue(xxx);
queue_read(q->queue, outbuffer, outsize);
Queue *q = getQueue(xxx);
if (NULL != q->queue) {
queue_destroy(q->queue);
q->queue = NULL;
free(q->base);
q->base= NULL;
}
free(q);
代码
#ifndef AUDIOQUEUE_H_
#define AUDIOQUEUE_H_
#include <string.h>
#include <pthread.h>
#include <stdbool.h>
typedef struct audio_queue_t {
pthread_mutex_t mutex;
pthread_cond_t cond;
int capacity;
int front;
int rear;
int more;
} audio_queue_t;
#ifdef __cplusplus
extern "C" {
#endif
audio_queue_t* queue_init(void* base, int capacity);
char* queue_get_write_addr(audio_queue_t* queue);
void queue_destroy(audio_queue_t* queue);
int queue_real_capacity(audio_queue_t* queue);
int queue_front(audio_queue_t* queue);
int