You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PayloadAPP/Src/VideoGL/avpacketqueuemanager.cpp

73 lines
1.9 KiB
C++

#include "avpacketqueuemanager.h"
AVPacketQueueManager::AVPacketQueueManager() {
m_decodeQueue.reserve(QUEUECAPACITY);
m_saveQueue.reserve(QUEUECAPACITY);
m_pushQueue.reserve(QUEUECAPACITY);
}
void AVPacketQueueManager::enqueueDecodePacket(AVPacket *pkt) {
QMutexLocker locker(&m_decodeMutex);
AVPacket *clonedPacket = av_packet_clone(pkt);
if (clonedPacket) m_decodeQueue.enqueue(clonedPacket);
}
void AVPacketQueueManager::enqueueSavePacket(AVPacket *pkt) {
QMutexLocker locker(&m_saveMutex);
AVPacket *clonedPacket = av_packet_clone(pkt);
if (clonedPacket) m_saveQueue.enqueue(clonedPacket);
}
void AVPacketQueueManager::enqueuePushPacket(AVPacket *pkt) {
QMutexLocker locker(&m_pushMutex);
AVPacket *clonedPacket = av_packet_clone(pkt);
if (clonedPacket) m_pushQueue.enqueue(clonedPacket);
}
AVPacket *AVPacketQueueManager::dequeueDecodePacket() {
QMutexLocker locker(&m_decodeMutex);
if (!m_decodeQueue.isEmpty()) {
AVPacket *pkt = m_decodeQueue.dequeue();
return pkt;
}
return nullptr;
}
AVPacket *AVPacketQueueManager::dequeueSavePacket() {
QMutexLocker locker(&m_saveMutex);
if (!m_saveQueue.isEmpty()) {
AVPacket *pkt = m_saveQueue.dequeue();
return pkt;
}
return nullptr;
}
AVPacket *AVPacketQueueManager::dequeuePushPacket() {
QMutexLocker locker(&m_pushMutex);
if (!m_pushQueue.isEmpty()) {
AVPacket *pkt = m_pushQueue.dequeue();
return pkt;
}
return nullptr;
}
void AVPacketQueueManager::clearDecodeQueue() {
QMutexLocker locker(&m_decodeMutex);
m_decodeQueue.clear();
}
void AVPacketQueueManager::clearSaveQueue() {
QMutexLocker locker(&m_saveMutex);
m_saveQueue.clear();
}
void AVPacketQueueManager::clearPushQueue() {
QMutexLocker locker(&m_pushMutex);
m_pushQueue.clear();
}
bool AVPacketQueueManager::isEmptySaveQueue() {
QMutexLocker locker(&m_saveMutex);
return m_saveQueue.isEmpty();
}