MppManager.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "MppManager.h"
  2. #include "../DataManager/DataManager.h"
  3. #include "../DataManager/DataPackage.h"
  4. #include "../RGAColorTransfer/RgaColorTransfer.h"
  5. #include <thread>
  6. #include "../ImageTest/ImageTest.h"
  7. // ...existing code...
  8. MppManager::~MppManager()
  9. {
  10. for (auto &thread : m_threads)
  11. {
  12. m_threadSwitch = false;
  13. if (thread.joinable())
  14. {
  15. thread.join();
  16. }
  17. }
  18. }
  19. void MppManager::addMppDecode()
  20. {
  21. m_threads.emplace_back(&MppManager::decodeThread, this);
  22. m_threads.emplace_back(&MppManager::decodeThread, this);
  23. m_threads.emplace_back(&MppManager::decodeThread, this);
  24. }
  25. void MppManager::decodeThread()
  26. {
  27. MppDecoder decoder;
  28. decoder.init();
  29. RgaColorTransfer colorTransfer;
  30. unsigned char *rgbData = nullptr;
  31. int width = 0, height = 0;
  32. m_threadSwitch = true;
  33. int index = decoder.getDecodeIndex();
  34. DataManager::getInstance().addDataPipe<DataPackagePtr>("resized" + std::to_string(index));
  35. // test
  36. ImageTest::HighResolutionTimer timer;
  37. while (m_threadSwitch)
  38. {
  39. DataPackagePtr dataPackage = nullptr;
  40. if (DataManager::getInstance().popData("uvc" + std::to_string(index), dataPackage))
  41. {
  42. decoder.decodeJpegToRgb((const char *)dataPackage->pJpegData, dataPackage->nJpegSize, (unsigned char **)&dataPackage->pRGBData, &width, &height);
  43. if (width != dataPackage->nWidth || height != dataPackage->nHeight)
  44. {
  45. std::cerr << "the decode result is different from defined !!" << std::endl;
  46. }
  47. // ImageTest::saveImageFromData((unsigned char *)dataPackage->pRGBData, dataPackage->nResizeWidth, dataPackage->nResizeHeight);
  48. // color transfer
  49. resize_image(dataPackage->pRGBData, width, height, dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight);
  50. // ImageTest::saveImageFromData((unsigned char *)dataPackage->pResizeData, dataPackage->nResizeWidth, dataPackage->nResizeHeight);
  51. // push data to the next pipe
  52. DataManager::getInstance().pushData("resized" + std::to_string(index), dataPackage);
  53. }
  54. // delay 10ms
  55. std::this_thread::sleep_for(std::chrono::milliseconds(10));
  56. }
  57. // 释放资源
  58. if (rgbData)
  59. {
  60. delete[] rgbData;
  61. }
  62. DataManager::getInstance().eraseDataPipe("mpp" + std::to_string(index));
  63. }