[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src/core Peak.cpp Peak.h
From: |
Remon Sijrier |
Subject: |
[Traverso-commit] traverso/src/core Peak.cpp Peak.h |
Date: |
Mon, 15 Oct 2007 20:53:11 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Remon Sijrier <r_sijrier> 07/10/15 20:53:11
Modified files:
src/core : Peak.cpp Peak.h
Log message:
* mmap peak files also when Qt 4.4 is not available, we can default to
using Qt 4.4's memory map when it's readily available.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Peak.cpp?cvsroot=traverso&r1=1.63&r2=1.64
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Peak.h?cvsroot=traverso&r1=1.23&r2=1.24
Patches:
Index: Peak.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Peak.cpp,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -b -r1.63 -r1.64
--- Peak.cpp 15 Oct 2007 18:07:51 -0000 1.63
+++ Peak.cpp 15 Oct 2007 20:53:11 -0000 1.64
@@ -102,6 +102,17 @@
if (data->normFile.isOpen()) {
QFile::remove(data->normFileName);
}
+#if QT_VERSION < 0x040400
+#if defined Q_WS_X11 || Q_WS_MAC
+ if (data->memory) {
+ uchar *start = data->memory -
data->maps[data->memory].first;
+ int len = data->maps[data->memory].second;
+ if (-1 == munmap(start, len)) {
+ }
+ data->maps.remove(data->memory);
+ }
+#endif
+#endif
delete data;
}
}
@@ -129,7 +140,21 @@
#if QT_VERSION >= 0x040400
data->memory = data->file.map(0, data->file.size());
if (data->memory) {
- PMESG3("Peak:: sucessfully mapped data into memory
(%s)", QS_C(data->fileName));
+ PMESG3("Peak:: sucessfully mapped data into memory
(%s)\n", QS_C(data->fileName));
+ }
+#else if defined Q_WS_X11 || Q_WS_MAC
+ int offset = 0;
+ int size = data->file.size();
+ int pagesSize = getpagesize();
+ int realOffset = offset / pagesSize;
+ int extra = offset % pagesSize;
+
+ void *mapAddress = mmap((void*)0, (size_t)size + extra,
+ PROT_READ, MAP_SHARED,
data->file.handle(), realOffset * pagesSize);
+ if (MAP_FAILED != mapAddress) {
+ uchar *address = extra +
static_cast<uchar*>(mapAddress);
+ data->memory = address;
+ data->maps[address] = QPair<int,int>(extra, size);
}
#endif
@@ -918,6 +943,7 @@
peak_data_t* readbuffer;
if (m_d->memory) {
+// printf("using memory mapped read\n");
readbuffer = (peak_data_t*)(m_d->memory +
m_readPos*sizeof(peak_data_t));
framesRead = count;
} else {
Index: Peak.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Peak.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- Peak.h 15 Oct 2007 18:07:52 -0000 1.23
+++ Peak.h 15 Oct 2007 20:53:11 -0000 1.24
@@ -170,6 +170,7 @@
ProcessData* pd;
DecodeBuffer* peakdataDecodeBuffer;
uchar* memory;
+ QHash<uchar *, QPair<int /*offset*/, int /*handle|len*/> > maps;
};
QList<ChannelData* > m_channelData;