sl@0: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: class CWavDecodeUtility: public CBase sl@0: { sl@0: public: sl@0: static CWavDecodeUtility* NewL(TDesC8& aBuffer); sl@0: ~CWavDecodeUtility(); sl@0: sl@0: inline TUint GetChannels(void) const {return iChannels;}; sl@0: inline TUint GetSampleRate(void) const {return iSampleRate;}; sl@0: inline TUint GetBitsPerSample(void) const {return iBitsPerSample;}; sl@0: inline TUint GetDataLength(void) const {return iDataLength;}; sl@0: sl@0: inline TUint GetSamples(void) const {return iDataLength / (iChannels * iBitsPerSample / 8);}; sl@0: sl@0: sl@0: private: sl@0: CWavDecodeUtility(); sl@0: void ConstructL(TDesC8& aBuffer); sl@0: TUint16 Read16(const TUint8* aPtr); sl@0: TUint32 Read32(const TUint8* aPtr); sl@0: void FindRiffChunksL(void); sl@0: void ProcessFormatHeaderL(); sl@0: void ReadChunk(TMdaRiffChunk* aChunk); sl@0: void AssignChunkTo(TMdaRiffChunk* aAssignedChunk); sl@0: sl@0: private: sl@0: // CMMFDataBuffer* iBuffer; sl@0: TDesC8* iBuffer; sl@0: const TUint8* iStartPtr; sl@0: TUint iLastReadPosition; sl@0: TBool iHasFactChunk; sl@0: TMdaRiffChunk iCurrent; sl@0: TMdaRiffChunk iFormatChunk; sl@0: TMdaRiffChunk iFactChunk; sl@0: TMdaRiffChunk iDataChunk; sl@0: TUint iRiffChunkLength; sl@0: TBool iFoundChunks; sl@0: TBool iDone; sl@0: TUint iStartPosition; sl@0: sl@0: TUint iCodecId; sl@0: TUint iChannels; sl@0: TUint iSampleRate; sl@0: TUint iBlockAlign; //needed for correct IMA sl@0: TUint iBitsPerSample; sl@0: sl@0: TUint iDataLength; sl@0: TUint iAverageBytesPerSecond; //needed for correct IMA sl@0: TUint iSamplesPerBlock; sl@0: sl@0: TUint iPos; sl@0: TUint iClipLength; sl@0: sl@0: }; sl@0: sl@0: