traverso-commit
[Top][All Lists]
Advanced

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]