videoeditorengine/audioeditorengine/src/AudClip.cpp
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/audioeditorengine/src/AudClip.cpp	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,453 @@
+/*
+* 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:  
+*
+*/
+
+
+/* Copyright (c) 2003 Nokia. All rights reserved. */
+
+#include "AudClip.h"
+#include "AudPanic.h"
+
+#include "AudClipInfo.h"
+#include "AudSong.h"
+#include "ProcTools.h"
+
+    
+CAudClip* CAudClip::NewL(CAudSong* aSong, const TDesC& aFileName,
+        TTimeIntervalMicroSeconds aStartTime,                            
+        MAudClipInfoObserver& aObserver, TInt aTrackIndex) 
+    {
+    
+    CAudClip* self = new (ELeave) CAudClip(aSong);
+    CleanupStack::PushL(self);
+    self->ConstructL(aFileName, aStartTime, aObserver, aTrackIndex);
+    CleanupStack::Pop(self);
+    return self;
+    
+    }
+    
+CAudClip* CAudClip::NewL(CAudSong* aSong, RFile* aFileHandle,
+        TTimeIntervalMicroSeconds aStartTime,                            
+        MAudClipInfoObserver& aObserver, TInt aTrackIndex) 
+    {
+    
+    CAudClip* self = new (ELeave) CAudClip(aSong);
+    CleanupStack::PushL(self);
+    self->ConstructL(aFileHandle, aStartTime, aObserver, aTrackIndex);
+    CleanupStack::Pop(self);
+    return self;
+    
+    }
+
+
+CAudClip::CAudClip(CAudSong* aSong) : iSong(aSong), iMute(EFalse), iNormalize(EFalse), 
+iPriority(KAudClipPriorityNormal) 
+    {
+    
+    }
+
+EXPORT_C CAudClipInfo* CAudClip::Info() const 
+    {
+
+    return iInfo;
+    }
+
+EXPORT_C TBool CAudClip::Normalizing() const 
+    {
+
+    return iNormalize;
+    }
+
+EXPORT_C TAudDynamicLevelMark CAudClip::DynamicLevelMark(TInt aIndex) const 
+    {
+
+    return *iDynamicLevelMarkArray[aIndex];
+    }
+    
+EXPORT_C TInt CAudClip::DynamicLevelMarkCount() const 
+    {
+
+    return iDynamicLevelMarkArray.Count();
+    }
+EXPORT_C TBool CAudClip::Muting() const
+    {
+    return iMute;
+    }
+
+EXPORT_C void CAudClip::SetStartTime(TTimeIntervalMicroSeconds aStartTime) 
+    {
+
+    if (iStartTime.Int64() != aStartTime.Int64()-iCutInTime.Int64()) 
+        {
+        iStartTime = aStartTime.Int64()-iCutInTime.Int64();
+        }
+        
+
+    TInt clipIndexOnSong = iSong->FindClipIndexOnSong(this);
+    TInt newIndex = 0;
+    TBool found = EFalse;
+    for (newIndex = 0 ; newIndex < iSong->ClipCount(KAllTrackIndices); newIndex++) 
+        {
+        if (iSong->iClipArray[newIndex]->StartTime() > aStartTime) 
+            {
+            found = ETrue;
+            break;
+            }
+        }
+    if (!found) 
+        {
+        newIndex = iSong->ClipCount(KAllTrackIndices);
+        }
+
+    // the order is the same
+    if (newIndex == clipIndexOnSong || newIndex == clipIndexOnSong+1) 
+        {
+        
+        iSong->FireClipTimingsChanged(iSong, this);
+        }
+    else 
+        {
+
+
+        TInt oldIndexOnTrack = iIndex;
+        iSong->UpdateClipArray();
+        iSong->UpdateClipIndexes();
+        TInt newIndexOnTrack = iIndex;
+
+        if (oldIndexOnTrack != newIndexOnTrack) 
+            {
+            iSong->FireClipIndicesChanged(iSong, oldIndexOnTrack, newIndexOnTrack, iTrackIndex);
+            }
+        else 
+            {
+            iSong->FireClipTimingsChanged(iSong, this);
+            }
+
+        }
+
+    }
+
+
+
+
+EXPORT_C TTimeIntervalMicroSeconds CAudClip::StartTime() const 
+    {
+
+    return iStartTime.Int64()+iCutInTime.Int64();
+    }
+
+
+
+TInt32 CAudClip::StartTimeMilliSeconds() const 
+    {
+
+    return ProcTools::MilliSeconds(iStartTime);
+    
+    }
+
+EXPORT_C TTimeIntervalMicroSeconds CAudClip::EndTime() const
+    {
+    return TTimeIntervalMicroSeconds(iStartTime.Int64()+iCutOutTime.Int64());
+
+    }
+
+
+EXPORT_C TTimeIntervalMicroSeconds CAudClip::EditedDuration() const
+    {
+    TTimeIntervalMicroSeconds edDur(iCutOutTime.Int64()-iCutInTime.Int64());
+    return edDur;
+
+    }
+
+EXPORT_C TInt CAudClip::Priority() const
+    {
+    return iPriority;
+    
+    }
+
+
+EXPORT_C TInt CAudClip::IndexOnTrack() const 
+    {
+
+    return iIndex;
+    }
+
+
+
+EXPORT_C TInt CAudClip::TrackIndex() const 
+    {
+
+    return iTrackIndex;
+    }
+
+
+EXPORT_C TTimeIntervalMicroSeconds CAudClip::CutInTime() const 
+    {
+    
+    return iCutInTime;
+    }
+    
+
+TInt32 CAudClip::CutInTimeMilliSeconds() const 
+    {
+
+    return ProcTools::MilliSeconds(iCutInTime);
+    
+    }
+
+EXPORT_C void CAudClip::SetCutInTime(TTimeIntervalMicroSeconds aCutInTime) 
+    {
+
+    TInt64 oldCutIn = iCutInTime.Int64();
+    TInt64 cutDif = aCutInTime.Int64() - oldCutIn;  
+
+    iCutInTime = aCutInTime;
+    iStartTime = (TTimeIntervalMicroSeconds)(iStartTime.Int64()-cutDif);
+    iSong->FireClipTimingsChanged(iSong, this);
+    }
+    
+EXPORT_C TTimeIntervalMicroSeconds CAudClip::CutOutTime() const 
+    {
+
+    return iCutOutTime;
+    }
+
+TInt32 CAudClip::CutOutTimeMilliSeconds() const 
+    {
+
+    return ProcTools::MilliSeconds(iCutOutTime);
+    
+
+    }
+    
+EXPORT_C void CAudClip::SetCutOutTime(TTimeIntervalMicroSeconds aCutOutTime) 
+    {
+
+    iCutOutTime = aCutOutTime;
+    iSong->FireClipTimingsChanged(iSong, this);
+    }
+
+
+
+
+EXPORT_C TBool CAudClip::SetPriority(TInt aPriority)
+
+    {
+    if (aPriority < 0) return EFalse;
+
+    iPriority = aPriority;
+    return ETrue;
+
+    }
+
+
+EXPORT_C TInt CAudClip::InsertDynamicLevelMarkL(const TAudDynamicLevelMark& aMark) 
+    {
+
+    if (aMark.iTime < TTimeIntervalMicroSeconds(0)) 
+        {
+        TAudPanic::Panic(TAudPanic::EIllegalDynamicLevelMark);
+        }
+
+    TAudDynamicLevelMark* newMark = new (ELeave) TAudDynamicLevelMark(aMark);
+    
+    TBool added = EFalse;
+    TInt err = KErrNone;
+
+    // insert marks so that they are always sorted by time
+    TInt index = 0;
+    for (index = 0 ; index < iDynamicLevelMarkArray.Count() ; index++) 
+        {
+        if (iDynamicLevelMarkArray[index]->iTime == newMark->iTime) 
+            {
+            // replace the level
+            TAudDynamicLevelMark* oldMark = iDynamicLevelMarkArray[index];
+            iDynamicLevelMarkArray.Remove(index);
+            delete oldMark;
+            err = iDynamicLevelMarkArray.Insert(newMark, index);
+            added = ETrue;
+            break;
+            }
+        else if (iDynamicLevelMarkArray[index]->iTime > newMark->iTime) 
+            {
+            err = iDynamicLevelMarkArray.Insert(newMark, index);
+            added = ETrue;
+            break;
+            }
+        }
+    if (!added) 
+        {
+        index = iDynamicLevelMarkArray.Count();
+        err = iDynamicLevelMarkArray.Insert(newMark, index);
+        }
+    if (err != KErrNone) 
+        {
+        User::Leave(err);
+        }
+
+    iSong->FireDynamicLevelMarkInserted(*this, *newMark, index);
+    return index;
+
+
+    }
+    
+EXPORT_C TBool CAudClip::RemoveDynamicLevelMark(TInt aIndex) 
+    {
+
+    if (aIndex > iDynamicLevelMarkArray.Count() || aIndex < 0) 
+        {
+        TAudPanic::Panic(TAudPanic::EAudioClipIllegalIndex);
+        }
+    
+    TAudDynamicLevelMark* mark = iDynamicLevelMarkArray[aIndex];
+    
+    iDynamicLevelMarkArray.Remove(aIndex);
+    delete mark;
+    
+    iSong->FireDynamicLevelMarkRemoved(*this, aIndex);
+    return ETrue;
+    }
+    
+EXPORT_C void CAudClip::SetMuting(TBool aMuted)
+    {
+    
+    iMute = aMuted;
+    
+    }
+
+EXPORT_C void CAudClip::SetNormalizing(TBool aNormalizing) 
+    {
+    
+    iNormalize = aNormalizing;    
+
+    }
+
+EXPORT_C void CAudClip::Reset(TBool aNotify) 
+    {
+
+    TInt a = 0;
+
+    for (a = 0 ; a < iDynamicLevelMarkArray.Count() ; a++) 
+        {
+        delete iDynamicLevelMarkArray[a];
+        }
+    iDynamicLevelMarkArray.Reset();
+    iCutInTime = 0;
+    
+    if (iInfo != 0)
+        {
+        iCutOutTime = iInfo->Properties().iDuration;
+        }
+
+    if (aNotify) 
+        {
+        iSong->FireClipReseted(*this);
+        }
+
+    }
+
+
+EXPORT_C void CAudClip::SetVolumeGain(TInt aVolumeGain)
+    {
+    iVolumeGain = aVolumeGain;
+    }
+
+EXPORT_C TInt CAudClip::GetVolumeGain()
+    {
+    return iVolumeGain;
+    }
+
+/*
+EXPORT_C TBool CAudClip::operator<(const CAudClip &c2) const {
+
+    return (this->iStartTime < c2.StartTime());
+
+}
+
+
+EXPORT_C TBool CAudClip::operator>(const CAudClip &c2) const {
+
+    return (this->iStartTime > c2.StartTime());
+
+}
+
+EXPORT_C TBool CAudClip::operator==(const CAudClip &c2) const {
+
+    return (this->iStartTime == c2.StartTime());
+
+}
+*/
+TInt CAudClip::Compare(const CAudClip& c1, const CAudClip& c2) 
+    {
+
+    if (c1.iStartTime > c2.iStartTime) 
+        {
+        return 1;
+        }
+    else if (c1.iStartTime < c2.iStartTime) 
+        {
+        return -1;
+        }
+    else 
+        {
+        return 0;
+        }
+    }
+
+
+
+void CAudClip::ConstructL(const TDesC& aFileName,
+                          TTimeIntervalMicroSeconds aStartTime,
+                          MAudClipInfoObserver& aObserver, TInt aTrackIndex) 
+    {
+    
+    __ASSERT_ALWAYS(aStartTime >= TInt64(0), 
+        TAudPanic::Panic(TAudPanic::EAudioClipIllegalStartTime));
+    iStartTime = aStartTime;
+    iTrackIndex = aTrackIndex;
+    
+    iInfo = CAudClipInfo::NewL(aFileName, aObserver);
+    
+    }
+    
+void CAudClip::ConstructL(RFile* aFileHandle,
+                          TTimeIntervalMicroSeconds aStartTime,
+                          MAudClipInfoObserver& aObserver, TInt aTrackIndex) 
+    {
+    
+    __ASSERT_ALWAYS(aStartTime >= TInt64(0), 
+        TAudPanic::Panic(TAudPanic::EAudioClipIllegalStartTime));
+    iStartTime = aStartTime;
+    iTrackIndex = aTrackIndex;
+    
+    iInfo = CAudClipInfo::NewL(aFileHandle, aObserver);
+    
+    }
+
+
+CAudClip::~CAudClip() 
+    {
+
+    Reset(EFalse);
+    if (iInfo != 0)
+        {
+        delete iInfo;
+        iInfo = 0;
+        }
+    
+    }
+