PlayerQuickItem.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #ifndef PLAYERQUICKITEM_H
  2. #define PLAYERQUICKITEM_H
  3. #include <Qt>
  4. #include <QtQuick/QQuickItem>
  5. #include <QOpenGLFramebufferObject>
  6. #include <mpv/client.h>
  7. #include <mpv/render.h>
  8. #ifdef Q_OS_WIN32
  9. #include <windows.h>
  10. #else
  11. typedef void* HANDLE;
  12. #endif
  13. #include "PlayerComponent.h"
  14. #include "QtHelper.h"
  15. class PlayerRenderer : public QObject
  16. {
  17. Q_OBJECT
  18. friend class PlayerQuickItem;
  19. PlayerRenderer(mpv::qt::Handle mpv, QQuickWindow* window);
  20. bool init();
  21. ~PlayerRenderer() override;
  22. void render();
  23. void swap();
  24. public slots:
  25. void onVideoPlaybackActive(bool active);
  26. private:
  27. static void on_update(void *ctx);
  28. mpv::qt::Handle m_mpv;
  29. mpv_render_context* m_mpvGL;
  30. QQuickWindow* m_window;
  31. QSize m_size;
  32. HANDLE m_hAvrtHandle;
  33. QRect m_videoRectangle;
  34. QOpenGLFramebufferObject* m_fbo;
  35. };
  36. class PlayerQuickItem : public QQuickItem
  37. {
  38. Q_OBJECT
  39. friend class PlayerRenderer;
  40. public:
  41. explicit PlayerQuickItem(QQuickItem* parent = nullptr);
  42. ~PlayerQuickItem() override;
  43. void initMpv(PlayerComponent* player);
  44. QString debugInfo() { return m_debugInfo; }
  45. signals:
  46. void onFatalError(QString message);
  47. private slots:
  48. void onWindowChanged(QQuickWindow* win);
  49. void onSynchronize();
  50. void onInvalidate();
  51. void onHandleFatalError(QString message);
  52. private:
  53. mpv::qt::Handle m_mpv;
  54. mpv_render_context* m_mpvGL;
  55. PlayerRenderer* m_renderer;
  56. QString m_debugInfo;
  57. };
  58. #endif