• 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 "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