mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/amraudioplaycontroller/Src/AMRAudioPlayControllerPlugin.cpp
changeset 0 71ca22bcf22a
child 7 709f89d8c047
--- /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