translate packet_queue.c into English

translate packet_queue.c into English
pull/166/head
xufulong 5 years ago
parent 8922e50150
commit 08a7bc7464
  1. 28
      app/src/main/cpp/AVpacket_queue.c
  2. 24
      app/src/main/cpp/AVpacket_queue.h

@ -6,39 +6,38 @@
#include <libavcodec/avcodec.h>
AVPacketQueue* queue_init(int size){
AVPacketQueue* queue = malloc(sizeof(AVPacketQueue));
AVPacketQueue *queue_init(int size) {
AVPacketQueue *queue = malloc(sizeof(AVPacketQueue));
queue->size = size;
queue->next_to_read = 0;
queue->next_to_write = 0;
int i;
queue->packets = malloc(sizeof(*queue->packets) * size);
for(i = 0; i < size; i++){
for (i = 0; i < size; i++) {
queue->packets[i] = malloc(sizeof(AVPacket));
}
return queue;
}
void queue_free(AVPacketQueue *queue){
void queue_free(AVPacketQueue *queue) {
int i;
for(i=0; i<queue->size; i++){
for (i = 0; i < queue->size; i++) {
free(queue->packets[i]);
}
free(queue->packets);
free(queue);
}
int queue_next(AVPacketQueue* queue, int current){
return (current+1) % queue->size;
int queue_next(AVPacketQueue *queue, int current) {
return (current + 1) % queue->size;
}
void* queue_push(AVPacketQueue* queue, pthread_mutex_t* mutex, pthread_cond_t* cond){
void *queue_push(AVPacketQueue *queue, pthread_mutex_t *mutex, pthread_cond_t *cond) {
int current = queue->next_to_write;
int next_to_write;
for(;;){
for (;;) {
next_to_write = queue_next(queue, current);
//写的不等于读的,跳出循环
if(next_to_write != queue->next_to_read){
if (next_to_write != queue->next_to_read) {
break;
}
pthread_cond_wait(cond, mutex);
@ -48,11 +47,10 @@ void* queue_push(AVPacketQueue* queue, pthread_mutex_t* mutex, pthread_cond_t* c
return queue->packets[current];
}
void* queue_pop(AVPacketQueue* queue, pthread_mutex_t* mutex, pthread_cond_t* cond){
void *queue_pop(AVPacketQueue *queue, pthread_mutex_t *mutex, pthread_cond_t *cond) {
int current = queue->next_to_read;
for(;;){
//写的不等于读的,跳出循环
if(queue->next_to_write != queue->next_to_read){
for (;;) {
if (queue->next_to_write != queue->next_to_read) {
break;
}
pthread_cond_wait(cond, mutex);

@ -4,22 +4,26 @@
#ifndef VIDEOPLAYER_AVPACKET_QUEUE_H
#define VIDEOPLAYER_AVPACKET_QUEUE_H
#include <pthread.h>
typedef struct AVPacketQueue{
//队列大小
typedef struct AVPacketQueue {
//the size of queue
int size;
//指针数组
void ** packets;
//下一个写入的packet
//packet array
void **packets;
//the packet next to write
int next_to_write;
//下一个读取的packet
//the packet next to read
int next_to_read;
}AVPacketQueue;
} AVPacketQueue;
AVPacketQueue *queue_init(int size);
AVPacketQueue* queue_init(int size);
void queue_free(AVPacketQueue *queue);
void* queue_push(AVPacketQueue* queue, pthread_mutex_t* mutex, pthread_cond_t* cond);
void* queue_pop(AVPacketQueue* queue, pthread_mutex_t* mutex, pthread_cond_t* cond);
void *queue_push(AVPacketQueue *queue, pthread_mutex_t *mutex, pthread_cond_t *cond);
void *queue_pop(AVPacketQueue *queue, pthread_mutex_t *mutex, pthread_cond_t *cond);
#endif //VIDEOPLAYER_AVPACKET_QUEUE_H
Loading…
Cancel
Save