1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include "MppManager.h"
- #include "../DataManager/DataManager.h"
- #include "../DataManager/DataPackage.h"
- #include "../RGAColorTransfer/RgaColorTransfer.h"
- #include <thread>
- #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<DataPackagePtr>("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;
- }
- // 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));
- }
|