< 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 >