diff -r 000000000000 -r 1bce908db942 multimediacommsengine/tsrc/MMCTestDriver/MCETester/src/TCmdGetStreamInfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/tsrc/MMCTestDriver/MCETester/src/TCmdGetStreamInfo.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,407 @@ +/* +* Copyright (c) 2008 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: Implementation +* +*/ + + + +#include "MCEConstants.h" +#include "TCmdGetStreamInfo.h" +#include "CTcMCEContext.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mcefilesource.h" + +// ----------------------------------------------------------------------------- +// TCmdGetStreamInfo::ExecuteL +// ----------------------------------------------------------------------------- +// +void TCmdGetStreamInfo::ExecuteL() + { + // ---------- Setup -------------------------------------------------------- + + // Get stream + CMceSession* session= + reinterpret_cast(GetObjectForIdL(KSessionId, ETrue)); + CDesC8Array* mediaStreams = new(ELeave)CDesC8ArraySeg(1); + CleanupStack::PushL( mediaStreams ); + const RPointerArray& streamPtrs = session->Streams(); + + for (TInt streamIndex=0; streamIndex < streamPtrs.Count(); streamIndex++) + { + // Add to registry by reference and fetch name + iContext.Registry().AddObjectL( *(streamPtrs[streamIndex]) ); + TBuf8< KTcMaxObjectName > streamId = + iContext.Registry().ObjectNameL( streamPtrs[streamIndex] ); + mediaStreams->AppendL( streamId ); + } + + // ---------- Execution ---------------------------------------------------- + + // ---------- Response creation -------------------------------------------- + + AddIdResponseL(KSessionId, session); // uses CleanupStack internally + + if ( mediaStreams->Count() > 0 ) + { + AddArrayResponseL( KResponseStreams, *mediaStreams ); + + for (TInt streamIndex=0; streamIndex < streamPtrs.Count(); streamIndex++) + { + if ((streamPtrs[streamIndex])->Type()==KMceAudio) + { + CMceAudioStream* audioStream =reinterpret_cast + (iContext.Registry().ObjectPtrL( mediaStreams->MdcaPoint(streamIndex) )); + //get the audio stream info + GetAudioStreamInfo( audioStream ); + } + else if ((streamPtrs[streamIndex])->Type()==KMceVideo) + { + CMceVideoStream* videoStream =reinterpret_cast + (iContext.Registry().ObjectPtrL( mediaStreams->MdcaPoint(streamIndex) )); + //get the video stream info + GetVideoStreamInfo( videoStream ); + } + else + { + // Keep pc-lint happy + } + } + CleanupStack::PopAndDestroy( mediaStreams ); + } + else + { + CleanupStack::PopAndDestroy( mediaStreams ); + } + + } + +// ----------------------------------------------------------------------------- +// TCmdGetStreamInfo::AddSourceToResponse +// ----------------------------------------------------------------------------- +// +void +TCmdGetStreamInfo::AddSourceToResponseL( const TDesC8& aParamNameForSourceId, + const TDesC8& aParamNameForSource, + CMceMediaStream& aStream ) + { + CMceMediaSource* source = aStream.Source(); + + iContext.Registry().AddObjectL( *source ); + TBuf8< KTcMaxObjectName > sourceId = + iContext.Registry().ObjectNameL( source ); + AddTextResponseL( aParamNameForSourceId, sourceId ); + switch ( source->Type() ) + { + case KMceRTPSource: + { + AddTextResponseL( aParamNameForSource, KValueSourceRTP ); + break; + } + case KMceMicSource: + { + AddTextResponseL( aParamNameForSource, KValueSourceMic ); + break; + } + case KMceCameraSource: + { + AddTextResponseL( aParamNameForSource, KValueSourceCamera ); + break; + } + case KMceFileSource: + { + AddTextResponseL( aParamNameForSource, KValueSourceFile ); + break; + } + default: + { + AddTextResponseL( aParamNameForSource, KValueSourceUnknown ); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// TCmdGetStreamInfo::AddSinksToResponse +// ----------------------------------------------------------------------------- +// +void TCmdGetStreamInfo::AddSinksToResponseL( const TDesC8& aParamNameForSinkIds, + const TDesC8& aParamNameForSinks, + CMceMediaStream& aStream ) + { + // Array for sink ids + CDesC8Array* sinkIds = new(ELeave)CDesC8ArraySeg(1); + CleanupStack::PushL( sinkIds ); + + // Array for sink names + CDesC8Array* sinks = new(ELeave)CDesC8ArraySeg(1); + CleanupStack::PushL( sinks ); + + const RPointerArray& sinkPtrs = aStream.Sinks(); + for ( TInt i = 0; i < sinkPtrs.Count(); i++ ) + { + // Id + iContext.Registry().AddObjectL( *(sinkPtrs[i]) ); + TPtrC8 sinkId = iContext.Registry().ObjectNameL( sinkPtrs[i] ); + sinkIds->AppendL( sinkId ); + + // Name + switch ( sinkPtrs[i]->Type() ) + { + case KMceRTPSink: + { + sinks->AppendL( KValueSinkRTP ); + break; + } + case KMceSpeakerSink: + { + sinks->AppendL( KValueSinkSpeaker ); + break; + } + case KMceDisplaySink: + { + sinks->AppendL( KValueSinkDisplay ); + break; + } + case KMceFileSink: + { + sinks->AppendL( KValueSinkFile ); + break; + } + default: + { + sinks->AppendL( KValueSinkUnknown ); + break; + } + } + } + + if ( sinks->Count() ) + { + AddArrayResponseL( aParamNameForSinkIds, *sinkIds ); + AddArrayResponseL( aParamNameForSinks, *sinks ); + } + + CleanupStack::PopAndDestroy( sinks ); + CleanupStack::PopAndDestroy( sinkIds ); + } + +// ----------------------------------------------------------------------------- +// TCmdGetStreamInfo::AddAudioCodecsToResponse +// ----------------------------------------------------------------------------- +// +void TCmdGetStreamInfo::AddAudioCodecsToResponseL( const TDesC8& aName, + CMceAudioStream& aStream ) + { + CDesC8Array* codecs = new(ELeave)CDesC8ArraySeg(1); + CleanupStack::PushL( codecs ); + + const RPointerArray& codecPtrs = aStream.Codecs(); + for (TInt codecIndex = 0; codecIndex < codecPtrs.Count(); codecIndex++ ) + { + // Add codec to registry by reference and fetch name + iContext.Registry().AddObjectL( *(codecPtrs[codecIndex]) ); + TBuf8< KTcMaxObjectName > codecId = + iContext.Registry().ObjectNameL( codecPtrs[codecIndex] ); + codecs->AppendL( codecId ); + } + + if ( codecs->Count() ) + { + AddArrayResponseL( aName, *codecs ); + } + + CleanupStack::PopAndDestroy( codecs ); + } + +// ----------------------------------------------------------------------------- +// TCmdGetStreamInfo::AddVideoCodecsToResponse +// ----------------------------------------------------------------------------- +// +void TCmdGetStreamInfo::AddVideoCodecsToResponseL( const TDesC8& aName, + CMceVideoStream& aStream ) + { + CDesC8Array* codecs = new(ELeave)CDesC8ArraySeg(1); + CleanupStack::PushL( codecs ); + + const RPointerArray& codecPtrs = aStream.Codecs(); + for (TInt codecIndex = 0; codecIndex < codecPtrs.Count(); codecIndex++ ) + { + // Add codec to registry by reference and fetch name + iContext.Registry().AddObjectL( *(reinterpret_cast(codecPtrs[codecIndex]) )); + + TBuf8< KTcMaxObjectName > codecId = + iContext.Registry().ObjectNameL( codecPtrs[codecIndex] ); + codecs->AppendL( codecId ); + } + + if ( codecs->Count() ) + { + AddArrayResponseL( aName, *codecs ); + } + + CleanupStack::PopAndDestroy( codecs ); + } + +void TCmdGetStreamInfo::GetAudioStreamInfo( CMceAudioStream* aAudioStream ) + { + if (aAudioStream != NULL) + { + AddTextResponseL( KResponseStreamType, KValueStreamTypeAudio ); + + AddTextualStreamStateL( aAudioStream->IsEnabled(), EFalse ); + + AddIntegerResponseL( KResponseLocalMediaPort, aAudioStream->LocalMediaPort() ); + + AddSourceToResponseL( KResponseSourceId, + KResponseSource, + *aAudioStream ); + + AddSinksToResponseL( KResponseSinkIds, + KResponseSinks, + *aAudioStream ); + + AddAudioCodecsToResponseL( KResponseAudioCodecs, *aAudioStream ); + + // Check boundStream + if ( aAudioStream->BoundStream() ) + { + // Add to registry by reference and fetch name + iContext.Registry().AddObjectL( aAudioStream->BoundStreamL() ); + TBuf8< KTcMaxObjectName > boundStreamId = + iContext.Registry().ObjectNameL( + &(aAudioStream->BoundStreamL()) ); + // Name is numeric, but adding is easier this way + AddTextResponseL( KResponseBoundStream, boundStreamId ); + + if ( aAudioStream->BoundStreamL().Type() == KMceAudio ) + { + CMceAudioStream* boundAudioStream = + static_cast + (&(aAudioStream->BoundStreamL())); + + AddTextResponseL( KResponseBoundStreamType, + KValueStreamTypeAudio ); + + /*AddIntegerResponseL( KResponseBoundStreamState, + boundAudioStream->State() );*/ + + AddTextualStreamStateL( boundAudioStream->IsEnabled(), ETrue ); + + AddIntegerResponseL( KResponseBoundLocalMediaPort, + boundAudioStream->LocalMediaPort() ); + + AddSourceToResponseL( KResponseBoundStreamSourceId, + KResponseBoundStreamSource, + *boundAudioStream ); + + AddSinksToResponseL( KResponseBoundStreamSinkIds, + KResponseBoundStreamSinks, + *boundAudioStream ); + AddAudioCodecsToResponseL( KResponseBoundStreamCodecs, + *boundAudioStream ); + } + } + } + + } + +void TCmdGetStreamInfo::GetVideoStreamInfo( CMceVideoStream* aVideoStream ) + { + if (aVideoStream != NULL) + { + AddTextResponseL( KResponseStreamType, KValueStreamTypeVideo ); + + AddTextualStreamStateL( aVideoStream->IsEnabled(), EFalse ); + + AddIntegerResponseL( KResponseLocalMediaPort, aVideoStream->LocalMediaPort() ); + + AddSourceToResponseL( KResponseSourceId, + KResponseSource, + *aVideoStream ); + + AddSinksToResponseL( KResponseSinkIds, KResponseSinks, *aVideoStream ); + + AddVideoCodecsToResponseL( KResponseVideoCodecs, *aVideoStream ); + + // Check boundStream + + if ( aVideoStream->BoundStream() ) + { + // Add to registry by reference and fetch name + iContext.Registry().AddObjectL( aVideoStream->BoundStreamL() ); + TBuf8< KTcMaxObjectName > boundStreamId = + iContext.Registry().ObjectNameL( + &(aVideoStream->BoundStreamL()) ); + // Name is numeric, but adding is easier this way + AddTextResponseL( KResponseBoundStream, boundStreamId ); + + if ( aVideoStream->BoundStreamL().Type() == KMceVideo ) + { + + CMceVideoStream* boundVideoStream = + static_cast + (&(aVideoStream->BoundStreamL())); + + AddTextResponseL( KResponseBoundStreamType, + KValueStreamTypeVideo ); + + AddTextualStreamStateL( boundVideoStream->IsEnabled(), ETrue ); + + AddIntegerResponseL( KResponseBoundLocalMediaPort, + boundVideoStream->LocalMediaPort() ); + + AddSourceToResponseL( KResponseBoundStreamSourceId, + KResponseBoundStreamSource, + *boundVideoStream ); + + AddSinksToResponseL( KResponseBoundStreamSinkIds, + KResponseBoundStreamSinks, + *boundVideoStream ); + + AddVideoCodecsToResponseL( KResponseBoundStreamCodecs, + *boundVideoStream ); + } + } + } + } + +// ----------------------------------------------------------------------------- +// TCmdGetStreamInfo::Match +// ----------------------------------------------------------------------------- +// +TBool TCmdGetStreamInfo::Match( const TTcIdentifier& aId ) + { + return TTcMceCommandBase::Match( aId, _L8("GetStreamInfo") ); + } + +// ----------------------------------------------------------------------------- +// TCmdGetStreamInfo::CreateL +// ----------------------------------------------------------------------------- +// +TTcCommandBase* TCmdGetStreamInfo::CreateL( MTcTestContext& aContext ) + { + return new( ELeave ) TCmdGetStreamInfo( aContext ); + }