#include "FrameQueue.h" FrameQueue::FrameQueue(/* args */) { for (size_t i = 0; i < Maxsize; i++) { base[i] = av_frame_alloc(); } front = rear = 0;//头指针和尾指针置为零,队列为空 } FrameQueue::~FrameQueue() { if (base) { for (size_t i = 0; i < Maxsize; i++) { if (base[i]) { av_frame_free(&base[i]); } } } rear = front = 0; } //循环队列的入队 AVFrame* FrameQueue::getTail() { //插入一个元素e为Q的新的队尾元素 if ((rear + 1) % Maxsize == front) return nullptr;//队满 return base[rear];//获取队尾元素 } // 将队尾元素添加到队列中 void FrameQueue::addTail() { rear = (rear + 1) % Maxsize;//队尾指针加1 } //循环队列的出队 AVFrame* FrameQueue::deQueue() { //删除Q的队头元素,用e返回其值 if (front == rear) return nullptr;//队空 AVFrame* e = base[front];//保存队头元素 front = (front + 1) % Maxsize;//队头指针加1 return e; } //取循环队列的队头元素 AVFrame* FrameQueue::getHead() { //返回Q的队头元素,不修改队头指针 if (front == rear) return nullptr;//队列为空,取元素失败 return base[front]; } void FrameQueue::addHead() { front = (front + 1) % Maxsize;//队头指针加1 } int FrameQueue::length() { return (rear - front + Maxsize) % Maxsize; } bool FrameQueue::isEmpty() { if (front == rear) return true; return false; } void FrameQueue::clearQueue() { rear = front = 0; }