videoeditorengine/vedengine/src/VedAudioClipInfoImp.cpp
changeset 0 951a5db380a0
--- /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 <e32svr.h>
+#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);
+    }
+