[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src core/Peak.cpp core/Peak.h sheetcan...
From: |
Remon Sijrier |
Subject: |
[Traverso-commit] traverso/src core/Peak.cpp core/Peak.h sheetcan... |
Date: |
Mon, 28 Jan 2008 17:33:42 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Remon Sijrier <r_sijrier> 08/01/28 17:33:42
Modified files:
src/core : Peak.cpp Peak.h
src/sheetcanvas: AudioClipView.cpp
Log message:
* use qpainters matrix to scale the waveform when zoomlevel != power of
2
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Peak.cpp?cvsroot=traverso&r1=1.80&r2=1.81
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/Peak.h?cvsroot=traverso&r1=1.30&r2=1.31
http://cvs.savannah.gnu.org/viewcvs/traverso/src/sheetcanvas/AudioClipView.cpp?cvsroot=traverso&r1=1.2&r2=1.3
Patches:
Index: core/Peak.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/Peak.cpp,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -b -r1.80 -r1.81
--- core/Peak.cpp 21 Jan 2008 16:22:14 -0000 1.80
+++ core/Peak.cpp 28 Jan 2008 17:33:41 -0000 1.81
@@ -85,10 +85,6 @@
// peak data creation, no m_source needed!
m_source = 0;
}
-
- int error;
- int converter_type = 4;
- m_srcState = src_new(converter_type, 2, &error);
}
Peak::~Peak()
@@ -261,20 +257,18 @@
}
ChannelData* data = m_channelData.at(chan);
+ int produced = 0;
+
+// PROFILE_START;
+ // Macro view mode
+ if (zoomLevel >= 64) {
int highbit;
unsigned long nearestpow2 = nearest_power_of_two(qRound(zoomLevel),
highbit);
if (nearestpow2 == 0) {
return NO_PEAKDATA_FOUND;
}
- int produced = 0;
- float* inputData;
-
-// PROFILE_START;
-
- // Macro view mode
- if ( nearestpow2 > 32) {
nframes_t startPos = startlocation.to_frame(44100);
int index = cache_index_lut()->value(nearestpow2, -1);
@@ -304,15 +298,24 @@
return NO_PEAKDATA_FOUND;
}
- inputData = data->peakdataDecodeBuffer->destination[0];
-
// for (int i=(pixelcount-truncate); i<(pixelcount); ++i) {
// data->peakdataDecodeBuffer->destination[0][i] = 0;
// }
//
+ *buffer = data->peakdataDecodeBuffer->destination[0];
+
+ return pixelcount;
// Micro view mode
} else {
+
+ int highbit;
+ unsigned long nearestpow2 =
nearest_power_of_two(qRound(zoomLevel), highbit);
+
+ if (nearestpow2 == 0) {
+ nearestpow2 = 1;
+ }
+
// Calculate the amount of frames to be read
nframes_t toRead = pixelcount * nearestpow2;
@@ -363,32 +366,12 @@
// PROFILE_END("Peak calculate_peaks");
// Assign the supplied buffer to the 'real' peakdata buffer.
- inputData = peakdata;
+ *buffer = peakdata;
- produced = count;
+ return count;
}
- src_reset(m_srcState);
- qreal ratio = qreal(nearestpow2) / zoomLevel;
- m_srcData.data_in = inputData;
- m_srcData.input_frames = qRound(pixelcount / ratio);
- m_srcData.data_out = data->peakdataDecodeBuffer->destination[1];
- m_srcData.output_frames = pixelcount;
- m_srcData.src_ratio = ratio;
- src_set_ratio(m_srcState, m_srcData.src_ratio);
-
-// printf("scale factor %f, pixels generated %ld, wanted %d\n",
ratio, m_srcData.output_frames_gen, pixelcount);
-
- if (src_process(m_srcState, &m_srcData)) {
- PERROR("Resampler: src_process() error!");
- return NO_PEAKDATA_FOUND;
- }
-
- produced = m_srcData.output_frames_gen;
-
- *buffer = data->peakdataDecodeBuffer->destination[1];
-
- return produced;
+ return 0;
}
Index: core/Peak.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/Peak.h,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -b -r1.30 -r1.31
--- core/Peak.h 21 Jan 2008 16:22:14 -0000 1.30
+++ core/Peak.h 28 Jan 2008 17:33:41 -0000 1.31
@@ -30,7 +30,6 @@
#include <QFile>
#include <QHash>
#include <QPair>
-#include <samplerate.h>
#include "defines.h"
@@ -133,10 +132,6 @@
bool m_interuptPeakBuild;
static QHash<int, int> chacheIndexLut;
- SRC_STATE* m_srcState;
- SRC_DATA m_srcData;
- audio_sample_t* m_peakBuffer;
-
struct ProcessData {
ProcessData() {
normValue = peakUpperValue = peakLowerValue = 0;
Index: sheetcanvas/AudioClipView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/sheetcanvas/AudioClipView.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- sheetcanvas/AudioClipView.cpp 21 Jan 2008 17:31:18 -0000 1.2
+++ sheetcanvas/AudioClipView.cpp 28 Jan 2008 17:33:42 -0000 1.3
@@ -236,6 +236,10 @@
// Painting 2 more pixels makes it getting clipped away.....
pixelcount += 2;
+/* xstart -= 2;
+ pixelcount += 2;
+ if (xstart < 0) xstart = 0;*/
+
// boundary checking, important for microview only, macroview needs the
additional
// pixels to paint the waveform correctly
if ((xstart + pixelcount) > m_boundingRect.width()) {
@@ -248,7 +252,7 @@
return;
}
- bool microView = m_sheet->get_hzoom() > 32 ? 0 : 1;
+ bool microView = m_sheet->get_hzoom() < 64 ? 1 : 0;
TimeRef clipstartoffset = m_clip->get_source_start_location();
int channels = m_clip->get_channels();
int peakdatacount = microView ? pixelcount : pixelcount * 2;
@@ -267,6 +271,11 @@
if (nearestpow2 == 0) {
nearestpow2 = 1;
}
+
+ qreal xscale = qreal(nearestpow2) / m_sheet->get_hzoom();
+ pixelcount = qRound(pixelcount / xscale);
+// printf("xscale %f, microview %d, zoomlevel %f\n", xscale, microView,
m_sheet->get_hzoom());
+
// Load peak data for all channels, if no peakdata is returned
// for a certain Peak object, schedule it for loading.
for (int chan=0; chan < channels; ++chan) {
@@ -397,8 +406,8 @@
}
ytrans = height * chan;
- p->setMatrix(matrix().translate(0, ytrans), true);
- p->drawLine(qRound(xstart), 0, qRound(xstart) +
pixelcount, 0);
+ p->setMatrix(matrix().translate(xstart,
ytrans).scale(xscale, 1), true);
+ p->drawLine(0, 0, pixelcount, 0);
p->restore();
}
@@ -416,7 +425,7 @@
ytrans = (height / 2) + (chan * height);
}
- p->setMatrix(matrix().translate(0, ytrans), true);
+ p->setMatrix(matrix().translate(xstart,
ytrans).scale(xscale, -scaleFactor), true);
if (m_clip->is_selected()) {
p->setPen(themer()->get_color("AudioClip:channelseperator:selected"));
@@ -424,10 +433,10 @@
p->setPen(themer()->get_color("AudioClip:channelseperator"));
}
- p->drawLine(qRound(xstart), 0, qRound(xstart) +
pixelcount, 0);
+ p->drawLine(0, 0, pixelcount, 0);
- for (int x = qRound(xstart); x <
(pixelcount+qRound(xstart)); x++) {
- m_polygon.append( QPointF(x, -scaleFactor *
pixeldata[chan][bufferPos++]) );
+ for (int x = 0; x < pixelcount; x++) {
+ m_polygon.append( QPointF(x,
pixeldata[chan][bufferPos++]) );
}
if
(themer()->get_property("AudioClip:wavemicroview:antialiased", 0).toInt()) {
@@ -443,6 +452,7 @@
p->setBrush(m_waveBrush);
}
+ if (m_paintWithOutline) {
if (m_sheet->get_mode() == Sheet::EDIT) {
p->setPen(themer()->get_color("AudioClip:wavemacroview:outline"));
} else {
@@ -451,6 +461,9 @@
if (m_clip->is_muted()) {
p->setPen(themer()->get_color("AudioClip:wavemacroview:outline:muted"));
}
+ } else {
+ p->setPen(Qt::NoPen);
+ }
scaleFactor = ( (float) height * 0.90 /
(Peak::MAX_DB_VALUE * 2)) * m_clip->get_gain() * curveDefaultValue;
@@ -464,7 +477,6 @@
}
}
- // we add one start/stop point so reserve some more...
int bufferpos = 0;
if (m_classicView) {
@@ -475,11 +487,7 @@
ytrans = (height / 2) + (chan * height);
}
- p->setMatrix(matrix().translate(xstart,
ytrans).scale(1, scaleFactor), true);
-
- if (!m_paintWithOutline) {
- p->setPen(Qt::NoPen);
- }
+ p->setMatrix(matrix().translate(xstart,
ytrans).scale(xscale, scaleFactor), true);
m_polygon.clear();
m_polygon.reserve(pixelcount*2);
@@ -501,14 +509,6 @@
p->drawPath(path);
-/* } else {
- for (int x = 0; x < pixelcount; x++) {
- int ytop = -1 *
(int)(pixeldata[chan][bufferpos++]);
- int ymin =
(int)(pixeldata[chan][bufferpos++]);
- p->drawLine(x, ytop, x, ymin);
- }
- }*/
-
// Draw 'the' -INF line
p->setPen(minINFLineColor);
p->drawLine(0, 0, pixelcount, 0);
@@ -522,11 +522,7 @@
scaleFactor *= channels;
}
- p->setMatrix(matrix().translate(xstart,
ytrans).scale(1, scaleFactor), true);
-
- if (!m_paintWithOutline) {
- p->setPen(Qt::NoPen);
- }
+ p->setMatrix(matrix().translate(xstart,
ytrans).scale(xscale, scaleFactor), true);
m_polygon.clear();
m_polygon.reserve(pixelcount + 2);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src core/Peak.cpp core/Peak.h sheetcan...,
Remon Sijrier <=