• 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 PLAYBIN_STATE_H
17 #define PLAYBIN_STATE_H
18 
19 #include "playbin_ctrler_base.h"
20 #include "state_machine.h"
21 #include "inner_msg_define.h"
22 
23 namespace OHOS {
24 namespace Media {
25 class PlayBinCtrlerBase::BaseState : public State {
26 public:
BaseState(PlayBinCtrlerBase & ctrler,const std::string & name)27     BaseState(PlayBinCtrlerBase &ctrler, const std::string &name) : State(name), ctrler_(ctrler) {}
28     virtual ~BaseState() = default;
29 
30     virtual int32_t Prepare();
31     virtual int32_t Play();
32     virtual int32_t Pause();
33     virtual int32_t Seek(int64_t timeUs, int32_t option);
34     virtual int32_t Stop();
35 
36 protected:
37     void OnMessageReceived(const InnerMessage &msg) final;
ProcessMessage(const InnerMessage & msg)38     virtual void ProcessMessage(const InnerMessage &msg) {}
39     void ReportInvalidOperation();
40     int32_t ChangePlayBinState(GstState targetState);
41 
42     PlayBinCtrlerBase &ctrler_;
43 };
44 
45 class PlayBinCtrlerBase::IdleState : public PlayBinCtrlerBase::BaseState {
46 public:
IdleState(PlayBinCtrlerBase & ctrler)47     explicit IdleState(PlayBinCtrlerBase &ctrler) : BaseState(ctrler, "idle_state") {}
48     ~IdleState() = default;
49 
50 protected:
51     void StateEnter() override;
52 };
53 
54 class PlayBinCtrlerBase::InitializedState : public PlayBinCtrlerBase::BaseState {
55 public:
InitializedState(PlayBinCtrlerBase & ctrler)56     explicit InitializedState(PlayBinCtrlerBase &ctrler) : BaseState(ctrler, "inited_state") {}
57     ~InitializedState() = default;
58 
59     int32_t Prepare() override;
60 };
61 
62 class PlayBinCtrlerBase::PreparingState : public PlayBinCtrlerBase::BaseState {
63 public:
PreparingState(PlayBinCtrlerBase & ctrler)64     explicit PreparingState(PlayBinCtrlerBase &ctrler) : BaseState(ctrler, "preparing_state") {}
65     ~PreparingState() = default;
66 
67     int32_t Stop() override;
68 
69 protected:
70     void ProcessMessage(const InnerMessage &msg) override;
71     void StateEnter() override;
72     void StateExit() override;
73 
74     bool stateChanged_ = false;
75 };
76 
77 class PlayBinCtrlerBase::PreparedState : public PlayBinCtrlerBase::BaseState {
78 public:
PreparedState(PlayBinCtrlerBase & ctrler)79     explicit PreparedState(PlayBinCtrlerBase &ctrler) : BaseState(ctrler, "prepared_state") {}
80     ~PreparedState() = default;
81 
82     int32_t Prepare() override;
83     int32_t Play() override;
84     int32_t Seek(int64_t timeUs, int32_t option) override;
85     int32_t Stop() override;
86 
87 protected:
88     void ProcessMessage(const InnerMessage &msg) override;
89     void StateEnter() override;
90 };
91 
92 class PlayBinCtrlerBase::PlayingState : public PlayBinCtrlerBase::BaseState {
93 public:
PlayingState(PlayBinCtrlerBase & ctrler)94     explicit PlayingState(PlayBinCtrlerBase &ctrler) : BaseState(ctrler, "playing_state") {}
95     ~PlayingState() = default;
96 
97     int32_t Play() override;
98     int32_t Pause() override;
99     int32_t Seek(int64_t timeUs, int32_t option) override;
100     int32_t Stop() override;
101 
102 protected:
103     void ProcessMessage(const InnerMessage &msg) override;
104     void StateEnter() override;
105 
106     bool seekPending_ = false;
107 };
108 
109 class PlayBinCtrlerBase::PausedState : public PlayBinCtrlerBase::BaseState {
110 public:
PausedState(PlayBinCtrlerBase & ctrler)111     explicit PausedState(PlayBinCtrlerBase &ctrler) : BaseState(ctrler, "paused_state") {}
112     ~PausedState() = default;
113 
114     int32_t Play() override;
115     int32_t Pause() override;
116     int32_t Seek(int64_t timeUs, int32_t option) override;
117     int32_t Stop() override;
118 
119 protected:
120     void ProcessMessage(const InnerMessage &msg) override;
121     void StateEnter() override;
122 };
123 
124 class PlayBinCtrlerBase::StoppedState : public PlayBinCtrlerBase::BaseState {
125 public:
StoppedState(PlayBinCtrlerBase & ctrler)126     explicit StoppedState(PlayBinCtrlerBase &ctrler) : BaseState(ctrler, "stopped_state") {}
127     ~StoppedState() = default;
128 
129     int32_t Prepare() override;
130     int32_t Stop() override;
131 
132 protected:
133     void ProcessMessage(const InnerMessage &msg) override;
134     void StateEnter() override;
135 };
136 } // namespace Media
137 } // namespace OHOS
138 #endif // PLAYBIN_STATE_H