1 /* 2 * Copyright (C) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef PLAYER_SERVER_STATE_H 17 #define PLAYER_SERVER_STATE_H 18 19 #include "player_server.h" 20 21 namespace OHOS { 22 namespace Media { 23 class PlayerServer::BaseState : public PlayerServerState { 24 public: BaseState(PlayerServer & server,const std::string & name)25 BaseState(PlayerServer &server, const std::string &name) : PlayerServerState(name), server_(server) {} 26 virtual ~BaseState() = default; 27 28 virtual int32_t Prepare(); 29 virtual int32_t Play(); 30 virtual int32_t Pause(bool isSystemOperation); 31 virtual int32_t Freeze(); 32 virtual int32_t UnFreeze(); 33 virtual int32_t Seek(int32_t mSeconds, PlayerSeekMode mode); 34 virtual int32_t SetPlaybackSpeed(PlaybackRateMode mode); 35 virtual int32_t SetPlaybackRate(float rate); 36 virtual int32_t Stop(); 37 virtual int32_t SeekContinous(int32_t mSeconds, int64_t batchNo); 38 virtual int32_t PauseDemuxer(); 39 virtual int32_t ResumeDemuxer(); 40 virtual int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode); 41 protected: 42 int32_t OnMessageReceived(PlayerOnInfoType type, int32_t extra, const Format &infoBody) override; HandleStateChange(int32_t newState)43 virtual void HandleStateChange(int32_t newState) 44 { 45 (void)newState; 46 } HandlePlaybackComplete(int32_t extra)47 virtual void HandlePlaybackComplete(int32_t extra) 48 { 49 (void)extra; 50 } 51 void ReportInvalidOperation() const; HandleEos()52 virtual void HandleEos() {} HandleInterruptEvent(const Format & infoBody)53 virtual void HandleInterruptEvent(const Format &infoBody) 54 { 55 (void)infoBody; 56 } HandleAudioDeviceChangeEvent(const Format & infoBody)57 virtual void HandleAudioDeviceChangeEvent(const Format &infoBody) 58 { 59 (void)infoBody; 60 } 61 int32_t MessageSeekDone(int32_t extra); 62 int32_t MessageTrackDone(int32_t extra); 63 int32_t MessageTrackInfoUpdate(); 64 int32_t MessageSpeedDone(); 65 int32_t MessageRateDone(); 66 int32_t MessageStateChange(int32_t extra); 67 68 PlayerServer &server_; 69 }; 70 71 class PlayerServer::IdleState : public PlayerServer::BaseState { 72 public: IdleState(PlayerServer & server)73 explicit IdleState(PlayerServer &server) : BaseState(server, "idle_state") {} 74 ~IdleState() = default; 75 76 protected: 77 void StateEnter() override; 78 }; 79 80 class PlayerServer::InitializedState : public PlayerServer::BaseState { 81 public: InitializedState(PlayerServer & server)82 explicit InitializedState(PlayerServer &server) : BaseState(server, "inited_state") {} 83 ~InitializedState() = default; 84 85 int32_t Prepare() override; 86 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 87 }; 88 89 class PlayerServer::PreparingState : public PlayerServer::BaseState { 90 public: PreparingState(PlayerServer & server)91 explicit PreparingState(PlayerServer &server) : BaseState(server, "preparing_state") {} 92 ~PreparingState() = default; 93 94 int32_t Stop() override; 95 96 protected: 97 void HandleStateChange(int32_t newState) override; 98 void StateEnter() override; 99 }; 100 101 class PlayerServer::PreparedState : public PlayerServer::BaseState { 102 public: PreparedState(PlayerServer & server)103 explicit PreparedState(PlayerServer &server) : BaseState(server, "prepared_state") {} 104 ~PreparedState() = default; 105 106 int32_t Prepare() override; 107 int32_t Play() override; 108 int32_t Seek(int32_t mSeconds, PlayerSeekMode mode) override; 109 int32_t Stop() override; 110 int32_t SetPlaybackSpeed(PlaybackRateMode mode) override; 111 int32_t SetPlaybackRate(float rate) override; 112 int32_t SeekContinous(int32_t mSeconds, int64_t batchNo) override; 113 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 114 115 protected: 116 void HandleStateChange(int32_t newState) override; 117 void HandleEos() override; 118 }; 119 120 class PlayerServer::PlayingState : public PlayerServer::BaseState { 121 public: PlayingState(PlayerServer & server)122 explicit PlayingState(PlayerServer &server) : BaseState(server, "playing_state") {} 123 ~PlayingState() = default; 124 125 int32_t Play() override; 126 int32_t Pause(bool isSystemOperation) override; 127 int32_t Freeze() override; 128 int32_t UnFreeze() override; 129 int32_t Seek(int32_t mSeconds, PlayerSeekMode mode) override; 130 int32_t Stop() override; 131 int32_t SetPlaybackSpeed(PlaybackRateMode mode) override; 132 int32_t SetPlaybackRate(float rate) override; 133 int32_t SeekContinous(int32_t mSeconds, int64_t batchNo) override; 134 int32_t PauseDemuxer() override; 135 int32_t ResumeDemuxer() override; 136 137 protected: 138 void HandleStateChange(int32_t newState) override; 139 void HandlePlaybackComplete(int32_t extra) override; 140 void HandleInterruptEvent(const Format &infoBody) override; 141 void HandleAudioDeviceChangeEvent(const Format &infoBody) override; 142 void HandleEos() override; 143 void StateEnter() override; 144 void StateExit() override; 145 }; 146 147 class PlayerServer::PausedState : public PlayerServer::BaseState { 148 public: PausedState(PlayerServer & server)149 explicit PausedState(PlayerServer &server) : BaseState(server, "paused_state") {} 150 ~PausedState() = default; 151 152 int32_t Play() override; 153 int32_t Pause(bool isSystemOperation) override; 154 int32_t UnFreeze() override; 155 int32_t Seek(int32_t mSeconds, PlayerSeekMode mode) override; 156 int32_t Stop() override; 157 int32_t SetPlaybackSpeed(PlaybackRateMode mode) override; 158 int32_t SetPlaybackRate(float rate) override; 159 int32_t SeekContinous(int32_t mSeconds, int64_t batchNo) override; 160 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 161 162 protected: 163 void HandleStateChange(int32_t newState) override; 164 void HandleEos() override; 165 }; 166 167 class PlayerServer::StoppedState : public PlayerServer::BaseState { 168 public: StoppedState(PlayerServer & server)169 explicit StoppedState(PlayerServer &server) : BaseState(server, "stopped_state") {} 170 ~StoppedState() = default; 171 172 int32_t Prepare() override; 173 int32_t Stop() override; 174 void HandleStateChange(int32_t newState) override; 175 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 176 }; 177 178 class PlayerServer::PlaybackCompletedState : public PlayerServer::BaseState { 179 public: PlaybackCompletedState(PlayerServer & server)180 explicit PlaybackCompletedState(PlayerServer &server) : BaseState(server, "playbackCompleted_state") {} 181 ~PlaybackCompletedState() = default; 182 183 int32_t Play() override; 184 int32_t Seek(int32_t mSeconds, PlayerSeekMode mode) override; 185 int32_t UnFreeze() override; 186 int32_t Stop() override; 187 int32_t SetPlaybackSpeed(PlaybackRateMode mode) override; 188 int32_t SetPlaybackRate(float rate) override; 189 int32_t SeekContinous(int32_t mSeconds, int64_t batchNo) override; 190 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 191 void StateEnter() override; 192 193 protected: 194 void HandleStateChange(int32_t newState) override; 195 196 private: 197 int64_t stateEnterTimeMs_ = 0; 198 }; 199 } 200 } 201 #endif // PLAYER_SERVER_STATE_H 202