1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-01 03:10:06 +00:00

improved WASAPI latency reporting

This commit is contained in:
Julian Storer 2009-09-16 14:03:55 +01:00
parent 151f5e3d09
commit 173abbccd2
3 changed files with 72 additions and 39 deletions

View file

@ -81078,7 +81078,7 @@ bool DrawablePath::readXml (const XmlElement& xml)
const String jointStyle (xml.getStringAttribute (T("jointStyle"), String::empty));
const String endStyle (xml.getStringAttribute (T("capStyle"), String::empty));
strokeType = PathStrokeType (xml.getDoubleAttribute (T("strokeWidth"), 0.0),
strokeType = PathStrokeType ((float) xml.getDoubleAttribute (T("strokeWidth"), 0.0),
jointStyle.equalsIgnoreCase (T("curved")) ? PathStrokeType::curved
: (jointStyle.equalsIgnoreCase (T("bevel")) ? PathStrokeType::beveled
: PathStrokeType::mitered),
@ -246804,17 +246804,15 @@ class WASAPIAudioIODevice : public AudioIODevice,
{
public:
WASAPIAudioIODevice (const String& deviceName,
const int outputDeviceIndex_, const String& outputDeviceId_,
const int inputDeviceIndex_, const String& inputDeviceId_)
const String& outputDeviceId_,
const String& inputDeviceId_)
: AudioIODevice (deviceName, "Windows Audio"),
Thread ("Juce WASAPI"),
isOpen_ (false),
isStarted (false),
outputDevice (0),
outputDeviceIndex (outputDeviceIndex_),
outputDeviceId (outputDeviceId_),
inputDevice (0),
inputDeviceIndex (inputDeviceIndex_),
inputDeviceId (inputDeviceId_),
currentBufferSizeSamples (0),
currentSampleRate (0),
@ -246867,12 +246865,10 @@ public:
int n = 64;
for (int i = 0; i < 40; ++i)
{
if (n >= minBufferSize && ! bufferSizes.contains (n))
if (n >= minBufferSize && n <= 2048 && ! bufferSizes.contains (n))
bufferSizes.addSorted (comparator, n);
n += (n < 512) ? 32
: ((n < 1024) ? 64
: ((n < 2048) ? 128 : 256));
n += (n < 512) ? 32 : (n < 1024 ? 64 : 128);
}
return true;
@ -246940,20 +246936,28 @@ public:
return lastError;
}
if (inputDevice != 0)
ResetEvent (inputDevice->clientEvent);
if (outputDevice != 0)
ResetEvent (outputDevice->clientEvent);
startThread (8);
Thread::sleep (5);
if (inputDevice != 0 && inputDevice->client != 0)
{
latencyIn = inputDevice->latencySamples + inputDevice->actualBufferSize + inputDevice->minBufferSize;
HRESULT hr = inputDevice->client->Start();
logFailure (hr); //xxx handle this
}
if (outputDevice != 0 && outputDevice->client != 0)
{
latencyOut = outputDevice->latencySamples + outputDevice->actualBufferSize + outputDevice->minBufferSize;
HRESULT hr = outputDevice->client->Start();
logFailure (hr); //xxx handle this
}
startThread (8);
isOpen_ = true;
return lastError;
}
@ -247079,7 +247083,6 @@ public:
juce_UseDebuggingNewOperator
int outputDeviceIndex, inputDeviceIndex;
String outputDeviceId, inputDeviceId;
String lastError;
@ -247229,7 +247232,7 @@ public:
jassert (hasScanned); // need to call scanForDevices() before doing this
return wantInputNames ? inputDeviceNames
: outputDeviceNames;
: outputDeviceNames;
}
int getDefaultDeviceIndex (const bool /*forInput*/) const
@ -247241,9 +247244,9 @@ public:
int getIndexOfDevice (AudioIODevice* device, const bool asInput) const
{
jassert (hasScanned); // need to call scanForDevices() before doing this
WASAPIAudioIODevice* const d = dynamic_cast <WASAPIAudioIODevice*> (device);
return (d == 0) ? -1 : (asInput ? d->inputDeviceIndex : d->outputDeviceIndex);
return d == 0 ? -1 : (asInput ? inputDeviceIds.indexOf (d->inputDeviceId)
: outputDeviceIds.indexOf (d->outputDeviceId));
}
bool hasSeparateInputsAndOutputs() const { return true; }
@ -247262,8 +247265,8 @@ public:
{
d = new WASAPIAudioIODevice (outputDeviceName.isNotEmpty() ? outputDeviceName
: inputDeviceName,
outputIndex, outputDeviceIds [outputIndex],
inputIndex, inputDeviceIds [inputIndex]);
outputDeviceIds [outputIndex],
inputDeviceIds [inputIndex]);
if (! d->initialise())
deleteAndZero (d);
@ -257711,9 +257714,15 @@ bool juce_copyFile (const String& src, const String& dst) throw()
NSFileManager* fm = [NSFileManager defaultManager];
return [fm fileExistsAtPath: juceStringToNS (src)]
#if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
&& [fm copyItemAtPath: juceStringToNS (src)
toPath: juceStringToNS (dst)
error: nil];
#else
&& [fm copyPath: juceStringToNS (src)
toPath: juceStringToNS (dst)
handler: nil];
#endif
}
const StringArray juce_getFileSystemRoots() throw()
@ -258260,7 +258269,9 @@ void Desktop::setMousePosition (int x, int y) throw()
// this rubbish needs to be done around the warp call, to avoid causing a
// bizarre glitch..
CGAssociateMouseAndMouseCursorPosition (false);
#if (! defined (MAC_OS_X_VERSION_10_6)) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
CGSetLocalEventsSuppressionInterval (0);
#endif
CGPoint pos = { x, y };
CGWarpMouseCursorPosition (pos);
@ -258325,8 +258336,13 @@ void Desktop::setScreenSaverEnabled (const bool isEnabled) throw()
{
if (screenSaverDisablerID == 0)
{
IOPMAssertionCreate (kIOPMAssertionTypeNoIdleSleep,
kIOPMAssertionLevelOn, &screenSaverDisablerID);
#if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
IOPMAssertionCreateWithName (kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn,
CFSTR ("Juce"), &screenSaverDisablerID);
#else
IOPMAssertionCreate (kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn,
&screenSaverDisablerID);
#endif
}
}
}
@ -258479,7 +258495,11 @@ END_JUCE_NAMESPACE
#define JuceNSWindow MakeObjCClassName(JuceNSWindow)
#if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
@interface JuceNSWindow : NSWindow <NSWindowDelegate>
#else
@interface JuceNSWindow : NSWindow
#endif
{
@private
NSViewComponentPeer* owner;
@ -260793,7 +260813,11 @@ using namespace JUCE_NAMESPACE;
#define JuceMenuCallback MakeObjCClassName(JuceMenuCallback)
#if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
@interface JuceMenuCallback : NSObject <NSMenuDelegate>
#else
@interface JuceMenuCallback : NSObject
#endif
{
JuceMainMenuHandler* owner;
}
@ -261270,7 +261294,11 @@ using namespace JUCE_NAMESPACE;
#define JuceFileChooserDelegate MakeObjCClassName(JuceFileChooserDelegate)
#if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
@interface JuceFileChooserDelegate : NSObject <NSOpenSavePanelDelegate>
#else
@interface JuceFileChooserDelegate : NSObject
#endif
{
StringArray* filters;
}