mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/amraudioplaycontroller/Src/AMRAudioPlayControllerPlugin.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/amraudioplaycontroller/Src/AMRAudioPlayControllerPlugin.cpp Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+*
+* Description: Play controller for AMR audio formats.
+*
+*/
+
+
+// INCLUDES
+#include "AMRAudioPlayControllerPlugin.h"
+#include "AMRAudioPlayControllerPlugin.hrh"
+#include "AMRAudioControllerUtility.h"
+#include "AMRAudioPlayControllerDecoderBuilder.h"
+#include "AMRAudioPlayControllerResource.h"
+#include "DevSoundAudioOutput.h"
+#include "FileAudioOutput.h"
+#include "DebugMacros.h"
+#include <mmfformatimplementationuids.hrh>
+
+// CONSTANTS
+//const TInt KAapBufferSize = 8*1024;
+const TUint KMonoChannel = 1;
+const TUint KStereoChannel = 2;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CAMRAudioPlayControllerPlugin::CAMRAudioPlayControllerPlugin
+// -----------------------------------------------------------------------------
+//
+CAMRAudioPlayControllerPlugin::CAMRAudioPlayControllerPlugin()
+ : iDecoderBuilder(NULL)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CAMRAudioPlayControllerPlugin::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CAMRAudioPlayControllerPlugin::ConstructL()
+ {
+ CAdvancedAudioPlayController::ConstructL();
+
+ iAudioResource = CAMRAudioPlayControllerResource::NewL();
+ TAapProperties aapProperties = iAudioResource->PropertiesL();
+ iSharedBufferMaxNum = aapProperties.iSharedBufferMaxNum;
+ iSharedBufferMaxSize = aapProperties.iSharedBufferMaxSize;
+ iMetaDataSupport = aapProperties.iMetaDataSupport;
+
+ iAudioUtility = CAMRAudioControllerUtility::NewL();
+ iDecoderBuilder = CAMRAudioPlayControllerDecoderBuilder::NewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CAMRAudioPlayControllerPlugin::NewL
+// -----------------------------------------------------------------------------
+//
+CAMRAudioPlayControllerPlugin* CAMRAudioPlayControllerPlugin::NewL()
+ {
+ DP0(_L("CAMRAudioPlayControllerPlugin::NewL"));
+ CAMRAudioPlayControllerPlugin* self = new(ELeave) CAMRAudioPlayControllerPlugin;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// Destructor
+CAMRAudioPlayControllerPlugin::~CAMRAudioPlayControllerPlugin()
+ {
+ DP0(_L("CAMRAudioPlayControllerPlugin::~CAMRAudioPlayControllerPlugin"));
+ if (iIsDRMProtected)
+ {
+ delete iDataSource;
+ }
+
+ if ((iState != EStopped) && (iState != EInitialized) && iAudioOutput)
+ {
+ TRAPD(err, iAudioOutput->StopL());
+ err = err;
+ }
+
+ delete iDecoderBuilder;
+ delete iAudioUtility;
+ delete iAudioResource;
+ delete iAudioOutput;
+ }
+
+// -----------------------------------------------------------------------------
+// CAMRAudioPlayControllerPlugin::DoAddDataSourceL
+// Initialization of Clip properties. We build a table needed for positioning.
+// -----------------------------------------------------------------------------
+//
+void CAMRAudioPlayControllerPlugin::DoAddDataSourceL()
+ {
+ DP0(_L("CAMRAudioPlayControllerPlugin::DoAddDataSourceL"));
+ }
+
+// -----------------------------------------------------------------------------
+// CAMRAudioPlayControllerPlugin::DoAddDataSinkL
+// -----------------------------------------------------------------------------
+//
+void CAMRAudioPlayControllerPlugin::DoAddDataSinkL()
+ {
+ DP0(_L("CAMRAudioPlayControllerPlugin::DoAddDataSinkL"));
+ if (iDataSink->DataSinkType() == KUidMmfAudioOutput)
+ {
+ iAudioOutput = CDevSoundAudioOutput::NewL(iPrioritySettings, *this, *iMMFDevSound);
+ iDecoderType = KAMRDecoder;
+ }
+ else if (iDataSink->DataSinkType() == KUidMmfFileSink)
+ {
+ iAudioOutput = CFileAudioOutput::NewL(*iDataSink, iPrioritySettings, *this);
+ iDecoderType = KAMRConverter;
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CAMRAudioPlayControllerPlugin::DoReadHeaderL
+// -----------------------------------------------------------------------------
+//
+void CAMRAudioPlayControllerPlugin::DoReadHeaderL(CMMFDataBuffer* aBuffer)
+ {
+ DP0(_L("CAMRAudioPlayControllerPlugin::DoReadHeaderL"));
+ // While parsing past header or id3 data, ScanHeaderL will leave with KErrNotReady.
+ // ScanHeaderL will leave if the util still wants more data for averaging
+ // by returning KErrCompletion.
+ // We need to trap so that we can save the config info and then
+ // do the leave below.
+ TRAPD(err, iAudioUtility->ScanHeaderL(aBuffer));
+
+ if(err != KErrNotReady)
+ {
+ iHeaderOffset = iAudioUtility->HeaderOffset();
+ iSyncOffset = iAudioUtility->SyncOffset();
+ iSampleRate = iAudioUtility->SampleRate();
+ iSinkSampleRate = iSampleRate; // Default same as source
+ // iBitRate = iAudioUtility->BitRate();
+ iChannels = iAudioUtility->Channels();
+ // iSinkNumChannels = iChannels; // Default same as source
+ // iDuration = iAudioUtility->ScanDuration();
+ iDataType = TFourCC(' ','A','M','R');
+ iSourceFormat = TUid::Uid(KAdvancedUidFormatAMRRead); // what is this for ???
+
+ if (!(iChannels == KMonoChannel || iChannels == KStereoChannel))
+ {
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+ User::LeaveIfError(err);
+
+// iCurrentPosition = iHeaderOffset;
+// iReadHeader = EFalse;
+
+ }
+
+CAdvancedAudioDecoder* CAMRAudioPlayControllerPlugin::BuildDecoderL()
+ {
+ return iDecoderBuilder->BuildDecoderL(iDecoderType);
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// Exported proxy for instantiation method resolution
+// Define the interface UIDs
+const TImplementationProxy ImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(KUIDAMRPlayControllerPluginImplementation, CAMRAudioPlayControllerPlugin::NewL)
+ };
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
+ TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+ }
+
+// End of file