--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/audioeditorengine/inc/AudProcessorImpl.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,217 @@
+/*
+* 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 __CAUDPROCESSORIMPL_H__
+#define __CAUDPROCESSORIMPL_H__
+
+#include <e32base.h>
+#include <e32math.h>
+#include "AudClipInfo.h"
+#include "AudCommon.h"
+#include "AudSong.h"
+#include "ProcInFileHandler.h"
+
+#include "ProcFrameHandler.h"
+#include "ProcWAVFrameHandler.h"
+
+
+
+
+#include "ProcTools.h"
+
+
+class MProcClipInfoObserver;
+
+class CAudProcessorImpl : public CBase
+ {
+
+public:
+
+ /*
+ *
+ * Symbian constructors and a destructor
+ *
+ */
+
+ static CAudProcessorImpl* NewL();
+ static CAudProcessorImpl* NewLC();
+
+ virtual ~CAudProcessorImpl();
+
+
+ /**
+ * Performs all initializations needed for a song processing
+ * such as output file opening
+ *
+ * Can leave with one of the system wide error codes
+ * related to memory allocation and file opening
+ *
+ * Possible panic code
+ * <code>ESongProcessingOperationAlreadyRunning</code>
+ *
+ *
+ *
+ * @param aSong song to be processed
+ * @param aRawFrameSize length of raw audio frames
+ * @param aGetTimeEstimation ETrue if getting a time estimation
+ *
+ * @return
+ *
+ */
+ void ProcessSongL(const CAudSong* aSong, TInt aRawFrameSize,
+ TBool aGetTimeEstimation = EFalse);
+
+ /**
+ * Processes one audio frame and writes it to an output file
+ *
+ * Possible panic code
+ * <code>ESongProcessingOperationNotRunning</code>
+ *
+ * @param aProgress output parameter to indicate progress in percents
+ *
+ *
+ * @return ETrue if processing completed, EFalse otherwise
+ *
+ */
+ TBool ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress,
+ TTimeIntervalMicroSeconds& aDuration, TBool& aRaw);
+
+
+
+ /**
+ * Gets properties of an audio file
+ *
+ * Can leave with one of the error codes related to file opening
+ *
+ * @param aFileName name of the file
+ * @param aFileHandle file handle of the file to read
+ * @param aProperties pointer to audio file properties (needs to be
+ * allocated before calling this function)
+ *
+ */
+ void GetAudFilePropertiesL(const TDesC& aFileName, RFile* aFileHandle,
+ TAudFileProperties* aProperties);
+
+ /**
+ *
+ * Gets time estimate once the time estimate has been calculated
+ *
+ * If time estimation has not been processed, returns 0
+ *
+ * @return processing time estimate in microseconds
+ */
+
+ TInt64 GetFinalTimeEstimate() const;
+
+
+private:
+
+ /*
+ * Symbian constructor
+ */
+ void ConstructL();
+
+ /*
+ * Generates processing events for the output clip
+ */
+ void GetProcessingEventsL();
+
+ /*
+ * Calculates a gain value on a given time
+ */
+ TInt8 GetGainNow(const CAudClip* aClip, TInt32 aTimeMilliSeconds);
+
+ /*
+ * Stops processing
+ */
+ TBool StopProcessing();
+
+ /*
+ * Writes one frame of silence
+ */
+ TBool WriteSilenceL(HBufC8*& aFrame, TInt& aProgress,
+ TTimeIntervalMicroSeconds& aDuration, TBool& aRaw);
+ /*
+ * Returns the index of the clip with highest priority
+ */
+ TBool HighestInFilePriority(TInt& aFirst, TInt& aSecond);
+
+ /*
+ * Compares the two properties and returns true if decoding is required
+ */
+ TBool IsDecodingRequired(const TAudFileProperties& prop1, const TAudFileProperties& prop2);
+
+ /*
+ * C++ constructor
+ */
+ CAudProcessorImpl();
+
+private:
+
+ // Array for all the input clips
+ RPointerArray<CProcInFileHandler> iInFiles;
+
+ // Song
+ const CAudSong* iSong;
+
+ // frame handler for PCM operations such as mixing
+ CProcWAVFrameHandler* iWAVFrameHandler;
+
+ // time left before the end of last clip
+ // (additional silence may be written after that)
+ TInt32 iTimeLeft;
+
+ // index of the current processing event
+ TInt iCurEvent;
+
+ // array for processing events
+ RPointerArray<CProcessingEvent> iProcessingEvents;
+
+ // array for storing clip indexes that are currenty written
+ RArray<TInt> iClipsWritten;
+
+
+ // song duration in milliseconds
+ TInt iSongDurationMilliSeconds;
+
+ // how much has already been processed
+ TInt iSongProcessedMilliSeconds;
+
+ // index of the clip that was previously processed
+ TInt iLastInClip1;
+
+ // a flag to indicate if we are getting a processing time estimate
+ TBool iGetTimeEstimation;
+
+ // timer for calculating time estimation
+ TTime iTimer;
+
+ // a variable for time estimate
+ TInt64 iTimeEstimate;
+
+ // a variable for time estimate calculation
+ TReal iTimeEstimateCoefficient;
+
+ TBool iSilenceStarted;
+
+ };
+
+
+#endif