163{
165 ULONG NewIndex, OldIndex;
166
167 Samples =
BufferLength / (BitsPerSample / 8) / OldChannels;
168
169 if (NewChannels > OldChannels)
170 {
171 if (BitsPerSample == 8)
172 {
174 if (!BufferOut)
176
177 for(NewIndex = 0, OldIndex = 0; OldIndex < Samples * OldChannels; NewIndex += NewChannels, OldIndex += OldChannels)
178 {
180
182
183 do
184 {
185
186 BufferOut[NewIndex+OldChannels + SubIndex] =
Buffer[OldIndex + (SubIndex % OldChannels)];
187 }while(SubIndex++ < NewChannels - OldChannels);
188 }
191 }
192 else if (BitsPerSample == 16)
193 {
195 if (!BufferOut)
197
198 for(NewIndex = 0, OldIndex = 0; OldIndex < Samples * OldChannels; NewIndex += NewChannels, OldIndex += OldChannels)
199 {
201
203
204 do
205 {
206 BufferOut[NewIndex+OldChannels + SubIndex] =
Buffer[OldIndex + (SubIndex % OldChannels)];
207 }while(SubIndex++ < NewChannels - OldChannels);
208 }
211 }
212 else if (BitsPerSample == 24)
213 {
215 if (!BufferOut)
217
218 for(NewIndex = 0, OldIndex = 0; OldIndex < Samples * OldChannels; NewIndex += NewChannels, OldIndex += OldChannels)
219 {
221
223
224 do
225 {
226 RtlMoveMemory(&BufferOut[(NewIndex+OldChannels + SubIndex) * 3], &
Buffer[(OldIndex + (SubIndex % OldChannels)) * 3], 3);
227 }while(SubIndex++ < NewChannels - OldChannels);
228 }
231 }
232 else if (BitsPerSample == 32)
233 {
235 if (!BufferOut)
237
238 for(NewIndex = 0, OldIndex = 0; OldIndex < Samples * OldChannels; NewIndex += NewChannels, OldIndex += OldChannels)
239 {
241
243
244 do
245 {
246 BufferOut[NewIndex+OldChannels + SubIndex] =
Buffer[OldIndex + (SubIndex % OldChannels)];
247 }while(SubIndex++ < NewChannels - OldChannels);
248 }
251 }
252
253 }
254 else
255 {
257 if (!BufferOut)
259
260 for(NewIndex = 0, OldIndex = 0; OldIndex < Samples * OldChannels; NewIndex += NewChannels, OldIndex += OldChannels)
261 {
262
263
264
266 }
267
270 }
272}
#define RtlMoveMemory(Destination, Source, Length)
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO