#ifndef IMAGEBUFFER_H
#define IMAGEBUFFER_H

#include <QMutex>
#include <QObject>
#include <QWaitCondition>
#include <myimage.h>


class ImageBuffer : public QObject
{
  Q_OBJECT
public:
  explicit ImageBuffer(size_t buffer_size=100, QObject *parent = nullptr);
  ~ImageBuffer();

  void clear();
  void resize(size_t new_size);
  void push(MyImage *img);
  MyImage* read(size_t &framecount);
  MyImage* readLast(size_t &framecount);
  size_t capacity();
  double bufferPressure();
  size_t bufferLoad();
  bool bufferNotEmpty();

private:
  QMutex mutex;
  int numUsedBytes = 0;

  std::vector<MyImage*> buffer;
  std::vector<size_t> framecounts;
  size_t head_idx = 0;
  size_t read_idx = 0;
  size_t load = 0;
  size_t buffer_size;
  size_t framecount = 0;

signals:

public slots:
};

#endif // IMAGEBUFFER_H