Browse Source

Small fixes to MemoryMappedFile, AudioThumbnail.

tags/2021-05-28
Julian Storer 14 years ago
parent
commit
2ecb4d3419
6 changed files with 94 additions and 96 deletions
  1. +56
    -67
      juce_amalgamated.cpp
  2. +6
    -1
      juce_amalgamated.h
  3. +6
    -1
      src/audio/audio_file_formats/juce_AudioThumbnail.cpp
  4. +6
    -1
      src/io/files/juce_MemoryMappedFile.h
  5. +15
    -20
      src/native/common/juce_posix_SharedCode.h
  6. +5
    -6
      src/native/windows/juce_win32_Files.cpp

+ 56
- 67
juce_amalgamated.cpp View File

@@ -22668,7 +22668,12 @@ void AudioThumbnail::setLevels (const MinMaxValue* const* values, int thumbIndex
for (int i = jmin (numChans, channels.size()); --i >= 0;)
channels.getUnchecked(i)->write (values[i], thumbIndex, numValues);

numSamplesFinished = jmax (numSamplesFinished, (thumbIndex + numValues) * (int64) samplesPerThumbSample);
const int64 start = thumbIndex * (int64) samplesPerThumbSample;
const int64 end = (thumbIndex + numValues) * (int64) samplesPerThumbSample;

if (numSamplesFinished >= start && end > numSamplesFinished)
numSamplesFinished = end;

totalSamples = jmax (numSamplesFinished, totalSamples);
window->invalidate();
sendChangeMessage();
@@ -244735,8 +244740,8 @@ void FileOutputStream::flushInternal()

MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode)
: address (nullptr),
internal (nullptr),
length (0)
length (0),
fileHandle (nullptr)
{
jassert (mode == readOnly || mode == readWrite);

@@ -244754,10 +244759,9 @@ MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMo
HANDLE h = CreateFile (file.getFullPathName().toWideCharPointer(), accessMode, FILE_SHARE_READ, 0,
createType, FILE_ATTRIBUTE_NORMAL, 0);

internal = (void*) h;

if (h != INVALID_HANDLE_VALUE)
{
fileHandle = (void*) h;
const int64 fileSize = file.getSize();

HANDLE mappingHandle = CreateFileMapping (h, 0, protect, (DWORD) (fileSize >> 32), (DWORD) fileSize, 0);
@@ -244778,8 +244782,8 @@ MemoryMappedFile::~MemoryMappedFile()
if (address != nullptr)
UnmapViewOfFile (address);

if (internal != nullptr)
CloseHandle ((HANDLE) internal);
if (fileHandle != nullptr)
CloseHandle ((HANDLE) fileHandle);
}

int64 File::getSize() const
@@ -260572,42 +260576,37 @@ void FileOutputStream::flushInternal()

MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode)
: address (nullptr),
internal (nullptr),
length (0)
length (0),
fileHandle (0)
{
jassert (mode == readOnly || mode == readWrite);

const int fd = open (file.getFullPathName().toUTF8(),
mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644);
fileHandle = open (file.getFullPathName().toUTF8(),
mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644);

internal = reinterpret_cast<void*> (fd);

if (fd != -1)
if (fileHandle != -1)
{
const int64 fileSize = file.getSize();

address = mmap (0, (size_t) fileSize,
void* m = mmap (0, (size_t) fileSize,
mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ,
MAP_SHARED, fd, 0);
MAP_SHARED, fileHandle, 0);

if (address == MAP_FAILED)
address = nullptr;
else
if (m != MAP_FAILED)
{
address = m;
length = (size_t) fileSize;
}
}
}

MemoryMappedFile::~MemoryMappedFile()
{
const int fd = reinterpret_cast <int> (internal);

if (fd != 0)
{
if (address != nullptr)
munmap (address, length);
if (address != nullptr)
munmap (address, length);

close (fd);
}
if (fileHandle != 0)
close (fileHandle);
}

const File juce_getExecutableFile()
@@ -270603,42 +270602,37 @@ void FileOutputStream::flushInternal()

MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode)
: address (nullptr),
internal (nullptr),
length (0)
length (0),
fileHandle (0)
{
jassert (mode == readOnly || mode == readWrite);

const int fd = open (file.getFullPathName().toUTF8(),
mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644);

internal = reinterpret_cast<void*> (fd);
fileHandle = open (file.getFullPathName().toUTF8(),
mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644);

if (fd != -1)
if (fileHandle != -1)
{
const int64 fileSize = file.getSize();

address = mmap (0, (size_t) fileSize,
void* m = mmap (0, (size_t) fileSize,
mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ,
MAP_SHARED, fd, 0);
MAP_SHARED, fileHandle, 0);

if (address == MAP_FAILED)
address = nullptr;
else
if (m != MAP_FAILED)
{
address = m;
length = (size_t) fileSize;
}
}
}

MemoryMappedFile::~MemoryMappedFile()
{
const int fd = reinterpret_cast <int> (internal);

if (fd != 0)
{
if (address != nullptr)
munmap (address, length);
if (address != nullptr)
munmap (address, length);

close (fd);
}
if (fileHandle != 0)
close (fileHandle);
}

const File juce_getExecutableFile()
@@ -287469,42 +287463,37 @@ void FileOutputStream::flushInternal()

MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode)
: address (nullptr),
internal (nullptr),
length (0)
length (0),
fileHandle (0)
{
jassert (mode == readOnly || mode == readWrite);

const int fd = open (file.getFullPathName().toUTF8(),
mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644);
fileHandle = open (file.getFullPathName().toUTF8(),
mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644);

internal = reinterpret_cast<void*> (fd);

if (fd != -1)
if (fileHandle != -1)
{
const int64 fileSize = file.getSize();

address = mmap (0, (size_t) fileSize,
void* m = mmap (0, (size_t) fileSize,
mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ,
MAP_SHARED, fd, 0);
MAP_SHARED, fileHandle, 0);

if (address == MAP_FAILED)
address = nullptr;
else
if (m != MAP_FAILED)
{
address = m;
length = (size_t) fileSize;
}
}
}

MemoryMappedFile::~MemoryMappedFile()
{
const int fd = reinterpret_cast <int> (internal);

if (fd != 0)
{
if (address != nullptr)
munmap (address, length);
if (address != nullptr)
munmap (address, length);

close (fd);
}
if (fileHandle != 0)
close (fileHandle);
}

const File juce_getExecutableFile()


+ 6
- 1
juce_amalgamated.h View File

@@ -19463,9 +19463,14 @@ public:
private:

void* address;
void* internal;
size_t length;

#if JUCE_WINDOWS
void* fileHandle;
#else
int fileHandle;
#endif

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MemoryMappedFile);
};



+ 6
- 1
src/audio/audio_file_formats/juce_AudioThumbnail.cpp View File

@@ -706,7 +706,12 @@ void AudioThumbnail::setLevels (const MinMaxValue* const* values, int thumbIndex
for (int i = jmin (numChans, channels.size()); --i >= 0;)
channels.getUnchecked(i)->write (values[i], thumbIndex, numValues);
numSamplesFinished = jmax (numSamplesFinished, (thumbIndex + numValues) * (int64) samplesPerThumbSample);
const int64 start = thumbIndex * (int64) samplesPerThumbSample;
const int64 end = (thumbIndex + numValues) * (int64) samplesPerThumbSample;
if (numSamplesFinished >= start && end > numSamplesFinished)
numSamplesFinished = end;
totalSamples = jmax (numSamplesFinished, totalSamples);
window->invalidate();
sendChangeMessage();


+ 6
- 1
src/io/files/juce_MemoryMappedFile.h View File

@@ -74,9 +74,14 @@ public:
private:
//==============================================================================
void* address;
void* internal;
size_t length;
#if JUCE_WINDOWS
void* fileHandle;
#else
int fileHandle;
#endif
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MemoryMappedFile);
};


+ 15
- 20
src/native/common/juce_posix_SharedCode.h View File

@@ -526,42 +526,37 @@ void FileOutputStream::flushInternal()
//==============================================================================
MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode)
: address (nullptr),
internal (nullptr),
length (0)
length (0),
fileHandle (0)
{
jassert (mode == readOnly || mode == readWrite);
const int fd = open (file.getFullPathName().toUTF8(),
mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644);
fileHandle = open (file.getFullPathName().toUTF8(),
mode == readWrite ? (O_CREAT + O_RDWR) : O_RDONLY, 00644);
internal = reinterpret_cast<void*> (fd);
if (fd != -1)
if (fileHandle != -1)
{
const int64 fileSize = file.getSize();
address = mmap (0, (size_t) fileSize,
void* m = mmap (0, (size_t) fileSize,
mode == readWrite ? (PROT_READ | PROT_WRITE) : PROT_READ,
MAP_SHARED, fd, 0);
MAP_SHARED, fileHandle, 0);
if (address == MAP_FAILED)
address = nullptr;
else
if (m != MAP_FAILED)
{
address = m;
length = (size_t) fileSize;
}
}
}
MemoryMappedFile::~MemoryMappedFile()
{
const int fd = reinterpret_cast <int> (internal);
if (address != nullptr)
munmap (address, length);
if (fd != 0)
{
if (address != nullptr)
munmap (address, length);
close (fd);
}
if (fileHandle != 0)
close (fileHandle);
}
//==============================================================================


+ 5
- 6
src/native/windows/juce_win32_Files.cpp View File

@@ -302,8 +302,8 @@ void FileOutputStream::flushInternal()
//==============================================================================
MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMode mode)
: address (nullptr),
internal (nullptr),
length (0)
length (0),
fileHandle (nullptr)
{
jassert (mode == readOnly || mode == readWrite);
@@ -321,10 +321,9 @@ MemoryMappedFile::MemoryMappedFile (const File& file, MemoryMappedFile::AccessMo
HANDLE h = CreateFile (file.getFullPathName().toWideCharPointer(), accessMode, FILE_SHARE_READ, 0,
createType, FILE_ATTRIBUTE_NORMAL, 0);
internal = (void*) h;
if (h != INVALID_HANDLE_VALUE)
{
fileHandle = (void*) h;
const int64 fileSize = file.getSize();
HANDLE mappingHandle = CreateFileMapping (h, 0, protect, (DWORD) (fileSize >> 32), (DWORD) fileSize, 0);
@@ -345,8 +344,8 @@ MemoryMappedFile::~MemoryMappedFile()
if (address != nullptr)
UnmapViewOfFile (address);
if (internal != nullptr)
CloseHandle ((HANDLE) internal);
if (fileHandle != nullptr)
CloseHandle ((HANDLE) fileHandle);
}
//==============================================================================


Loading…
Cancel
Save