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 #ifndef LOG_TAG
16 #define LOG_TAG "IpcOfflineStreamStub"
17 #endif
18
19 #include "ipc_offline_stream_stub.h"
20 #include "audio_service_log.h"
21 #include "audio_errors.h"
22
23 namespace OHOS {
24 namespace AudioStandard {
IpcOfflineStreamStub()25 IpcOfflineStreamStub::IpcOfflineStreamStub()
26 {
27 handlerMap_ = {
28 {CREATE_OFFLINE_EFFECT_CHAIN, [this](MessageParcel &data, MessageParcel &reply) {
29 return HandleCreateOfflineEffectChain(data, reply);
30 }},
31 {CONFIGURE_OFFLINE_EFFECT_CHAIN, [this](MessageParcel &data, MessageParcel &reply) {
32 return HandleConfigureOfflineEffectChain(data, reply);
33 }},
34 {PROCESS_OFFLINE_EFFECT_CHAIN, [this](MessageParcel &data, MessageParcel &reply) {
35 return HandleProcessOfflineEffectChain(data, reply);
36 }},
37 {PREPARE_OFFLINE_EFFECT_CHAIN, [this](MessageParcel &data, MessageParcel &reply) {
38 return HandlePrepareOfflineEffectChain(data, reply);
39 }},
40 {RELEASE_OFFLINE_EFFECT_CHAIN, [this](MessageParcel &data, MessageParcel &reply) {
41 return HandleReleaseOfflineEffectChain(data, reply);
42 }}
43 };
44 }
45
CheckInterfaceToken(MessageParcel & data)46 bool IpcOfflineStreamStub::CheckInterfaceToken(MessageParcel &data)
47 {
48 static auto localDescriptor = IpcOfflineStream::GetDescriptor();
49 auto remoteDescriptor = data.ReadInterfaceToken();
50 if (remoteDescriptor != localDescriptor) {
51 AUDIO_ERR_LOG("CheckInterFfaceToken failed.");
52 return false;
53 }
54 return true;
55 }
56
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)57 int32_t IpcOfflineStreamStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply,
58 MessageOption &option)
59 {
60 CHECK_AND_RETURN_RET(CheckInterfaceToken(data), AUDIO_ERR);
61 auto it = handlerMap_.find(code);
62 if (it != handlerMap_.end()) {
63 return it->second(data, reply);
64 }
65 AUDIO_WARNING_LOG("OnRemoteRequest unsupported request code:%{public}d.", code);
66 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
67 }
68
HandleCreateOfflineEffectChain(MessageParcel & data,MessageParcel & reply)69 int32_t IpcOfflineStreamStub::HandleCreateOfflineEffectChain(MessageParcel &data, MessageParcel &reply)
70 {
71 std::string chainName = data.ReadString();
72 int32_t ret = CreateOfflineEffectChain(chainName);
73 reply.WriteInt32(ret);
74 return AUDIO_OK;
75 }
76
HandleConfigureOfflineEffectChain(MessageParcel & data,MessageParcel & reply)77 int32_t IpcOfflineStreamStub::HandleConfigureOfflineEffectChain(MessageParcel &data, MessageParcel &reply)
78 {
79 AudioStreamInfo inInfo;
80 AudioStreamInfo outInfo;
81 inInfo.Unmarshalling(data);
82 outInfo.Unmarshalling(data);
83 int32_t ret = ConfigureOfflineEffectChain(inInfo, outInfo);
84 reply.WriteInt32(ret);
85 return AUDIO_OK;
86 }
87
HandlePrepareOfflineEffectChain(MessageParcel & data,MessageParcel & reply)88 int32_t IpcOfflineStreamStub::HandlePrepareOfflineEffectChain(MessageParcel &data, MessageParcel &reply)
89 {
90 (void)data;
91 std::shared_ptr<AudioSharedMemory> inBuf = nullptr;
92 std::shared_ptr<AudioSharedMemory> outBuf = nullptr;
93 int32_t ret = PrepareOfflineEffectChain(inBuf, outBuf);
94 AudioSharedMemory::WriteToParcel(inBuf, reply);
95 AudioSharedMemory::WriteToParcel(outBuf, reply);
96 reply.WriteInt32(ret);
97 return AUDIO_OK;
98 }
99
HandleProcessOfflineEffectChain(MessageParcel & data,MessageParcel & reply)100 int32_t IpcOfflineStreamStub::HandleProcessOfflineEffectChain(MessageParcel &data, MessageParcel &reply)
101 {
102 uint32_t inSize;
103 uint32_t outSize;
104 inSize = data.ReadUint32();
105 outSize = data.ReadUint32();
106 int32_t ret = ProcessOfflineEffectChain(inSize, outSize);
107 return ret;
108 }
109
HandleReleaseOfflineEffectChain(MessageParcel & data,MessageParcel & reply)110 int32_t IpcOfflineStreamStub::HandleReleaseOfflineEffectChain(MessageParcel &data, MessageParcel &reply)
111 {
112 ReleaseOfflineEffectChain();
113 return SUCCESS;
114 }
115
116 } // namespace AudioStandard
117 } // namespace OHOS
118