videocodec.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /******************************************************************************
  2. * @文件名 videocodec.h
  3. * @功能 视频编码保存类,将AVFrame图像进行格式转换后编码保存到视频文件中
  4. *
  5. * @开发者 mwl
  6. *****************************************************************************/
  7. #ifndef VIDEOCODEC_H
  8. #define VIDEOCODEC_H
  9. #include <QPoint>
  10. #include <qmutex.h>
  11. #include <qstring.h>
  12. struct AVCodecParameters;
  13. struct AVFormatContext;
  14. struct AVCodecContext;
  15. struct AVStream;
  16. struct AVFrame;
  17. struct AVPacket;
  18. struct AVOutputFormat;
  19. struct SwsContext;
  20. class VideoCodec
  21. {
  22. public:
  23. VideoCodec();
  24. ~VideoCodec();
  25. bool open(AVCodecContext *codecContext, QPoint point, const QString& fileName);
  26. void write(AVFrame* frame);
  27. void close();
  28. private:
  29. void showError(int err);
  30. bool swsFormat(AVFrame* frame);
  31. private:
  32. AVFormatContext* m_formatContext = nullptr;
  33. AVCodecContext * m_codecContext = nullptr; // 编码器上下文
  34. SwsContext * m_swsContext = nullptr; // 图像转换上下文
  35. AVStream * m_videoStream = nullptr;
  36. AVPacket * m_packet = nullptr; // 数据包
  37. AVFrame * m_frame = nullptr; // 解码后的视频帧
  38. int m_index = 0;
  39. bool m_writeHeader = false; // 是否写入头
  40. QMutex m_mutex;
  41. };
  42. #endif // VIDEOCODEC_H