< prev index next >
modules/media/src/main/native/jfxmedia/platform/osx/avf/AVFAudioSpectrumUnit.h
Print this page
rev 9506 : 8156563: JavaFX Ensemble8 media sample hang and crash
Reviewed-by: almatvee, kcr
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -25,16 +25,21 @@
#ifndef __JFXMedia__AVFAudioSpectrumUnit__
#define __JFXMedia__AVFAudioSpectrumUnit__
#include <AudioUnit/AudioUnit.h>
+
+#include <pthread.h>
+#include <memory>
+
#include "PipelineManagement/AudioSpectrum.h"
#include "AVFKernelProcessor.h"
#include "CASpectralProcessor.h"
#include "CAStreamBasicDescription.h"
#include "CAAutoDisposer.h"
+
// Defaults, these match the current defaults in JavaFX which get set anyways
// but we can optimize things a bit here...
#define kDefaultAudioSpectrumUpdateInterval 0.1 // every 1/10 second
#define kDefaultAudioSpectrumThreshold -60.0 // -60 dB
@@ -91,10 +96,12 @@
private:
AVFSpectrumUnitCallbackProc mSpectrumCallbackProc;
void *mSpectrumCallbackContext;
bool mEnabled;
+
+ pthread_mutex_t mBandLock; // prevent bands from disappearing while we're processing
int mBandCount;
CBandsHolder *mBands;
double mUpdateInterval;
Float32 mThreshold;
CASpectralProcessor *mProcessor;
@@ -109,12 +116,23 @@
CAAutoFree<Float32> mWorkBuffer; // temp vectors for calculations
CAAutoFree<Float32> mMagnitudes; // magnitude accumulator
CAAutoFree<Float32> mPhases; // phase accumulator
- bool mRebuildCrunch; // atomic lock avoidance...
+
+ bool mRebuildCrunch;
CASpectralProcessor *mSpectralCrunch;
+ void lockBands() {
+ pthread_mutex_lock(&mBandLock);
+ }
+
+ void unlockBands() {
+ pthread_mutex_unlock(&mBandLock);
+ }
+
void SetupSpectralProcessor();
};
+typedef std::shared_ptr<AVFAudioSpectrumUnit> AVFAudioSpectrumUnitPtr;
+
#endif /* defined(__JFXMedia__AVFAudioSpectrumUnit__) */
< prev index next >