mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayControllerMeta.cpp
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/advancedaudiocontroller/audiocontrollerpluginsvariant/AdvancedAudioController/Src/AdvancedAudioPlayControllerMeta.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,201 @@
+/*
+* 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:  This file contains the base class from which specific audio
+*                play controllers are derived. This class encapsulates common
+*                behavior for all audio play controllers.
+*
+*/
+
+
+// INCLUDE FILES
+#include "AdvancedAudioPlayController.h"
+#include "AdvancedAudioResource.h"
+#include <AudioOutput.h>
+#include <MetaDataFieldContainer.h>
+#include <MetaDataUtility.h>
+#include <mmfformatimplementationuids.hrh>
+#include <mmfmeta.h>
+#include <MultimediaDataSourceEvents.h>
+#include <MultimediaDataSourceFactory.h>
+#include <oma2dcf.h>
+
+// CONSTANTS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::GetNumberOfMetaDataEntriesL
+// Returns the number of metadata entries found in source, if supported.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CAdvancedAudioPlayController::GetNumberOfMetaDataEntriesL(
+	TInt& aNumberOfEntries)
+    {
+#ifdef _DEBUG
+	RDebug::Print(_L("CAdvancedAudioPlayController::GetNumberOfMetaDataEntriesL"));
+#endif
+
+	if (!iMetaDataSupport)
+		{
+		User::Leave(KErrNotSupported);
+		}
+
+    if (!iMetaDataRead)
+        {
+		if (!iDataSource)
+			{
+			User::Leave(KErrNotReady);
+			}
+
+        CMetaDataUtility* metaDataUtility = CMetaDataUtility::NewL();
+        CleanupStack::PushL(metaDataUtility);
+
+		RArray<TMetaDataFieldId> wantedFields;
+		CleanupClosePushL(wantedFields);
+		wantedFields.Append(EMetaDataSongTitle);
+		wantedFields.Append(EMetaDataArtist);
+		wantedFields.Append(EMetaDataAlbum);
+		wantedFields.Append(EMetaDataYear);
+		wantedFields.Append(EMetaDataComment);
+		wantedFields.Append(EMetaDataAlbumTrack);
+		wantedFields.Append(EMetaDataGenre);
+		wantedFields.Append(EMetaDataComposer);
+		wantedFields.Append(EMetaDataCopyright);
+		wantedFields.Append(EMetaDataOriginalArtist);
+		wantedFields.Append(EMetaDataUrl);
+		wantedFields.Append(EMetaDataJpeg);
+		wantedFields.Append(EMetaDataUserUrl);
+
+		if (iSourceType == KUidMmfFileSource ||
+			 iSourceType == TUid::Uid(0x10207A7C)	) // progressive download
+			{
+			CMMFFile* file = static_cast<CMMFFile*>(iDataSource);
+       	    file->SourcePrimeL();
+			metaDataUtility->OpenFileL(file->FileL(), wantedFields);
+			}
+		else if(iSourceType == KUidMmfDescriptorSource)
+			{
+			CMMFClip* clip = static_cast<CMMFClip*>(iDataSource);
+            CMMFDataBuffer* buf = CreateSourceBufferOfSizeLC(clip->Size());
+            clip->SourcePrimeL();
+            clip->ReadBufferL(buf, 0);
+			metaDataUtility->OpenDesL(buf->Data(), wantedFields);
+			CleanupStack::PopAndDestroy(buf);	// buf
+			}
+		else
+			{
+			CleanupStack::PopAndDestroy(&wantedFields);
+			CleanupStack::PopAndDestroy(metaDataUtility);
+			User::Leave(KErrNotSupported);
+			}
+
+        TInt count = metaDataUtility->MetaDataCount();
+
+        if (count > 0)
+			{
+			const CMetaDataFieldContainer& container = metaDataUtility->MetaDataFieldsL();
+			TMetaDataFieldId id;
+			for (TInt i = 0; i < count; i++)
+				{
+				TPtrC content = container.At(i, id);
+				CMMFMetaDataEntry* metaData = NULL;
+				switch (id)
+					{
+					case EMetaDataSongTitle:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntrySongTitle, content);
+						break;
+					case EMetaDataArtist:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryArtist, content);
+						break;
+					case EMetaDataAlbum:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryAlbum, content);
+						break;
+					case EMetaDataYear:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryYear, content);
+						break;
+					case EMetaDataComment:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryComment, content);
+						break;
+					case EMetaDataAlbumTrack:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryAlbumTrack, content);
+						break;
+					case EMetaDataGenre:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryGenre, content);
+						break;
+					case EMetaDataComposer:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryComposer, content);
+						break;
+					case EMetaDataCopyright:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryCopyright, content);
+						break;
+					case EMetaDataOriginalArtist:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryOriginalArtist, content);
+						break;
+					case EMetaDataUrl:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryWOAF, content);
+						break;
+					case EMetaDataJpeg:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryAPIC, content);
+						break;
+					case EMetaDataUserUrl:
+						metaData = CMMFMetaDataEntry::NewL(KMMFMetaEntryWXXX, content);
+						break;
+					default:	// Should never get here really...
+						break;
+					}
+				if (metaData)
+					{
+					CleanupStack::PushL(metaData);
+					User::LeaveIfError(iMetaDataEntries.Append(metaData));
+					CleanupStack::Pop(metaData);	// metaData
+					}
+				}
+			}
+		iMetaDataRead = ETrue;
+		CleanupStack::PopAndDestroy(&wantedFields);	// wantedFields
+		CleanupStack::PopAndDestroy(metaDataUtility);	//metaDataUtility
+		}
+
+    aNumberOfEntries = iMetaDataEntries.Count();
+    }
+
+// -----------------------------------------------------------------------------
+// CAdvancedAudioPlayController::GetMetaDataEntryL
+// Returns the metadata in the specified index.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMMFMetaDataEntry* CAdvancedAudioPlayController::GetMetaDataEntryL(
+	TInt aIndex)
+    {
+#ifdef _DEBUG
+	RDebug::Print(_L("CAdvancedAudioPlayController::GetMetaDataEntryL [%d]"), aIndex);
+#endif
+
+	if (!iMetaDataSupport)
+		{
+		User::Leave(KErrNotSupported);
+		}
+
+    if (aIndex > iMetaDataEntries.Count() - 1)
+    	{
+        User::Leave(KErrArgument);
+		}
+
+    return CMMFMetaDataEntry::NewL(*iMetaDataEntries[aIndex]);
+    }
+    
+// End of file