diff -r 000000000000 -r 951a5db380a0 videoeditorengine/audioeditorengine/inc/ProcTools.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/audioeditorengine/inc/ProcTools.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,301 @@ +/* +* 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 __PROCTOOLS_H__ +#define __PROCTOOLS_H__ + +#include +#include +#include "AudCommon.h" +#include "ProcConstants.h" +#include "Mp3API.h" + +class ProcTools + { + +public: + + /** + * Decimal number to binary number + */ + static TBool Dec2Bin(TUint8 aDec, TBuf8<8>& aBinary); + /** + * This version allocates memory (aBin), remember to release + */ + static TBool Dec2BinL(TUint32 aDec, HBufC8*& aBin); + + /** + * Binary number to decimal number + */ + static TBool Bin2Dec(const TDesC8& aBin, TUint& aDec); + + /** + * Decimal number in descriptor to unsigned integer + */ + static TBool Des2Dec(TDesC8& aDes, TUint& aDec); + + /** + * Decimal number in descriptor to binary descriptor + * allocates memory, the caller must release + */ + static TBool Des2BinL(const TDesC8& aDes, HBufC8*& aBin); + + /** + * Gets milliseconds(TInt) from microseconds (TTimeIntervalMicroSeconds) + * @param aMicroSeconds microseconds + * + * @return milliseconds + */ + + static TInt MilliSeconds(TTimeIntervalMicroSeconds aMicroSeconds); + + /** + * Gets microseconds (TTimeIntervalMicroSeconds) from milliseconds (TInt) + * @param aMilliSeconds milliseconds + * + * @return microiseconds + */ + + static TTimeIntervalMicroSeconds MicroSeconds(TInt aMilliSeconds); + + /** + * casts TInt64 to TInt (overflow possible, the user is resonsible!!) + * + * @param aInt64 TInt64 + * + * @return Tint + */ + + static TInt GetTInt(TInt64 aTInt64); + + + /** + * Retrieves a decimal number from a frame + * + * @param aFrame frame + * @param aBitFirst index of the first bit of the needed balue + * @param aLength number of bits in the needed value + * + * @return retrieved integer, if -1 then operation was unsuccessful + */ + static TInt GetValueFromFrame(const HBufC8* aFrame, TInt aBitFirst, TInt aLength); + + /** + * Retrieves a decimal number from a frame, whose bits are shuffled + * + * @param aFrame frame + * @param aBitRate bitrate + * @param aBitPositions bit position in a deshuffled frame + * @param aLength number of bits read + * + * @return retrieved integer + * + */ + static TInt GetValueFromShuffledAWBFrameL(const HBufC8* aFrame, TInt aBitRate, TInt aBitPosition, TInt aLength); + + static TBool SetValueToShuffledAWBFrame(TUint8 aNewValue, HBufC8* aFrame, + TInt aBitRate, TInt aBitPosition, TInt aLength); + + /** + * Retrieves a decimal number from a frame, whose bits are shuffled + * + * @param aFrame frame + * @param aBitPositions shuffling table + * @param TInt aSize length of aBitPositions + * + * @return retrieved integer, if -1 then operation was unsuccessful + * + */ + static TInt GetValueFromShuffledFrame(const HBufC8* aFrame, const TUint8 aBitPositions[], TInt aSize); + + + /** + * Writes a decimal number to a frame, whose bits are shuffled + * + * @param aFrame frame + * @param aNewValue value to be written + * @param aBitPositions bit indexes in order + * @param TInt aSize length of aBitPositions + * + * @return ETrue if successful + * + */ + static TBool SetValueToShuffledFrame(HBufC8* aFrame, TUint8 aNewValue, const TUint8 aBitPositions[], TInt aSize); + + /** + * Appends integers to a file separated by linefeeds + * Mostly for debugging purposes + * + * @param aArray array of integers to be written + * @param aFilename file name, created if doesn't exist, append otherwise + * + * @return ETrue if successful + */ + static TBool WriteValuesToFileL(const RArray& aArray, const TDesC& aFilename); + + /** + * Finds a closest match in a gain table + * used for scalar quantized gain tables + * + * @param aNewGain search key + * @param aGainTable gain table + * @param aTableSize gain table length + * + * @return index of the closest match + */ + static TUint8 FindNewIndexSQ(TInt aNewGain, const TInt aGainTable[], TInt aTableSize); + + /** + * Finds a closest match in a gain table + * used for vector quantized gain tables + * pitch: Q14. FC gain Q12 + * + * @param aNewGain search key + * @param aGainTable gain table + * @param aTableSize gain table length + * + * @return index of the closest match + */ + static TUint8 FindNewIndexVQ(TInt aNewGain, TInt aOldPitch, const TInt aGainTable[], TInt aTableSize); + + /** + * Finds a closest match in a gain table + * used for vector quantized gain tables + * pitch: Q14. FC gain Q11!! + * + * @param aNewGain search key + * @param aGainTable gain table + * @param aTableSize gain table length + * + * @return index of the closest match + */ + static TUint8 FindNewIndexVQ2(TInt aNewGain, TInt aOldPitch, const TInt aGainTable[], TInt aTableSize); + + + /** + * Finds a closest match in a gain table for 4.75 kBit/s + * + * @param aNewGain0 new gain of subframe 0 or 2 + * @param aOldPitch0 new pitch of subframe 0 or 2 + * @param aNewGain1 new gain of subframe 1 or 3 + * @param aNewGain1 new pitch of subframe 1 or 3 + * + */ + static TUint8 FindNewIndex475VQ(TInt aNewGain0, TInt aOldPitch0, TInt aNewGain1, TInt aOldPitch1); + + static TInt FindIndex(TInt aKey, const TInt aBitPositions[], TInt aTableLength); + + static TBool GenerateADTSHeaderL(TBuf8<7>& aHeader, TInt aFrameLength, TAudFileProperties aProperties); + + static TInt GetNextAMRFrameLength(const HBufC8* aFrame, TInt aPosNow); + + }; + + +/* +* +* One processing event represents a section in the output clip +* It includes the following information: +* - when the section starts (iPosition) +* - is the new section a result of a new clip (iCutIn == ETrue) +* or a result of an ending clip (iCutIn == EFalse) +* - what clips are supposed to be mixed from this processing event (iAllIndexes) +* - what is the clip starting or ending that is causing this processing event (iChangedIndex) +* +* +*/ + +class CProcessingEvent : public CBase + { + +public: + + + static CProcessingEvent* NewL(); + ~CProcessingEvent(); + /* + * Insert a new clip to this processing event + */ + void InsertIndex(TInt aIndex); + + /* + * Gets the clip index in CAudSong based on the clip index in processing event + */ + TInt GetIndex(TInt aProcessingEventIndex); + + /* + * Gets all clip indexes in this processing event + */ + TBool GetAllIndexes(RArray& aAllIndexes); + + /* + * Index count + */ + TInt IndexCount(); + + /* + * Find processing event index based on clip index + */ + TInt FindIndex(TInt aClipIndex); + + /* + * Remove processing event + */ + void RemoveIndex(TInt aProcessingEventIndex); + +public: + + //global position in milliseconds + TInt32 iPosition; + //true = cutIn, false = cutOut + TBool iCutIn; + + // there can be only one different clip in iAllIndexes in consecutive + // processing events: + // iChangedClipIndex is that index + TInt iChangedClipIndex; + + // compare starting times (used by a common ordering function) + static TInt Compare(const CProcessingEvent& c1, const CProcessingEvent& c2); + +private: + + void ConstructL(); + CProcessingEvent(); + + // indexes of all the clips that should be mixed + // after this processing events + RArray iAllIndexes; // -1 = silence + }; + + + +class AudioEngineUtilTools + { +public: + + /** + * Displays messages on a box + */ + static void AudioEngineMessageBox(const TDesC& aMessage); + + }; + +#endif