1 Star 1 Fork 0

MorningLight/QTFFmpegSDLPlayer

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
FrameQueue.cpp 1.68 KB
一键复制 编辑 原始数据 按行查看 历史
huimingli 提交于 2018-02-23 20:50 . 视频播放器收尾
#include "FrameQueue.h"
#include <QMutexLocker>
FrameQueue::FrameQueue()
{
}
//************************************
// Method: enQueue
// FullName: FrameQueue::enQueue
// Access: public
// Returns: bool
// Qualifier: 帧队列入队
// Parameter: const AVFrame * frame
//************************************
bool FrameQueue::enQueue(const AVFrame* frame)
{
AVFrame* p = av_frame_alloc();
int ret = av_frame_ref(p, frame);
if (ret < 0)
return false;
p->opaque = (void *)new double(*(double*)p->opaque); //上一个指向的是一个局部的变量,这里重新分配pts空间
QMutexLocker locker(&mutex);
queue.push(p);
cond.wakeOne();
return true;
}
//************************************
// Method: deQueue
// FullName: FrameQueue::deQueue
// Access: public
// Returns: AVFrame *
// Qualifier:帧队列
//************************************
AVFrame * FrameQueue::deQueue()
{
bool ret = true;
AVFrame *tmp;
QMutexLocker locker(&mutex);
while (true)
{
if (!queue.empty())
{
tmp = queue.front();
queue.pop();
ret = true;
break;
}
else
{
cond.wait(&mutex);
}
}
return tmp;
}
//************************************
// Method: getQueueSize
// FullName: FrameQueue::getQueueSize
// Access: public
// Returns: int
// Qualifier:获取队列大小
//************************************
int FrameQueue::getQueueSize()
{
return queue.size();
}
//************************************
// Method: queueFlush
// FullName: FrameQueue::queueFlush
// Access: public
// Returns: void
// Qualifier:清空帧队列
//************************************
void FrameQueue::queueFlush() {
while (!queue.empty())
{
AVFrame *frame = deQueue();
av_frame_unref(frame);
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/MorningLight/QTFFmpegSDLPlayer.git
git@gitee.com:MorningLight/QTFFmpegSDLPlayer.git
MorningLight
QTFFmpegSDLPlayer
QTFFmpegSDLPlayer
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385