videoeditorengine/audioeditorengine/inc/RateConverter.h
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:  
*
*/



#ifndef __CRateConverter_H__
#define __CRateConverter_H__

#include <e32base.h>

#include "resampler_rate_conversion_input_driven_int16.h"

class CRateConverter : public CBase
    {

public:
    
    /*
    * Symbian constructors
    *
    */
    static CRateConverter* NewL(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels);
                                        
    static CRateConverter* NewLC(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels);

    /*
    * Destructor
    */
    ~CRateConverter();
    
    /*
    * Initialize the rate converter
    *
    * @param aInputBufferSize Max size of the input buffer in number of samples
    * @return ETrue if successful
    *
    */
    TBool InitL(TInt aInputBufferSize);

    /*
    * Does rate and channel conversion for given buffer
    *
    * @param aInput Pointer to input buffer (16-bit samples)
    * @param aOutput Pointer to output buffer (16-bit samples)
    * @param aInputSampleCount Number of samples in the input buffer
    * @return Number of samples in the output buffer
    */
    TInt ConvertBufferL(TInt16* aInput, TInt16* aOutput, TInt aInputSampleCount);  
    
    /*
    * Returns the size of the output buffer
    *
    */
    TInt GetOutputBufferSize() { return iOuputBlockSize; }
    

protected:
    
    // constructL    
    void ConstructL();
    
    // C++ constructor
    CRateConverter(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels);
    
private:
    
    /*
    * Does internal initialization
    *
    */
    TBool DoInitL(TInt aInputBufferSize);
    
    /*
    * Does the actual conversion
    *
    */
    TInt DoConvertL(TInt16** aInput, TInt aInputSampleCount);
    
    /*
    * Returns pointer to the output buffer
    *
    */
    TInt16** GetOutputBuffer() { return iOutBuffer; }
          
private:

    // Another converter incase two phase converting is needed
    CRateConverter* iChild;

    // The actual converter
    RESAMPLER_RateConversionInputDrivenInt16* iConverter;
    
    // Input data for rate converter
    TInt16** iInBuffer;
    
    // Output data from rate converter
    TInt16** iOutBuffer;
    
    // Temp buffer used by converter
    TInt8* iScratchBuffer;

    // Size of the input buffer
    TInt iInputBlockSize;
    
    // Size of the output buffer
    TInt iOuputBlockSize;
    
    // Number of channels used in converter
    TInt iChannels;

    // Samplerate to convert from
    TInt iFromSampleRate;
    
    // Samplerate to convert to
    TInt iToSampleRate;
    
    // Number of channels in input
    TInt iFromChannels;
    
    // Number of channels in output
    TInt iToChannels;
    };

#endif