Beispiel #1
0
void EngineVuMeter::process(const CSAMPLE* pIn, CSAMPLE*, const int iBufferSize) {
    CSAMPLE fVolSumL, fVolSumR;
    SampleUtil::sumAbsPerChannel(&fVolSumL, &fVolSumR, pIn, iBufferSize);
    m_fRMSvolumeSumL += fVolSumL;
    m_fRMSvolumeSumR += fVolSumR;

    m_iSamplesCalculated += iBufferSize/2;

    // Are we ready to update the VU meter?:
    if (m_iSamplesCalculated > (44100/2/UPDATE_RATE)) {
        doSmooth(m_fRMSvolumeL, log10(SHRT_MAX * m_fRMSvolumeSumL/(m_iSamplesCalculated*1000)+1));
        doSmooth(m_fRMSvolumeR, log10(SHRT_MAX * m_fRMSvolumeSumR/(m_iSamplesCalculated*1000)+1));

        const double epsilon = .0001;

        // Since VU meters are a rolling sum of audio, the no-op checks in
        // ControlObject will not prevent us from causing tons of extra
        // work. Because of this, we use an epsilon here to be gentle on the GUI
        // and MIDI controllers.
        if (fabs(m_fRMSvolumeL - m_ctrlVuMeterL->get()) > epsilon)
            m_ctrlVuMeterL->set(m_fRMSvolumeL);
        if (fabs(m_fRMSvolumeR - m_ctrlVuMeterR->get()) > epsilon)
            m_ctrlVuMeterR->set(m_fRMSvolumeR);

        double fRMSvolume = (m_fRMSvolumeL + m_fRMSvolumeR) / 2.0;
        if (fabs(fRMSvolume - m_ctrlVuMeter->get()) > epsilon)
            m_ctrlVuMeter->set(fRMSvolume);

        // Reset calculation:
        m_iSamplesCalculated = 0;
        m_fRMSvolumeSumL = 0;
        m_fRMSvolumeSumR = 0;
    }
}
Beispiel #2
0
void EngineVuMeter::process(CSAMPLE* pIn, const int iBufferSize) {
    CSAMPLE fVolSumL, fVolSumR;

    int sampleRate = (int)m_pSampleRate->get();

    bool clipped = SampleUtil::sumAbsPerChannel(&fVolSumL, &fVolSumR, pIn, iBufferSize);
    m_fRMSvolumeSumL += fVolSumL;
    m_fRMSvolumeSumR += fVolSumR;

    m_iSamplesCalculated += iBufferSize/2;

    // Are we ready to update the VU meter?:
    if (m_iSamplesCalculated > (sampleRate/VU_UPDATE_RATE)) {
        doSmooth(m_fRMSvolumeL, log10(SHRT_MAX * m_fRMSvolumeSumL/(m_iSamplesCalculated*1000)+1));
        doSmooth(m_fRMSvolumeR, log10(SHRT_MAX * m_fRMSvolumeSumR/(m_iSamplesCalculated*1000)+1));

        const double epsilon = .0001;

        // Since VU meters are a rolling sum of audio, the no-op checks in
        // ControlObject will not prevent us from causing tons of extra
        // work. Because of this, we use an epsilon here to be gentle on the GUI
        // and MIDI controllers.
        if (fabs(m_fRMSvolumeL - m_ctrlVuMeterL->get()) > epsilon)
            m_ctrlVuMeterL->set(m_fRMSvolumeL);
        if (fabs(m_fRMSvolumeR - m_ctrlVuMeterR->get()) > epsilon)
            m_ctrlVuMeterR->set(m_fRMSvolumeR);

        double fRMSvolume = (m_fRMSvolumeL + m_fRMSvolumeR) / 2.0;
        if (fabs(fRMSvolume - m_ctrlVuMeter->get()) > epsilon)
            m_ctrlVuMeter->set(fRMSvolume);

        // Reset calculation:
        m_iSamplesCalculated = 0;
        m_fRMSvolumeSumL = 0;
        m_fRMSvolumeSumR = 0;
    }

    if (clipped) {
        m_ctrlPeakIndicator->set(1.);
        m_peakDuration = PEAK_DURATION * sampleRate / iBufferSize / 2000;
    } else if (m_peakDuration <= 0) {
        m_ctrlPeakIndicator->set(0.);
    } else {
        --m_peakDuration;
    }
}
IplImage *DehazeBase::doDehaze(const IplImage *src)
{
	int airlight;
	double *TranMap  = new double[src->height * src->width];

	m_Result = cvCreateImage( cvGetSize(src), src->depth, src->nChannels );
	m_DarkestImage = cvCreateImage( cvGetSize(src), src->depth, 1 );
	m_TranMapImage = cvCreateImage( cvGetSize(src), src->depth, 1 );
	m_SmoothImage  = cvCreateImage( cvGetSize(src), src->depth, 1 );
	m_BilaFilImage = cvCreateImage( cvGetSize(src), src->depth, 1 );
	m_DarkBilImage = cvCreateImage( cvGetSize(src), src->depth, 1 );

	// The input is m_DarkestImage
	generateDarkestImage(src);
	// The input is m_DarkestImage
	airlight = generateAirligth();

	// The output is in m_SmoothImage and the input is m_DarkestImage
	doSmooth();

	// The input is m_DarkestImage
	preDoEnhance(m_DarkBilImage);
	// The input is m_SmoothImage and the output is in m_BilaFilImage
	doEnhance(m_DarkBilImage);
	// doEnhance(m_DarkestImage);

	// The input is m_BilaFilImage
	generateTranMap(airlight, TranMap);
	// The output is in m_TranMapImage
	generateTranImage(TranMap);

	// The output is in m_Result
	doDehaze(src, TranMap, airlight);
	
	delete TranMap;
	return m_Result;
}