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