diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedengine/src/VedAudioClipInfoImp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/vedengine/src/VedAudioClipInfoImp.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,598 @@ +/* +* 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 "VedAudioClipInfoImp.h" +#include "AudClip.h" +#include "AudClipInfo.h" + +#include "movieprocessor.h" + +// Print macro +#ifdef _DEBUG +#include +#define PRINT(x) RDebug::Print x +#else +#define PRINT(x) +#endif + + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfo::NewL +// Constructs a new CVedAudioClipInfo object +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVedAudioClipInfo* CVedAudioClipInfo::NewL(const TDesC& aFileName, + MVedAudioClipInfoObserver& aObserver) + { + CVedAudioClipInfoImp* self = (CVedAudioClipInfoImp*)NewLC(aFileName, aObserver); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CVedAudioClipInfo* CVedAudioClipInfo::NewL(RFile* aFileHandle, + MVedAudioClipInfoObserver& aObserver) + { + CVedAudioClipInfoImp* self = (CVedAudioClipInfoImp*)NewLC(aFileHandle, aObserver); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfo::NewLC +// Constructs a new CVedAudioClipInfo object, leaves it to cleanupstack +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +EXPORT_C CVedAudioClipInfo* CVedAudioClipInfo::NewLC(const TDesC& aFileName, + MVedAudioClipInfoObserver& aObserver) + { + CVedAudioClipInfoImp* self = new (ELeave) CVedAudioClipInfoImp(); + CleanupStack::PushL(self); + self->ConstructL(aFileName, aObserver); + return self; + } + +EXPORT_C CVedAudioClipInfo* CVedAudioClipInfo::NewLC(RFile* aFileHandle, + MVedAudioClipInfoObserver& aObserver) + { + CVedAudioClipInfoImp* self = new (ELeave) CVedAudioClipInfoImp(); + CleanupStack::PushL(self); + self->ConstructL(aFileHandle, aObserver); + return self; + } + + +CVedAudioClipInfoImp* CVedAudioClipInfoImp::NewL(CAudClip* aAudClip, + MVedAudioClipInfoObserver& aObserver) + { + CVedAudioClipInfoImp* self = (CVedAudioClipInfoImp*)NewLC(aAudClip, aObserver); + CleanupStack::Pop(self); + return self; + } + + +CVedAudioClipInfoImp* CVedAudioClipInfoImp::NewLC(CAudClip* aAudClip, + MVedAudioClipInfoObserver& aObserver) + { + CVedAudioClipInfoImp* self = new (ELeave) CVedAudioClipInfoImp(); + CleanupStack::PushL(self); + self->ConstructL(aAudClip, aObserver); + return self; + } + + +// ----------------------------------------------------------------------------- + + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfo::CVedAudioClipInfoImp +// Constuctor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVedAudioClipInfoImp::CVedAudioClipInfoImp() + : iReady(EFalse) + { + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::ConstructL +// Symbian two phased constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + +void CVedAudioClipInfoImp::ConstructL(CAudClip* aAudClip, + MVedAudioClipInfoObserver& aObserver) + { + PRINT(_L("CVedAudioClipInfoImp::ConstructL in")); + iAudClip = aAudClip; + iAudClipInfo = iAudClip->Info(); + iAudioProperties = iAudClipInfo->Properties(); + iReady = ETrue; + iObserver = &aObserver; + iOperation = CVedAudioClipInfoOperation::NewL(this, aObserver); + PRINT(_L("CVedAudioClipInfoImp::ConstructL out")); + } + +void CVedAudioClipInfoImp::ConstructL(const TDesC& aFileName, + MVedAudioClipInfoObserver& aObserver) + { + + PRINT(_L("CVedAudioClipInfoImp::ConstructL in")); + iReady = EFalse; + iAudClipInfo = CAudClipInfo::NewL(aFileName, *this); + + iObserver = &aObserver; + PRINT(_L("CVedAudioClipInfoImp::ConstructL out")); + } + +void CVedAudioClipInfoImp::ConstructL(RFile* aFileHandle, + MVedAudioClipInfoObserver& aObserver) + { + + PRINT(_L("CVedAudioClipInfoImp::ConstructL in")); + iReady = EFalse; + iAudClipInfo = CAudClipInfo::NewL(aFileHandle, *this); + + iObserver = &aObserver; + PRINT(_L("CVedAudioClipInfoImp::ConstructL out")); + } + + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::~CVedAudioClipInfoImp +// Destroys the object and releases all resources. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVedAudioClipInfoImp::~CVedAudioClipInfoImp() + { + + if (iAudClipInfo != 0 && !iAudClip) + { + delete iAudClipInfo; + } + + delete iOperation; + REComSession::FinalClose(); + } + + +void CVedAudioClipInfoImp::NotifyClipInfoReady(CAudClipInfo& aInfo, TInt aError) + { + if (aError == KErrNone) + { + iAudioProperties = aInfo.Properties(); + iReady = ETrue; + } + + iObserver->NotifyAudioClipInfoReady(*this, aError); + } + + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::ChannelMode +// Returns the channel mode of the audio if applicable. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TVedAudioChannelMode CVedAudioClipInfoImp::ChannelMode() const + { + + __ASSERT_ALWAYS(iReady, TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + TVedAudioChannelMode vedChannelMode = EVedAudioChannelModeUnrecognized; + if (iAudioProperties.iChannelMode == EAudStereo) + { + vedChannelMode = EVedAudioChannelModeStereo; + } + else if (iAudioProperties.iChannelMode == EAudSingleChannel) + { + vedChannelMode = EVedAudioChannelModeSingleChannel; + } + else if (iAudioProperties.iChannelMode == EAudDualChannel) + { + vedChannelMode = EVedAudioChannelModeDualChannel; + } + + return vedChannelMode; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::SamplingRate +// Returns the sampling rate in hertz. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CVedAudioClipInfoImp::SamplingRate() const + { + + __ASSERT_ALWAYS(iReady, TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + return iAudioProperties.iSamplingRate; + + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::Format +// Returns the audio format +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TVedAudioFormat CVedAudioClipInfoImp::Format() const + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + TVedAudioFormat vedAudioFormat = EVedAudioFormatUnrecognized; + + switch(iAudioProperties.iFileFormat) + { + case EAudFormat3GPP: + vedAudioFormat = EVedAudioFormat3GPP; + break; + case EAudFormatMP4: + vedAudioFormat = EVedAudioFormatMP4; + break; + case EAudFormatAMR: + vedAudioFormat = EVedAudioFormatAMR; + break; + case EAudFormatAMRWB: + vedAudioFormat = EVedAudioFormatAMRWB; + break; + case EAudFormatMP3: + vedAudioFormat = EVedAudioFormatMP3; + break; + case EAudFormatAAC_ADIF: + vedAudioFormat = EVedAudioFormatAAC_ADIF; + break; + case EAudFormatAAC_ADTS: + vedAudioFormat = EVedAudioFormatAAC_ADTS; + break; + case EAudFormatWAV: + vedAudioFormat = EVedAudioFormatWAV; + break; + default: + TVedPanic::Panic(TVedPanic::EInternal); + } + + return vedAudioFormat; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::BitrateMode +// Returns the bitrate mode +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TVedBitrateMode CVedAudioClipInfoImp::BitrateMode() const + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + TVedBitrateMode vedBitrateMode = EVedBitrateModeUnrecognized; + switch(iAudioProperties.iBitrateMode) + { + case EAudConstant: + vedBitrateMode = EVedBitrateModeConstant; + break; + case EAudVariable: + vedBitrateMode = EVedBitrateModeVariable; + break; + default: + TVedPanic::Panic(TVedPanic::EInternal); + } + return vedBitrateMode; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::Bitrate +// Returns the bitrate +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CVedAudioClipInfoImp::Bitrate() const + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + return iAudioProperties.iBitrate; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::GetVisualizationL +// Generates a visualization of the audio clip +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVedAudioClipInfoImp::GetVisualizationL(MVedAudioClipVisualizationObserver& aObserver, TInt aResolution, TInt aPriority) + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + iVisualizationObserver = &aObserver; + iAudClipInfo->GetVisualizationL(*this, aResolution, aPriority); + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::CancelVisualizationL +// Cancels visualization generation +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVedAudioClipInfoImp::CancelVisualizationL() + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + iAudClipInfo->CancelVisualization(); + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::NotifyClipInfoVisualizationCompleted +// Callback for visualization complete +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVedAudioClipInfoImp::NotifyClipInfoVisualizationCompleted(const CAudClipInfo& /*aClipInfo*/, TInt aError, TInt8* aVisualization, TInt aSize) + { + iVisualizationObserver->NotifyAudioClipVisualizationCompleted(*this, aError, aVisualization, aSize); + iVisualizationObserver = 0; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::NotifyClipInfoVisualizationStarted +// Callback for visualization started +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVedAudioClipInfoImp::NotifyClipInfoVisualizationStarted(const CAudClipInfo& /*aClipInfo*/, TInt aError) + { + if (aError != KErrNone) + { + iVisualizationObserver->NotifyAudioClipVisualizationCompleted(*this, aError, NULL, 0); + iVisualizationObserver = 0; + } + else + { + iVisualizationObserver->NotifyAudioClipVisualizationStarted(*this); + } + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::NotifyClipInfoVisualizationProgressed +// Callback for visualization progress +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVedAudioClipInfoImp::NotifyClipInfoVisualizationProgressed(const CAudClipInfo& /*aClipInfo*/, TInt aPercentage) + { + iVisualizationObserver->NotifyAudioClipVisualizationProgressed(*this, aPercentage); + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp:: +// Returns the audio clip filename +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TPtrC CVedAudioClipInfoImp::FileName() const + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + return iAudClipInfo->FileName(); + + } + +RFile* CVedAudioClipInfoImp::FileHandle() const + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + return iAudClipInfo->FileHandle(); + + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::Type +// Returns the audio type +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TVedAudioType CVedAudioClipInfoImp::Type() const + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + TVedAudioType vedAudioType = EVedAudioTypeUnrecognized; + + if (iAudioProperties.iAudioType == EAudAMR) + { + vedAudioType = EVedAudioTypeAMR; + } + else if (iAudioProperties.iAudioType == EAudAMRWB) + { + vedAudioType = EVedAudioTypeAMRWB; + } + else if (iAudioProperties.iAudioType == EAudMP3) + { + vedAudioType = EVedAudioTypeMP3; + } + else if (iAudioProperties.iAudioType == EAudAAC_MPEG2 || iAudioProperties.iAudioType == EAudAAC_MPEG4 ) + { + vedAudioType = EVedAudioTypeAAC_LC; + } + else if (iAudioProperties.iAudioType == EAudWAV) + { + vedAudioType = EVedAudioTypeWAV; + } + + return vedAudioType; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::Duration +// Returns the audio clip duration +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TTimeIntervalMicroSeconds CVedAudioClipInfoImp::Duration() const + { + __ASSERT_ALWAYS(iReady, + TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); + + return iAudioProperties.iDuration; + } + + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoImp::Compare +// Compares two audio clip info classes +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CVedAudioClipInfoImp::Compare(const CVedAudioClipInfoImp& c1, + const CVedAudioClipInfoImp& c2) + { + + + if (c1.iAudClip == 0 || c2.iAudClip == 0) + { + return 0; + } + if (c1.iAudClip->StartTime() > c2.iAudClip->StartTime()) + { + return 1; + } + else if (c1.iAudClip->StartTime() < c2.iAudClip->StartTime()) + { + return -1; + } + else + { + return 0; + } + } + +////////////////////////////////////////////////////////////////////////// + + +// CVedAudioClipInfoOperation +// + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoOperation::NewL +// Constructs a new CVedAudioClipInfoOperation object. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVedAudioClipInfoOperation* CVedAudioClipInfoOperation::NewL(CVedAudioClipInfoImp* aInfo, + MVedAudioClipInfoObserver& aObserver) + { + CVedAudioClipInfoOperation* self = + new (ELeave) CVedAudioClipInfoOperation(aInfo, aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoOperation::CVedAudioClipInfoOperation +// Constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVedAudioClipInfoOperation::CVedAudioClipInfoOperation(CVedAudioClipInfoImp* aInfo, + MVedAudioClipInfoObserver& aObserver) + : CActive(EPriorityStandard), iObserver(aObserver), iInfo(aInfo) + + { + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoOperation::ConstructL +// Symbian two phased constructor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVedAudioClipInfoOperation::ConstructL() + { + PRINT(_L("CVedAudioClipInfoOperation::ConstructL in")); + + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + + PRINT(_L("CVedAudioClipInfoOperation::ConstructL out")); + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoOperation::~CVedAudioClipInfoOperation +// Destructor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CVedAudioClipInfoOperation::~CVedAudioClipInfoOperation() + { + Cancel(); + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoOperation::RunError +// Handle errors from RunL() +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CVedAudioClipInfoOperation::RunError( TInt aError ) + { + iObserver.NotifyAudioClipInfoReady(*iInfo, aError); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoOperation::RunL +// Active objects RunL function ran when request completes. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVedAudioClipInfoOperation::RunL() + { + PRINT(_L("CVedAudioClipInfoOperation::RunL in")); + + iObserver.NotifyAudioClipInfoReady(*iInfo, KErrNone); + + PRINT(_L("CVedAudioClipInfoOperation::RunL out")); + } + +// ----------------------------------------------------------------------------- +// CVedAudioClipInfoOperation::DoCancel +// Cancel ongoing request. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVedAudioClipInfoOperation::DoCancel() + { + iObserver.NotifyAudioClipInfoReady(*iInfo, KErrCancel); + } +