1 /*
2 * Copyright (c) 2021-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_log.h"
17 #include "audio_system_manager.h"
18
19 namespace OHOS {
20 namespace AudioStandard {
21 /**
22 * @brief The AudioDeviceDescriptor provides
23 * different sets of audio devices and their roles
24 */
AudioDeviceDescriptor(DeviceType type,DeviceRole role,int32_t interruptGroupId,int32_t volumeGroupId,std::string networkId)25 AudioDeviceDescriptor::AudioDeviceDescriptor(DeviceType type, DeviceRole role, int32_t interruptGroupId,
26 int32_t volumeGroupId, std::string networkId)
27 : deviceType_(type), deviceRole_(role), interruptGroupId_(interruptGroupId), volumeGroupId_(volumeGroupId),
28 networkId_(networkId)
29 {
30 deviceId_ = 0;
31 audioStreamInfo_ = {};
32 channelMasks_ = 0;
33 deviceName_ = "";
34 macAddress_ = "";
35 displayName_ = "";
36 }
37
AudioDeviceDescriptor(DeviceType type,DeviceRole role)38 AudioDeviceDescriptor::AudioDeviceDescriptor(DeviceType type, DeviceRole role) : deviceType_(type), deviceRole_(role)
39 {
40 deviceId_ = 0;
41 audioStreamInfo_ = {};
42 channelMasks_ = 0;
43 deviceName_ = "";
44 macAddress_ = "";
45
46 volumeGroupId_ = 0;
47 interruptGroupId_ = 0;
48 networkId_ = LOCAL_NETWORK_ID;
49 displayName_ = "";
50 }
51
AudioDeviceDescriptor()52 AudioDeviceDescriptor::AudioDeviceDescriptor()
53 : AudioDeviceDescriptor(DeviceType::DEVICE_TYPE_NONE, DeviceRole::DEVICE_ROLE_NONE)
54 {}
55
AudioDeviceDescriptor(const AudioDeviceDescriptor & deviceDescriptor)56 AudioDeviceDescriptor::AudioDeviceDescriptor(const AudioDeviceDescriptor &deviceDescriptor)
57 {
58 deviceId_ = deviceDescriptor.deviceId_;
59 deviceName_ = deviceDescriptor.deviceName_;
60 macAddress_ = deviceDescriptor.macAddress_;
61 deviceType_ = deviceDescriptor.deviceType_;
62 deviceRole_ = deviceDescriptor.deviceRole_;
63 audioStreamInfo_.channels = deviceDescriptor.audioStreamInfo_.channels;
64 audioStreamInfo_.encoding = deviceDescriptor.audioStreamInfo_.encoding;
65 audioStreamInfo_.format = deviceDescriptor.audioStreamInfo_.format;
66 audioStreamInfo_.samplingRate = deviceDescriptor.audioStreamInfo_.samplingRate;
67 channelMasks_ = deviceDescriptor.channelMasks_;
68 volumeGroupId_ = deviceDescriptor.volumeGroupId_;
69 interruptGroupId_ = deviceDescriptor.interruptGroupId_;
70 networkId_ = deviceDescriptor.networkId_;
71 displayName_ = deviceDescriptor.displayName_;
72 }
73
AudioDeviceDescriptor(const sptr<AudioDeviceDescriptor> & deviceDescriptor)74 AudioDeviceDescriptor::AudioDeviceDescriptor(const sptr<AudioDeviceDescriptor> &deviceDescriptor)
75 {
76 if (deviceDescriptor == nullptr) {
77 AUDIO_ERR_LOG("Error input parameter");
78 return;
79 }
80 deviceId_ = deviceDescriptor->deviceId_;
81 deviceName_ = deviceDescriptor->deviceName_;
82 macAddress_ = deviceDescriptor->macAddress_;
83 deviceType_ = deviceDescriptor->deviceType_;
84 deviceRole_ = deviceDescriptor->deviceRole_;
85 audioStreamInfo_.channels = deviceDescriptor->audioStreamInfo_.channels;
86 audioStreamInfo_.encoding = deviceDescriptor->audioStreamInfo_.encoding;
87 audioStreamInfo_.format = deviceDescriptor->audioStreamInfo_.format;
88 audioStreamInfo_.samplingRate = deviceDescriptor->audioStreamInfo_.samplingRate;
89 channelMasks_ = deviceDescriptor->channelMasks_;
90 volumeGroupId_ = deviceDescriptor->volumeGroupId_;
91 interruptGroupId_ = deviceDescriptor->interruptGroupId_;
92 networkId_ = deviceDescriptor->networkId_;
93 displayName_ = deviceDescriptor->displayName_;
94 }
95
~AudioDeviceDescriptor()96 AudioDeviceDescriptor::~AudioDeviceDescriptor()
97 {}
98
Marshalling(Parcel & parcel) const99 bool AudioDeviceDescriptor::Marshalling(Parcel &parcel) const
100 {
101 parcel.WriteInt32(deviceType_);
102 parcel.WriteInt32(deviceRole_);
103 parcel.WriteInt32(deviceId_);
104
105 parcel.WriteInt32(audioStreamInfo_.channels);
106 parcel.WriteInt32(audioStreamInfo_.encoding);
107 parcel.WriteInt32(audioStreamInfo_.format);
108 parcel.WriteInt32(audioStreamInfo_.samplingRate);
109 parcel.WriteInt32(channelMasks_);
110
111 parcel.WriteString(deviceName_);
112 parcel.WriteString(macAddress_);
113
114 parcel.WriteInt32(interruptGroupId_);
115 parcel.WriteInt32(volumeGroupId_);
116 parcel.WriteString(networkId_);
117 parcel.WriteString(displayName_);
118 return true;
119 }
120
Unmarshalling(Parcel & in)121 sptr<AudioDeviceDescriptor> AudioDeviceDescriptor::Unmarshalling(Parcel &in)
122 {
123 sptr<AudioDeviceDescriptor> audioDeviceDescriptor = new(std::nothrow) AudioDeviceDescriptor();
124 if (audioDeviceDescriptor == nullptr) {
125 return nullptr;
126 }
127
128 audioDeviceDescriptor->deviceType_ = static_cast<DeviceType>(in.ReadInt32());
129 audioDeviceDescriptor->deviceRole_ = static_cast<DeviceRole>(in.ReadInt32());
130 audioDeviceDescriptor->deviceId_ = in.ReadInt32();
131
132 audioDeviceDescriptor->audioStreamInfo_.channels = static_cast<AudioChannel>(in.ReadInt32());
133 audioDeviceDescriptor->audioStreamInfo_.encoding = static_cast<AudioEncodingType>(in.ReadInt32());
134 audioDeviceDescriptor->audioStreamInfo_.format = static_cast<AudioSampleFormat>(in.ReadInt32());
135 audioDeviceDescriptor->audioStreamInfo_.samplingRate = static_cast<AudioSamplingRate>(in.ReadInt32());
136 audioDeviceDescriptor->channelMasks_ = in.ReadInt32();
137
138 audioDeviceDescriptor->deviceName_ = in.ReadString();
139 audioDeviceDescriptor->macAddress_ = in.ReadString();
140
141 audioDeviceDescriptor->interruptGroupId_ = in.ReadInt32();
142 audioDeviceDescriptor->volumeGroupId_ = in.ReadInt32();
143 audioDeviceDescriptor->networkId_ = in.ReadString();
144 audioDeviceDescriptor->displayName_ = in.ReadString();
145
146 return audioDeviceDescriptor;
147 }
148
SetDeviceInfo(std::string deviceName,std::string macAddress)149 void AudioDeviceDescriptor::SetDeviceInfo(std::string deviceName, std::string macAddress)
150 {
151 deviceName_ = deviceName;
152 macAddress_ = macAddress;
153 }
154
SetDeviceCapability(const AudioStreamInfo & audioStreamInfo,int32_t channelMask)155 void AudioDeviceDescriptor::SetDeviceCapability(const AudioStreamInfo &audioStreamInfo, int32_t channelMask)
156 {
157 audioStreamInfo_.channels = audioStreamInfo.channels;
158 audioStreamInfo_.encoding = audioStreamInfo.encoding;
159 audioStreamInfo_.format = audioStreamInfo.format;
160 audioStreamInfo_.samplingRate = audioStreamInfo.samplingRate;
161 channelMasks_ = channelMask;
162 }
163
AudioRendererFilter()164 AudioRendererFilter::AudioRendererFilter()
165 {}
166
~AudioRendererFilter()167 AudioRendererFilter::~AudioRendererFilter()
168 {}
169
Marshalling(Parcel & parcel) const170 bool AudioRendererFilter::Marshalling(Parcel &parcel) const
171 {
172 return parcel.WriteInt32(uid)
173 && parcel.WriteInt32(static_cast<int32_t>(rendererInfo.contentType))
174 && parcel.WriteInt32(static_cast<int32_t>(rendererInfo.streamUsage))
175 && parcel.WriteInt32(static_cast<int32_t>(streamType))
176 && parcel.WriteInt32(rendererInfo.rendererFlags)
177 && parcel.WriteInt32(streamId);
178 }
179
Unmarshalling(Parcel & in)180 sptr<AudioRendererFilter> AudioRendererFilter::Unmarshalling(Parcel &in)
181 {
182 sptr<AudioRendererFilter> audioRendererFilter = new(std::nothrow) AudioRendererFilter();
183 if (audioRendererFilter == nullptr) {
184 return nullptr;
185 }
186
187 audioRendererFilter->uid = in.ReadInt32();
188 audioRendererFilter->rendererInfo.contentType = static_cast<ContentType>(in.ReadInt32());
189 audioRendererFilter->rendererInfo.streamUsage = static_cast<StreamUsage>(in.ReadInt32());
190 audioRendererFilter->streamType = static_cast<AudioStreamType>(in.ReadInt32());
191 audioRendererFilter->rendererInfo.rendererFlags = in.ReadInt32();
192 audioRendererFilter->streamId = in.ReadInt32();
193
194 return audioRendererFilter;
195 }
196
AudioCapturerFilter()197 AudioCapturerFilter::AudioCapturerFilter()
198 {}
199
~AudioCapturerFilter()200 AudioCapturerFilter::~AudioCapturerFilter()
201 {}
202
Marshalling(Parcel & parcel) const203 bool AudioCapturerFilter::Marshalling(Parcel &parcel) const
204 {
205 return parcel.WriteInt32(uid);
206 }
207
Unmarshalling(Parcel & in)208 sptr<AudioCapturerFilter> AudioCapturerFilter::Unmarshalling(Parcel &in)
209 {
210 sptr<AudioCapturerFilter> audioCapturerFilter = new(std::nothrow) AudioCapturerFilter();
211 if (audioCapturerFilter == nullptr) {
212 return nullptr;
213 }
214
215 audioCapturerFilter->uid = in.ReadInt32();
216
217 return audioCapturerFilter;
218 }
219 } // namespace AudioStandard
220 } // namespace OHOS
221