PlayerQuickItem.h 1.3 KB

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