videditor/ManualVideoEditor/src/SampleArrayHandler.cpp
author Mikael Laine <mikael.laine@ixonos.com>
Fri, 29 Jan 2010 14:08:33 +0200
changeset 0 951a5db380a0
permissions -rw-r--r--
Committing the Video Editor package under the Eclipse Public License

/*
* Copyright (c) 2010 Ixonos Plc.
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - Initial contribution
*
* Contributors:
* Ixonos Plc
*
* Description: 
*
*/



// INCLUDE FILES
// System includes
// User includes
#include <e32math.h> 

#include "SampleArrayHandler.h"
#include "VideoEditorCommon.h"      // Video Editor UID

#include "VideoEditorDebugUtils.h"

// ================= MEMBER FUNCTIONS =======================
CSampleArrayHandler* CSampleArrayHandler::NewL()
    {
    CSampleArrayHandler* self = CSampleArrayHandler::NewLC();
    CleanupStack::Pop( self );
    return self;
    }

CSampleArrayHandler* CSampleArrayHandler::NewLC()
    {
    CSampleArrayHandler* self = new( ELeave )CSampleArrayHandler();
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

void CSampleArrayHandler::ConstructL()
    {
    }

CSampleArrayHandler::CSampleArrayHandler()
    {
    }


CSampleArrayHandler::~CSampleArrayHandler()
    {
    delete [] iVisualization;
    }

void CSampleArrayHandler::SetVisualizationArray(TInt8* aVisualization, TInt aResolution)
    {
    LOG( KVideoEditorLogFile, "CSampleArrayHandler::SetVisualizationArray, In" );
    iVisualization = aVisualization;
    iVisualizationSize = aResolution;

    // for testing
    /*	for (TInt i = 0; i < iVisualizationSize; i++)
    {
    if (i == 127)	
    iVisualization[i] = i - 127;
    else
    iVisualization[i] = i;				
    }
     */
    TInt8 temp = 0; // help variable used in finding the biggest current sample value
    for ( TInt i = 0; i < iVisualizationSize; i++ )
        {
        if ( iVisualization[i] > temp )
            {
            temp = iVisualization[i];
            }
        //LOGFMT2(KVideoEditorLogFile, "CSampleArrayHandler::SetVisualizationArray, SAMPLE[%d]:%d", i, iVisualization[i]);
        }
    iMaxSample = temp;

    iScaleFactor = 1.0; // TReal
    LOG( KVideoEditorLogFile, "CSampleArrayHandler::SetVisualizationArray, Out" );
    }

void CSampleArrayHandler::ScaleAudioVisualization( const TInt8& aNewMaxValue )
    {
    if ( iVisualization && ( aNewMaxValue != iMaxSampleInCurrentScale ))
        {
        iMaxSampleInCurrentScale = aNewMaxValue;
        if ( !Math::IsZero(( TReal64 )iMaxSampleInCurrentScale ))
            {
            iScaleFactor = ( TReal64 )iMaxSampleInCurrentScale / ( TReal64 )iMaxSample; 

            }

        /*
        //for testing
        if (1 > coeff)
        {				
        for (TInt i = 0; i < iVisualizationSize; i++)
        {
        LOGFMT(KVideoEditorLogFile, "before scaling:%d", iVisualization[i]);				
        iVisualization[i] *= coeff;		
        LOGFMT(KVideoEditorLogFile, "after scaling:%d", iVisualization[i]);
        }					
        }*/
        }
    }

TInt8 CSampleArrayHandler::Sample( const TInt aIndex )const
    {
    // must be scaled down in order to fit into screen			
    if ( iScaleFactor < 1 )
        {
        return (( iVisualization[aIndex]* 1000 )*( iScaleFactor* 1000 )) / 1000000;
                
        }
    else
        {
        return iVisualization[aIndex];
        }
    }

TInt CSampleArrayHandler::Size()const
    {
    return iVisualizationSize;
    }

TInt CSampleArrayHandler::CurrentPoint()const
    {
    return iCurrentIndex;
    }

void CSampleArrayHandler::SetCurrentPoint(const TTimeIntervalMicroSeconds& aCurrentTime)
    {
    iCurrentTime = aCurrentTime;
    iCurrentIndex = ( iCurrentTime.Int64() / 1000 ) / KAudioSampleInterval;
    }

void CSampleArrayHandler::SetCutInPoint(const TTimeIntervalMicroSeconds& aCutInTime)
    {
    iCutInTime = aCutInTime;
    iCutInSampleIndex = ( iCutInTime.Int64() / 1000 ) / KAudioSampleInterval;
    }

void CSampleArrayHandler::SetCutOutPoint(const TTimeIntervalMicroSeconds& aCutOutTime)
    {
    iCutOutTime = aCutOutTime;
    iCutOutSampleIndex = ( iCutOutTime.Int64() / 1000 ) / KAudioSampleInterval;
    }

TBool CSampleArrayHandler::SampleCutted( const TInt aIndex )const
    {
    return ( iCutInSampleIndex < aIndex ) && ( aIndex < iCutOutSampleIndex );
    }

// End of File