#ifndef QUEUEWRITER_H #define QUEUEWRITER_H #include #include #include #include #include #include "model/ultrasoundModule/UsPacket.h" #include "model/player/metadata/PlayerMetadata.h" #include "model/player/type/EDirection.h" #include "model/ultrasoundModule/UsHelper.h" /*****************************************************************************/ /** * @brief This class is writer part of player engine. This class push frame * into player buffer. * @author Mohammad Mohsen Talaie * @date 14 nov 2020 */ /*****************************************************************************/ class QueueWriter : public QThread { Q_OBJECT SINGLETON(QueueWriter) private: static QMutex _locker; bool* _playOriginal; bool _feedBuffer; bool* _repeat; bool* _play; int _circleBufferSize; int _iteration; int* _start; int _index; int* _end; int* _fps; int* _step; EDirection::eDirection* _playDirection; UsPacket* _circleBuffer; QSemaphore* _usedCells; QSemaphore* _freeCells; QMutex* _bufferMutex; const QList >* _buffer; UsPacket getPacketFromBuffer(); PlayerMetadata createPlayerMetadata(); void AppendMetaDataToPacket(UsPacket* packet, const PlayerMetadata& playerMetadata); void putPacketIntoCircleBuffer(const UsPacket& packet); void waitForPlayAndFeedBufferChanges(); void putPacketIntoQueue(); void fillCircleBuffer(); void updateIndex(); bool checkIndexBetweenBorders(); public: QueueWriter(QObject* parent = NULL) : QThread(parent) { } void initParams(QSemaphore* used, QSemaphore* free, UsPacket* circleBuffer, const int circleBufferSize, const QList >* buffer, int* step, int* start, int* end, int* fps, bool* play, bool* playOriginal, bool* repeat, EDirection::eDirection* playMode); void run() override; void fetchImage(int index); void setFeedBuffer(const bool feedBuffer); void setIndex(int index); void resetIteration(); bool getFeedBuffer() const; }; #endif //QUEUEWRITER_H