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 Seek(int32_t mSeconds, PlayerSeekMode mode); 32 virtual int32_t SetPlaybackSpeed(PlaybackRateMode mode); 33 virtual int32_t Stop(); 34 virtual int32_t SeekContinous(int32_t mSeconds, int64_t batchNo); 35 virtual int32_t PauseDemuxer(); 36 virtual int32_t ResumeDemuxer(); 37 virtual int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode); 38 protected: 39 int32_t OnMessageReceived(PlayerOnInfoType type, int32_t extra, const Format &infoBody) override; HandleStateChange(int32_t newState)40 virtual void HandleStateChange(int32_t newState) 41 { 42 (void)newState; 43 } HandlePlaybackComplete(int32_t extra)44 virtual void HandlePlaybackComplete(int32_t extra) 45 { 46 (void)extra; 47 } 48 void ReportInvalidOperation() const; HandleEos()49 virtual void HandleEos() {} HandleInterruptEvent(const Format & infoBody)50 virtual void HandleInterruptEvent(const Format &infoBody) 51 { 52 (void)infoBody; 53 } HandleAudioDeviceChangeEvent(const Format & infoBody)54 virtual void HandleAudioDeviceChangeEvent(const Format &infoBody) 55 { 56 (void)infoBody; 57 } 58 int32_t MessageSeekDone(int32_t extra); 59 int32_t MessageTrackDone(int32_t extra); 60 int32_t MessageTrackInfoUpdate(); 61 int32_t MessageSpeedDone(); 62 int32_t MessageStateChange(int32_t extra); 63 64 PlayerServer &server_; 65 }; 66 67 class PlayerServer::IdleState : public PlayerServer::BaseState { 68 public: IdleState(PlayerServer & server)69 explicit IdleState(PlayerServer &server) : BaseState(server, "idle_state") {} 70 ~IdleState() = default; 71 72 protected: 73 void StateEnter() override; 74 }; 75 76 class PlayerServer::InitializedState : public PlayerServer::BaseState { 77 public: InitializedState(PlayerServer & server)78 explicit InitializedState(PlayerServer &server) : BaseState(server, "inited_state") {} 79 ~InitializedState() = default; 80 81 int32_t Prepare() override; 82 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 83 }; 84 85 class PlayerServer::PreparingState : public PlayerServer::BaseState { 86 public: PreparingState(PlayerServer & server)87 explicit PreparingState(PlayerServer &server) : BaseState(server, "preparing_state") {} 88 ~PreparingState() = default; 89 90 int32_t Stop() override; 91 92 protected: 93 void HandleStateChange(int32_t newState) override; 94 void StateEnter() override; 95 }; 96 97 class PlayerServer::PreparedState : public PlayerServer::BaseState { 98 public: PreparedState(PlayerServer & server)99 explicit PreparedState(PlayerServer &server) : BaseState(server, "prepared_state") {} 100 ~PreparedState() = default; 101 102 int32_t Prepare() override; 103 int32_t Play() override; 104 int32_t Seek(int32_t mSeconds, PlayerSeekMode mode) override; 105 int32_t Stop() override; 106 int32_t SetPlaybackSpeed(PlaybackRateMode mode) override; 107 int32_t SeekContinous(int32_t mSeconds, int64_t batchNo) override; 108 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 109 110 protected: 111 void HandleStateChange(int32_t newState) override; 112 void HandleEos() override; 113 }; 114 115 class PlayerServer::PlayingState : public PlayerServer::BaseState { 116 public: PlayingState(PlayerServer & server)117 explicit PlayingState(PlayerServer &server) : BaseState(server, "playing_state") {} 118 ~PlayingState() = default; 119 120 int32_t Play() override; 121 int32_t Pause(bool isSystemOperation) override; 122 int32_t Seek(int32_t mSeconds, PlayerSeekMode mode) override; 123 int32_t Stop() override; 124 int32_t SetPlaybackSpeed(PlaybackRateMode mode) override; 125 int32_t SeekContinous(int32_t mSeconds, int64_t batchNo) override; 126 int32_t PauseDemuxer() override; 127 int32_t ResumeDemuxer() override; 128 129 protected: 130 void HandleStateChange(int32_t newState) override; 131 void HandlePlaybackComplete(int32_t extra) override; 132 void HandleInterruptEvent(const Format &infoBody) override; 133 void HandleAudioDeviceChangeEvent(const Format &infoBody) override; 134 void HandleEos() override; 135 void StateEnter() override; 136 void StateExit() override; 137 }; 138 139 class PlayerServer::PausedState : public PlayerServer::BaseState { 140 public: PausedState(PlayerServer & server)141 explicit PausedState(PlayerServer &server) : BaseState(server, "paused_state") {} 142 ~PausedState() = default; 143 144 int32_t Play() override; 145 int32_t Pause(bool isSystemOperation) override; 146 int32_t Seek(int32_t mSeconds, PlayerSeekMode mode) override; 147 int32_t Stop() override; 148 int32_t SetPlaybackSpeed(PlaybackRateMode mode) override; 149 int32_t SeekContinous(int32_t mSeconds, int64_t batchNo) override; 150 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 151 152 protected: 153 void HandleStateChange(int32_t newState) override; 154 void HandleEos() override; 155 }; 156 157 class PlayerServer::StoppedState : public PlayerServer::BaseState { 158 public: StoppedState(PlayerServer & server)159 explicit StoppedState(PlayerServer &server) : BaseState(server, "stopped_state") {} 160 ~StoppedState() = default; 161 162 int32_t Prepare() override; 163 int32_t Stop() override; 164 void HandleStateChange(int32_t newState) override; 165 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 166 }; 167 168 class PlayerServer::PlaybackCompletedState : public PlayerServer::BaseState { 169 public: PlaybackCompletedState(PlayerServer & server)170 explicit PlaybackCompletedState(PlayerServer &server) : BaseState(server, "playbackCompleted_state") {} 171 ~PlaybackCompletedState() = default; 172 173 int32_t Play() override; 174 int32_t Seek(int32_t mSeconds, PlayerSeekMode mode) override; 175 int32_t Stop() override; 176 int32_t SetPlaybackSpeed(PlaybackRateMode mode) override; 177 int32_t SeekContinous(int32_t mSeconds, int64_t batchNo) override; 178 int32_t SetPlayRangeWithMode(int64_t start, int64_t end, PlayerSeekMode mode) override; 179 void StateEnter() override; 180 181 protected: 182 void HandleStateChange(int32_t newState) override; 183 184 private: 185 int64_t stateEnterTimeMs_ = 0; 186 }; 187 } 188 } 189 #endif // PLAYER_SERVER_STATE_H 190