multimediacommsengine/mmceshared/inc/mceserial.inl
changeset 0 1bce908db942
child 49 64c62431ac08
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/mmceshared/inc/mceserial.inl	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,600 @@
+/*
+* Copyright (c) 2005 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:    
+*
+*/
+
+
+
+
+
+        
+        
+// -----------------------------------------------------------------------------
+// CMceMsgObject::CMceMsgObject
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline CMceMsgObject<T>::CMceMsgObject()
+  : CMceMsgBase( EMceItcMsgTypeSession ),
+    iObject( NULL )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsgObject::CMceMsgObject
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline CMceMsgObject<T>::CMceMsgObject( T& aObject, TMceItcDataType aItcType )
+  : CMceMsgBase( aItcType ),
+    iObject( &aObject )
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CMceMsgObject::~CMceMsgObject
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline CMceMsgObject<T>::~CMceMsgObject()
+    {
+    if ( iPushed )
+        {
+        LocalClose();
+        }
+    }
+
+    
+// -----------------------------------------------------------------------------
+// CMceMsgObject::EncodeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgObject<T>::EncodeL()
+    {
+    
+    delete iEncodeBuf;
+    iEncodeBuf = NULL;
+    
+	iEncodeBuf = CBufFlat::NewL( KMceExternalizeBufferExpandSize );
+
+	RBufWriteStream writeStream( *iEncodeBuf, 0 );
+	writeStream.PushL();
+    MMceComSerializationContext serCtx( writeStream );
+    CleanupClosePushL( serCtx );
+	
+	iObject->ExternalizeL( serCtx );
+	
+	CleanupStack::PopAndDestroy(); // serCtx
+	CleanupStack::PopAndDestroy(); // writeStream
+    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsgObject::DoDecodeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgObject<T>::DoDecodeL( RReadStream& aReadStream )
+    {
+    MMceComSerializationContext serCtx( aReadStream );
+    CleanupClosePushL( serCtx );
+    DoDecodeL( serCtx );
+    
+    CleanupStack::PopAndDestroy();//serCtx
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CMceMsgObject::DoDecodeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgObject<T>::DoDecodeL( MMceComSerializationContext& aSerCtx )
+    {
+    
+    iObject = (T*)T::Factory().CreateLC( aSerCtx );
+	CleanupStack::Pop( iObject );
+    
+    }
+        
+
+
+// -----------------------------------------------------------------------------
+// CMceMsgObject::Object
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline T* CMceMsgObject<T>::Object()
+    {
+    T* ret = iObject;
+    iObject = NULL;
+    return ret;
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CMceMsgObject::Close
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgObject<T>::Close()
+    {
+    MCE_DELETE( iObject );
+    }
+
+// -----------------------------------------------------------------------------
+// CMceMsgObject::LocalClose
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgObject<T>::LocalClose()
+    {
+    MCE_DELETE( iObject );
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CMceMsgArray::CMceMsgArray
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline CMceMsgArray<T>::CMceMsgArray( T& aFactory )
+  : CMceMsgBase( EMceItcMsgTypeMessageArray ),
+    iFactory( aFactory )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsgArray::~CMceMsgArray
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline CMceMsgArray<T>::~CMceMsgArray()
+    {
+    if ( iPushed )
+        {
+        LocalClose();
+        }
+    else
+        {
+        iArray.ResetAndDestroy();
+        iArray.Close();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CMceMsgArray::EncodeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgArray<T>::EncodeL()
+    {
+    
+    delete iEncodeBuf;
+    iEncodeBuf = NULL;
+
+	iEncodeBuf = CBufFlat::NewL( KMceExternalizeBufferExpandSize );
+
+	RBufWriteStream writeStream( *iEncodeBuf, 0 );
+	writeStream.PushL();
+    
+    TInt count = iArray.Count();
+    writeStream.WriteUint32L( count );
+	for ( TInt i=0; i<count; i++ )
+	    {
+	    CMceMsgBase* object = iArray[i];
+        writeStream.WriteUint32L( object->Type() );
+	    object->EncodeL();
+	    writeStream.WriteL( object->EncodeBuffer().Ptr( 0 ) );
+	    }
+
+	CleanupStack::PopAndDestroy(); // writeStream
+        
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsgArray::DoDecodeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgArray<T>::DoDecodeL( RReadStream& aReadStream )
+    {
+
+    TInt count = aReadStream.ReadUint32L();
+	for ( TInt i=0; i<count; i++ )
+	    {
+	    TMceItcDataType type = (TMceItcDataType)aReadStream.ReadUint32L();
+        MMceComSerializationContext serCtx( aReadStream );
+        CleanupClosePushL( serCtx );
+	    
+	    CMceMsgBase* object = iFactory.CreateL( type, serCtx );
+	    CleanupStack::PushL( object );
+	    object->PushL();
+	    iArray.AppendL( object );
+	    object->Pop();
+	    CleanupStack::Pop( object );
+
+    	CleanupStack::PopAndDestroy(); // serCtx
+	    
+	    
+	    }
+        
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMceMsgArray::Close
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgArray<T>::Close()
+    {
+	for ( TInt i=0; i<iArray.Count();i++)
+	    {
+	    iArray[ i ]->Close();
+	    }
+	    
+    iArray.ResetAndDestroy();
+    iArray.Close();
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CMceMsgArray::LocalClose
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void CMceMsgArray<T>::LocalClose()
+    {
+	for ( TInt i=0; i<iArray.Count();i++)
+	    {
+	    iArray[ i ]->Close();
+	    }
+	    
+    iArray.ResetAndDestroy();
+    iArray.Close();
+    
+    }
+
+// -----------------------------------------------------------------------------
+// TMceSessionSerializer::TMceSessionSerializer
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline TMceSessionSerializer<T>::TMceSessionSerializer( T& aSession )
+  : iSession( aSession ),
+    iFlatData( NULL )
+    {
+		iFlatData = static_cast<CMceComSession*>(&aSession);
+    }
+
+// -----------------------------------------------------------------------------
+// TMceSessionSerializer::TMceSessionSerializer
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline TMceSessionSerializer<T>::TMceSessionSerializer( T& aSession, 
+                                                        CMceComSession* aFlatData )
+  : iSession( aSession ),
+    iFlatData( aFlatData )
+    {
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// TMceSessionSerializer::InternalizeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void TMceSessionSerializer<T>::InternalizeL( MMceComSerializationContext& aSerCtx )
+    {
+    RReadStream& readStream = aSerCtx.ReadStream();
+    
+    iFlatData->InternalizeFlatL( readStream );
+    
+    //streams
+    TUint32 streamCount = readStream.ReadUint32L();
+    TUint32 i = 0;
+    for( i = 0; i<streamCount; i++)
+        {
+        
+        iSession.T::AddStreamL( 
+            iSession.BaseFactory().MediaStreamFactory().CreateLC( aSerCtx ) );
+            
+        CleanupStack::Pop();
+        }
+
+    //bundles
+    TUint32 bundleCount = readStream.ReadUint32L();
+    for( i = 0; i<bundleCount; i++)
+        {
+        
+        iSession.AddBundleL( 
+            iSession.BaseFactory().CreateBundleLC( iSession, aSerCtx ) );
+            
+        CleanupStack::Pop();
+        }
+    
+    }
+    
+// -----------------------------------------------------------------------------
+// TMceSessionSerializer::ExternalizeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void TMceSessionSerializer<T>::ExternalizeL( MMceComSerializationContext& aSerCtx )
+    {
+    RWriteStream& writeStream = aSerCtx.WriteStream();
+    
+    iFlatData->ExternalizeFlatL( writeStream );
+    
+    
+    TInt streams = iSession.Streams().Count();
+    writeStream.WriteUint32L( streams );
+    TInt i = 0;
+    for( i=0; i<streams; i++)
+        {
+        iSession.Streams()[ i ]->ExternalizeL( aSerCtx );
+        }
+        
+    TInt bundles = iSession.Bundles().Count();
+    writeStream.WriteUint32L( bundles );
+    for( i=0; i<bundles; i++)
+        {
+        iSession.Bundles()[ i ]->ExternalizeL( aSerCtx );
+        }
+        
+    }
+    
+    
+    
+    
+    
+    
+
+
+// -----------------------------------------------------------------------------
+// TMceMediaStreamSerializer::TMceMediaStreamSerializer
+// -----------------------------------------------------------------------------
+//
+template <class T>
+TMceMediaStreamSerializer<T>::TMceMediaStreamSerializer( T& aStream )
+  : iStream( aStream ),
+    iFlatData( NULL )
+    {
+    iFlatData = static_cast<CMceComMediaStream*>(&aStream);
+    }
+
+// -----------------------------------------------------------------------------
+// TMceMediaStreamSerializer::TMceMediaStreamSerializer
+// -----------------------------------------------------------------------------
+//
+template <class T>
+TMceMediaStreamSerializer<T>::TMceMediaStreamSerializer( T& aStream, 
+                                                   CMceComMediaStream* aFlatData )
+  : iStream( aStream ),
+    iFlatData( aFlatData )
+    {
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// TMceMediaStreamSerializer::InternalizeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+void TMceMediaStreamSerializer<T>::InternalizeL( MMceComSerializationContext& aSerCtx )
+    {
+    RReadStream& readStream = aSerCtx.ReadStream();
+    iFlatData->InternalizeFlatL( readStream );
+    
+    //linked stream
+    if ( iStream.Binder() )
+        {
+        iStream.BindL( static_cast<T*> (
+            iStream.BaseFactory().MediaStreamFactory().CreateLC( aSerCtx ) ) );
+        CleanupStack::Pop();
+        }
+        
+    //source
+    TBool isSource = static_cast<TBool>( readStream.ReadUint8L() );
+    if ( isSource )
+        {
+        iStream.SetSourceL( aSerCtx );
+        }
+            
+    //sinks            
+    TUint32 sinkCount = readStream.ReadUint32L();
+    for( TUint i=0;i<sinkCount;i++)
+        {
+        iStream.AddSinkL( aSerCtx );
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// TMceMediaStreamSerializer::ExternalizeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+void TMceMediaStreamSerializer<T>::ExternalizeL( MMceComSerializationContext& aSerCtx )
+    {
+    
+    RWriteStream& writeStream = aSerCtx.WriteStream();
+    iFlatData->ExternalizeFlatL( writeStream );
+    
+    
+    //linked stream
+    if ( iStream.Binder() && iStream.BoundStream() )
+        {
+        iStream.BoundStreamL().ExternalizeL( aSerCtx );
+        }
+
+    //source
+    writeStream.WriteUint8L( iStream.Source() ? ETrue : EFalse );
+    if ( iStream.Source() )
+        {
+        TBool externalizedReference = aSerCtx.IsCached( iStream.Source() );
+	    writeStream.WriteUint8L( externalizedReference );
+        if ( externalizedReference )
+            {
+            MceSerial::EncodeL( iStream.Source()->Id(), writeStream );
+            }
+        else
+            {
+            iStream.Source()->ExternalizeL( aSerCtx );
+            aSerCtx.SourceCache().AppendL( iStream.Source() );
+            }
+        }
+
+
+    //sinks            
+    TUint32 sinkCount = iStream.Sinks().Count();
+    writeStream.WriteUint32L( sinkCount );
+    for( TUint i=0;i<sinkCount;i++)
+        {
+        TBool externalizedReference = aSerCtx.IsCached( iStream.Sinks()[i] );
+	    writeStream.WriteUint8L( externalizedReference );
+        if ( externalizedReference )
+            {
+            MceSerial::EncodeL( iStream.Sinks()[i]->Id(), writeStream );
+            }
+        else
+            {
+            iStream.Sinks()[i]->ExternalizeL( aSerCtx );
+            aSerCtx.SinkCache().AppendL( iStream.Sinks()[i] );
+            }
+        }
+    
+    }
+
+
+
+
+
+// -----------------------------------------------------------------------------
+// TMceAudioStreamSerializer::TMceAudioStreamSerializer
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline TMceAudioStreamSerializer<T>::TMceAudioStreamSerializer( T& aStream )
+  : iAudioStream( aStream )
+    {
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// TMceAudioStreamSerializer::InternalizeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void TMceAudioStreamSerializer<T>::InternalizeL( MMceComSerializationContext& aSerCtx )
+    {
+    RReadStream& readStream = aSerCtx.ReadStream();
+            
+    //codecs
+    TUint32 codecCount = readStream.ReadUint32L();
+    for( TUint i=0;i<codecCount;i++)
+        {
+        
+        iAudioStream.AddCodecL( 
+            iAudioStream.BaseFactory().AudioCodecFactory().CreateLC( aSerCtx ) );
+            
+        CleanupStack::Pop();
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// TMceAudioStreamSerializer::ExternalizeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void TMceAudioStreamSerializer<T>::ExternalizeL( MMceComSerializationContext& aSerCtx )
+    {
+    RWriteStream& writeStream = aSerCtx.WriteStream();
+    
+    //codecs
+    TUint32 codecCount = iAudioStream.Codecs().Count();
+    writeStream.WriteUint32L( codecCount );
+    for( TUint i=0 ; i<codecCount ; ++i)
+        {
+        iAudioStream.Codecs()[i]->ExternalizeL( aSerCtx );
+        }
+    
+    }
+
+
+
+
+
+
+// -----------------------------------------------------------------------------
+// TMceVideoStreamSerializer::TMceVideoStreamSerializer
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline TMceVideoStreamSerializer<T>::TMceVideoStreamSerializer( T& aStream )
+  : iVideoStream( aStream )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// TMceVideoStreamSerializer::InternalizeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void TMceVideoStreamSerializer<T>::InternalizeL( MMceComSerializationContext& aSerCtx )
+    {
+
+    RReadStream& readStream = aSerCtx.ReadStream();
+    
+    //codecs
+    TUint32 codecCount = readStream.ReadUint32L();
+    for( TUint i=0;i<codecCount;i++)
+        {
+        
+        iVideoStream.AddCodecL( 
+            iVideoStream.BaseFactory().VideoCodecFactory().CreateLC( aSerCtx ) );
+            
+        CleanupStack::Pop();
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// TMceVideoStreamSerializer::ExternalizeL
+// -----------------------------------------------------------------------------
+//
+template <class T>
+inline void TMceVideoStreamSerializer<T>::ExternalizeL( MMceComSerializationContext& aSerCtx )
+    {
+    RWriteStream& writeStream = aSerCtx.WriteStream();
+    
+    //codecs
+    TUint32 codecCount = iVideoStream.Codecs().Count();
+    writeStream.WriteUint32L( codecCount );
+    for( TUint i=0;i<codecCount;i++)
+        {
+        iVideoStream.Codecs()[i]->ExternalizeL( aSerCtx );
+        }
+    
+    }