〇、参考
《音视频开发进阶指南:基于Android与iOS平台的实践》:7.2.1 音频队列的实现
一、最小队列
-
使用C语言
-
C++类中的方法,对应到C中则为,结构体中的函数指针类型的属性
-
结构体中的其他属性,称为常规属性
-
-
使用链表实现,将队列元素作为有效数据封装到链表节点中,最终连接成的链表就是一个队列
typedef struct PacketQueue {
PacketList *mFirst;
PacketList *mLast;
Mutex *mMutex;
Cond *mCond;
int (*packet_queue_put)(PacketQueue *que, Packet *pkt);
int (*packet_queue_get)(PacketQueue *que, Packet *pkt, int block);
} PacketQueue;
1.0 自定义链表(节点)类型
链表的其中一个成员也是一个链表,由于这种特殊结构的存在,后面我们将链表节点类型和链表类型当成一回事,可以混用。
typedef struct PacketList{
Packet *pkt;
PacketList *next;
} PacketList;
1.1 队列常规属性
-
头节点mFirst:链表节点类型,当链表只有一个节点时,头节点同时也是尾节点
-
尾节点mLast:链表节点类型,当链表只有一个节点时,尾节点同时也是头节点
-
互斥锁mMutex:和条件变量一起保证线程安全
</