UVCDeviceManager.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef UVCDEVICE_MANAGER_H
  2. #define UVCDEVICE_MANAGER_H
  3. #include "../libuvc/libuvc.h"
  4. #include "../MppDecoder/MppDecoder.h"
  5. #include <stdio.h>
  6. #include <unistd.h>
  7. #include <sys/time.h>
  8. #include "UVCCallBack.h"
  9. #include <list>
  10. #include "UVCDevice.h"
  11. #include <iostream>
  12. #include <memory>
  13. #include "../gpio_explorer.hpp"
  14. #include "../DataManager/DataManager.h"
  15. class UVCManager
  16. {
  17. public:
  18. static UVCManager &getInstance()
  19. {
  20. static UVCManager instance;
  21. return instance;
  22. }
  23. void init(int nWaitingTime);
  24. void setDeviceNumber(int deviceNumber, int TotoalDeviceNumber)
  25. {
  26. int nNumber = int(uvcDeviceList.size());
  27. if (deviceNumber >= nNumber)
  28. {
  29. std::cerr << "Device number out of range" << std::endl;
  30. return;
  31. }
  32. std::list<UVCDevice *>::iterator it = uvcDeviceList.begin();
  33. std::advance(it, deviceNumber);
  34. std::cout << "Setting device number: " << TotoalDeviceNumber << std::endl;
  35. (*it)->setTotalIndex(TotoalDeviceNumber);
  36. }
  37. int getDeviceNumber(int deviceNumber)
  38. {
  39. int nNumber = int(uvcDeviceList.size());
  40. if (deviceNumber >= nNumber)
  41. {
  42. std::cerr << "Device number out of range" << std::endl;
  43. return -1;
  44. }
  45. std::list<UVCDevice *>::iterator it = uvcDeviceList.begin();
  46. std::advance(it, deviceNumber);
  47. return (*it)->getTotalIndex();
  48. }
  49. int deliverFrameInCallBack(uvc_device_handle_t *devh);
  50. void startAllStreaming();
  51. void stopAllStreaming();
  52. uvc_context_t *getContext()
  53. {
  54. return ctx;
  55. }
  56. private:
  57. UVCManager()
  58. {
  59. uvc_init(&ctx, NULL);
  60. }
  61. ~UVCManager()
  62. {
  63. uvc_exit(ctx);
  64. }
  65. UVCManager(const UVCManager &) = delete;
  66. UVCManager &operator=(const UVCManager &) = delete;
  67. uvc_context_t *ctx;
  68. // device list
  69. uvc_device_t **deviceList;
  70. // device number
  71. int deviceNum;
  72. // the UVC device list is been managed by UVCManager
  73. std::list<UVCDevice *> uvcDeviceList;
  74. //
  75. std::shared_ptr<GPIOExplorer> m_GpioExplorer;
  76. };
  77. #endif // UVCDEVICE_MANAGER_H