mmdevicefw/mdf/src/codecapi/codecapiresolverdata.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmdevicefw/mdf/src/codecapi/codecapiresolverdata.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,295 @@
+// Copyright (c) 2005-2009 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:
+//
+
+#include <s32mem.h>
+#include <mdf/codecapiresolverdata.h>
+// The biggest descriptor that will be built when internalizing the object
+const TInt KMaxDescriptorLength = 128;	
+
+/**
+ Default constructor.
+ */
+CCodecApiResolverData::CCodecApiResolverData()
+	{
+	}
+
+
+/**
+ Destructor.
+ */
+CCodecApiResolverData::~CCodecApiResolverData()
+	{
+	delete iInputDataFormat;
+	delete iOutputDataFormat;
+	}
+
+
+/**
+ Creates a new CodedApiResolverStandard object.
+ @return A pointer to the newly constructed object.
+ */
+EXPORT_C CCodecApiResolverData* CCodecApiResolverData::NewL()
+	{
+	CCodecApiResolverData* self = new(ELeave) CCodecApiResolverData;
+	return self;
+	}
+
+	
+/**
+ Creates a new CodedApiResolverStandard object.
+ @param  aPackage
+ 	   	 A reference to a descriptor created using <code>PackL()</code>
+       	 used to initialize the object.
+ @return A pointer to the newly constructed object.
+ */
+EXPORT_C CCodecApiResolverData* CCodecApiResolverData::NewL(const TDesC8& aPackage)
+	{
+	CCodecApiResolverData* self = CCodecApiResolverData::NewLC(aPackage);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+/**
+ Creates a new CodedApiResolverStandard object and leaves a pointer to it on the cleanup stack.
+ @return A pointer to the newly constructed object.
+ */
+EXPORT_C CCodecApiResolverData* CCodecApiResolverData::NewLC()
+	{
+	CCodecApiResolverData* self = CCodecApiResolverData::NewL();
+	CleanupStack::PushL(self); 
+    return self;
+	}
+
+
+/**
+ Creates a new CodedApiResolverStandard object and leaves a pointer to it on the cleanup stack.
+ @param	aPackage
+ 		A reference to a descriptor created using <code>PackL()</code>
+ 		used to initialize the object.
+ @return A pointer to the newly constructed match data object.
+ */
+EXPORT_C CCodecApiResolverData* CCodecApiResolverData::NewLC(const TDesC8& aPackage)
+	{
+	CCodecApiResolverData* self = new(ELeave) CCodecApiResolverData;
+	CleanupStack::PushL(self);
+	self->ConstructL(aPackage);
+    return self;
+	}
+
+
+/**
+ Sets up the data inside the class by calling <code>UnPackL()</code>.
+ @param	aPackage
+ 		A reference to the data that will be contained by this class.
+ */
+void CCodecApiResolverData::ConstructL(const TDesC8& aPackage)
+	{
+	UnPackL(aPackage);
+	}
+
+
+/**
+ Externalizes the object to a stream.
+ All the member variables will be written to the stream.
+ @param	aStream
+ 		A reference to the stream to which the member variables will
+ 		be written.
+ */
+ void CCodecApiResolverData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iMatchType);
+	aStream.WriteInt32L(iImplementationType.iUid);
+
+	aStream << InputDataFormat();
+	aStream << OutputDataFormat();
+	}
+	
+
+/**
+ Internalizes the object from a stream.
+ All the member variables will be read from the streamed.
+ @param	aStream
+ 		A reference to the stream from which data will be read to
+ 		setup the member variables.
+ */
+void CCodecApiResolverData::InternalizeL(RReadStream& aStream)
+	{
+	iMatchType = static_cast<TCodecApiResolverMatchType>(aStream.ReadInt32L());
+	iImplementationType.iUid = aStream.ReadInt32L();
+
+	delete iInputDataFormat; 
+	iInputDataFormat = NULL;
+	iInputDataFormat = HBufC8::NewL(aStream,KMaxDescriptorLength); //KErrOverflow
+
+	delete iOutputDataFormat; 
+	iOutputDataFormat = NULL;
+	iOutputDataFormat = HBufC8::NewL(aStream,KMaxDescriptorLength); //KErrOverflow
+	}
+
+
+/**
+ Sets the match type to match against.
+ @param	aMatchType
+ 		The type of match requested.
+ */
+EXPORT_C void CCodecApiResolverData::SetMatchType(const TCodecApiResolverMatchType& aMatchType)
+	{
+	iMatchType = aMatchType;
+	}
+
+
+/**
+ Sets the implementation type to match against.
+ @param	aImplementationType
+ 		The implementation uid of a specific codec to match against.
+ */
+EXPORT_C void CCodecApiResolverData::SetImplementationType(const TUid& aImplementationType)
+	{
+	iImplementationType = aImplementationType;
+	}
+
+
+/**
+ Sets the input data type to match against.
+ @param	aDataType
+ 		The input data type of a codec to match against.
+ */
+EXPORT_C void CCodecApiResolverData::SetInputDataL(const TDesC8& aDataType)
+	{
+	delete iInputDataFormat;
+	iInputDataFormat = NULL;
+	iInputDataFormat = aDataType.AllocL();
+	}
+
+
+/**
+ Sets the output data type to match against.
+ @param	aDataType
+ 		The output data type of a codec to match against.
+ */
+EXPORT_C void CCodecApiResolverData::SetOutputDataL(const TDesC8& aDataType)
+	{
+	delete iOutputDataFormat;
+	iOutputDataFormat = NULL;
+	iOutputDataFormat = aDataType.AllocL();	
+	}
+
+
+/**
+ Retrieves the match type to match against.
+ @return The type of match requested.
+ */
+EXPORT_C TCodecApiResolverMatchType CCodecApiResolverData::MatchType() const
+	{
+	return iMatchType;
+	}
+
+
+/**
+ Retrieves the implementation type to match against.
+ @return The implementation of a specific codec to match against.
+ */
+EXPORT_C TUid CCodecApiResolverData::ImplementationType() const
+	{
+	return iImplementationType;
+	}
+
+
+
+/**
+ Retrieves the input data format string to match against. If no string is set
+ a null descriptor is returned.
+ @return The string to match against.
+ */
+EXPORT_C const TPtrC8 CCodecApiResolverData::InputDataFormat() const
+	{
+	TPtrC8 result;
+	if(iInputDataFormat)
+		{
+		result.Set(*iInputDataFormat);
+		}		
+	else
+		{
+		result.Set(KNullDesC8);
+		}		
+	return result;
+	}
+
+
+/**
+ Retrieves the output data format string to match against. If no string is set
+ a null descriptor is returned.
+ @return The string to match against.
+ */
+EXPORT_C const TPtrC8 CCodecApiResolverData::OutputDataFormat() const
+	{
+	TPtrC8 result;
+	if(iOutputDataFormat)
+		{
+		result.Set(*iOutputDataFormat);
+		}		
+	else
+		{
+		result.Set(KNullDesC8);
+		}		
+	return result;
+	}
+
+
+
+
+/** 
+ Packages the object up into a descriptor.
+ @return A pointer to a desctriptor with the object packed in it.
+ */
+EXPORT_C HBufC8* CCodecApiResolverData::NewPackLC() const
+	{
+	//Calculate the size necessary size for the descriptor to pack the object
+	TInt size = 0;
+	size = sizeof(iMatchType) + sizeof(iImplementationType.iUid) + 2*sizeof(TInt32); 
+	// the operator << write first the length of the string so we need to add it to the total size
+	if(iInputDataFormat)
+		{
+		size += iInputDataFormat->Size();
+		}		
+	if(iOutputDataFormat)
+		{
+		size += iOutputDataFormat->Size();
+		}		
+
+	HBufC8* package = HBufC8::NewLC(size);
+	TPtr8   packageDes = package->Des();
+	RDesWriteStream stream(packageDes);
+	CleanupClosePushL(stream);
+	ExternalizeL(stream);
+	CleanupStack::PopAndDestroy(&stream);
+	return package;
+	}
+
+
+
+/** 
+ Unpacks a packed descriptor.
+ @param	aPackage
+ 		A reference to a desctriptor created.
+ */
+EXPORT_C void CCodecApiResolverData::UnPackL(const TDesC8& aPackage)
+	{
+	RDesReadStream stream(aPackage);
+	CleanupClosePushL(stream);
+	InternalizeL(stream);
+	CleanupStack::PopAndDestroy(&stream);
+	}