multimediacommsengine/tsrc/MCETestUI/src/CMCETestUIStreamViewModel.cpp
changeset 0 1bce908db942
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommsengine/tsrc/MCETestUI/src/CMCETestUIStreamViewModel.cpp	Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,850 @@
+/*
+* Copyright (c) 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 FILES
+
+#include "CMCETestUIStreamViewModel.h"
+#include "CMCETestUIEngine.h"
+#include "CMCETestUIEngineSession.h"
+#include "MMCETestUIEngineCmdProvider.h"
+#include "CMCETestUIEngineSource.h"
+#include "CMCETestUIEngineSink.h"
+#include "CMCETestUIEngineCodec.h"
+#include <MCEAudioCodec.h>
+#include <MCEAudioStream.h>
+#include "CMCETestUIEngineVideoSource.h"
+#include "CMCETestUIEngineVideoSink.h"
+#include "CMCETestUIEngineVideoCodec.h"
+#include <MCEAudioCodec.h>
+#include <MCEAudioStream.h>
+#include <MCEMediaSource.h>
+#include <MCEMicSource.h>
+#include <MCEMediaSink.h>
+#include <MCERtpSink.h>
+#include <MCERtpSource.h>
+#include <MCESpeakerSink.h>
+#include <MCEDisplaySink.h>
+#include <MCECameraSource.h>
+#include <MCEFileSource.h>
+#include <MCEfileSink.h>
+
+#include "mcetestuiengineconstants.h"
+#include "cmcetestuiengineaudiostream.h"
+#include "cmcetestuienginevideostream.h"
+
+// CONSTANTS
+
+
+// ================= MEMBER FUNCTIONS ==========================================
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::NewL
+// -----------------------------------------------------------------------------
+//
+CMCETestUIStreamViewModel* CMCETestUIStreamViewModel::NewL(
+        CMCETestUIEngine& aEngine,
+        CMCETestUIEngineAudioStream& aStream )
+    {
+	CMCETestUIStreamViewModel* self = 
+	    new(ELeave) CMCETestUIStreamViewModel( aEngine, aStream );
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;    
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::CMCETestUISessionViewModel
+// -----------------------------------------------------------------------------
+//
+CMCETestUIStreamViewModel::CMCETestUIStreamViewModel(
+        CMCETestUIEngine& aEngine ,
+        CMCETestUIEngineAudioStream& aStream )
+    :iEngine( aEngine ),
+     iStream( aStream),
+     audioSourceSuppressed( EFalse ),
+     audioSinksSuppressed( EFalse )
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIStreamViewModel::ConstructL()
+    {
+    iArray = new (ELeave) CDesCArrayFlat( 1 );
+
+    PopulateSourcesL();
+    PopulateSinksL();
+    PopulateCodecsL();
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::~CMCETestUIStreamViewModel()
+// Destructor
+// Frees reserved resources
+// -----------------------------------------------------------------------------
+//
+CMCETestUIStreamViewModel::~CMCETestUIStreamViewModel()
+    {
+    delete iArray;
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::MdcaCount() const
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CMCETestUIStreamViewModel::MdcaCount() const
+    {
+    return iArray->MdcaCount();
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUISessionViewModel::MdcaPoint() const
+// 
+// -----------------------------------------------------------------------------
+//
+TPtrC CMCETestUIStreamViewModel::MdcaPoint( TInt aIndex ) const
+    {
+    return iArray->MdcaPoint( aIndex );
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::IsAudioSourceSelected() const
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CMCETestUIStreamViewModel::IsAudioSourceSelected( TInt aIndex ) const
+    {
+    if ( aIndex == 0 && !audioSourceSuppressed )
+        {
+        return ETrue;
+        }
+    
+    return EFalse;    
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUIMainViewModel::SelectedAudioSinkIndex() const
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CMCETestUIStreamViewModel::SelectedAudioSinkIndex( TInt aIndex ) const
+    {
+
+    if ( audioSourceSuppressed )
+        {
+        ++aIndex;
+        }
+
+    if ( aIndex == 0 )
+        {
+        return KErrNotFound;
+        }
+
+    aIndex -= 1; // Selected is not the source
+
+    const RPointerArray<CMCETestUIEngineSink>& sinks = 
+                iStream.SinksL();
+
+    if ( audioSinksSuppressed )
+        {
+        aIndex += sinks.Count();
+        }
+
+    if ( aIndex < sinks.Count() )
+        {
+        return aIndex;
+        }
+    
+    return KErrNotFound;    
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::SelectedAudioCodecIndex() const
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CMCETestUIStreamViewModel::SelectedAudioCodecIndex( TInt aIndex ) const
+    {
+
+    const RPointerArray<CMCETestUIEngineSink>& sinks = 
+                iStream.SinksL();
+
+    const RPointerArray<CMCETestUIEngineCodec>& codecs = 
+                iStream.CodecsL();               
+                
+    
+    // Next does not work correctly
+                    
+    if ( audioSourceSuppressed )
+        {
+        ++aIndex;
+        }
+
+    if ( aIndex == 0)
+        {
+        return KErrNotFound;
+        }
+
+    aIndex -= 1; // Selected is not the audio source
+    
+    if ( audioSinksSuppressed )
+        {
+        aIndex += sinks.Count();
+        }
+
+    if ( aIndex < sinks.Count() )
+        {
+        return KErrNotFound;
+        }
+    
+    aIndex -= sinks.Count(); // Selected is not a audio sink
+    
+    if ( aIndex < codecs.Count()  )
+        {
+        return aIndex;
+        }
+        
+    return KErrNotFound;   // default      
+    }
+    
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::CmdProvider()
+// 
+// -----------------------------------------------------------------------------
+//
+MMCETestUIEngineCmdProvider& CMCETestUIStreamViewModel::CmdProvider( 
+        TInt aIndex )
+    {
+    const RPointerArray<CMCETestUIEngineSource>& sources = 
+                iStream.SourcesL();
+    
+    const RPointerArray<CMCETestUIEngineSink>& sinks =
+                iStream.SinksL();
+                
+    const RPointerArray<CMCETestUIEngineCodec>& codecs =
+                iStream.CodecsL();                        
+    
+    // Next does not work correctly
+                    
+    if ( audioSourceSuppressed )
+        {
+        ++aIndex;
+        }
+
+    if ( aIndex == 0)
+        {
+        return *(sources[aIndex]);
+        }
+
+    aIndex -= 1; // Selected is not the source
+    
+    if ( audioSinksSuppressed )
+        {
+        aIndex += sinks.Count();
+        }
+
+    if ( aIndex < sinks.Count() )
+        {
+        return *(sinks[aIndex]);
+        }
+    
+    aIndex -= sinks.Count(); // Selected is not a sink
+    if ( aIndex < codecs.Count() )
+        {
+        return *(codecs[aIndex]);
+        }
+    
+    return iEngine;   // default         
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::PopulateStreamsL
+// Populate streams of a session
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIStreamViewModel::PopulateSourcesL()
+    {
+    const RPointerArray<CMCETestUIEngineSource>& sources = 
+            iStream.SourcesL();
+
+    for ( TInt i = 0; i < sources.Count(); ++i )
+        {
+                              
+        TInt itemLength = KSource().Length() + 
+                          KLeftParenthesis().Length() +
+                      //    sources[i]->TextualDirection().Length() +
+                          KRightParenthesis().Length() +
+                          sources[i]->State().Length() +
+                          KTab().Length() * 3;
+                          
+        if(sources[i]->Type() == KMceRTPSource ) 
+        	{
+        	itemLength += KLabelRTPSource().Length();
+        	}
+         
+        
+        else if(sources[i]->Type() == KMceMicSource )         
+        	{
+        	itemLength += KLabelMicSource().Length();
+        	}
+        	
+        else if(sources[i]->Type() == KMceFileSource )         
+        	{
+        	itemLength += KLabelFileSource().Length();
+        	}
+        HBufC16* item = HBufC16::NewLC( itemLength );
+        TPtr16 itemPtr = item->Des();
+        itemPtr.Append( KTab );
+        itemPtr.Append( KSource );
+        itemPtr.Append( KLeftParenthesis() );
+        if(sources[i]->Type() == KMceRTPSource )     
+        	{
+        	itemPtr.Append(KLabelRTPSource);	
+        	}
+         
+        else if(sources[i]->Type() == KMceMicSource )         
+        	{
+        	itemPtr.Append(KLabelMicSource);	
+        	}
+        else if(sources[i]->Type() == KMceFileSource )         
+        	{
+        	itemPtr.Append(KLabelFileSource);	
+        	}
+        
+       // itemPtr.Append( sources[i]->TextualDirection() );
+        itemPtr.Append( KRightParenthesis() );
+        itemPtr.Append( KTab );
+        itemPtr.Append( sources[i]->State() );
+        itemPtr.Append( KTab );
+    
+        iArray->AppendL( *item );
+        
+        CleanupStack::PopAndDestroy( item );
+        item = NULL;
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::PopulateSinksL
+// Populate streams of a session
+// -----------------------------------------------------------------------------
+//
+    
+void CMCETestUIStreamViewModel::PopulateSinksL()
+    {
+    const RPointerArray<CMCETestUIEngineSink>& sinks = 
+            iStream.SinksL();
+
+    for ( TInt i = 0; i < sinks.Count(); ++i )
+        {
+                              
+        TInt itemLength = KSink().Length() + 
+                          KLeftParenthesis().Length() +
+                     //     sinks[i]->TextualDirection().Length() +
+                          KRightParenthesis().Length() +
+                          sinks[i]->State().Length() +
+                          KTab().Length() * 3;
+                          
+        if(sinks[i]->Type() == KMceRTPSink ) 
+        	{
+        	itemLength += KLabelRTPSink().Length();	
+        	}
+         
+        else  if(sinks[i]->Type() == KMceSpeakerSink)         
+          	{
+         	itemLength += KLabelSpeakerSink().Length();
+         	}
+        
+        HBufC16* item = HBufC16::NewLC( itemLength );
+        TPtr16 itemPtr = item->Des();
+        itemPtr.Append( KTab );
+        itemPtr.Append( KSink );
+        itemPtr.Append( KLeftParenthesis() );
+        
+        if(sinks[i]->Type() == KMceRTPSink ) 
+        	{
+        	itemPtr.Append(KLabelRTPSink);
+        	}
+        else if(sinks[i]->Type() == KMceSpeakerSink ) 
+        	{
+        	itemPtr.Append(KLabelSpeakerSink);
+        	}
+         
+    //    itemPtr.Append( sinks[i]->TextualDirection() );
+        itemPtr.Append( KRightParenthesis() );
+        itemPtr.Append( KTab );
+        itemPtr.Append( sinks[i]->State() );
+        itemPtr.Append( KTab );
+    
+        iArray->AppendL( *item );
+        
+        CleanupStack::PopAndDestroy( item );
+        item = NULL;
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::PopulateStreamsL
+// Populate streams of a session
+// -----------------------------------------------------------------------------
+//
+    
+void CMCETestUIStreamViewModel::PopulateCodecsL()
+    {
+    const RPointerArray<CMCETestUIEngineCodec>& codecs = 
+            iStream.CodecsL();
+
+    for ( TInt i = 0; i < codecs.Count(); ++i )
+        {
+        TBuf8<KMceMaxSdpNameLength> name = codecs[i]->Codec().SdpName();
+                              
+        TInt itemLength = KCodec().Length() + 
+                          KLeftParenthesis().Length() +
+                   	      name.Length()+
+                          KRightParenthesis().Length() +
+                          codecs[i]->State().Length() +
+                          KTab().Length() * 3;
+      
+        TBuf16<KMceMaxSdpNameLength>  name16;
+        name16.Copy(name);
+        
+                      
+        HBufC16* item = HBufC16::NewLC( itemLength );
+        TPtr16 itemPtr = item->Des();
+        itemPtr.Append( KTab );
+        itemPtr.Append( KCodec );
+        itemPtr.Append( KLeftParenthesis() );
+        itemPtr.Append( name16 ) ;
+        itemPtr.Append( KRightParenthesis() );
+        itemPtr.Append( KTab );
+        itemPtr.Append( codecs[i]->State() );
+        itemPtr.Append( KTab );
+        iArray->AppendL( *item );
+        CleanupStack::PopAndDestroy( item );
+        item = NULL;
+        }
+    }
+
+// ================= MEMBER FUNCTIONS ==========================================
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::NewL
+// -----------------------------------------------------------------------------
+//
+CMCETestUIVideoStreamViewModel* CMCETestUIVideoStreamViewModel::NewL(
+        CMCETestUIEngine& aEngine,
+        CMCETestUIEngineVideoStream& aStream )
+    {
+	CMCETestUIVideoStreamViewModel* self = 
+	    new(ELeave) CMCETestUIVideoStreamViewModel( aEngine, aStream );
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;    
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::CMCETestUIVideoStreamViewModel
+// -----------------------------------------------------------------------------
+//
+CMCETestUIVideoStreamViewModel::CMCETestUIVideoStreamViewModel(
+        CMCETestUIEngine& aEngine ,
+        CMCETestUIEngineVideoStream& aStream )
+    :iEngine( aEngine ),
+     iStream( aStream),
+     videoSourceSuppressed( EFalse ),
+     videoSinksSuppressed( EFalse )
+    {
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIVideoStreamViewModel::ConstructL()
+    {
+    iArray = new (ELeave) CDesCArrayFlat( 1 );
+
+    PopulateVideoSourcesL();
+    PopulateVideoSinksL();
+    PopulateVideoCodecsL();
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::~CMCETestUIVideoStreamViewModel()
+// Destructor
+// Frees reserved resources
+// -----------------------------------------------------------------------------
+//
+CMCETestUIVideoStreamViewModel::~CMCETestUIVideoStreamViewModel()
+    {
+    delete iArray;
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::MdcaCount() const
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CMCETestUIVideoStreamViewModel::MdcaCount() const
+    {
+    return iArray->MdcaCount();
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::MdcaPoint() const
+// 
+// -----------------------------------------------------------------------------
+//
+TPtrC CMCETestUIVideoStreamViewModel::MdcaPoint( TInt aIndex ) const
+    {
+    return iArray->MdcaPoint( aIndex );
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::IsVideoSourceSelected() const
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CMCETestUIVideoStreamViewModel::IsVideoSourceSelected( TInt aIndex ) const
+    {
+    if ( aIndex == 0 && !videoSourceSuppressed )
+        {
+        return ETrue;
+        }
+    
+    return EFalse;    
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::SelectedVideoSinkIndex() const
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CMCETestUIVideoStreamViewModel::SelectedVideoSinkIndex( TInt aIndex ) const
+    {
+
+    if ( videoSourceSuppressed )
+        {
+        ++aIndex;
+        }
+
+    if ( aIndex == 0 )
+        {
+        return KErrNotFound;
+        }
+
+    aIndex -= 1; // Selected is not the source
+
+    const RPointerArray<CMCETestUIEngineVideoSink>& sinks = 
+                iStream.SinksL();
+
+    if ( videoSinksSuppressed )
+        {
+        aIndex += sinks.Count();
+        }
+
+    if ( aIndex < sinks.Count() )
+        {
+        return aIndex;
+        }
+    
+    return KErrNotFound;    
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::SelectedVideoCodecIndex() const
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CMCETestUIVideoStreamViewModel::SelectedVideoCodecIndex( TInt aIndex ) const
+    {
+
+    const RPointerArray<CMCETestUIEngineVideoSink>& sinks = 
+                iStream.SinksL();
+
+    const RPointerArray<CMCETestUIEngineVideoCodec>& codecs = 
+                iStream.CodecsL();               
+                
+    
+    // Next does not work correctly
+                    
+    if ( videoSourceSuppressed )
+        {
+        ++aIndex;
+        }
+
+    if ( aIndex == 0)
+        {
+        return KErrNotFound;
+        }
+
+    aIndex -= 1; // Selected is not the audio source
+    
+    if ( videoSinksSuppressed )
+        {
+        aIndex += sinks.Count();
+        }
+
+    if ( aIndex < sinks.Count() )
+        {
+        return KErrNotFound;
+        }
+    
+    aIndex -= sinks.Count(); // Selected is not a audio sink
+    
+    if ( aIndex < codecs.Count()  )
+        {
+        return aIndex;
+        }
+        
+    return KErrNotFound;   // default      
+    }
+    
+
+
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::CmdProvider()
+// 
+// -----------------------------------------------------------------------------
+//
+MMCETestUIEngineCmdProvider& CMCETestUIVideoStreamViewModel::CmdProvider( 
+        TInt aIndex )
+    {
+    const RPointerArray<CMCETestUIEngineVideoSource>& sources = 
+                iStream.SourcesL();
+    
+    const RPointerArray<CMCETestUIEngineVideoSink>& sinks =
+                iStream.SinksL();
+                
+    const RPointerArray<CMCETestUIEngineVideoCodec>& codecs =
+                iStream.CodecsL();                        
+    
+    // Next does not work correctly
+                    
+    if ( videoSourceSuppressed )
+        {
+        ++aIndex;
+        }
+
+    if ( aIndex == 0)
+        {
+        return *(sources[aIndex]);
+        }
+
+    aIndex -= 1; // Selected is not the source
+    
+    if ( videoSinksSuppressed )
+        {
+        aIndex += sinks.Count();
+        }
+
+    if ( aIndex < sinks.Count() )
+        {
+        return *(sinks[aIndex]);
+        }
+    
+    aIndex -= sinks.Count(); // Selected is not a sink
+    if ( aIndex < codecs.Count() )
+        {
+        return *(codecs[aIndex]);
+        }
+    
+    return iEngine;   // default         
+    }
+
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::PopulateVideoStreamsL
+// Populate streams of a session
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIVideoStreamViewModel::PopulateVideoSourcesL()
+    {
+    const RPointerArray<CMCETestUIEngineVideoSource>& sources = 
+            iStream.SourcesL();
+
+    for ( TInt i = 0; i < sources.Count(); ++i )
+        {
+                              
+        TInt itemLength = KSource().Length() + 
+                          KLeftParenthesis().Length() +
+                      //    sources[i]->TextualDirection().Length() +
+                          KRightParenthesis().Length() +
+                          sources[i]->State().Length() +
+                          KTab().Length() * 3;
+                          
+        if(sources[i]->Type() == KMceRTPSource ) 
+        	{
+        	itemLength += KLabelRTPSource().Length();
+        	}
+         
+        
+        else if(sources[i]->Type() == KMceCameraSource )         
+        	{
+        	itemLength += KLabelCamSource().Length();
+        	}
+        	
+        else if(sources[i]->Type() == KMceFileSource )         
+        	{
+        	itemLength += KLabelFileSource().Length();
+        	}
+        
+        HBufC16* item = HBufC16::NewLC( itemLength );
+        TPtr16 itemPtr = item->Des();
+        itemPtr.Append( KTab );
+        itemPtr.Append( KSource );
+        itemPtr.Append( KLeftParenthesis() );
+        if(sources[i]->Type() == KMceRTPSource )     
+        	{
+        	itemPtr.Append(KLabelRTPSource);	
+        	}
+         
+        else if(sources[i]->Type() == KMceCameraSource )         
+        	{
+        	itemPtr.Append(KLabelCamSource);	
+        	}
+         
+        else if(sources[i]->Type() == KMceFileSource )         
+        	{
+        	itemPtr.Append(KLabelFileSource);	
+        	}
+       // itemPtr.Append( sources[i]->TextualDirection() );
+        itemPtr.Append( KRightParenthesis() );
+        itemPtr.Append( KTab );
+        itemPtr.Append( sources[i]->State() );
+        itemPtr.Append( KTab );
+    
+        iArray->AppendL( *item );
+        
+        CleanupStack::PopAndDestroy( item );
+        item = NULL;
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUIStreamViewModel::PopulateVideoSinksL
+// Populate streams of a session
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIVideoStreamViewModel::PopulateVideoSinksL()
+    {
+    const RPointerArray<CMCETestUIEngineVideoSink>& sinks = 
+            iStream.SinksL();
+
+    for ( TInt i = 0; i < sinks.Count(); ++i )
+        {
+                              
+        TInt itemLength = KSink().Length() + 
+                          KLeftParenthesis().Length() +
+                     //     sinks[i]->TextualDirection().Length() +
+                          KRightParenthesis().Length() +
+                          sinks[i]->State().Length() +
+                          KTab().Length() * 3;
+                          
+        if(sinks[i]->Type() == KMceRTPSink ) 
+        	{
+        	itemLength += KLabelRTPSink().Length();	
+        	}
+         
+        else  if(sinks[i]->Type() == KMceDisplaySink)         
+          	{
+         	itemLength += KLabelDisplaySink().Length();
+         	}
+        else  if(sinks[i]->Type() == KMceFileSink)         
+          	{
+         	itemLength += KLabelFileSink().Length();
+         	}
+        HBufC16* item = HBufC16::NewLC( itemLength );
+        TPtr16 itemPtr = item->Des();
+        itemPtr.Append( KTab );
+        itemPtr.Append( KSink );
+        itemPtr.Append( KLeftParenthesis() );
+        
+        if(sinks[i]->Type() == KMceRTPSink ) 
+        	{
+        	itemPtr.Append(KLabelRTPSink);
+        	}
+        else if(sinks[i]->Type() == KMceDisplaySink ) 
+        	{
+        	itemPtr.Append(KLabelDisplaySink);
+        	}
+        else if(sinks[i]->Type() == KMceFileSink ) 
+        	{
+        	itemPtr.Append(KLabelFileSink);
+        	}
+    //    itemPtr.Append( sinks[i]->TextualDirection() );
+        itemPtr.Append( KRightParenthesis() );
+        itemPtr.Append( KTab );
+        itemPtr.Append( sinks[i]->State() );
+        itemPtr.Append( KTab );
+    
+        iArray->AppendL( *item );
+        
+        CleanupStack::PopAndDestroy( item );
+        item = NULL;
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CMCETestUIVideoStreamViewModel::PopulateVideoStreamsL
+// Populate streams of a session
+// -----------------------------------------------------------------------------
+//
+void CMCETestUIVideoStreamViewModel::PopulateVideoCodecsL()
+    {
+    const RPointerArray<CMCETestUIEngineVideoCodec>& codecs = 
+            iStream.CodecsL();
+
+    for ( TInt i = 0; i < codecs.Count(); ++i )
+        {
+        TBuf8<KMceMaxSdpNameLength> name = codecs[i]->Codec().SdpName();
+                              
+        TInt itemLength = KCodec().Length() + 
+                          KLeftParenthesis().Length() +
+                   	      name.Length()+
+                          KRightParenthesis().Length() +
+                          codecs[i]->State().Length() +
+                          KTab().Length() * 3;
+      
+        TBuf16<KMceMaxSdpNameLength>  name16;
+        name16.Copy(name);
+        
+                      
+        HBufC16* item = HBufC16::NewLC( itemLength );
+        TPtr16 itemPtr = item->Des();
+        itemPtr.Append( KTab );
+        itemPtr.Append( KCodec );
+        itemPtr.Append( KLeftParenthesis() );
+        itemPtr.Append( name16 ) ;
+        itemPtr.Append( KRightParenthesis() );
+        itemPtr.Append( KTab );
+        itemPtr.Append( codecs[i]->State() );
+        itemPtr.Append( KTab );
+        iArray->AppendL( *item );
+        CleanupStack::PopAndDestroy( item );
+        item = NULL;
+        }
+    }
+
+// End of File