• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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