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 "audio_renderer_state_change_listener_stub.h"
17
18 #include "audio_errors.h"
19 #include "audio_system_manager.h"
20 #include "audio_log.h"
21
22 using namespace std;
23
24 namespace OHOS {
25 namespace AudioStandard {
AudioRendererStateChangeListenerStub()26 AudioRendererStateChangeListenerStub::AudioRendererStateChangeListenerStub()
27 {
28 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub Instance create");
29 }
30
~AudioRendererStateChangeListenerStub()31 AudioRendererStateChangeListenerStub::~AudioRendererStateChangeListenerStub()
32 {
33 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub Instance destroy");
34 }
35
ReadAudioRendererChangeInfo(MessageParcel & data,unique_ptr<AudioRendererChangeInfo> & rendererChangeInfo)36 void AudioRendererStateChangeListenerStub::ReadAudioRendererChangeInfo(MessageParcel &data,
37 unique_ptr<AudioRendererChangeInfo> &rendererChangeInfo)
38 {
39 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub ReadAudioRendererChangeInfo");
40 rendererChangeInfo->sessionId = data.ReadInt32();
41 rendererChangeInfo->rendererState = static_cast<RendererState>(data.ReadInt32());
42 rendererChangeInfo->clientUID = data.ReadInt32();
43 rendererChangeInfo->tokenId = data.ReadInt32();
44
45 rendererChangeInfo->rendererInfo.contentType = static_cast<ContentType>(data.ReadInt32());
46 rendererChangeInfo->rendererInfo.streamUsage = static_cast<StreamUsage>(data.ReadInt32());
47 rendererChangeInfo->rendererInfo.rendererFlags = data.ReadInt32();
48
49 rendererChangeInfo->outputDeviceInfo.deviceType = static_cast<DeviceType>(data.ReadInt32());
50 rendererChangeInfo->outputDeviceInfo.deviceRole = static_cast<DeviceRole>(data.ReadInt32());
51 rendererChangeInfo->outputDeviceInfo.deviceId = data.ReadInt32();
52 rendererChangeInfo->outputDeviceInfo.channelMasks = data.ReadInt32();
53 rendererChangeInfo->outputDeviceInfo.audioStreamInfo.samplingRate
54 = static_cast<AudioSamplingRate>(data.ReadInt32());
55 rendererChangeInfo->outputDeviceInfo.audioStreamInfo.encoding
56 = static_cast<AudioEncodingType>(data.ReadInt32());
57 rendererChangeInfo->outputDeviceInfo.audioStreamInfo.format = static_cast<AudioSampleFormat>(data.ReadInt32());
58 rendererChangeInfo->outputDeviceInfo.audioStreamInfo.channels = static_cast<AudioChannel>(data.ReadInt32());
59 rendererChangeInfo->outputDeviceInfo.deviceName = data.ReadString();
60 rendererChangeInfo->outputDeviceInfo.macAddress = data.ReadString();
61 rendererChangeInfo->outputDeviceInfo.displayName = data.ReadString();
62 rendererChangeInfo->outputDeviceInfo.networkId = data.ReadString();
63 rendererChangeInfo->outputDeviceInfo.interruptGroupId = data.ReadInt32();
64 rendererChangeInfo->outputDeviceInfo.volumeGroupId = data.ReadInt32();
65 rendererChangeInfo->outputDeviceInfo.isLowLatencyDevice = data.ReadBool();
66
67 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub, sessionid = %{public}d", rendererChangeInfo->sessionId);
68 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub, rendererState = %{public}d",
69 rendererChangeInfo->rendererState);
70 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub, clientUid = %{public}d", rendererChangeInfo->clientUID);
71 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub, contentType = %{public}d",
72 rendererChangeInfo->rendererInfo.contentType);
73 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub, streamUsage = %{public}d",
74 rendererChangeInfo->rendererInfo.streamUsage);
75 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub, rendererFlags = %{public}d",
76 rendererChangeInfo->rendererInfo.rendererFlags);
77 }
78
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)79 int AudioRendererStateChangeListenerStub::OnRemoteRequest(
80 uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
81 {
82 if (data.ReadInterfaceToken() != GetDescriptor()) {
83 AUDIO_ERR_LOG("AudioRendererStateChangeListenerStub: ReadInterfaceToken failed");
84 return -1;
85 }
86
87 switch (code) {
88 case ON_RENDERERSTATE_CHANGE: {
89 vector<unique_ptr<AudioRendererChangeInfo>> audioRendererChangeInfos;
90 int32_t size = data.ReadInt32();
91 while (size > 0) {
92 unique_ptr<AudioRendererChangeInfo> rendererChangeInfo = make_unique<AudioRendererChangeInfo>();
93 CHECK_AND_RETURN_RET_LOG(rendererChangeInfo != nullptr, ERR_MEMORY_ALLOC_FAILED, "No memory!!");
94 ReadAudioRendererChangeInfo(data, rendererChangeInfo);
95 audioRendererChangeInfos.push_back(move(rendererChangeInfo));
96 size--;
97 }
98 OnRendererStateChange(audioRendererChangeInfos);
99 return AUDIO_OK;
100 }
101 default: {
102 AUDIO_ERR_LOG("default case, need check AudioListenerStub");
103 return IPCObjectStub::OnRemoteRequest(code, data, reply, option);
104 }
105 }
106 }
107
OnRendererStateChange(const vector<unique_ptr<AudioRendererChangeInfo>> & audioRendererChangeInfos)108 void AudioRendererStateChangeListenerStub::OnRendererStateChange(
109 const vector<unique_ptr<AudioRendererChangeInfo>> &audioRendererChangeInfos)
110 {
111 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub OnRendererStateChange");
112
113 shared_ptr<AudioRendererStateChangeCallback> cb = callback_.lock();
114 if (cb == nullptr) {
115 AUDIO_ERR_LOG("AudioRendererStateChangeListenerStub: callback_ is nullptr");
116 return;
117 }
118
119 cb->OnRendererStateChange(audioRendererChangeInfos);
120 return;
121 }
122
SetCallback(const weak_ptr<AudioRendererStateChangeCallback> & callback)123 void AudioRendererStateChangeListenerStub::SetCallback(const weak_ptr<AudioRendererStateChangeCallback> &callback)
124 {
125 AUDIO_DEBUG_LOG("AudioRendererStateChangeListenerStub SetCallback");
126 callback_ = callback;
127 }
128 } // namespace AudioStandard
129 } // namespace OHOS
130