mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 22:55:23 +00:00
229f2b76cc
This increases the maximum PeriodicWave size to 8192 and adds an optimization to use 8192 elements only in the case where we receive more than 4096 components. In accordance with the spec, a maximum number of components is no longer enforced. --HG-- extra : rebase_source : ecb9a401fabdb14f23f690c44944ece434599055
73 lines
2.1 KiB
C++
73 lines
2.1 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "PeriodicWave.h"
|
|
#include "AudioContext.h"
|
|
#include "mozilla/dom/PeriodicWaveBinding.h"
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(PeriodicWave, mContext)
|
|
|
|
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(PeriodicWave, AddRef)
|
|
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(PeriodicWave, Release)
|
|
|
|
PeriodicWave::PeriodicWave(AudioContext* aContext,
|
|
const float* aRealData,
|
|
const float* aImagData,
|
|
const uint32_t aLength,
|
|
ErrorResult& aRv)
|
|
: mContext(aContext)
|
|
{
|
|
MOZ_ASSERT(aContext);
|
|
|
|
// Caller should have checked this and thrown.
|
|
MOZ_ASSERT(aLength > 0);
|
|
mLength = aLength;
|
|
|
|
// Copy coefficient data. The two arrays share an allocation.
|
|
mCoefficients = new ThreadSharedFloatArrayBufferList(2);
|
|
float* buffer = static_cast<float*>(malloc(aLength*sizeof(float)*2));
|
|
if (buffer == nullptr) {
|
|
aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
|
|
return;
|
|
}
|
|
PodCopy(buffer, aRealData, aLength);
|
|
mCoefficients->SetData(0, buffer, free, buffer);
|
|
PodCopy(buffer+aLength, aImagData, aLength);
|
|
mCoefficients->SetData(1, nullptr, free, buffer+aLength);
|
|
}
|
|
|
|
size_t
|
|
PeriodicWave::SizeOfExcludingThisIfNotShared(MallocSizeOf aMallocSizeOf) const
|
|
{
|
|
// Not owned:
|
|
// - mContext
|
|
size_t amount = 0;
|
|
if (!mCoefficients->IsShared()) {
|
|
amount += mCoefficients->SizeOfIncludingThis(aMallocSizeOf);
|
|
}
|
|
|
|
return amount;
|
|
}
|
|
|
|
size_t
|
|
PeriodicWave::SizeOfIncludingThisIfNotShared(MallocSizeOf aMallocSizeOf) const
|
|
{
|
|
return aMallocSizeOf(this) + SizeOfExcludingThisIfNotShared(aMallocSizeOf);
|
|
}
|
|
|
|
JSObject*
|
|
PeriodicWave::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
|
|
{
|
|
return PeriodicWaveBinding::Wrap(aCx, this, aGivenProto);
|
|
}
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|