| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 | 249 |
| 250 // Create the interpolated convolution kernels and delays. | 250 // Create the interpolated convolution kernels and delays. |
| 251 for (unsigned jj = 1; jj < InterpolationFactor; ++jj) { | 251 for (unsigned jj = 1; jj < InterpolationFactor; ++jj) { |
| 252 float x = float(jj) / float(InterpolationFactor); // interpolate fro
m 0 -> 1 | 252 float x = float(jj) / float(InterpolationFactor); // interpolate fro
m 0 -> 1 |
| 253 | 253 |
| 254 (*kernelListL)[i + jj] = HRTFKernel::createInterpolatedKernel(kernel
ListL->at(i).get(), kernelListL->at(j).get(), x); | 254 (*kernelListL)[i + jj] = HRTFKernel::createInterpolatedKernel(kernel
ListL->at(i).get(), kernelListL->at(j).get(), x); |
| 255 (*kernelListR)[i + jj] = HRTFKernel::createInterpolatedKernel(kernel
ListR->at(i).get(), kernelListR->at(j).get(), x); | 255 (*kernelListR)[i + jj] = HRTFKernel::createInterpolatedKernel(kernel
ListR->at(i).get(), kernelListR->at(j).get(), x); |
| 256 } | 256 } |
| 257 } | 257 } |
| 258 | 258 |
| 259 OwnPtr<HRTFElevation> hrtfElevation = adoptPtr(new HRTFElevation(kernelListL
.release(), kernelListR.release(), elevation, sampleRate)); | 259 OwnPtr<HRTFElevation> hrtfElevation = adoptPtr(new HRTFElevation(std::move(k
ernelListL), std::move(kernelListR), elevation, sampleRate)); |
| 260 return hrtfElevation.release(); | 260 return hrtfElevation; |
| 261 } | 261 } |
| 262 | 262 |
| 263 PassOwnPtr<HRTFElevation> HRTFElevation::createByInterpolatingSlices(HRTFElevati
on* hrtfElevation1, HRTFElevation* hrtfElevation2, float x, float sampleRate) | 263 PassOwnPtr<HRTFElevation> HRTFElevation::createByInterpolatingSlices(HRTFElevati
on* hrtfElevation1, HRTFElevation* hrtfElevation2, float x, float sampleRate) |
| 264 { | 264 { |
| 265 ASSERT(hrtfElevation1 && hrtfElevation2); | 265 ASSERT(hrtfElevation1 && hrtfElevation2); |
| 266 if (!hrtfElevation1 || !hrtfElevation2) | 266 if (!hrtfElevation1 || !hrtfElevation2) |
| 267 return nullptr; | 267 return nullptr; |
| 268 | 268 |
| 269 ASSERT(x >= 0.0 && x < 1.0); | 269 ASSERT(x >= 0.0 && x < 1.0); |
| 270 | 270 |
| 271 OwnPtr<HRTFKernelList> kernelListL = adoptPtr(new HRTFKernelList(NumberOfTot
alAzimuths)); | 271 OwnPtr<HRTFKernelList> kernelListL = adoptPtr(new HRTFKernelList(NumberOfTot
alAzimuths)); |
| 272 OwnPtr<HRTFKernelList> kernelListR = adoptPtr(new HRTFKernelList(NumberOfTot
alAzimuths)); | 272 OwnPtr<HRTFKernelList> kernelListR = adoptPtr(new HRTFKernelList(NumberOfTot
alAzimuths)); |
| 273 | 273 |
| 274 HRTFKernelList* kernelListL1 = hrtfElevation1->kernelListL(); | 274 HRTFKernelList* kernelListL1 = hrtfElevation1->kernelListL(); |
| 275 HRTFKernelList* kernelListR1 = hrtfElevation1->kernelListR(); | 275 HRTFKernelList* kernelListR1 = hrtfElevation1->kernelListR(); |
| 276 HRTFKernelList* kernelListL2 = hrtfElevation2->kernelListL(); | 276 HRTFKernelList* kernelListL2 = hrtfElevation2->kernelListL(); |
| 277 HRTFKernelList* kernelListR2 = hrtfElevation2->kernelListR(); | 277 HRTFKernelList* kernelListR2 = hrtfElevation2->kernelListR(); |
| 278 | 278 |
| 279 // Interpolate kernels of corresponding azimuths of the two elevations. | 279 // Interpolate kernels of corresponding azimuths of the two elevations. |
| 280 for (unsigned i = 0; i < NumberOfTotalAzimuths; ++i) { | 280 for (unsigned i = 0; i < NumberOfTotalAzimuths; ++i) { |
| 281 (*kernelListL)[i] = HRTFKernel::createInterpolatedKernel(kernelListL1->a
t(i).get(), kernelListL2->at(i).get(), x); | 281 (*kernelListL)[i] = HRTFKernel::createInterpolatedKernel(kernelListL1->a
t(i).get(), kernelListL2->at(i).get(), x); |
| 282 (*kernelListR)[i] = HRTFKernel::createInterpolatedKernel(kernelListR1->a
t(i).get(), kernelListR2->at(i).get(), x); | 282 (*kernelListR)[i] = HRTFKernel::createInterpolatedKernel(kernelListR1->a
t(i).get(), kernelListR2->at(i).get(), x); |
| 283 } | 283 } |
| 284 | 284 |
| 285 // Interpolate elevation angle. | 285 // Interpolate elevation angle. |
| 286 double angle = (1.0 - x) * hrtfElevation1->elevationAngle() + x * hrtfElevat
ion2->elevationAngle(); | 286 double angle = (1.0 - x) * hrtfElevation1->elevationAngle() + x * hrtfElevat
ion2->elevationAngle(); |
| 287 | 287 |
| 288 OwnPtr<HRTFElevation> hrtfElevation = adoptPtr(new HRTFElevation(kernelListL
.release(), kernelListR.release(), static_cast<int>(angle), sampleRate)); | 288 OwnPtr<HRTFElevation> hrtfElevation = adoptPtr(new HRTFElevation(std::move(k
ernelListL), std::move(kernelListR), static_cast<int>(angle), sampleRate)); |
| 289 return hrtfElevation.release(); | 289 return hrtfElevation; |
| 290 } | 290 } |
| 291 | 291 |
| 292 void HRTFElevation::getKernelsFromAzimuth(double azimuthBlend, unsigned azimuthI
ndex, HRTFKernel* &kernelL, HRTFKernel* &kernelR, double& frameDelayL, double& f
rameDelayR) | 292 void HRTFElevation::getKernelsFromAzimuth(double azimuthBlend, unsigned azimuthI
ndex, HRTFKernel* &kernelL, HRTFKernel* &kernelR, double& frameDelayL, double& f
rameDelayR) |
| 293 { | 293 { |
| 294 bool checkAzimuthBlend = azimuthBlend >= 0.0 && azimuthBlend < 1.0; | 294 bool checkAzimuthBlend = azimuthBlend >= 0.0 && azimuthBlend < 1.0; |
| 295 ASSERT(checkAzimuthBlend); | 295 ASSERT(checkAzimuthBlend); |
| 296 if (!checkAzimuthBlend) | 296 if (!checkAzimuthBlend) |
| 297 azimuthBlend = 0.0; | 297 azimuthBlend = 0.0; |
| 298 | 298 |
| 299 unsigned numKernels = m_kernelListL->size(); | 299 unsigned numKernels = m_kernelListL->size(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 317 double frameDelay2L = m_kernelListL->at(azimuthIndex2)->frameDelay(); | 317 double frameDelay2L = m_kernelListL->at(azimuthIndex2)->frameDelay(); |
| 318 double frameDelay2R = m_kernelListR->at(azimuthIndex2)->frameDelay(); | 318 double frameDelay2R = m_kernelListR->at(azimuthIndex2)->frameDelay(); |
| 319 | 319 |
| 320 // Linearly interpolate delays. | 320 // Linearly interpolate delays. |
| 321 frameDelayL = (1.0 - azimuthBlend) * frameDelayL + azimuthBlend * frameDelay
2L; | 321 frameDelayL = (1.0 - azimuthBlend) * frameDelayL + azimuthBlend * frameDelay
2L; |
| 322 frameDelayR = (1.0 - azimuthBlend) * frameDelayR + azimuthBlend * frameDelay
2R; | 322 frameDelayR = (1.0 - azimuthBlend) * frameDelayR + azimuthBlend * frameDelay
2R; |
| 323 } | 323 } |
| 324 | 324 |
| 325 } // namespace blink | 325 } // namespace blink |
| 326 | 326 |
| OLD | NEW |