FrameBuffer.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #ifndef FRAMEBUFFER_H
  2. #define FRAMEBUFFER_H
  3. #include <list>
  4. #include <vector>
  5. #include <mutex>
  6. #include <libuvc/libuvc.h>
  7. template<typename T>
  8. class FrameBuffer {
  9. public:
  10. FrameBuffer(size_t capacity) : m_Capacity(capacity) {}
  11. void addFrame(const T& frame)
  12. {
  13. std::lock_guard<std::mutex> lock(m_Mutex);
  14. }
  15. T getOldestFrame()
  16. {
  17. std::lock_guard<std::mutex> lock(m_Mutex);
  18. if (m_BufferVector.empty()) {
  19. return nullptr;
  20. }
  21. return m_BufferVector.front();
  22. }
  23. T getNewestFrame()
  24. {
  25. std::lock_guard<std::mutex> lock(m_Mutex);
  26. if (m_BufferVector.empty()) {
  27. return nullptr;
  28. }
  29. return m_BufferVector.back();
  30. }
  31. void releaseOldestFrame()
  32. {
  33. std::lock_guard<std::mutex> lock(m_Mutex);
  34. if (!m_BufferVector.empty()) {
  35. m_BufferVector.erase(m_BufferVector.begin());
  36. }
  37. }
  38. void releaseNewestFrame() {
  39. std::lock_guard<std::mutex> lock(m_Mutex);
  40. if (!m_BufferVector.empty()) {
  41. m_BufferVector.pop_back();
  42. }
  43. }
  44. private:
  45. size_t m_Capacity;
  46. std::vector<T> m_BufferVector;
  47. std::mutex m_Mutex;
  48. };
  49. #endif // FRAMEBUFFER_H