#include "MppManager.h" #include "../DataManager/DataManager.h" #include "../DataManager/DataPackage.h" #include "../RGAColorTransfer/RgaColorTransfer.h" #include #include "../ImageTest/ImageTest.h" // ...existing code... MppManager::~MppManager() { for (auto &thread : m_threads) { m_threadSwitch = false; if (thread.joinable()) { thread.join(); } } } void MppManager::addMppDecode() { m_threads.emplace_back(&MppManager::decodeThread, this); m_threads.emplace_back(&MppManager::decodeThread, this); m_threads.emplace_back(&MppManager::decodeThread, this); } void MppManager::decodeThread() { MppDecoder decoder; decoder.init(); RgaColorTransfer colorTransfer; unsigned char *rgbData = nullptr; int width = 0, height = 0; m_threadSwitch = true; int index = decoder.getDecodeIndex(); DataManager::getInstance().addDataPipe("resized" + std::to_string(index)); // test ImageTest::HighResolutionTimer timer; while (m_threadSwitch) { DataPackagePtr dataPackage = nullptr; if (DataManager::getInstance().popData("uvc" + std::to_string(index), dataPackage)) { decoder.decodeJpegToRgb((const char *)dataPackage->pJpegData, dataPackage->nJpegSize, (unsigned char **)&dataPackage->pRGBData, &width, &height); if (width != dataPackage->nWidth || height != dataPackage->nHeight) { std::cerr << "the decode result is different from defined !!" << std::endl; } // ImageTest::saveImageFromData((unsigned char *)dataPackage->pRGBData, dataPackage->nResizeWidth, dataPackage->nResizeHeight); // color transfer resize_image(dataPackage->pRGBData, width, height, dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight); // ImageTest::saveImageFromData((unsigned char *)dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight); // push data to the next pipe DataManager::getInstance().pushData("resized" + std::to_string(index), dataPackage); } // delay 10ms std::this_thread::sleep_for(std::chrono::milliseconds(10)); } // 释放资源 if (rgbData) { delete[] rgbData; } DataManager::getInstance().eraseDataPipe("mpp" + std::to_string(index)); }