media_streaming_instance.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "media/streaming/media_streaming_common.h"
  9. class DocumentData;
  10. namespace Ui {
  11. struct RadialState;
  12. } // namespace Ui
  13. namespace Data {
  14. struct FileOrigin;
  15. } // namespace Data
  16. namespace Media {
  17. namespace Streaming {
  18. class Document;
  19. class Player;
  20. class Instance {
  21. public:
  22. Instance(const Instance &other);
  23. Instance(
  24. std::shared_ptr<Document> shared,
  25. Fn<void()> waitingCallback);
  26. Instance(
  27. not_null<DocumentData*> document,
  28. Data::FileOrigin origin,
  29. Fn<void()> waitingCallback);
  30. Instance(
  31. not_null<DocumentData*> quality,
  32. not_null<DocumentData*> original,
  33. HistoryItem *context,
  34. Data::FileOrigin origin,
  35. Fn<void()> waitingCallback);
  36. Instance(
  37. not_null<PhotoData*> photo,
  38. Data::FileOrigin origin,
  39. Fn<void()> waitingCallback);
  40. ~Instance();
  41. [[nodiscard]] bool valid() const;
  42. [[nodiscard]] std::shared_ptr<Document> shared() const;
  43. [[nodiscard]] const Player &player() const;
  44. [[nodiscard]] const Information &info() const;
  45. [[nodiscard]] rpl::producer<int> switchQualityRequests() const;
  46. void play(const PlaybackOptions &options);
  47. void pause();
  48. void resume();
  49. void stop();
  50. void stopAudio();
  51. void saveFrameToCover();
  52. [[nodiscard]] bool active() const;
  53. [[nodiscard]] bool ready() const;
  54. [[nodiscard]] std::optional<Error> failed() const;
  55. [[nodiscard]] bool paused() const;
  56. [[nodiscard]] float64 speed() const;
  57. void setSpeed(float64 speed);
  58. [[nodiscard]] bool waitingShown() const;
  59. [[nodiscard]] float64 waitingOpacity() const;
  60. [[nodiscard]] Ui::RadialState waitingState() const;
  61. void callWaitingCallback();
  62. [[nodiscard]] QImage frame(const FrameRequest &request) const;
  63. [[nodiscard]] FrameWithInfo frameWithInfo(
  64. const FrameRequest &request) const;
  65. [[nodiscard]] FrameWithInfo frameWithInfo() const;
  66. bool markFrameShown() const;
  67. void lockPlayer();
  68. void unlockPlayer();
  69. [[nodiscard]] bool playerLocked() const;
  70. void setPriority(int priority);
  71. [[nodiscard]] int priority() const;
  72. [[nodiscard]] rpl::lifetime &lifetime();
  73. private:
  74. const std::shared_ptr<Document> _shared;
  75. Fn<void()> _waitingCallback;
  76. int _priority = 1;
  77. bool _playerLocked = false;
  78. rpl::lifetime _lifetime;
  79. };
  80. } // namespace Streaming
  81. } // namespace Media