//// FFmpegDecoder.h #ifndef FFMPEGDECODER_H #define FFMPEGDECODER_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "RingBuffer.h" #include "FocusWindow.h" extern "C" { #include #include #include #include #include } #define READ_H264_FILE_TO_DISPLAY 1 class FFmpegDecoder : public QThread { Q_OBJECT public: explicit FFmpegDecoder(QObject* parent = nullptr); ~FFmpegDecoder() override; void initialize(); void decodeFile(const QString& videoFilePath, QLabel* videoLabel, QLineEdit* VideoResolutionEdit); void decodeSingleFrame(const QByteArray& data, QLabel* videoLabel); // 添加 videoLabel 参数 void FFmpegDecoder::processVideo(int itemIndex); bool initializeFFmpeg(const QString& filePath); void cleanup(); void stopFFmpegDecoder(); protected: void run() override; private: QImage avFrameToQImage(AVFrame* frame); QMutex mutex; QWaitCondition condition; QString filePath; QLabel* videoLabel; QLabel* videoLabelTemp; // 临时存储新标签 QLineEdit* resolutionEdit; bool videoLabelChanged = false; bool abort; bool restart; bool isGotResolution = false; AVFormatContext* formatContext; AVCodecContext* codecContext; AVFrame* frame; AVPacket* packet; SwsContext* swsContext; int videoStreamIndex; int FocusWindowWidth = 0; int FocusWindowHeight = 0; RingBuffer* ringBuffer; }; #endif // FFMPEGDECODER_H