1 /*
2  * Copyright (c) 2024 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 OHOS_OHAVSESSION_H
17 #define OHOS_OHAVSESSION_H
18 
19 #include <unordered_map>
20 #include "native_avsession.h"
21 #include "native_avsession_errors.h"
22 #include "avsession_info.h"
23 #include "av_session.h"
24 #include "OHAVSessionCallbackImpl.h"
25 #include "avsession_log.h"
26 #include "avcast_control_command.h"
27 
28 namespace OHOS::AVSession {
29 class OHAVSession {
30 public:
31     ~OHAVSession();
32     OHAVSession();
33     OHAVSession(AVSession_Type sessionType, const char* sessionTag,
34         const char* bundleName, const char* abilityName);
35     bool IsAVSessionNull();
36     AVSession_ErrCode Activate();
37     AVSession_ErrCode Deactivate();
38     std::string GetSessionType();
39     const std::string& GetSessionId();
40 
41     AVSession_ErrCode SetAVMetaData(OH_AVMetadata *metadata);
42     AVSession_ErrCode SetPlaybackState(AVSession_PlaybackState playbackState);
43     AVSession_ErrCode SetPlaybackPosition(AVSession_PlaybackPosition* playbackPosition);
44     AVSession_ErrCode SetFavorite(bool favorite);
45     AVSession_ErrCode SetLoopMode(AVSession_LoopMode loopMode);
46 
47     AVSession_ErrCode RegisterCommandCallback(AVSession_ControlCommand command,
48                                               OH_AVSessionCallback_OnCommand callback, void* userData);
49     AVSession_ErrCode UnregisterCommandCallback(AVSession_ControlCommand command,
50                                                 OH_AVSessionCallback_OnCommand callback);
51     AVSession_ErrCode RegisterForwardCallback(OH_AVSessionCallback_OnFastForward callback, void* userData);
52     AVSession_ErrCode UnregisterForwardCallback(OH_AVSessionCallback_OnFastForward callback);
53     AVSession_ErrCode RegisterRewindCallback(OH_AVSessionCallback_OnRewind callback, void* userData);
54     AVSession_ErrCode UnregisterRewindCallback(OH_AVSessionCallback_OnRewind callback);
55     AVSession_ErrCode RegisterSeekCallback(OH_AVSessionCallback_OnSeek callback, void* userData);
56     AVSession_ErrCode UnregisterSeekCallback(OH_AVSessionCallback_OnSeek callback);
57     AVSession_ErrCode RegisterSetLoopModeCallback(OH_AVSessionCallback_OnSetLoopMode callback, void* userData);
58     AVSession_ErrCode UnregisterSetLoopModeCallback(OH_AVSessionCallback_OnSetLoopMode callback);
59     AVSession_ErrCode RegisterToggleFavoriteCallback(OH_AVSessionCallback_OnToggleFavorite callback, void* userData);
60     AVSession_ErrCode UnregisterToggleFavoriteCallback(OH_AVSessionCallback_OnToggleFavorite callback);
61     AVSession_ErrCode Destroy();
62     AVSession_ErrCode CheckAndRegister();
63 
64     AVSession_ErrCode GetEncodeErrcode(int32_t ret);
65     std::unordered_map<int32_t, AVSession_ErrCode> errcodes = {
66         {0, AV_SESSION_ERR_SUCCESS},
67         {6600101, AV_SESSION_ERR_SERVICE_EXCEPTION},
68         {6600102, AV_SESSION_ERR_CODE_SESSION_NOT_EXIST},
69         {6600105, AV_SESSION_ERR_CODE_COMMAND_INVALID},
70         {6600106, AV_SESSION_ERR_CODE_SESSION_INACTIVE},
71         {6600107, AV_SESSION_ERR_CODE_MESSAGE_OVERLOAD},
72     };
73     std::unordered_map<std::string, AVSession_Type> avsessionTypes = {
74         {"audio", SESSION_TYPE_AUDIO},
75         {"video", SESSION_TYPE_VIDEO},
76         {"voice_call", SESSION_TYPE_VOICE_CALL},
77         {"video_call", SESSION_TYPE_VIDEO_CALL},
78     };
79 
80 private:
81     std::mutex lock_;
82     std::shared_ptr<AVSession> avSession_;
83     std::shared_ptr<OHAVSessionCallbackImpl> ohAVSessionCallbackImpl_;
84     std::string sessionId_;
85 };
86 }
87 #endif // OHOS_OHAVSESSION_H