#ifndef DECODERTHREAD_H #define DECODERTHREAD_H #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #ifdef _STDINT_H #undef _STDINT_H #endif #include #endif #include #include #include #include #include #include #include #include #include #include #include #include /* ffmpeg related stuff */ extern "C" { #include #include } class DecoderThread : public QObject { Q_OBJECT public: /* public methods */ DecoderThread(); void setFilename(QString filename); void stopPlayer(); void pausePlayer(); void resumePlayer(); void oneTimeDeinit(); void close(); void run(); void startMediaPlay(); public slots: void on_mediaSeek(int value); private: /* private variables */ QQueue audioQueue; QQueue videoQueue; QTimer *videoTimer; QTimer *audioTimer; QTimer *pktTimer; QString filename; void *channel; int stream_id; QRect geometry; int64_t elapsedTime; /* elapsed time in usecs since play started */ QMutex mutex; int64_t la_seekPos; /* locked access; must hold mutex */ PlayVideo *playVideo; QThread *playVideoThread; PlayAudio *playAudio; QThread *playAudioThread; /* private functions */ int sendMetadataFile(); int sendAudioFormat(); int sendVideoFormat(); int sendGeometry(); void updateSlider(); private slots: /* private slots */ void audioTimerCallback(); void videoTimerCallback(); void pktTimerCallback(); signals: /* private signals */ void on_progressUpdate(int percent); void on_decoderErrorMsg(QString title, QString msg); void on_mediaDurationInSeconds(int duration); void on_elapsedtime(int val); /* in hundredth of a sec */ }; #endif // DECODERTHREAD_H