1 /*
2 * Copyright (c) 2022 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 #include <common.h>
17
18 using namespace OHOS::AudioStandard;
19
Realize(SLObjectItf self,SLboolean async)20 static SLresult Realize(SLObjectItf self, SLboolean async)
21 {
22 if (self == nullptr) {
23 return SL_RESULT_PARAMETER_INVALID;
24 }
25 IObject *thiz = (IObject *) self;
26 thiz->mState = SL_OBJECT_STATE_REALIZED;
27 return SL_RESULT_SUCCESS;
28 }
29
Resume(SLObjectItf self,SLboolean async)30 static SLresult Resume(SLObjectItf self, SLboolean async)
31 {
32 return SL_RESULT_SUCCESS;
33 }
34
GetState(SLObjectItf self,SLuint32 * state)35 static SLresult GetState(SLObjectItf self, SLuint32 *state)
36 {
37 if (self == nullptr) {
38 return SL_RESULT_PARAMETER_INVALID;
39 }
40 IObject *thiz = (IObject *) self;
41 *state = thiz->mState;
42 return SL_RESULT_SUCCESS;
43 }
44
GetInterface(SLObjectItf self,const SLInterfaceID iid,void * interface)45 static SLresult GetInterface(SLObjectItf self, const SLInterfaceID iid, void *interface)
46 {
47 if (self == nullptr) {
48 return SL_RESULT_PARAMETER_INVALID;
49 }
50 if (iid == SL_IID_ENGINE) {
51 CEngine *cEngine = (CEngine *)self;
52 *(void **)interface = (void *)&(cEngine->mEngine.mItf);
53 return SL_RESULT_SUCCESS;
54 } else if (iid == SL_IID_PLAY) {
55 CAudioPlayer *cAudioPlayer = (CAudioPlayer *)self;
56 *(void **)interface = (void *)&(cAudioPlayer->mPlay.mItf);
57 return SL_RESULT_SUCCESS;
58 } else if (iid == SL_IID_VOLUME) {
59 CAudioPlayer *cAudioPlayer = (CAudioPlayer *)self;
60 *(void **)interface = (void *)&(cAudioPlayer->mVolume.mItf);
61 return SL_RESULT_SUCCESS;
62 } else if (iid == SL_IID_OH_BUFFERQUEUE) {
63 CAudioPlayer *cAudioPlayer = (CAudioPlayer *)self;
64 *(void **)interface = (void *)&(cAudioPlayer->mBufferQueue.mItf);
65 return SL_RESULT_SUCCESS;
66 } else {
67 MEDIA_ERR_LOG("GetInterface: SLInterfaceID not supported");
68 return SL_RESULT_FEATURE_UNSUPPORTED;
69 }
70 }
71
RegisterCallback(SLObjectItf self,slObjectCallback callback,void * pContext)72 static SLresult RegisterCallback(SLObjectItf self, slObjectCallback callback, void *pContext)
73 {
74 return SL_RESULT_FEATURE_UNSUPPORTED;
75 }
76
AbortAsyncOperation(SLObjectItf self)77 static void AbortAsyncOperation(SLObjectItf self)
78 {
79 return;
80 }
81
SetPriority(SLObjectItf self,SLint32 priority,SLboolean preemptable)82 static SLresult SetPriority(SLObjectItf self, SLint32 priority, SLboolean preemptable)
83 {
84 return SL_RESULT_FEATURE_UNSUPPORTED;
85 }
86
GetPriority(SLObjectItf self,SLint32 * pPriority,SLboolean * pPreemptable)87 static SLresult GetPriority(SLObjectItf self, SLint32 *pPriority, SLboolean *pPreemptable)
88 {
89 return SL_RESULT_FEATURE_UNSUPPORTED;
90 }
91
SetLossOfControlInterfaces(SLObjectItf self,SLint16 numInterfaces,SLInterfaceID * pInterfaceIDs,SLboolean enabled)92 static SLresult SetLossOfControlInterfaces(SLObjectItf self,
93 SLint16 numInterfaces, SLInterfaceID *pInterfaceIDs, SLboolean enabled)
94 {
95 return SL_RESULT_FEATURE_UNSUPPORTED;
96 }
97
Destroy(SLObjectItf self)98 void Destroy(SLObjectItf self)
99 {
100 if (self == nullptr) {
101 return;
102 }
103 IObject *iObject = (IObject *)self;
104 SLuint32 objectId = iObject->mClass->mObjectId;
105 switch (objectId) {
106 case SL_OBJECTID_AUDIOPLAYER:
107 AudioPlayerDestroy((void *)self);
108 break;
109 case SL_OBJECTID_ENGINE:
110 EngineDestory((void *)self);
111 break;
112 case SL_OBJECTID_OUTPUTMIX:
113 OutputMixDestroy((void *)self);
114 break;
115 default:
116 MEDIA_ERR_LOG("objectId not supported");
117 break;
118 }
119 return;
120 }
121
122 static const struct SLObjectItf_ ObjectItf = {
123 Realize,
124 Resume,
125 GetState,
126 GetInterface,
127 RegisterCallback,
128 AbortAsyncOperation,
129 Destroy,
130 SetPriority,
131 GetPriority,
132 SetLossOfControlInterfaces
133 };
134
IObjectInit(void * self)135 void IObjectInit(void *self)
136 {
137 IObject *thiz = (IObject *) self;
138 thiz->mItf = &ObjectItf;
139 thiz->mState = SL_OBJECT_STATE_UNREALIZED;
140 }
141