--- /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 <e32base.h>
+#include <f32file.h>
+#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 <code>aBitPositions</code>
+ *
+ * @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 <code>aBitPositions</code>
+ *
+ * @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<TInt>& 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<TInt>& 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<TInt> iAllIndexes; // -1 = silence
+ };
+
+
+
+class AudioEngineUtilTools
+ {
+public:
+
+ /**
+ * Displays messages on a box
+ */
+ static void AudioEngineMessageBox(const TDesC& aMessage);
+
+ };
+
+#endif