首先贴下函数原型:
typedef struct AVPacketList {
AVPacket pkt; //AVPacket也是一个结构体,不多解释
struct AVPacketList *next; //next是一个AVPacketList指针
} AVPacketList;
首先贴下函数原型:
typedef struct PacketQueue {
AVPacketList *first_pkt, *last_pkt; //first_pkt,last_pkt分别是AVPacketList类型指针
int nb_packets;
int size;
SDL_mutex *mutex;
SDL_cond *cond;
} PacketQueue;
首先贴下函数原型:
int packet_queue_put(PacketQueue *q, AVPacket *pkt) {
AVPacketList *pkt1;
if(av_dup_packet(pkt) < 0) {
return -1;
}
pkt1 = av_malloc(sizeof(AVPacketList));
if (!pkt1)
return -1;
pkt1->pkt = *pkt;
pkt1->next = NULL;
SDL_LockMutex(q->mutex);
if (!q->last_pkt) //判断q->last_pkt是否为空,
q->first_pkt = pkt1; //为空的话,则让first_pkt指向这个pktl这个结构体
else
q->last_pkt->next = pkt1; //如果q->last_pkt不为空,也就是q->last_pkt指向一个pkl类型的结构体
q->last_pkt = pkt1; //任何时候都会执行到这一句,q->last_pkt指向最新进来的pkl类型
q->nb_packets++;
q->size += pkt1->pkt.size;
SDL_CondSignal(q->cond);
SDL_UnlockMutex(q->mutex);
return 0;
图片大概就这么个意思