X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcolorcorrection%2Fwaveformgenerator.cpp;h=5aa4486fd75f3cd7ce4334fc6504dff8b9b44b22;hb=0c2ea9597420bfcb5661212b67c1a1d134e4842d;hp=633a2211135326eb99ea398a0acfeb234f0ebcf2;hpb=35728e41287963778ac4aff032a4f565287cf765;p=kdenlive diff --git a/src/colorcorrection/waveformgenerator.cpp b/src/colorcorrection/waveformgenerator.cpp index 633a2211..5aa4486f 100644 --- a/src/colorcorrection/waveformgenerator.cpp +++ b/src/colorcorrection/waveformgenerator.cpp @@ -9,7 +9,6 @@ ***************************************************************************/ #include -#include #include #include #include @@ -27,7 +26,8 @@ WaveformGenerator::~WaveformGenerator() { } -QImage WaveformGenerator::calculateWaveform(const QSize &waveformSize, const QImage &image, const bool &drawAxis, const uint &accelFactor) +QImage WaveformGenerator::calculateWaveform(const QSize &waveformSize, const QImage &image, WaveformGenerator::PaintMode paintMode, + const bool &drawAxis, WaveformGenerator::Rec rec, const uint &accelFactor) { Q_ASSERT(accelFactor >= 1); @@ -41,8 +41,6 @@ QImage WaveformGenerator::calculateWaveform(const QSize &waveformSize, const QIm } else { - qDebug() << "Waveform calculation started."; - // Fill with transparent color wave.fill(qRgba(0,0,0,0)); @@ -63,6 +61,8 @@ QImage WaveformGenerator::calculateWaveform(const QSize &waveformSize, const QIm const float hPrediv = (float)(wh-1)/255; const float wPrediv = (float)(ww-1)/(iw-1); + const float brightnessAdjustment = accelFactor * ((float) ww*wh/(byteCount>>3)); + const uchar *bits = image.bits(); const uint stepsize = 4*accelFactor; @@ -70,17 +70,34 @@ QImage WaveformGenerator::calculateWaveform(const QSize &waveformSize, const QIm col = (QRgb *)bits; - // CIE 601 Luminance + if (rec == WaveformGenerator::Rec_601) { + // CIE 601 Luminance + dY = .299*qRed(*col) + .587*qGreen(*col) + .114*qBlue(*col); + } else { + // CIE 709 Luminance + dY = .2125*qRed(*col) + .7154*qGreen(*col) + .0721*qBlue(*col); + } // dY is on [0,255] now. - dY = .299*qRed(*col) + .587*qGreen(*col) + .114*qBlue(*col); dy = dY*hPrediv; dx = x*wPrediv; wavePoint = QPoint((int)dx, (int)(wh-1 - dy)); waveCol = QRgb(wave.pixel(wavePoint)); - wave.setPixel(wavePoint, qRgba(CHOP255(9 + qRed(waveCol)), CHOP255(36 + qGreen(waveCol)), - CHOP255(18 + qBlue(waveCol)), 255)); + switch (paintMode) { + case PaintMode_Green: + wave.setPixel(wavePoint, qRgba(CHOP255(9 + qRed(waveCol)), CHOP255(36 + qGreen(waveCol)), + CHOP255(18 + qBlue(waveCol)), 255)); + break; + case PaintMode_Yellow: + wave.setPixel(wavePoint, qRgba(255, 242, + 0, CHOP255(brightnessAdjustment*10+qAlpha(waveCol)))); + break; + default: + wave.setPixel(wavePoint, qRgba(255,255,255, + CHOP255(brightnessAdjustment*32+qAlpha(waveCol)))); + break; + } bits += stepsize; x += stepsize; @@ -99,14 +116,12 @@ QImage WaveformGenerator::calculateWaveform(const QSize &waveformSize, const QIm wave.setPixel(x,dy, qRgba(CHOP255(150+qRed(opx)), 255, CHOP255(200+qBlue(opx)), CHOP255(32+qAlpha(opx)))); } - //davinci.drawLine(0, dy, ww-1, dy); } } } uint diff = time.elapsed(); -// qDebug() << "Waveform calculation ended. Time taken: " << diff << " ms. Sending signal now."; emit signalCalculationFinished(wave, diff); return wave;