|
@@ -13,6 +13,7 @@
|
|
|
|
|
|
#include "ThreadPool.h"
|
|
|
#include <mutex>
|
|
|
+#include <string>
|
|
|
|
|
|
ThreadManager::ThreadManager()
|
|
|
{
|
|
@@ -38,16 +39,15 @@ void ThreadManager::stopAllThreads()
|
|
|
}
|
|
|
|
|
|
/* 创建一个录音通道及其附属的线程 */
|
|
|
-bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int compareItemID)
|
|
|
+bool ThreadManager::createRecordThread(const OneSoundCardPCMInfo_t& pcmInfo, int compareItemID)
|
|
|
{
|
|
|
/* 先查找队列中有没有该录音通道 */
|
|
|
std::lock_guard<std::mutex> lock(m_mutexRecordThreadRefCount);
|
|
|
for(const auto& pair : m_mapRecordThreadRefCount)
|
|
|
{
|
|
|
- if( pair.first.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- pair.first.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+ if( pair.first == pcmInfo.pcmInfo.strPCMName)
|
|
|
{
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 录音线程已存在", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 录音线程已存在", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
/* 录音线程已存在,增加引用计数
|
|
|
先判断对比项ID是否已经在列表中了 */
|
|
|
bool idFound = false;
|
|
@@ -65,7 +65,7 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
m_mapRecordThreadRefCount[pair.first].push_back(compareItemID);
|
|
|
}
|
|
|
SPDLOG_LOGGER_INFO(m_logger, "{}:{} 录音线程引用计数增加,当前计数: {}",
|
|
|
- roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum, m_mapRecordThreadRefCount[pair.first].size());
|
|
|
+ pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName, m_mapRecordThreadRefCount[pair.first].size());
|
|
|
/* 返回成功 */
|
|
|
return true;
|
|
|
}
|
|
@@ -75,13 +75,13 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
|
|
|
/* 先创建生成wav小文件数据的线程 */
|
|
|
RecordThreadInfo_t threadInfo;
|
|
|
- threadInfo.cardRoadInfo = roadInfo;
|
|
|
+ threadInfo.cardRoadInfo = pcmInfo;
|
|
|
threadInfo.threadState = EThreadState::State_Inited;
|
|
|
threadInfo.threadType = EThreadType::Type_CreateWAV;
|
|
|
CreateWAVThread* pCreateWAVThread = new CreateWAVThread(threadInfo);
|
|
|
if(pCreateWAVThread == nullptr)
|
|
|
{
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建生成wav小文件线程失败", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建生成wav小文件线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
// return false; // 创建失败
|
|
|
}else
|
|
|
{
|
|
@@ -96,7 +96,7 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
CreateDBThread* pCreateDBThread = new CreateDBThread(threadInfo);
|
|
|
if(pCreateDBThread == nullptr)
|
|
|
{
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建计算音量线程失败", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建计算音量线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
// return false; // 创建失败
|
|
|
}else
|
|
|
{
|
|
@@ -110,7 +110,7 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
CreateRecordFileThread* pCreateLongWAVThread = new CreateRecordFileThread(threadInfo);
|
|
|
if(pCreateLongWAVThread == nullptr)
|
|
|
{
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建生成长文件线程失败", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建生成长文件线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
// return false; // 创建失败
|
|
|
}else
|
|
|
{
|
|
@@ -126,7 +126,7 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
// RTPOneRoadThread* pRtpSendThread = new RTPOneRoadThread(threadInfo);
|
|
|
// if(pRtpSendThread == nullptr)
|
|
|
// {
|
|
|
- // SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建发送RTP数据线程失败", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ // SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建发送RTP数据线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
// }else
|
|
|
// {
|
|
|
// CPPTP.add_task(&RTPOneRoadThread::threadTask, pRtpSendThread);
|
|
@@ -139,7 +139,7 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
RecordThread* pRecordThread = new RecordThread(threadInfo);
|
|
|
if(pRecordThread == nullptr)
|
|
|
{
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建录音线程失败", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建录音线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
// return false; // 创建失败
|
|
|
}else
|
|
|
{
|
|
@@ -153,7 +153,7 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
AssignSrcDataThread* pAssignSrcDataThread = new AssignSrcDataThread(threadInfo);
|
|
|
if(pAssignSrcDataThread == nullptr)
|
|
|
{
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建分派数据线程失败", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建分派数据线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
// return false; // 创建失败
|
|
|
}else
|
|
|
{
|
|
@@ -163,7 +163,7 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
}
|
|
|
|
|
|
/* 录音线程创建成功,增加引用计数 */
|
|
|
- m_mapRecordThreadRefCount[roadInfo].push_back(compareItemID);
|
|
|
+ m_mapRecordThreadRefCount[pcmInfo.pcmInfo.strPCMName].push_back(compareItemID);
|
|
|
|
|
|
return true;
|
|
|
}
|
|
@@ -172,15 +172,14 @@ bool ThreadManager::createRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
销毁一个录音通道及其附属的线程,如果引用计数为0, 这里只停止该录音通道的所有线程,不会删除实例
|
|
|
线程实例会由其他管理线程定期去删除
|
|
|
*/
|
|
|
-bool ThreadManager::removeRecordThread(const SoundCardRoadInfo_t& roadInfo, int compareItemID)
|
|
|
+bool ThreadManager::removeRecordThread(const OneSoundCardPCMInfo_t& pcmInfo, int compareItemID)
|
|
|
{
|
|
|
std::lock_guard<std::mutex> lock(m_mutexRecordThreadRefCount);
|
|
|
/* 先查找这个引用计数是否存在 */
|
|
|
int refCount = 0;
|
|
|
for(auto& pair : m_mapRecordThreadRefCount)
|
|
|
{
|
|
|
- if(pair.first.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- pair.first.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+ if(pair.first == pcmInfo.pcmInfo.strPCMName)
|
|
|
{
|
|
|
/* 找到该引用计数,减少引用计数 */
|
|
|
for(auto& it : pair.second)
|
|
@@ -195,14 +194,13 @@ bool ThreadManager::removeRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ std::string logBase = fmt::format("{}:{}", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
if(refCount > 0)
|
|
|
{
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{}:{} 录音线程引用计数减少,当前计数: {}",
|
|
|
- roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum, refCount);
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "{} 录音线程引用计数减少,当前计数: {}", logBase, refCount);
|
|
|
return true;
|
|
|
}
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{}:{} 录音线程引用计数为0,即将停止该录音通道的所有线程",
|
|
|
- roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "{} 录音线程引用计数为0,即将停止该录音通道的所有线程", logBase);
|
|
|
|
|
|
/* 引用计数为0,停止该录音通道的所有线程 */
|
|
|
/* 停止录音线程 */
|
|
@@ -211,11 +209,10 @@ bool ThreadManager::removeRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
for(auto it : m_recordThreads)
|
|
|
{
|
|
|
const auto& threadInfo = it->getThreadInfo();
|
|
|
- if(threadInfo.cardRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- threadInfo.cardRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+ if(threadInfo.cardRoadInfo.pcmInfo.strPCMName == pcmInfo.pcmInfo.strPCMName)
|
|
|
{
|
|
|
it->stopThread();
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 录音线程已停止", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_TRACE(m_logger, "{} 录音线程已停止", logBase);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -226,11 +223,10 @@ bool ThreadManager::removeRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
for(auto it : m_assignSrcDataThreads)
|
|
|
{
|
|
|
const auto& threadInfo = it->getThreadInfo();
|
|
|
- if(threadInfo.cardRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- threadInfo.cardRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+ if(threadInfo.cardRoadInfo.pcmInfo.strPCMName == pcmInfo.pcmInfo.strPCMName)
|
|
|
{
|
|
|
it->stopThread();
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 分派数据线程已停止", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_TRACE(m_logger, "{} 分派数据线程已停止", logBase);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -241,11 +237,10 @@ bool ThreadManager::removeRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
for(auto it : m_createWAVThreads)
|
|
|
{
|
|
|
const auto& threadInfo = it->getThreadInfo();
|
|
|
- if(threadInfo.cardRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- threadInfo.cardRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+ if(threadInfo.cardRoadInfo.pcmInfo.strPCMName == pcmInfo.pcmInfo.strPCMName)
|
|
|
{
|
|
|
it->stopThread();
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 生成wav小文件线程已停止", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_TRACE(m_logger, "{} 生成wav小文件线程已停止", logBase);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -257,11 +252,10 @@ bool ThreadManager::removeRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
for(auto it : m_createDBThreads)
|
|
|
{
|
|
|
const auto& threadInfo = it->getThreadInfo();
|
|
|
- if(threadInfo.cardRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- threadInfo.cardRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+ if(threadInfo.cardRoadInfo.pcmInfo.strPCMName == pcmInfo.pcmInfo.strPCMName)
|
|
|
{
|
|
|
it->stopThread();
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 计算音量线程已停止", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_TRACE(m_logger, "{} 计算音量线程已停止", logBase);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -273,11 +267,10 @@ bool ThreadManager::removeRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
for(auto it : m_createLongWAVThreads)
|
|
|
{
|
|
|
const auto& threadInfo = it->getThreadInfo();
|
|
|
- if(threadInfo.cardRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- threadInfo.cardRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+ if(threadInfo.cardRoadInfo.pcmInfo.strPCMName == pcmInfo.pcmInfo.strPCMName)
|
|
|
{
|
|
|
it->stopThread();
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 生成长文件线程已停止", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_TRACE(m_logger, "{} 生成长文件线程已停止", logBase);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -289,25 +282,24 @@ bool ThreadManager::removeRecordThread(const SoundCardRoadInfo_t& roadInfo, int
|
|
|
for(auto it : m_rtpSendThreads)
|
|
|
{
|
|
|
const auto& threadInfo = it->getThreadInfo();
|
|
|
- if(threadInfo.cardRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- threadInfo.cardRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+ if(threadInfo.cardRoadInfo.pcmInfo.strPCMName == pcmInfo.pcmInfo.strPCMName)
|
|
|
{
|
|
|
it->stopThread();
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 发送RTP数据线程已停止", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_TRACE(m_logger, "{} 发送RTP数据线程已停止", logBase);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* 从引用计数中移除该录音通道 */
|
|
|
- auto it = m_mapRecordThreadRefCount.find(roadInfo);
|
|
|
+ auto it = m_mapRecordThreadRefCount.find(pcmInfo.pcmInfo.strPCMName);
|
|
|
if(it != m_mapRecordThreadRefCount.end())
|
|
|
{
|
|
|
m_mapRecordThreadRefCount.erase(it);
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{}:{} 录音线程已停止运行", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "{} 录音线程已停止运行", logBase);
|
|
|
} else
|
|
|
{
|
|
|
- SPDLOG_LOGGER_WARN(m_logger, "{}:{} 录音线程引用计数未找到", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 录音线程引用计数未找到", logBase);
|
|
|
}
|
|
|
|
|
|
// 设置销毁录音线程标志
|
|
@@ -463,7 +455,7 @@ void ThreadManager::destroyeRecordThread()
|
|
|
|
|
|
|
|
|
/* 查找录音线程 */
|
|
|
-BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, int cardID, int roadID)
|
|
|
+BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, std::string pcmName)
|
|
|
{
|
|
|
switch(type)
|
|
|
{
|
|
@@ -472,8 +464,7 @@ BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, int cardID,
|
|
|
std::lock_guard<std::mutex> lock(m_mutexRecordThreads);
|
|
|
for (auto& pThread : m_recordThreads)
|
|
|
{
|
|
|
- if (pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID)
|
|
|
+ if (pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName )
|
|
|
{
|
|
|
return pThread;
|
|
|
}
|
|
@@ -485,8 +476,7 @@ BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, int cardID,
|
|
|
std::lock_guard<std::mutex> lock(m_mutexCreateWAVThreads);
|
|
|
for (auto& pThread : m_createWAVThreads)
|
|
|
{
|
|
|
- if (pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if (pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName )
|
|
|
{
|
|
|
return pThread;
|
|
|
}
|
|
@@ -498,8 +488,7 @@ BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, int cardID,
|
|
|
std::lock_guard<std::mutex> lock(m_mutexCreateDBThreads);
|
|
|
for (auto& pThread : m_createDBThreads)
|
|
|
{
|
|
|
- if (pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if (pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName )
|
|
|
{
|
|
|
return pThread;
|
|
|
}
|
|
@@ -511,8 +500,7 @@ BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, int cardID,
|
|
|
std::lock_guard<std::mutex> lock(m_mutexCreateLongWAVThreads);
|
|
|
for (auto& pThread : m_createLongWAVThreads)
|
|
|
{
|
|
|
- if (pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if (pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName )
|
|
|
{
|
|
|
return pThread;
|
|
|
}
|
|
@@ -524,8 +512,7 @@ BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, int cardID,
|
|
|
std::lock_guard<std::mutex> lock(m_mutexAssignSrcDataThreads);
|
|
|
for (auto& pThread : m_assignSrcDataThreads)
|
|
|
{
|
|
|
- if (pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if (pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName )
|
|
|
{
|
|
|
return pThread;
|
|
|
}
|
|
@@ -537,8 +524,7 @@ BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, int cardID,
|
|
|
std::lock_guard<std::mutex> lock(m_mutexRtpSendThreads);
|
|
|
for (auto& pThread : m_rtpSendThreads)
|
|
|
{
|
|
|
- if (pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if (pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName )
|
|
|
{
|
|
|
return pThread;
|
|
|
}
|
|
@@ -556,13 +542,12 @@ BaseRecordThread* ThreadManager::findRecordThread(EThreadType type, int cardID,
|
|
|
|
|
|
|
|
|
/* 获取创建WAV线程指针 */
|
|
|
-CreateWAVThread* ThreadManager::getCreateWAVThread(int cardID, int roadID)
|
|
|
+CreateWAVThread* ThreadManager::getCreateWAVThread(std::string pcmName)
|
|
|
{
|
|
|
std::lock_guard<std::mutex> lock(m_mutexCreateWAVThreads);
|
|
|
for(auto& pThread : m_createWAVThreads)
|
|
|
{
|
|
|
- if(pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if(pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName)
|
|
|
{
|
|
|
return dynamic_cast<CreateWAVThread*>(pThread);
|
|
|
}
|
|
@@ -571,13 +556,12 @@ CreateWAVThread* ThreadManager::getCreateWAVThread(int cardID, int roadID)
|
|
|
}
|
|
|
|
|
|
/* 获取创建音量值的线程 */
|
|
|
-CreateDBThread* ThreadManager::getCreateDBThread(int cardID, int roadID)
|
|
|
+CreateDBThread* ThreadManager::getCreateDBThread(std::string pcmName)
|
|
|
{
|
|
|
std::lock_guard<std::mutex> lock(m_mutexCreateDBThreads);
|
|
|
for(auto& pThread : m_createDBThreads)
|
|
|
{
|
|
|
- if(pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if(pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName)
|
|
|
{
|
|
|
return dynamic_cast<CreateDBThread*>(pThread);
|
|
|
}
|
|
@@ -586,14 +570,13 @@ CreateDBThread* ThreadManager::getCreateDBThread(int cardID, int roadID)
|
|
|
}
|
|
|
|
|
|
/* 获取发送Rtp数据的线程 */
|
|
|
-RTPOneRoadThread* ThreadManager::getRtpSendThread(int cardID, int roadID)
|
|
|
+RTPOneRoadThread* ThreadManager::getRtpSendThread(std::string pcmName)
|
|
|
{
|
|
|
std::lock_guard<std::mutex> lock(m_mutexRtpSendThreads);
|
|
|
for(auto& pThread : m_rtpSendThreads)
|
|
|
{
|
|
|
const auto& threadInfo = pThread->getThreadInfo();
|
|
|
- if(threadInfo.cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- threadInfo.cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if(threadInfo.cardRoadInfo.pcmInfo.strPCMName == pcmName)
|
|
|
{
|
|
|
return dynamic_cast<RTPOneRoadThread*>(pThread);
|
|
|
}
|
|
@@ -602,13 +585,12 @@ RTPOneRoadThread* ThreadManager::getRtpSendThread(int cardID, int roadID)
|
|
|
}
|
|
|
|
|
|
/* 获取录制报警文件的线程 */
|
|
|
-CreateRecordFileThread* ThreadManager::getCreateRecordFileThread(int cardID, int roadID)
|
|
|
+CreateRecordFileThread* ThreadManager::getCreateRecordFileThread(std::string pcmName)
|
|
|
{
|
|
|
std::lock_guard<std::mutex> lock(m_mutexCreateLongWAVThreads);
|
|
|
for(auto& pThread : m_createLongWAVThreads)
|
|
|
{
|
|
|
- if(pThread->getThreadInfo().cardRoadInfo.nSoundCardNum == cardID &&
|
|
|
- pThread->getThreadInfo().cardRoadInfo.roadInfo.nRoadNum == roadID)
|
|
|
+ if(pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName == pcmName)
|
|
|
{
|
|
|
return dynamic_cast<CreateRecordFileThread*>(pThread);
|
|
|
}
|
|
@@ -695,138 +677,137 @@ CreateRecordFileThread* ThreadManager::getCreateRecordFileThread(int cardID, int
|
|
|
// }
|
|
|
|
|
|
/* 获取噪音检测线程 */
|
|
|
-NoiseDetectThread* ThreadManager::getNoiseDetectThread(const SoundCardRoadInfo_t& roadInfo, int compareItemID)
|
|
|
-{
|
|
|
- std::lock_guard<std::mutex> lock(m_mutexNoiseDetectThreads);
|
|
|
- NoiseDetectThread* pNoiseDetectThread = nullptr;
|
|
|
- for(const auto pThread : m_listNoiseDetectThreads)
|
|
|
- {
|
|
|
- const SoundCardRoadInfo_t& threadRoadInfo = pThread->getRoadInfo();
|
|
|
- if(threadRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- threadRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
- {
|
|
|
- pNoiseDetectThread = pThread;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- /* 判断引用计数是否需要增加 */
|
|
|
- if(pNoiseDetectThread != nullptr)
|
|
|
- {
|
|
|
- /* 查找这个通道是否在列表中(实际上肯定在列表中) */
|
|
|
- bool isExist = false;
|
|
|
- for(auto it = m_mapNoiseDetectThreadRefCount.begin(); it != m_mapNoiseDetectThreadRefCount.end(); ++it)
|
|
|
- {
|
|
|
- if(it->first.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- it->first.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
- {
|
|
|
- bool isFound = false;
|
|
|
- for(auto& id : it->second)
|
|
|
- {
|
|
|
- if(id == compareItemID)
|
|
|
- {
|
|
|
- isFound = true;
|
|
|
- break; // 找到相同的对比项ID,直接返回
|
|
|
- }
|
|
|
- }
|
|
|
- if(!isFound)
|
|
|
- {
|
|
|
- it->second.push_back(compareItemID); // 添加新的对比项ID
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 噪音检测线程引用计数增加,当前计数: {}",
|
|
|
- roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum, it->second.size());
|
|
|
- }
|
|
|
- isExist = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if(!isExist)
|
|
|
- {
|
|
|
- /* 不在引用计数的列表中,添加进入 */
|
|
|
- m_mapNoiseDetectThreadRefCount[roadInfo].push_back(compareItemID);
|
|
|
- }
|
|
|
- return pNoiseDetectThread;
|
|
|
- }
|
|
|
+// NoiseDetectThread* ThreadManager::getNoiseDetectThread(const OneSoundCardPCMInfo_t& roadInfo, int compareItemID)
|
|
|
+// {
|
|
|
+// std::lock_guard<std::mutex> lock(m_mutexNoiseDetectThreads);
|
|
|
+// NoiseDetectThread* pNoiseDetectThread = nullptr;
|
|
|
+// for(const auto pThread : m_listNoiseDetectThreads)
|
|
|
+// {
|
|
|
+// const OneSoundCardPCMInfo_t & threadRoadInfo = pThread->getRoadInfo();
|
|
|
+// if(threadRoadInfo.pcmInfo.strPCMName == roadInfo.pcmInfo.strPCMName)
|
|
|
+// {
|
|
|
+// pNoiseDetectThread = pThread;
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// /* 判断引用计数是否需要增加 */
|
|
|
+// if(pNoiseDetectThread != nullptr)
|
|
|
+// {
|
|
|
+// /* 查找这个通道是否在列表中(实际上肯定在列表中) */
|
|
|
+// bool isExist = false;
|
|
|
+// for(auto it = m_mapNoiseDetectThreadRefCount.begin(); it != m_mapNoiseDetectThreadRefCount.end(); ++it)
|
|
|
+// {
|
|
|
+// if(it->first.roadInfo. == roadInfo.pcmInfo.strPCMName &&
|
|
|
+// it->first.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+// {
|
|
|
+// bool isFound = false;
|
|
|
+// for(auto& id : it->second)
|
|
|
+// {
|
|
|
+// if(id == compareItemID)
|
|
|
+// {
|
|
|
+// isFound = true;
|
|
|
+// break; // 找到相同的对比项ID,直接返回
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if(!isFound)
|
|
|
+// {
|
|
|
+// it->second.push_back(compareItemID); // 添加新的对比项ID
|
|
|
+// SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 噪音检测线程引用计数增加,当前计数: {}",
|
|
|
+// roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum, it->second.size());
|
|
|
+// }
|
|
|
+// isExist = true;
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if(!isExist)
|
|
|
+// {
|
|
|
+// /* 不在引用计数的列表中,添加进入 */
|
|
|
+// m_mapNoiseDetectThreadRefCount[roadInfo].push_back(compareItemID);
|
|
|
+// }
|
|
|
+// return pNoiseDetectThread;
|
|
|
+// }
|
|
|
|
|
|
- /* 没找到该线程,创建新的线程 */
|
|
|
- CalculateThreadInfo_t threadInfo;
|
|
|
- CompareItemRoadInfo_t item;
|
|
|
- item.nCompareRoadNum = 1; // 假设噪音检测线程
|
|
|
- item.scRoadInfo = roadInfo;
|
|
|
- threadInfo.compareItemInfo.mapRoad.insert(item.nCompareRoadNum, item);
|
|
|
- NoiseDetectThread* newThread = new NoiseDetectThread(threadInfo);
|
|
|
- if(newThread == nullptr)
|
|
|
- {
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "创建噪音检测线程失败");
|
|
|
- return nullptr; // 创建失败
|
|
|
- }
|
|
|
- CPPTP.add_task(&NoiseDetectThread::threadTask, newThread);
|
|
|
- m_listNoiseDetectThreads.push_back(newThread);
|
|
|
+// /* 没找到该线程,创建新的线程 */
|
|
|
+// CalculateThreadInfo_t threadInfo;
|
|
|
+// CompareItemRoadInfo_t item;
|
|
|
+// item.nCompareRoadNum = 1; // 假设噪音检测线程
|
|
|
+// item.scRoadInfo = roadInfo;
|
|
|
+// threadInfo.compareItemInfo.mapRoad.insert(item.nCompareRoadNum, item);
|
|
|
+// NoiseDetectThread* newThread = new NoiseDetectThread(threadInfo);
|
|
|
+// if(newThread == nullptr)
|
|
|
+// {
|
|
|
+// SPDLOG_LOGGER_ERROR(m_logger, "创建噪音检测线程失败");
|
|
|
+// return nullptr; // 创建失败
|
|
|
+// }
|
|
|
+// CPPTP.add_task(&NoiseDetectThread::threadTask, newThread);
|
|
|
+// m_listNoiseDetectThreads.push_back(newThread);
|
|
|
|
|
|
- /* 不在引用计数的列表中,添加进入 */
|
|
|
- m_mapNoiseDetectThreadRefCount[roadInfo].push_back(compareItemID);
|
|
|
+// /* 不在引用计数的列表中,添加进入 */
|
|
|
+// m_mapNoiseDetectThreadRefCount[roadInfo].push_back(compareItemID);
|
|
|
|
|
|
- return newThread;
|
|
|
-}
|
|
|
+// return newThread;
|
|
|
+// }
|
|
|
|
|
|
/* 去掉噪音检测线程,线程使用的计数减一,计数为0则销毁该线程 */
|
|
|
-bool ThreadManager::removeNoiseDetectThread(const SoundCardRoadInfo_t& roadInfo, int compareItemID)
|
|
|
-{
|
|
|
- std::lock_guard<std::mutex> lock(m_mutexNoiseDetectThreads);
|
|
|
- NoiseDetectThread* pThreadToRemove = nullptr;
|
|
|
- for(const auto pThread : m_listNoiseDetectThreads)
|
|
|
- {
|
|
|
- const SoundCardRoadInfo_t& threadRoadInfo = pThread->getRoadInfo();
|
|
|
- if(threadRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- threadRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
- {
|
|
|
- pThreadToRemove = pThread; // 找到相同的线程,直接返回
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if(pThreadToRemove == nullptr)
|
|
|
- {
|
|
|
- SPDLOG_LOGGER_WARN(m_logger, "{}:{} 噪音检测线程未找到", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
- return false; // 没找到该线程
|
|
|
- }
|
|
|
+// bool ThreadManager::removeNoiseDetectThread(const SoundCardRoadInfo_t& roadInfo, int compareItemID)
|
|
|
+// {
|
|
|
+// std::lock_guard<std::mutex> lock(m_mutexNoiseDetectThreads);
|
|
|
+// NoiseDetectThread* pThreadToRemove = nullptr;
|
|
|
+// for(const auto pThread : m_listNoiseDetectThreads)
|
|
|
+// {
|
|
|
+// const SoundCardRoadInfo_t& threadRoadInfo = pThread->getRoadInfo();
|
|
|
+// if(threadRoadInfo.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
+// threadRoadInfo.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+// {
|
|
|
+// pThreadToRemove = pThread; // 找到相同的线程,直接返回
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if(pThreadToRemove == nullptr)
|
|
|
+// {
|
|
|
+// SPDLOG_LOGGER_WARN(m_logger, "{}:{} 噪音检测线程未找到", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+// return false; // 没找到该线程
|
|
|
+// }
|
|
|
|
|
|
- /* 引用计数减一 */
|
|
|
- int useCount = 0;
|
|
|
- for(auto it = m_mapNoiseDetectThreadRefCount.begin(); it != m_mapNoiseDetectThreadRefCount.end(); ++it)
|
|
|
- {
|
|
|
- if(it->first.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
- it->first.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
- {
|
|
|
- /* 将对比项ID从列表中删除 */
|
|
|
- auto& compareItemList = it->second;
|
|
|
- auto itemIt = std::find(compareItemList.begin(), compareItemList.end(), compareItemID);
|
|
|
- if(itemIt != compareItemList.end())
|
|
|
- {
|
|
|
- compareItemList.erase(itemIt); // 移除该对比项ID
|
|
|
- SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 噪音检测线程引用计数减少,当前计数: {}",
|
|
|
- roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum, compareItemList.size());
|
|
|
- }
|
|
|
- useCount = compareItemList.size(); // 获取当前引用计数
|
|
|
- if(useCount <= 0)
|
|
|
- {
|
|
|
- m_mapNoiseDetectThreadRefCount.erase(it); // 如果引用计数为0,则从列表中移除
|
|
|
- }
|
|
|
- break; // 找到后退出循环
|
|
|
- }
|
|
|
- }
|
|
|
+// /* 引用计数减一 */
|
|
|
+// int useCount = 0;
|
|
|
+// for(auto it = m_mapNoiseDetectThreadRefCount.begin(); it != m_mapNoiseDetectThreadRefCount.end(); ++it)
|
|
|
+// {
|
|
|
+// if(it->first.nSoundCardNum == roadInfo.nSoundCardNum &&
|
|
|
+// it->first.roadInfo.nRoadNum == roadInfo.roadInfo.nRoadNum)
|
|
|
+// {
|
|
|
+// /* 将对比项ID从列表中删除 */
|
|
|
+// auto& compareItemList = it->second;
|
|
|
+// auto itemIt = std::find(compareItemList.begin(), compareItemList.end(), compareItemID);
|
|
|
+// if(itemIt != compareItemList.end())
|
|
|
+// {
|
|
|
+// compareItemList.erase(itemIt); // 移除该对比项ID
|
|
|
+// SPDLOG_LOGGER_TRACE(m_logger, "{}:{} 噪音检测线程引用计数减少,当前计数: {}",
|
|
|
+// roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum, compareItemList.size());
|
|
|
+// }
|
|
|
+// useCount = compareItemList.size(); // 获取当前引用计数
|
|
|
+// if(useCount <= 0)
|
|
|
+// {
|
|
|
+// m_mapNoiseDetectThreadRefCount.erase(it); // 如果引用计数为0,则从列表中移除
|
|
|
+// }
|
|
|
+// break; // 找到后退出循环
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
|
|
|
- if(useCount <= 0)
|
|
|
- {
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{}:{} 噪音检测线程引用计数为0,准备销毁该线程",
|
|
|
- roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
- pThreadToRemove->stopThreadBlock(); // 停止线程
|
|
|
- m_listNoiseDetectThreads.remove(pThreadToRemove); // 从列表中移除
|
|
|
- delete pThreadToRemove; // 删除线程
|
|
|
- pThreadToRemove = nullptr;
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{}:{} 噪音检测线程已销毁", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
- }
|
|
|
+// if(useCount <= 0)
|
|
|
+// {
|
|
|
+// SPDLOG_LOGGER_INFO(m_logger, "{}:{} 噪音检测线程引用计数为0,准备销毁该线程",
|
|
|
+// roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+// pThreadToRemove->stopThreadBlock(); // 停止线程
|
|
|
+// m_listNoiseDetectThreads.remove(pThreadToRemove); // 从列表中移除
|
|
|
+// delete pThreadToRemove; // 删除线程
|
|
|
+// pThreadToRemove = nullptr;
|
|
|
+// SPDLOG_LOGGER_INFO(m_logger, "{}:{} 噪音检测线程已销毁", roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
+// }
|
|
|
|
|
|
- return true;
|
|
|
-}
|
|
|
+// return true;
|
|
|
+// }
|
|
|
|
|
|
|
|
|
|
|
@@ -903,7 +884,7 @@ void ThreadManager::thread_RTPSend(RecordThreadInfo_t& threadInfo)
|
|
|
RTPOneRoadThread* pRtpSendThread = new RTPOneRoadThread(threadInfo);
|
|
|
if(pRtpSendThread == nullptr)
|
|
|
{
|
|
|
- SPDLOG_ERROR("{}:{} 创建RTP发送线程失败", threadInfo.cardRoadInfo.strSoundCardName.toStdString(), threadInfo.cardRoadInfo.roadInfo.nRoadNum);
|
|
|
+ SPDLOG_ERROR("{}:{} 创建RTP发送线程失败", threadInfo.cardRoadInfo.strSoundCardName, threadInfo.cardRoadInfo.pcmInfo.strPCMName);
|
|
|
return;
|
|
|
}
|
|
|
/* 先加入队列,再开启线程 */
|