--- a/videoeditorengine/vedengine/src/VedVideoClip.cpp Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,523 +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 "VedVideoClip.h"
-#include "VedMovieImp.h"
-#include "VedVideoClipInfoGeneratedImp.h"
-#include "VedVideoClipInfoImp.h"
-#include "AudClip.h"
-#include "AudObservers.h"
-
-CVedVideoClip* CVedVideoClip::NewL(CVedMovieImp* aMovie, const TDesC& aFileName,
- TInt aIndex, CAudClip* aAudioClip,
- MVedVideoClipInfoObserver& aObserver)
- {
- CVedVideoClip* self = new (ELeave) CVedVideoClip(aMovie, aAudioClip);
- CleanupStack::PushL(self);
- self->ConstructL(aFileName, aIndex, aObserver);
- CleanupStack::Pop(self);
- return self;
- }
-
-
-CVedVideoClip* CVedVideoClip::NewL(CVedMovieImp* aMovie, CVedVideoClipGenerator& aGenerator,
- TInt aIndex, MVedVideoClipInfoObserver& aObserver, TBool aIsOwnedByVideoClip)
- {
- CVedVideoClip* self = new (ELeave) CVedVideoClip(aMovie, NULL /*CAudClip*/);
- CleanupStack::PushL(self);
- self->ConstructL(aGenerator, aIndex, aObserver, aIsOwnedByVideoClip);
- CleanupStack::Pop(self);
- return self;
- }
-
-CVedVideoClip* CVedVideoClip::NewL(CVedMovieImp* aMovie, RFile* aFileHandle,
- TInt aIndex, CAudClip* aAudioClip,
- MVedVideoClipInfoObserver& aObserver)
- {
- CVedVideoClip* self = new (ELeave) CVedVideoClip(aMovie, aAudioClip);
- CleanupStack::PushL(self);
- self->ConstructL(aFileHandle, aIndex, aObserver);
- CleanupStack::Pop(self);
- return self;
- }
-
-
-CVedVideoClip::CVedVideoClip(CVedMovieImp* aMovie, CAudClip* aAudioClip)
- : iMovie(aMovie), iSpeed(KVedNormalSpeed), iColorEffect(EVedColorEffectNone),
- iCutInTime(0), iAudClip(aAudioClip)
- {
- }
-
-
-void CVedVideoClip::ConstructL(const TDesC& aFileName, TInt aIndex,
- MVedVideoClipInfoObserver& aObserver)
- {
- __ASSERT_ALWAYS(aIndex >= 0,
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex));
- __ASSERT_ALWAYS(aIndex <= iMovie->VideoClipCount(),
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex));
- iIndex = aIndex;
-
- if (iMovie->iFs) // lock file against writing
- {
-
- TInt error = iLockFile.Open(*iMovie->iFs, aFileName, EFileShareReadersOnly | EFileStream | EFileRead);
-
- if (error != KErrNone)
- {
- User::LeaveIfError(iLockFile.Open(*iMovie->iFs, aFileName,
- EFileShareAny | EFileStream | EFileRead));
- }
- iLockFileOpened = ETrue;
- }
-
- if (iAudClip)
- {
- iInfo = CVedVideoClipInfoImp::NewL(iAudClip->Info(), aFileName, aObserver);
- }
- else
- {
- iInfo = CVedVideoClipInfoImp::NewL(NULL, aFileName, aObserver);
- }
- }
-
-
-void CVedVideoClip::ConstructL(CVedVideoClipGenerator& aGenerator, TInt aIndex,
- MVedVideoClipInfoObserver& aObserver, TBool aIsOwnedByVideoClip)
- {
- __ASSERT_ALWAYS(aIndex >= 0,
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex));
- __ASSERT_ALWAYS(aIndex <= iMovie->VideoClipCount(),
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex));
- iIndex = aIndex;
-
- iInfo = new (ELeave) CVedVideoClipInfoGeneratedImp(aGenerator, aIsOwnedByVideoClip);
- ((CVedVideoClipInfoGeneratedImp*) iInfo)->ConstructL(aObserver);
- }
-
-
-void CVedVideoClip::ConstructL(RFile* aFileHandle, TInt aIndex,
- MVedVideoClipInfoObserver& aObserver)
- {
- __ASSERT_ALWAYS(aIndex >= 0,
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex));
- __ASSERT_ALWAYS(aIndex <= iMovie->VideoClipCount(),
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex));
- iIndex = aIndex;
-
- if (iAudClip)
- {
- iInfo = CVedVideoClipInfoImp::NewL(iAudClip->Info(), aFileHandle, aObserver);
- }
- else
- {
- iInfo = CVedVideoClipInfoImp::NewL(NULL, aFileHandle, aObserver);
- }
- }
-
-
-CVedVideoClip::~CVedVideoClip()
- {
- delete iInfo;
-
- if (iLockFileOpened)
- iLockFile.Close();
-
- }
-
-
-void CVedVideoClip::SetIndex(TInt aIndex)
- {
- __ASSERT_ALWAYS(aIndex >= 0,
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex));
- __ASSERT_ALWAYS(aIndex < iMovie->VideoClipCount(),
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex));
-
- if (aIndex != iIndex)
- {
- TInt oldIndex = iIndex;
- iIndex = aIndex;
-
- iMovie->iVideoClipArray.Remove(oldIndex);
- TInt err = iMovie->iVideoClipArray.Insert(this, iIndex);
- __ASSERT_DEBUG(err == KErrNone,
- TVedPanic::Panic(TVedPanic::EInternal));
-
- if (oldIndex < iIndex)
- {
- CVedVideoClip* clip = iMovie->iVideoClipArray[oldIndex];
- clip->iIndex = oldIndex;
- iMovie->RecalculateVideoClipTimings(clip);
- }
- else
- {
- iMovie->RecalculateVideoClipTimings(this);
- }
-
- iMovie->FireVideoClipIndicesChanged(iMovie, oldIndex, iIndex);
- }
- }
-
-
-void CVedVideoClip::SetSpeed(TInt aSpeed)
- {
- __ASSERT_ALWAYS((aSpeed >= KVedMinSpeed) && (aSpeed <= KVedMaxSpeed),
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalSpeed));
-
- if (aSpeed != KVedNormalSpeed )
- {
- // slow motion, mute the audio track
- if (iAudClip)
- {
- iAudClip->SetMuting(ETrue);
- iMovie->FireVideoClipAudioSettingsChanged(iMovie, this);
- }
- }
- else
- {
- // normal speed
- if ( !iUserMuted )
- {
- // unmute the audio track unless user has muted the clip
- if (iAudClip)
- {
- iAudClip->SetMuting(EFalse);
- iMovie->FireVideoClipAudioSettingsChanged(iMovie, this);
- }
- }
- }
-
- if (aSpeed != iSpeed)
- {
- iSpeed = aSpeed;
- iMovie->RecalculateVideoClipTimings(this);
- iMovie->FireVideoClipTimingsChanged(iMovie, this);
- }
- }
-
-
-void CVedVideoClip::SetColorEffect(TVedColorEffect aColorEffect)
- {
- __ASSERT_ALWAYS((aColorEffect >= EVedColorEffectNone)
- && (aColorEffect < EVedColorEffectLast),
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalColorEffect));
-
- if (aColorEffect != iColorEffect)
- {
- iColorEffect = aColorEffect;
- iMovie->FireVideoClipColorEffectChanged(iMovie, this);
- }
- }
-
-TRgb CVedVideoClip::ColorTone() const
- {
- return iColorTone;
- }
-
-void CVedVideoClip::SetColorTone(TRgb aColorTone)
- {
- if (aColorTone != iColorTone)
- {
- // any checks needed?
- iColorTone = aColorTone;
- // reuses the observer callback from color effect, since essentially it is about the same thing
- iMovie->FireVideoClipColorEffectChanged(iMovie, this);
- }
- }
-
-void CVedVideoClip::SetMuted(TBool aMuted)
- {
- if (!iAudClip)
- {
- return;
- }
- iUserMuted = aMuted; // store the mute-value (true/false) to be able to differentiate user and automatic mute
- iAudClip->SetMuting(aMuted);
- iMovie->FireVideoClipAudioSettingsChanged(iMovie, this);
- }
-
-TInt CVedVideoClip::InsertDynamicLevelMarkL(const TVedDynamicLevelMark& aMark)
- {
- __ASSERT_ALWAYS(aMark.iTime.Int64() >= 0,
- TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMark));
- __ASSERT_ALWAYS(aMark.iTime.Int64() <= CutOutTime().Int64(),
- TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMark));
-
- if ( iAudClip )
- {
- return iAudClip->InsertDynamicLevelMarkL(TAudDynamicLevelMark(aMark.iTime, aMark.iLevel));
- }
- else
- {
- User::Leave(KErrNotFound);
- return -1;//to make compiler happy
- }
- }
-
-TBool CVedVideoClip::RemoveDynamicLevelMark(TInt aIndex)
- {
- __ASSERT_ALWAYS(aIndex >= 0,
- TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex));
- __ASSERT_ALWAYS(aIndex < DynamicLevelMarkCount(),
- TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex));
- if ( iAudClip )
- {
- return iAudClip->RemoveDynamicLevelMark(aIndex);
- }
- else
- {
- return EFalse;
- }
- }
-
-TVedDynamicLevelMark CVedVideoClip::DynamicLevelMark(TInt aIndex) const
- {
- __ASSERT_ALWAYS(aIndex >= 0,
- TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex));
- __ASSERT_ALWAYS(aIndex < DynamicLevelMarkCount(),
- TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex));
-
- if ( iAudClip )
- {
- TAudDynamicLevelMark mark = iAudClip->DynamicLevelMark(aIndex);
- return TVedDynamicLevelMark(mark.iTime, mark.iLevel);
- }
- else
- {
- return TVedDynamicLevelMark(TTimeIntervalMicroSeconds(0), 0);
- }
- }
-
-TInt CVedVideoClip::DynamicLevelMarkCount() const
- {
- if ( iAudClip )
- {
- return iAudClip->DynamicLevelMarkCount();
- }
- else
- {
- return 0;
- }
- }
-
-void CVedVideoClip::SetVolumeGain(TInt aVolumeGain)
- {
- if ( iAudClip )
- {
- iAudClip->SetVolumeGain(aVolumeGain);
- }
- }
-
-TInt CVedVideoClip::GetVolumeGain()
- {
- if ( iAudClip )
- {
- return iAudClip->GetVolumeGain();
- }
- else
- {
- return 0;
- }
- }
-
-
-void CVedVideoClip::SetCutInTime(TTimeIntervalMicroSeconds aCutInTime)
- {
- __ASSERT_ALWAYS(aCutInTime >= TTimeIntervalMicroSeconds(0),
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalCutInTime));
- __ASSERT_ALWAYS(aCutInTime <= iCutOutTime,
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalCutInTime));
- __ASSERT_ALWAYS(iInfo->Class() == EVedVideoClipClassFile,
- TVedPanic::Panic(TVedPanic::EVideoClipNoFileAssociated));
-
- if (aCutInTime != iCutInTime)
- {
- iCutInTime = aCutInTime;
- iMovie->RecalculateVideoClipTimings(this);
- iMovie->FireVideoClipTimingsChanged(iMovie, this);
- }
- }
-
-
-void CVedVideoClip::SetCutOutTime(TTimeIntervalMicroSeconds aCutOutTime)
- {
- __ASSERT_ALWAYS(aCutOutTime >= iCutInTime,
- TVedPanic::Panic(TVedPanic::EVideoClipIllegalCutOutTime));
- __ASSERT_ALWAYS(iInfo->Class() == EVedVideoClipClassFile,
- TVedPanic::Panic(TVedPanic::EVideoClipNoFileAssociated));
-
- if ( aCutOutTime > iInfo->Duration() )
- {
- aCutOutTime = iInfo->Duration();
- }
-
- if (aCutOutTime != iCutOutTime)
- {
- iCutOutTime = aCutOutTime;
- iMovie->RecalculateVideoClipTimings(this);
- iMovie->FireVideoClipTimingsChanged(iMovie, this);
- }
- }
-
-void CVedVideoClip::UpdateAudioClip()
- {
- if (!iAudClip)
- {
- return;
- }
- iAudClip->SetStartTime(iStartTime);
- iAudClip->SetCutInTime(iCutInTime);
- iAudClip->SetCutOutTime(iCutOutTime);
- }
-
-
-
-CVedVideoClipInfo* CVedVideoClip::Info()
- {
- return iInfo;
- }
-
-
-TBool CVedVideoClip::EditedHasAudio() const
- {
- TInt speed = Speed();
- TBool isMuted = IsMuted();
- TBool hasAudio = iInfo->HasAudio();
- TBool ret = hasAudio && (speed == KVedNormalSpeed);
- ret = ret && !isMuted;
- return ret;
- }
-
-
-CVedMovieImp* CVedVideoClip::Movie()
- {
- return iMovie;
- }
-
-
-TInt CVedVideoClip::Index() const
- {
- return iIndex;
- }
-
-
-TInt CVedVideoClip::Speed() const
- {
- return iSpeed;
- }
-
-
-TVedColorEffect CVedVideoClip::ColorEffect() const
- {
- return iColorEffect;
- }
-
-
-TBool CVedVideoClip::IsMuteable() const
- {
- return (iInfo->HasAudio() && (Speed() == KVedNormalSpeed));
- }
-
-
-TBool CVedVideoClip::Muting() const
- {
- if (!iAudClip)
- {
- return ETrue;
- }
- return iAudClip->Muting();
- }
-
-TBool CVedVideoClip::IsMuted() const
- {
- if (!iAudClip)
- {
- return ETrue;
- }
- if ( iUserMuted )
- {
- return ETrue;
- }
- else
- {
- // automatic mute due to slow motion is not informed to client as muted
- // since it can cause some conflicts
- return EFalse;
- }
- }
-
-void CVedVideoClip::SetNormalizing(TBool aNormalizing)
- {
- if (iAudClip)
- {
- iAudClip->SetNormalizing(aNormalizing);
- }
- }
-
-TBool CVedVideoClip::Normalizing() const
- {
- return (iAudClip && iAudClip->Normalizing());
- }
-
-TTimeIntervalMicroSeconds CVedVideoClip::CutInTime() const
- {
- if (iInfo->Class() == EVedVideoClipClassFile)
- {
- return iCutInTime;
- }
- else
- {
- return TTimeIntervalMicroSeconds(0);
- }
- }
-
-
-TTimeIntervalMicroSeconds CVedVideoClip::CutOutTime() const
- {
- if (iInfo->Class() == EVedVideoClipClassFile)
- {
- return iCutOutTime;
- }
- else
- {
- return iInfo->Duration();
- }
- }
-
-
-TTimeIntervalMicroSeconds CVedVideoClip::StartTime() const
- {
- return iStartTime;
- }
-
-
-TTimeIntervalMicroSeconds CVedVideoClip::EndTime() const
- {
- return TTimeIntervalMicroSeconds(iStartTime.Int64() + EditedDuration().Int64());
- }
-
-
-TTimeIntervalMicroSeconds CVedVideoClip::EditedDuration() const
- {
- TInt64 editedDuration = CutOutTime().Int64() - CutInTime().Int64();
- return TTimeIntervalMicroSeconds((TInt64(1000) * editedDuration) / TInt64(Speed()));
- }
-