1fa7767c5Sopenharmony_ci/* 2fa7767c5Sopenharmony_ci * Copyright (c) 2021-2021 Huawei Device Co., Ltd. 3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License. 5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at 6fa7767c5Sopenharmony_ci * 7fa7767c5Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fa7767c5Sopenharmony_ci * 9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and 13fa7767c5Sopenharmony_ci * limitations under the License. 14fa7767c5Sopenharmony_ci */ 15fa7767c5Sopenharmony_ci 16fa7767c5Sopenharmony_ci#ifndef HISTREAMER_HIPLAYER_STATE_H 17fa7767c5Sopenharmony_ci#define HISTREAMER_HIPLAYER_STATE_H 18fa7767c5Sopenharmony_ci 19fa7767c5Sopenharmony_ci#include <map> 20fa7767c5Sopenharmony_ci#include <memory> 21fa7767c5Sopenharmony_ci#include <string> 22fa7767c5Sopenharmony_ci#include <tuple> 23fa7767c5Sopenharmony_ci#include "foundation/log.h" 24fa7767c5Sopenharmony_ci#include "pipeline/core/error_code.h" 25fa7767c5Sopenharmony_ci#include "play_executor.h" 26fa7767c5Sopenharmony_ci#include "plugin/common/any.h" 27fa7767c5Sopenharmony_ci 28fa7767c5Sopenharmony_cinamespace OHOS { 29fa7767c5Sopenharmony_cinamespace Media { 30fa7767c5Sopenharmony_cienum class StateId { 31fa7767c5Sopenharmony_ci IDLE = 0, 32fa7767c5Sopenharmony_ci INIT = 1, 33fa7767c5Sopenharmony_ci PREPARING = 2, 34fa7767c5Sopenharmony_ci READY = 3, 35fa7767c5Sopenharmony_ci PAUSE = 4, 36fa7767c5Sopenharmony_ci PLAYING = 5, 37fa7767c5Sopenharmony_ci STOPPED = 6, 38fa7767c5Sopenharmony_ci EOS = 7, 39fa7767c5Sopenharmony_ci BUTT, 40fa7767c5Sopenharmony_ci}; 41fa7767c5Sopenharmony_ci 42fa7767c5Sopenharmony_cienum class Intent { 43fa7767c5Sopenharmony_ci SET_SOURCE, 44fa7767c5Sopenharmony_ci SEEK, 45fa7767c5Sopenharmony_ci PREPARE, 46fa7767c5Sopenharmony_ci PLAY, 47fa7767c5Sopenharmony_ci PAUSE, 48fa7767c5Sopenharmony_ci RESUME, 49fa7767c5Sopenharmony_ci STOP, 50fa7767c5Sopenharmony_ci RESET, 51fa7767c5Sopenharmony_ci SET_ATTRIBUTE, 52fa7767c5Sopenharmony_ci NOTIFY_READY, 53fa7767c5Sopenharmony_ci NOTIFY_COMPLETE, 54fa7767c5Sopenharmony_ci NOTIFY_ERROR, 55fa7767c5Sopenharmony_ci INTENT_BUTT 56fa7767c5Sopenharmony_ci}; 57fa7767c5Sopenharmony_ci 58fa7767c5Sopenharmony_cienum class Action { 59fa7767c5Sopenharmony_ci TRANS_TO_IDLE, 60fa7767c5Sopenharmony_ci TRANS_TO_INIT, 61fa7767c5Sopenharmony_ci TRANS_TO_PREPARING, 62fa7767c5Sopenharmony_ci TRANS_TO_READY, 63fa7767c5Sopenharmony_ci TRANS_TO_PLAYING, 64fa7767c5Sopenharmony_ci TRANS_TO_PAUSE, 65fa7767c5Sopenharmony_ci TRANS_TO_STOPPED, 66fa7767c5Sopenharmony_ci TRANS_TO_EOS, 67fa7767c5Sopenharmony_ci ACTION_PENDING, 68fa7767c5Sopenharmony_ci ACTION_BUTT 69fa7767c5Sopenharmony_ci}; 70fa7767c5Sopenharmony_ci 71fa7767c5Sopenharmony_ciclass State { 72fa7767c5Sopenharmony_cipublic: 73fa7767c5Sopenharmony_ci State(StateId stateId, std::string name, PlayExecutor& executor); 74fa7767c5Sopenharmony_ci virtual ~State() = default; 75fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> Enter(Intent intent); 76fa7767c5Sopenharmony_ci virtual void Exit(); 77fa7767c5Sopenharmony_ci std::tuple<ErrorCode, Action> Execute(Intent intent, const Plugin::Any& param); 78fa7767c5Sopenharmony_ci const std::string& GetName(); 79fa7767c5Sopenharmony_ci StateId GetStateId(); 80fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> SetSource(const Plugin::Any& param); 81fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> Prepare(); 82fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> Play(); 83fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> Stop(); 84fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> Reset(); 85fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> Pause(); 86fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> Resume(); 87fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> Seek(const Plugin::Any& param); 88fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> SetAttribute(); 89fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> OnReady(); 90fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> OnError(const Plugin::Any& param) final; 91fa7767c5Sopenharmony_ci virtual std::tuple<ErrorCode, Action> OnComplete(); 92fa7767c5Sopenharmony_ci 93fa7767c5Sopenharmony_ci static const char* GetStateName(StateId state); 94fa7767c5Sopenharmony_ci static const char* GetIntentName(Intent intent); 95fa7767c5Sopenharmony_ci static const char* GetActionName(Action action); 96fa7767c5Sopenharmony_ci 97fa7767c5Sopenharmony_ciprotected: 98fa7767c5Sopenharmony_ci std::tuple<ErrorCode, Action> DispatchIntent(Intent intent, const Plugin::Any& param); 99fa7767c5Sopenharmony_ci 100fa7767c5Sopenharmony_ci const StateId stateId_; 101fa7767c5Sopenharmony_ci const std::string name_; 102fa7767c5Sopenharmony_ci PlayExecutor& executor_; 103fa7767c5Sopenharmony_ci}; 104fa7767c5Sopenharmony_ci} // namespace Media 105fa7767c5Sopenharmony_ci} // namespace OHOS 106fa7767c5Sopenharmony_ci#endif 107