diff -r 73a1feb507fb -r bc78a40cd63c mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengmceutils.cpp --- a/mmsharing/livecommsui/lcui/tsrc/dummymusengineplugin/src/musengmceutils.cpp Tue Aug 31 15:12:07 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,594 +0,0 @@ -/* -* Copyright (c) 2005-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: Utilities to get and set profile used with SWIS. -* -*/ - - - -// USER - -#include "musengmceutils.h" -#include "muslogger.h" - -// SYSTEM - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - - - - -// ----------------------------------------------------------------------------- -// Tells if parameter stream is a video stream with RTP source -// ----------------------------------------------------------------------------- -// -TBool MusEngMceUtils::IsVideoInStream( CMceMediaStream& aStream ) - { - return ( aStream.Type() == KMceVideo && - aStream.Source() && - aStream.Source()->Type() == KMceRTPSource ); - } - -// ----------------------------------------------------------------------------- -// Tells if parameter stream is a video stream with RTP sink -// ----------------------------------------------------------------------------- -// -TBool MusEngMceUtils::IsVideoOutStream( CMceMediaStream& aStream ) - { - TBool isOutStream( EFalse ); - if ( aStream.Type() == KMceVideo ) - { - CMceMediaSink* rtpSink = MusEngMceUtils::GetMediaSink( - aStream, - KMceRTPSink ); - - isOutStream = ( rtpSink != NULL ); - } - return isOutStream; - } - -// ----------------------------------------------------------------------------- -// Tells if parameter stream is an audio stream with RTP source -// ----------------------------------------------------------------------------- -// -TBool MusEngMceUtils::IsAudioInStream( CMceMediaStream& aStream ) - { - return ( aStream.Type() == KMceAudio && - aStream.Source() && - aStream.Source()->Type() == KMceRTPSource ); - } - - -// ----------------------------------------------------------------------------- -// Gets handle to video stream with RTP sink. -// ----------------------------------------------------------------------------- -// -CMceVideoStream* MusEngMceUtils::GetVideoOutStreamL( CMceSession& aSession ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVideoOutStreamL()" ) - - const RPointerArray& streams = aSession.Streams(); - - CMceVideoStream* videoOut = NULL; - - for ( TInt i = 0; i < streams.Count(); ++i ) - { - if ( MusEngMceUtils::IsVideoOutStream( *streams[i] ) ) - { - __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); - - videoOut = static_cast( streams[i] ); - } - - // Check if bound stream is a video stream with RTP sink. - if ( streams[i]->BoundStream() && - MusEngMceUtils::IsVideoOutStream( streams[i]->BoundStreamL() ) ) - { - __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); - - videoOut = static_cast( - &streams[i]->BoundStreamL() ); - } - } - - __ASSERT_ALWAYS( videoOut, User::Leave( KErrNotFound ) ); - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVideoOutStreamL()" ) - - return videoOut; - } - - -// ----------------------------------------------------------------------------- -// Gets handle to video stream with RTP source. -// ----------------------------------------------------------------------------- -// -CMceVideoStream* MusEngMceUtils::GetVideoInStreamL( CMceSession& aSession ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVideoInStreamL()" ) - - const RPointerArray& streams = aSession.Streams(); - - CMceVideoStream* videoIn = NULL; - - for ( TInt i = 0; i < streams.Count(); ++i ) - { - if ( MusEngMceUtils::IsVideoInStream( *streams[i] ) ) - - { - __ASSERT_ALWAYS( !videoIn, User::Leave( KErrOverflow ) ); - - videoIn = static_cast( streams[i] ); - } - - // Check if bound stream is a video stream with RTP souce. - if ( streams[i]->BoundStream() && - MusEngMceUtils::IsVideoInStream( streams[i]->BoundStreamL() ) ) - { - __ASSERT_ALWAYS( !videoIn, User::Leave( KErrOverflow ) ); - - videoIn = static_cast( - &streams[i]->BoundStreamL() ); - } - } - - __ASSERT_ALWAYS( videoIn, User::Leave( KErrNotFound ) ); - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVideoInStreamL()" ) - - return videoIn; - } - - -// ----------------------------------------------------------------------------- -// Gets handle to video stream with file sink -// ----------------------------------------------------------------------------- -// -CMceVideoStream* MusEngMceUtils::GetRecordingStream( CMceSession& aSession ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetRecordingStreamL()" ) - - const RPointerArray& streams = aSession.Streams(); - - CMceVideoStream* recordingStream = NULL; - - for ( TInt i = 0; i < streams.Count(); ++i ) - { - if ( streams[i]->Type() == KMceVideo ) - { - if ( MusEngMceUtils::GetMediaSink( *streams[i], KMceFileSink ) ) - { - recordingStream = static_cast( streams[i] ); - } - } - } - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetRecordingStreamL()" ) - - return recordingStream; - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a media sink of spesified type contained by a mediastream. -// ----------------------------------------------------------------------------- -// -CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceMediaStream& aStream, - TMceSinkType aType, - TMceSourceType aAssociatedSourceType ) - { - const RPointerArray& sinks = aStream.Sinks(); - for ( TInt i = 0; i < sinks.Count(); ++i ) - { - if ( sinks[i]->Type() == aType && - ( aAssociatedSourceType == KMusEngNoAssociatedSourceType || - aStream.Source()->Type() == aAssociatedSourceType ) ) - { - return sinks[i]; - } - } - - return NULL; - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a media sink of spesified type contained by a mediastream. -// ----------------------------------------------------------------------------- -// -CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceMediaStream& aStream, - TMceSinkType aType, - TMceSourceType aAssociatedSourceType ) - { - - CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( aStream, aType, aAssociatedSourceType ); - - __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); - - return sink; - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a media sink of spesified type contained by a session. -// ----------------------------------------------------------------------------- -// -CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceSession& aSession, - TMceSinkType aType, - TMceSourceType aAssociatedSourceType, - TBool aStrictMatch ) - { - CMceMediaSink* sink = NULL; - - TRAP_IGNORE( sink = MusEngMceUtils::GetMediaSinkL( - aSession, aType, aAssociatedSourceType, aStrictMatch ) ) - - return sink; - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a media sink of spesified type contained by a session. -// ----------------------------------------------------------------------------- -// -CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceSession& aSession, - TMceSinkType aType, - TMceSourceType aAssociatedSourceType, - TBool aStrictMatch ) - { - CMceMediaSink* sink = NULL; - - const RPointerArray& streams = aSession.Streams(); - - for ( TInt i = 0; i < streams.Count(); ++i ) - { - sink = MusEngMceUtils::GetMediaSink( *streams[i], aType, aAssociatedSourceType ); - if ( sink ) - { - return sink; - } - - if ( streams[i]->BoundStream() ) - { - sink = MusEngMceUtils::GetMediaSink( streams[i]->BoundStreamL(), - aType, - aAssociatedSourceType ); - if ( sink ) - { - return sink; - } - } - } - - if ( !sink && aAssociatedSourceType != KMusEngNoAssociatedSourceType && !aStrictMatch ) - { - // No preferred match, try without source preference - sink = GetMediaSinkL( aSession, aType ); - } - - __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); - - return sink; - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a speaker sink contained by specified stream or bound stream. -// ----------------------------------------------------------------------------- -// -CMceSpeakerSink* MusEngMceUtils::GetSpeaker( CMceMediaStream& aStream ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetSpeaker()" ) - - CMceSpeakerSink* speaker = NULL; - - if ( aStream.Type() == KMceAudio ) - { - speaker = static_cast( - MusEngMceUtils::GetMediaSink( aStream, KMceSpeakerSink ) ); - - if ( !speaker && aStream.BoundStream() ) - { - CMceMediaStream* boundStream = NULL; - TRAPD( error, boundStream = &aStream.BoundStreamL() ) - - if ( error == KErrNone ) - { - speaker = static_cast( - MusEngMceUtils::GetMediaSink( *boundStream, - KMceSpeakerSink ) ); - } - } - } - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetSpeaker()" ) - - return speaker; - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a camera source. -// ----------------------------------------------------------------------------- -// -CMceCameraSource* MusEngMceUtils::GetCameraL( CMceSession& aSession ) - { - // Camera can be only in out stream - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetCameraL()" ) - - CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( aSession ); - - if ( !( videoOut->Source() && - videoOut->Source()->Type() == KMceCameraSource ) ) - { - User::Leave( KErrNotFound ); - } - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetCameraL()" ) - return static_cast( videoOut->Source() ); - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a file source. -// ----------------------------------------------------------------------------- -// -CMceFileSource* MusEngMceUtils::GetFileSourceL( CMceSession& aSession ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetFileSourceL()" ) - - CMceVideoStream* videoOut = MusEngMceUtils::GetVideoOutStreamL( aSession ); - - if ( !( videoOut->Source() && - videoOut->Source()->Type() == KMceFileSource ) ) - { - User::Leave( KErrNotFound ); - } - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetFileSourceL()" ) - return static_cast( videoOut->Source() ); - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a display sink. -// ----------------------------------------------------------------------------- -// -CMceDisplaySink* MusEngMceUtils::GetDisplay( - CMceSession& aSession, TBool aPreferViewFinder ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplay()" ) - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplay()" ) - TMceSourceType preferredSource = - aPreferViewFinder ? KMceCameraSource : KMusEngNoAssociatedSourceType; - return static_cast( - MusEngMceUtils::GetMediaSink( aSession, KMceDisplaySink, preferredSource ) ); - - } - - -// ----------------------------------------------------------------------------- -// Gets handle to a display sink. -// ----------------------------------------------------------------------------- -// -CMceDisplaySink* MusEngMceUtils::GetDisplayL( - CMceSession& aSession, TBool aPreferViewFinder ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplayL()" ) - - CMceDisplaySink* display = MusEngMceUtils::GetDisplay( aSession, aPreferViewFinder ); - - __ASSERT_ALWAYS( display, User::Leave( KErrNotFound ) ); - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetDisplayL()" ) - return display; - } - -// ----------------------------------------------------------------------------- -// Gets handle to a display sink displaying received video. -// ----------------------------------------------------------------------------- -// -CMceDisplaySink* MusEngMceUtils::GetReceivingDisplay( CMceSession& aSession ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplay()" ) - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) - - // Search display which is connected with rtp source - TMceSourceType preferredSource = KMceRTPSource; - return static_cast( MusEngMceUtils::GetMediaSink( - aSession, KMceDisplaySink, preferredSource, ETrue ) ); - } - -// ----------------------------------------------------------------------------- -// Gets handle to a display sink displaying received video. -// ----------------------------------------------------------------------------- -// -CMceDisplaySink* MusEngMceUtils::GetReceivingDisplayL( CMceSession& aSession ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetReceivingDisplayL()" ) - - CMceDisplaySink* display = GetReceivingDisplay( aSession ); - __ASSERT_ALWAYS( display != NULL, User::Leave( KErrNotFound ) ); - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetReceivingDisplay()" ) - - return display; - } - -// ----------------------------------------------------------------------------- -// Gets handle to a display sink displaying viewfinder content. -// ----------------------------------------------------------------------------- -// -CMceDisplaySink* MusEngMceUtils::GetVfDisplay( CMceSession& aSession ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetVfDisplay()" ) - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::GetVfDisplay()" ) - - // Search display which is connected with camera - TMceSourceType preferredSource = KMceCameraSource; - return static_cast( MusEngMceUtils::GetMediaSink( - aSession, KMceDisplaySink, preferredSource, ETrue ) ); - } - -// ----------------------------------------------------------------------------- -// Adds display sink to specified stream if one does not exist already. -// Display rect is set in both cases. -// ----------------------------------------------------------------------------- -// -void MusEngMceUtils::AddDisplayL( CMceMediaStream& aStream, - CMceManager& aManager, - const TRect& aDisplayRect ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddDisplayL()" ) - - __ASSERT_ALWAYS( aStream.Type() == KMceVideo, User::Leave( KErrArgument ) ); - - CMceDisplaySink* display = static_cast( - MusEngMceUtils::GetMediaSink( - aStream, - KMceDisplaySink ) ); - - if ( !display ) - { - display = CMceDisplaySink::NewLC( aManager ); - aStream.AddSinkL( display ); - CleanupStack::Pop( display ); - } - - display->SetDisplayRectL( aDisplayRect ); - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddDisplayL()" ) - } - - -// ----------------------------------------------------------------------------- -// Adds display sink to specified stream if one does not exist already. -// ----------------------------------------------------------------------------- -// -void MusEngMceUtils::AddSpeakerL( CMceMediaStream& aStream ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddSpeakerL()" ) - - __ASSERT_ALWAYS( aStream.Type() == KMceAudio, User::Leave( KErrArgument ) ); - - CMceSpeakerSink* speaker = static_cast( - MusEngMceUtils::GetMediaSink( - aStream, - KMceSpeakerSink ) ); - - if ( !speaker ) - { - speaker = CMceSpeakerSink::NewLC(); - aStream.AddSinkL( speaker ); - CleanupStack::Pop( speaker ); - } - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddSpeakerL()" ) - } - - -// ----------------------------------------------------------------------------- -// Disables parameter stream, its' source and all the sinks. -// ----------------------------------------------------------------------------- -// -void MusEngMceUtils::DisableStreamL( CMceMediaStream& aStream ) - { - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) - - aStream.DisableL(); - - if ( aStream.Source() ) - { - aStream.Source()->DisableL(); - } - - for ( TInt sinkIndex = 0; sinkIndex < aStream.Sinks().Count(); ++sinkIndex ) - { - aStream.Sinks()[ sinkIndex ]->DisableL(); - } - - MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::DisableStreamL()" ) - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -void MusEngMceUtils::DoEnableDisplayL( CMceDisplaySink& aDisplay, TBool aEnable ) - { - MUS_LOG1( "mus: [ENGINE] -> MusEngMceUtils::DoEnableDisplayL() %d", - aEnable ) - - if ( aEnable ) - { - if ( !aDisplay.IsEnabled() ) - { - aDisplay.EnableL(); - MUS_LOG( " Display enabled" ) - } - else - { - MUS_LOG( " Display already enabled, ignore" ) - } - } - else - { - if ( aDisplay.IsEnabled() ) - { - aDisplay.DisableL(); - MUS_LOG( " Display disabled" ) - } - else - { - MUS_LOG( " Display already disabled, ignore" ) - } - } - - MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::DoEnableDisplayL()") - } - -// ----------------------------------------------------------------------------- -// -// ----------------------------------------------------------------------------- -// -TInt MusEngMceUtils::EnableInactivityTimer( - CMceSession& aSession, - TUint32 aInactivityTimeout ) - { - TInt err( KErrNotFound ); - CMceVideoStream* stream = NULL; - TRAP_IGNORE( stream = MusEngMceUtils::GetVideoInStreamL( aSession ) ) - if ( stream ) - { - // Instream has always RTP source - err = KErrNone; - CMceRtpSource* rtpSource = static_cast( stream->Source() ); - TRAP( err, rtpSource->EnableInactivityTimerL( aInactivityTimeout ) ) - } - - return err; - } - -// End of file