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