/src/ImageLoader.cpp

https://github.com/p1r4nh4/CellTrack · C++ · 63 lines · 59 code · 2 blank · 2 comment · 7 complexity · 5ac33c6517b80e94075df003d74e7e3e MD5 · raw file

  1. #include "ImageLoader.h"
  2. #include <iostream>
  3. ImageLoader::ImageLoader(ImageJobQueue* queue) : m_queue(queue)
  4. {
  5. imgInMem = 0;
  6. loadingCalls = 0;
  7. if(queue)
  8. wxThread::Create();
  9. }
  10. wxThread::ExitCode ImageLoader::Entry()
  11. {
  12. m_queue->Report(Job::thread_started);
  13. bool keepRunning = true;
  14. IplImage* img = NULL;
  15. while(keepRunning)
  16. {
  17. Job j = m_queue->Pop();
  18. std::multiset<int>::iterator it;
  19. //std::cout << "Queue Size: " << m_queue->GetLength() << std::endl;
  20. switch(j.m_cmd)
  21. {
  22. case Job::thread_exit:
  23. keepRunning = false;
  24. break;
  25. case Job::thread_load:
  26. loadingCalls++;
  27. //std::cout << "img loader: loading " << j.m_imgPos << std::endl;
  28. it = toIgnore.find(j.m_imgPos);
  29. if (it != toIgnore.end())
  30. {
  31. toIgnore.erase(it);
  32. }
  33. else
  34. {
  35. imgInMem++;
  36. img = cvLoadImage((j.m_filename).mb_str());
  37. m_queue->Report(Job::thread_loaded, j.m_imgPos, img, j.m_filename);
  38. }
  39. break;
  40. case Job::thread_delete:
  41. loadingCalls--;
  42. if (j.m_imgPtr)
  43. {
  44. imgInMem--;
  45. cvReleaseImage(&(j.m_imgPtr));
  46. m_queue->Report(Job::thread_deleted, j.m_imgPos);
  47. }
  48. else
  49. {
  50. if (j.m_imgPos >= 0)
  51. toIgnore.insert(j.m_imgPos);
  52. }
  53. break;
  54. case Job::thread_null:
  55. default: break;
  56. }
  57. }
  58. std::cout << "Images left in Memory: " << imgInMem << std::endl;
  59. std::cout << "Calls: " << loadingCalls << std::endl;
  60. return (wxThread::ExitCode)img;
  61. }