videoeditorengine/audioeditorengine/src/AudProcessorImpl.cpp
branchRCL_3
changeset 3 e0b5df5c0969
parent 0 951a5db380a0
child 7 4c409de21d23
--- a/videoeditorengine/audioeditorengine/src/AudProcessorImpl.cpp	Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,997 +0,0 @@
-/*
-* 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:  
-*
-*/
-
-
-
-#include "AudProcessorImpl.h"
-#include "ProcAMRInFileHandler.h"
-
-#include "ProcMP4InFileHandler.h"
-#include "ProcADTSInFileHandler.h"
-#include "ProcMP3InFileHandler.h"
-#include "ProcAWBInFileHandler.h"
-#include "ProcWAVInFileHandler.h"
-
-
-#include "ProcAMRFrameHandler.h"
-#include "ProcAACFrameHandler.h"
-#include "ProcMP3FrameHandler.h"
-#include "ProcAWBFrameHandler.h"
-#include "ProcWAVFrameHandler.h"
-
-
-
-#include "AudCommon.h"
-#include "ProcTools.h"
-#include "AudPanic.h"
-
-// Debug print macro
-#if defined _DEBUG 
-#include <e32svr.h>
-#define PRINT(x) RDebug::Print x;
-#else
-#define PRINT(x)
-#endif
-
-const TInt KTimeEstimateTime = 2000; // 1000 ms
-
-CAudProcessorImpl* CAudProcessorImpl::NewL()
-    {
-
-
-    CAudProcessorImpl* self = new (ELeave) CAudProcessorImpl();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-CAudProcessorImpl* CAudProcessorImpl::NewLC()
-    {
-    CAudProcessorImpl* self = new (ELeave) CAudProcessorImpl();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-    }
-
-CAudProcessorImpl::~CAudProcessorImpl() 
-    {
-    
-	PRINT((_L("CAudProcessorImpl::~CAudProcessorImpl() in")));
-    TInt a = 0;
-    
-    for (a = 0; a < iInFiles.Count() ; a++) 
-        {
-        delete iInFiles[a];
-        }
-    iInFiles.Reset();
-    
-	PRINT((_L("CAudProcessorImpl::~CAudProcessorImpl() deleted iInFiles")));
-    delete iWAVFrameHandler; 
-
-    iClipsWritten.Reset();
-
-    iProcessingEvents.ResetAndDestroy();
-
-	PRINT((_L("CAudProcessorImpl::~CAudProcessorImpl() out")));
-    }
-    
-
-void CAudProcessorImpl::ConstructL() 
-    {
-    
-    
-
-    }
-
-CAudProcessorImpl::CAudProcessorImpl() : iInFiles(8), iSong(0), 
-                                            iTimeLeft(0),
-                                            iCurEvent(0),
-                                            iProcessingEvents(8),
-                                            iSongDurationMilliSeconds(0),
-                                            iSongProcessedMilliSeconds(0)
-                                        
-    {
-
-
-    }
-
-void CAudProcessorImpl::ProcessSongL(const CAudSong* aSong, TInt aRawFrameSize, TBool aGetTimeEstimation) 
-{
-    PRINT((_L("CAudProcessorImpl::ProcessSongL in")));
-
-    iGetTimeEstimation = aGetTimeEstimation;
-    
-    iSilenceStarted = EFalse;
-    
-    iSong = aSong;
-    
-    TInt clips = aSong->iClipArray.Count();
-    
-    
-    // bitdepth always 16
-    const TInt KBitDepth = 16;
-    
-    iWAVFrameHandler = CProcWAVFrameHandler::NewL(KBitDepth);
-    
-    // create inFileHandlers for each input clips--->
-    for (TInt a = 0 ; a < clips ; a++) 
-    {
-        if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatAMR) 
-        {
-            PRINT((_L("CAudProcessorImpl::ProcessSongL create AMRNB file handler")));
-            CProcInFileHandler* inFileHandler = 
-                CProcAMRInFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), 
-                aSong->iClipArray[a]->Info()->FileHandle(), aSong->iClipArray[a],
-                4096, iSong->OutputFileProperties().iSamplingRate,
-                iSong->OutputFileProperties().iChannelMode);
-            
-            iInFiles.Insert(inFileHandler, iInFiles.Count());
-            inFileHandler->SetPropertiesL(aSong->iClipArray[a]->Info()->Properties());
-            inFileHandler->SetPriority(aSong->iClipArray[a]->Priority());
-        
-            inFileHandler->SeekCutInFrame();
-            
-            if (IsDecodingRequired(aSong->OutputFileProperties(), 
-                                   aSong->iClipArray[a]->Info()->Properties()))
-                {
-                inFileHandler->SetDecodingRequired(ETrue);
-                }
-                
-                
-                
-            
-        }            
-        else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatMP4) 
-        {
-            PRINT((_L("CAudProcessorImpl::ProcessSongL create MP4 file handler")));
-            CProcInFileHandler* inFileHandler = 
-                CProcMP4InFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), 
-                aSong->iClipArray[a]->Info()->FileHandle(),
-                aSong->iClipArray[a],
-                4096, iSong->OutputFileProperties().iSamplingRate,
-                iSong->OutputFileProperties().iChannelMode);
-            
-            iInFiles.Insert(inFileHandler, iInFiles.Count());
-            TAudFileProperties prororo;
-            inFileHandler->GetPropertiesL(&prororo);
-            inFileHandler->SetPriority(aSong->iClipArray[a]->Priority());
-            inFileHandler->SeekCutInFrame();
-            
-            if (IsDecodingRequired(aSong->OutputFileProperties(), 
-                                   aSong->iClipArray[a]->Info()->Properties()))
-                {
-                inFileHandler->SetDecodingRequired(ETrue);
-                }
-            
-            
-            
-        }
-        
-        else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatAAC_ADTS) 
-        {
-            PRINT((_L("CAudProcessorImpl::ProcessSongL create AAC ADTS file handler")));
-            CProcInFileHandler* inFileHandler = 
-                CProcADTSInFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), 
-                aSong->iClipArray[a]->Info()->FileHandle(),
-                aSong->iClipArray[a],
-                8092, iSong->OutputFileProperties().iSamplingRate,
-                iSong->OutputFileProperties().iChannelMode);
-            TAudFileProperties pro;
-            
-            iInFiles.Insert(inFileHandler, iInFiles.Count());
-            inFileHandler->GetPropertiesL(&pro);
-            inFileHandler->SetPriority(aSong->iClipArray[a]->Priority());
-            inFileHandler->SeekCutInFrame();
-            
-            if (IsDecodingRequired(aSong->OutputFileProperties(), 
-                                   aSong->iClipArray[a]->Info()->Properties()))
-                {
-                inFileHandler->SetDecodingRequired(ETrue);
-                }
-            
-                
-            
-        }
-        else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatMP3) 
-            {
-            PRINT((_L("CAudProcessorImpl::ProcessSongL create MP3 file handler")));
-            CProcInFileHandler* inFileHandler = 
-                CProcMP3InFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), 
-                aSong->iClipArray[a]->Info()->FileHandle(), 
-                aSong->iClipArray[a],
-                4096, iSong->OutputFileProperties().iSamplingRate,
-                iSong->OutputFileProperties().iChannelMode);
-            
-            iInFiles.Insert(inFileHandler, iInFiles.Count());
-            inFileHandler->SetPropertiesL(aSong->iClipArray[a]->Info()->Properties());
-            inFileHandler->SetPriority(aSong->iClipArray[a]->Priority());
-            inFileHandler->SeekCutInFrame();
-            
-            
-            if (IsDecodingRequired(aSong->OutputFileProperties(), 
-                                   aSong->iClipArray[a]->Info()->Properties()))
-                {
-                inFileHandler->SetDecodingRequired(ETrue);
-                }
-            
-            }
-        else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatAMRWB) 
-            {
-            PRINT((_L("CAudProcessorImpl::ProcessSongL create AMRWB file handler")));
-            CProcInFileHandler* inFileHandler = 
-                CProcAWBInFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), 
-                aSong->iClipArray[a]->Info()->FileHandle(), 
-                aSong->iClipArray[a],
-                4096, iSong->OutputFileProperties().iSamplingRate,
-                iSong->OutputFileProperties().iChannelMode);
-            
-            iInFiles.Insert(inFileHandler, iInFiles.Count());
-            inFileHandler->SetPropertiesL(aSong->iClipArray[a]->Info()->Properties());
-            inFileHandler->SetPriority(aSong->iClipArray[a]->Priority());
-            inFileHandler->SeekCutInFrame();
-            
-            if (IsDecodingRequired(aSong->OutputFileProperties(), 
-                                   aSong->iClipArray[a]->Info()->Properties()))
-                {
-                inFileHandler->SetDecodingRequired(ETrue);
-                }
-            
-            }
-        else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatWAV) 
-            {
-            PRINT((_L("CAudProcessorImpl::ProcessSongL create WAV file handler")));
-            CProcInFileHandler* inFileHandler = 
-                CProcWAVInFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), 
-                aSong->iClipArray[a]->Info()->FileHandle(), 
-                aSong->iClipArray[a],
-                4096, iSong->OutputFileProperties().iSamplingRate,
-                iSong->OutputFileProperties().iChannelMode);
-            
-            iInFiles.Insert(inFileHandler, iInFiles.Count());
-            inFileHandler->SetPropertiesL(aSong->iClipArray[a]->Info()->Properties());
-            inFileHandler->SetPriority(aSong->iClipArray[a]->Priority());
-            inFileHandler->SeekCutInFrame();
-            
-            if (IsDecodingRequired(aSong->OutputFileProperties(), 
-                                   aSong->iClipArray[a]->Info()->Properties()))
-                {
-                inFileHandler->SetDecodingRequired(ETrue);
-                }
-            
-            }
-        
-        }
-    
-    
-    // find the biggest frame size for mixing buffer
-    TInt maxFrameSize = 0;
-    for (TInt q = 0 ; q < iInFiles.Count() ; q++)
-        {
-        iInFiles[q]->SetRawAudioFrameSize(aRawFrameSize);
-        
-        if (iInFiles[q]->GetDecodedFrameSize() > maxFrameSize)
-            {
-            maxFrameSize = iInFiles[q]->GetDecodedFrameSize();
-            }
-            
-        }
-        
-        
-    
-    GetProcessingEventsL();
-    iProcessingEvents[0]->GetAllIndexes(iClipsWritten);
-    iTimeLeft = iProcessingEvents[1]->iPosition;
-    iCurEvent = 0;
-    
-    
-    if (iGetTimeEstimation)
-        {
-        iTimer.HomeTime();
-        
-        if (iTimeLeft >= KTimeEstimateTime)
-            {
-            iTimeEstimateCoefficient = iTimeLeft/KTimeEstimateTime;
-            
-            iTimeLeft = KTimeEstimateTime;
-            }
-        else
-            {
-            iTimeEstimateCoefficient = 1;
-            }
-        
-        }
-    
-        
-    PRINT((_L("CAudProcessorImpl::ProcessSongL out")));
-    }
-
-TBool CAudProcessorImpl::ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress,
-                                       TTimeIntervalMicroSeconds& aDuration, TBool& aRaw) 
-{
-    
-    PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL in")));
-    aDuration = 0;
-    
-    if (iSongProcessedMilliSeconds > iSongDurationMilliSeconds)
-        {
-        // processing is ready
-        StopProcessing();
-        PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL stopped processing 1, out")));
-        return ETrue;
-        
-        }
-    
-    
-    while (iTimeLeft <= 0) 
-        {
-        
-        iCurEvent++;
-    
-        if (iCurEvent >= iProcessingEvents.Count()-1) 
-            {
-
-            // do we need silence in the end?
-            if (iSongProcessedMilliSeconds < ProcTools::MilliSeconds(iSong->iSongDuration))
-                {
-                
-                if (iGetTimeEstimation)
-                    {
-                    StopProcessing();
-                    PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL stopped processing in time estimate case, out")));
-                    return ETrue;        
-                    
-                    }
-                
-               
-                WriteSilenceL(aFrame, aProgress, aDuration, aRaw);
-                return EFalse;
-                }
-            // processing is ready
-            StopProcessing();
-            PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL stopped processing 2, out")));
-            return ETrue;
-            }
-        
-        iClipsWritten.Reset();
-        for (TInt tr = 0 ; tr < iProcessingEvents[iCurEvent]->IndexCount() ; tr++)
-            {
-            
-            TInt clipIndex = iProcessingEvents[iCurEvent]->GetIndex(tr);
-
-            
-            if (clipIndex == -1 || !iSong->Clip(clipIndex, KAllTrackIndices)->Muting())
-                {
-                iClipsWritten.Append(iProcessingEvents[iCurEvent]->GetIndex(tr));
-                
-                }
-            
-            }
-        iTimeLeft = iProcessingEvents[iCurEvent+1]->iPosition -
-                iProcessingEvents[iCurEvent]->iPosition;
-                
-        if (iGetTimeEstimation)
-            {
-            
-            TTime timeNow;
-            timeNow.HomeTime();
-            
-            // how long has it been from the previous event?
-            TTimeIntervalMicroSeconds msFromPrev = timeNow.MicroSecondsFrom(iTimer);
-            
-            iTimeEstimate += msFromPrev.Int64() * iTimeEstimateCoefficient;
-            
-            // set iTimer to home time
-            iTimer.HomeTime();
-            
-            if (iTimeLeft > KTimeEstimateTime)
-                {
-                iTimeEstimateCoefficient = iTimeLeft/KTimeEstimateTime;
-                iTimeLeft = KTimeEstimateTime;
-                }
-            else
-                {
-                iTimeEstimateCoefficient = 1;
-                }
-            
-            }
-                    
-        }
-    
-    
-    if (iClipsWritten.Count() == 1) 
-        {
-        // if silence
-        WriteSilenceL(aFrame, aProgress, aDuration, aRaw);
-        PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL silence, out")));
-        return EFalse;
-        
-        }
-    else if (iTimeLeft > 0) 
-        {
-
-
-        TInt inClipIndex1 = 0;
-        TInt inClipIndex2 = 0;
-        
-        HighestInFilePriority(inClipIndex1, inClipIndex2);
-        
-        CAudClip* clip1 = iSong->iClipArray[iClipsWritten[inClipIndex1]];
-        CAudClip* clip2 = iSong->iClipArray[iClipsWritten[inClipIndex2]];
-        
-        CProcInFileHandler* inHandler1 = iInFiles[iClipsWritten[inClipIndex1]];
-        CProcInFileHandler* inHandler2 = iInFiles[iClipsWritten[inClipIndex2]];
-        
-        
-        TBool writeClip1 = ETrue;
-        TBool writeClip2 = ETrue;
-        
-        if (clip1 == clip2)
-            {
-            writeClip2 = EFalse;
-            }
-        if (clip1->Muting())
-            {
-            writeClip1 = EFalse;
-            }
-        if (clip2->Muting())
-            {
-            writeClip2 = EFalse;
-            }
-
-
-        HBufC8* frame1 = 0;
-        HBufC8* frame2 = 0;
-        TInt siz1 = 0;
-        TInt32 tim1 = 0;
-        TInt siz2 = 0;
-        TInt32 tim2 = 0;
-        
-        TBool getFrameRet1 = EFalse;
-        TBool getFrameRet2 = EFalse;
-        // If the clip is muted -> return silence
-        
-        if (!writeClip1 && !writeClip2)
-            {
-            
-            getFrameRet1 = inHandler1->GetSilentAudioFrameL(frame1, siz1, tim1, aRaw);
-            
-            }
-            
-        else if (!writeClip1 && writeClip2)
-            {
-            
-            getFrameRet2 = inHandler2->GetAudioFrameL(frame2, siz2, tim2, aRaw);
-                
-            }
-        else if (writeClip1 && !writeClip2)
-            {
-            
-            getFrameRet1 = inHandler1->GetAudioFrameL(frame1, siz1, tim1, aRaw);
-                
-            }
-        else
-            {
-            
-            TBool decodingRequired1 = inHandler1->DecodingRequired();
-            TBool decodingRequired2 = inHandler2->DecodingRequired();
-            
-            // decoding is needed due to mixing
-            inHandler1->SetDecodingRequired(ETrue);
-            inHandler2->SetDecodingRequired(ETrue);
-            
-            getFrameRet1 = inHandler1->GetAudioFrameL(frame1, siz1, tim1, aRaw);
-            
-            // fix to rel2, put frame1 to cleanup stack for the next operation
-            CleanupStack::PushL(frame1);
-            getFrameRet2 = inHandler2->GetAudioFrameL(frame2, siz2, tim2, aRaw);
-            CleanupStack::Pop(); // frame1, will be put to cleanupstack later->
-
-
-            inHandler1->SetDecodingRequired(decodingRequired1);
-            inHandler2->SetDecodingRequired(decodingRequired2);
-            
-            }
-            
-        
-        if(!getFrameRet1 && !getFrameRet2)
-            {
-            // no audio frames left -> write silence
-        
-            getFrameRet1 = inHandler1->GetSilentAudioFrameL(frame1, siz1, tim1, aRaw);
-                            
-        }
-        
-        if (frame1 != 0)
-            {
-            CleanupStack::PushL(frame1);
-            }
-        if (frame2 != 0)
-            {
-            CleanupStack::PushL(frame2);
-            }
-            
-
-        if (getFrameRet1 && getFrameRet2)
-            {
-           
-            // mix the two frames
-            iWAVFrameHandler->MixL(frame1, frame2, aFrame);
-            CleanupStack::PopAndDestroy(frame2);
-            CleanupStack::PopAndDestroy(frame1);
-            aDuration = TUint(tim1*1000);
-            
-            }
-        else if (getFrameRet1 && !getFrameRet2)
-            {
-            aFrame = HBufC8::NewL(frame1->Length());
-            aFrame->Des().Copy(frame1->Des());
-            CleanupStack::PopAndDestroy(frame1);
-            aDuration = TUint(tim1*1000);
-            
-            
-            }
-        else if (!getFrameRet1 && getFrameRet2)
-            {
-            
-            aFrame = HBufC8::NewL(frame2->Length());
-            aFrame->Des().Copy(frame2->Des());
-            CleanupStack::PopAndDestroy(frame2);
-            aDuration = TUint(tim2*1000);
-            
-            }
-        else if (!getFrameRet1 && !getFrameRet2)
-            {
-            
-            // shouldn't get here...
-            
-            User::Leave(KErrGeneral);
-            }
-
-        
-        iTimeLeft -= ProcTools::MilliSeconds(aDuration);
-        iSongProcessedMilliSeconds += ProcTools::MilliSeconds(aDuration);
-        
-        
-    }
-    
-    if (iSongDurationMilliSeconds > 0)
-        {
-        
-        // update progress
-        aProgress = (iSongProcessedMilliSeconds*100)/iSongDurationMilliSeconds;
-            
-        }
-    PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL out")));
-    return EFalse;
-    
-    }
-
-
-void CAudProcessorImpl::GetAudFilePropertiesL(const TDesC& aFileName, RFile* aFileHandle,
-                                              TAudFileProperties* aProperties) 
-    {
-
-    PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL in")));
-    
-    
-
-    PRINT(_L("CAudProcessorImpl::GetAudFilePropertiesL read header from file"));
-    
-    TBuf8<10> fileHeader;
-
-    if (!aFileHandle)
-    {
-        RFs* fs = new (ELeave) RFs;
-        CleanupStack::PushL(fs);
-        User::LeaveIfError( fs->Connect() );
-    
-        RFile file;    
-        TInt error = file.Open(*fs, aFileName, EFileShareReadersOnly | EFileStream | EFileRead);//EFileShareAny | EFileStream | EFileRead);
-        if (error != KErrNone)
-            {
-            error = file.Open(*fs, aFileName, EFileShareAny | EFileStream | EFileRead);
-            }
-        if (error == KErrNone)
-            {
-            error = file.Read(fileHeader);
-            }
-        file.Close();
-        fs->Close();
-        CleanupStack::PopAndDestroy(fs);
-        User::LeaveIfError(error);
-    } 
-    else
-    {
-        TInt pos = 0;
-        
-        User::LeaveIfError( aFileHandle->Seek(ESeekCurrent, pos) );
-        
-        TInt zero = 0;        
-        User::LeaveIfError( aFileHandle->Seek(ESeekStart, zero) );
-        User::LeaveIfError( aFileHandle->Read(fileHeader) );
-        
-        User::LeaveIfError( aFileHandle->Seek(ESeekStart, pos) );
-    }
-        
-    if (fileHeader.Length() < 10 )  //AMR-WB has 9-byte header, but header-only clips are not accepted. Hence accepting only 10 and more byte clips.
-        {
-        PRINT(_L("CAudProcessorImpl::GetAudFilePropertiesL the file has less than 9 bytes, it must be invalid"));        
-        User::Leave(KErrCorrupt);
-        }
-
-    PRINT(_L("CAudProcessorImpl::GetAudFilePropertiesL interpret the header"));
-    
-    TParse fp;
-    TFileName name;
-        
-    if (!aFileHandle)
-        fp.Set(aFileName, NULL, NULL);
-    else
-    {
-        User::LeaveIfError( aFileHandle->FullName(name) );
-        fp.Set(name, NULL, NULL);
-    }    
-    
-    if ( fileHeader.Mid(4,4) == _L8("ftyp") )
-            {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL 3gp/mp4/m4a based on ftyp")));
-        // 3gp/mp4/m4a; extension-based recognition later
-        CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aFileName, aFileHandle, 0, 4096);
-        CleanupStack::PushL(inFileHandler);
-        inFileHandler->GetPropertiesL(aProperties);
-        
-        CleanupStack::PopAndDestroy(inFileHandler);
-        }
-    else if (fileHeader.Mid(0,6) == _L8("#!AMR\n"))
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL AMR-NB based on #!AMR")));
-        // AMR-NB
-        CProcInFileHandler* inFileHandler = CProcAMRInFileHandler::NewL(aFileName, aFileHandle, 0, 4096);
-        CleanupStack::PushL(inFileHandler);
-
-        inFileHandler->GetPropertiesL(aProperties);    
-        
-        CleanupStack::PopAndDestroy(inFileHandler);
-        
-        }
-    else if (fileHeader.Mid(0,9) == _L8("#!AMR-WB\n")) 
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL awb based on #!AMR-WB")));
-        CProcInFileHandler* inFileHandler = CProcAWBInFileHandler::NewL(aFileName, aFileHandle,0, 4096);
-        CleanupStack::PushL(inFileHandler);
-        inFileHandler->GetPropertiesL(aProperties);
-
-        CleanupStack::PopAndDestroy(inFileHandler);
-        }
-    else if (fp.Ext().CompareF(_L(".aac")) == 0) 
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL aac based on extension")));
-        CProcInFileHandler* inFileHandler = CProcADTSInFileHandler::NewL(aFileName, aFileHandle, 0, 4096);
-        CleanupStack::PushL(inFileHandler);
-        inFileHandler->GetPropertiesL(aProperties);
-
-        CleanupStack::PopAndDestroy(inFileHandler);
-        }
-    else if (fp.Ext().CompareF(_L(".3gp")) == 0) 
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL 3gp based on extension")));
-
-        CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aFileName, aFileHandle, 0, 4096);
-        
-        CleanupStack::PushL(inFileHandler);
-        inFileHandler->GetPropertiesL(aProperties);
-        
-        CleanupStack::PopAndDestroy(inFileHandler);
-    
-        }
-
-    else if (fp.Ext().CompareF(_L(".m4a")) == 0 || 
-             fp.Ext().CompareF(_L(".mp4")) == 0) 
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL mp4/m4a based on extension")));
-        
-        CProcInFileHandler* inFileHandler = 0;
-
-        inFileHandler = CProcMP4InFileHandler::NewL(aFileName, aFileHandle, 0, 4096);
-        CleanupStack::PushL(inFileHandler);
-        inFileHandler->GetPropertiesL(aProperties);    
-        CleanupStack::PopAndDestroy(inFileHandler);
-        
-        }
-    else if (fp.Ext().CompareF(_L(".amr")) == 0)
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL AMR-NB based on extension")));
-        // AMR-NB
-        CProcInFileHandler* inFileHandler = CProcAMRInFileHandler::NewL(aFileName, aFileHandle, 0, 4096);
-        CleanupStack::PushL(inFileHandler);
-
-        inFileHandler->GetPropertiesL(aProperties);    
-        
-        CleanupStack::PopAndDestroy(inFileHandler);
-        }
-    else if (fp.Ext().CompareF(_L(".awb")) == 0)
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL awb based on extension")));
-        CProcInFileHandler* inFileHandler = CProcAWBInFileHandler::NewL(aFileName, aFileHandle, 0, 4096);
-        CleanupStack::PushL(inFileHandler);
-        inFileHandler->GetPropertiesL(aProperties);
-
-        CleanupStack::PopAndDestroy(inFileHandler);
-        }
-    else if (fp.Ext().CompareF(_L(".mp3")) == 0) 
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL mp3 based on extension")));
-        
-        CProcInFileHandler* inFileHandler = CProcMP3InFileHandler::NewL(aFileName, aFileHandle, 0, 4096);
-        CleanupStack::PushL(inFileHandler);
-        inFileHandler->GetPropertiesL(aProperties);
-        
-        CleanupStack::PopAndDestroy(inFileHandler);
-        }
-    else if (fp.Ext().CompareF(_L(".wav")) == 0) 
-        {
-        PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL wav based on extension")));
-        
-        CProcInFileHandler* inFileHandler = CProcWAVInFileHandler::NewL(aFileName, aFileHandle, 0, 8192);
-        CleanupStack::PushL(inFileHandler);
-        inFileHandler->GetPropertiesL(aProperties);
-        CleanupStack::PopAndDestroy(inFileHandler);
-        }
-    else
-        {
-        User::Leave(KErrNotSupported);
-        }
-    
-    PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL out")));
-    }
-    
-    
-TInt64 CAudProcessorImpl::GetFinalTimeEstimate() const
-    {
-    return iTimeEstimate;
-    }
-
-void CAudProcessorImpl::GetProcessingEventsL() 
-    {
-
-    TInt clips = iSong->iClipArray.Count();
-
-    CProcessingEvent* newEvent = 0;
-    
-    TInt a = 0;
-
-    // create a new processing event from each clips cutIn and cutOut
-    for (a = 0 ; a < clips ; a++) 
-        {
-        
-        
-        // cut in time:
-        newEvent = CProcessingEvent::NewL();
-        newEvent->iChangedClipIndex = a;
-        newEvent->iCutIn = ETrue;
-        TInt32 startTime = iSong->iClipArray[a]->StartTimeMilliSeconds();
-        TInt32 cutInTime= iSong->iClipArray[a]->CutInTimeMilliSeconds(); 
-        newEvent->iPosition = startTime+cutInTime;
-        iProcessingEvents.Insert(newEvent, 0);
-
-        // cut out time
-        newEvent = CProcessingEvent::NewL();
-        newEvent->iChangedClipIndex = a;
-        newEvent->iCutIn = EFalse;
-        TInt32 cutOutTime= iSong->iClipArray[a]->CutOutTimeMilliSeconds(); 
-        newEvent->iPosition = startTime+cutOutTime;
-        iProcessingEvents.Insert(newEvent, 0);
-
-        }
-
-    
-    
-
-    // order processing events
-    TLinearOrder<CProcessingEvent> order(CProcessingEvent::Compare);
-    iProcessingEvents.Sort(order);
-
-    // add a new processing events in the beginning to represent silence
-    // (there is a possibility that the first clip doesn't start from 0 ms)
-    newEvent = CProcessingEvent::NewL();
-    newEvent->iChangedClipIndex = -1;
-    newEvent->InsertIndex(-1);
-    newEvent->iCutIn = ETrue;
-    newEvent->iPosition = 0;
-    iProcessingEvents.Insert(newEvent, 0);
-
-    // the next for-loop adds indexes of those clips that are supposed to be mixed to
-    // each processing event
-
-    for (TInt r = 1; r < iProcessingEvents.Count() ; r++) 
-        {
-        
-        
-        for (TInt i = 0 ; i < iProcessingEvents[r-1]->IndexCount() ; i++)
-            {
-            iProcessingEvents[r]->InsertIndex(iProcessingEvents[r-1]->GetIndex(i));
-            }
-
-        
-        if (iProcessingEvents[r]->iCutIn)
-            {
-            iProcessingEvents[r]->InsertIndex(iProcessingEvents[r]->iChangedClipIndex);
-            }
-        else
-            {
-
-            TInt oldIndexInArray = iProcessingEvents[r]->FindIndex(iProcessingEvents[r]->iChangedClipIndex);
-
-            if (oldIndexInArray >= 0 && oldIndexInArray < iProcessingEvents[r]->IndexCount())
-                {
-                iProcessingEvents[r]->RemoveIndex(oldIndexInArray);
-                }
-
-            }
-
-        }
-                
-    //iSongDurationMilliSeconds = (iSong->iSongDuration.Int64()/1000);
-    iSongDurationMilliSeconds = ProcTools::MilliSeconds(iSong->iSongDuration);
-    
-    //iProcessingEvents[iProcessingEvents.Count()-1]->iPosition;
-
-
-    }
-
-
-
-
-TBool CAudProcessorImpl::StopProcessing()
-    {
-
-    if (iGetTimeEstimation)
-        {
-        
-        TTime timeNow;
-        timeNow.HomeTime();
-        
-        // how long has it been from the previous event?
-        TTimeIntervalMicroSeconds msFromPrev = timeNow.MicroSecondsFrom(iTimer);
-        
-        iTimeEstimate += msFromPrev.Int64() * iTimeEstimateCoefficient;
-        }
-
-
-    iProcessingEvents.ResetAndDestroy();
-    iInFiles.ResetAndDestroy();
-
-    return ETrue;
-    }
-
-TBool CAudProcessorImpl::WriteSilenceL(HBufC8*& aFrame, TInt& aProgress,
-                                       TTimeIntervalMicroSeconds& aDuration, TBool& aRaw)                                
-    {
-    HBufC8* silentFrame = 0;
-    TInt silSize = 0;
-    TInt32 silDur = 0;
-
-    if (iSong->iProperties->iAudioType == EAudAAC_MPEG4 && 
-        iSong->iProperties->iChannelMode == EAudSingleChannel)
-        {
-        
-        aDuration = ((1024*1000)/(iSong->iProperties->iSamplingRate))*1000;
-        
-        silDur = ProcTools::MilliSeconds(aDuration);
-        
-        aFrame = HBufC8::NewL(KSilentMonoAACFrameLenght);
-        aFrame->Des().Append(KSilentMonoAACFrame, KSilentMonoAACFrameLenght);
-        
-        aRaw = EFalse;
-
-        }
-    else if (iSong->iProperties->iAudioType == EAudAAC_MPEG4 && 
-             iSong->iProperties->iChannelMode == EAudStereo)
-        {
-
-        aDuration = ((1024*1000)/(iSong->iProperties->iSamplingRate))*1000;
-        
-        silDur = ProcTools::MilliSeconds(aDuration);
-        
-        aFrame = HBufC8::NewL(KSilentStereoAACFrameLenght);    
-        aFrame->Des().Append(KSilentStereoAACFrame, KSilentStereoAACFrameLenght);
-        
-        aRaw = EFalse;
-
-        }
-    else
-        {
-        iInFiles[0]->GetSilentAudioFrameL(silentFrame, silSize, silDur, aRaw);
-    
-        aFrame= silentFrame;
-        aDuration = TUint(silDur*1000);
-        
-        }
-    
-    iSongProcessedMilliSeconds += silDur;
-    iTimeLeft -= silDur;
-    
-    if (iSongDurationMilliSeconds > 0)
-        {
-        aProgress = (iSongProcessedMilliSeconds*100)/iSongDurationMilliSeconds;    
-        }
-        
-    return ETrue;
-    }
-
-
-TBool CAudProcessorImpl::HighestInFilePriority(TInt& aFirst, TInt& aSecond)
-    {
-    
-    aFirst = 1;
-    aSecond = 1;
-    
-    TInt highest = 1;
-    
-    TInt secondHighest = 1;
-    
- 
-    for (TInt a = 1 ; a < iClipsWritten.Count() ; a++)
-        {
-        if (iInFiles[iClipsWritten[a]]->Priority() >= highest)
-            {
-            
-            // highest priority
-            aFirst = a;
-            highest = iInFiles[iClipsWritten[a]]->Priority();
-            
-            }
-        else if (iInFiles[iClipsWritten[a]]->Priority() >= secondHighest)
-            {
-            aSecond = a;
-            secondHighest = iInFiles[iClipsWritten[a]]->Priority();
-            }
- 
-        }
-        
- 
-    return ETrue;
-    }
-    
-TBool CAudProcessorImpl::IsDecodingRequired(const TAudFileProperties& prop1, 
-                                            const TAudFileProperties& prop2)
-    {
-    
-    TBool decodingNeeded = EFalse;
-    TAudFileProperties tmpProp1 = prop1;
-    TAudFileProperties tmpProp2 = prop2;
-    
- 
-    if (tmpProp1.iAudioType != 
-        tmpProp2.iAudioType ||
-        tmpProp1.iSamplingRate != 
-        tmpProp2.iSamplingRate ||
-        tmpProp1.iChannelMode != 
-        tmpProp2.iChannelMode)
-        {
-        decodingNeeded = ETrue;
-        }
-        
-    return decodingNeeded;
-    
-    
-    }
-
-    
-