diff -r 33a5d2bbf6fc -r 73a1feb507fb mmsharing/mmshengine/src/musengmceutils.cpp --- a/mmsharing/mmshengine/src/musengmceutils.cpp Thu Aug 19 09:51:39 2010 +0300 +++ b/mmsharing/mmshengine/src/musengmceutils.cpp Tue Aug 31 15:12:07 2010 +0300 @@ -51,6 +51,23 @@ 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 @@ -78,21 +95,22 @@ for ( TInt i = 0; i < streams.Count(); ++i ) { - if ( streams[i]->Type() == KMceVideo ) + if ( MusEngMceUtils::IsVideoOutStream( *streams[i] ) ) { - CMceMediaSink* rtpSink = MusEngMceUtils::GetMediaSink( - *streams[i], - KMceRTPSink ); - if ( rtpSink ) - { - __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); - - videoOut = static_cast( streams[i] ); - } + __ASSERT_ALWAYS( !videoOut, User::Leave( KErrOverflow ) ); + + videoOut = static_cast( streams[i] ); + } - // There is no need to investigate bound stream since - // outstream is always constructed by Mus instead of MCE - } + // 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 ) ); @@ -178,12 +196,15 @@ // ----------------------------------------------------------------------------- // CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceMediaStream& aStream, - TMceSinkType aType ) + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) { const RPointerArray& sinks = aStream.Sinks(); for ( TInt i = 0; i < sinks.Count(); ++i ) { - if ( sinks[i]->Type() == aType ) + if ( sinks[i]->Type() == aType && + ( aAssociatedSourceType == KMusEngNoAssociatedSourceType || + aStream.Source()->Type() == aAssociatedSourceType ) ) { return sinks[i]; } @@ -198,10 +219,11 @@ // ----------------------------------------------------------------------------- // CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceMediaStream& aStream, - TMceSinkType aType ) + TMceSinkType aType, + TMceSourceType aAssociatedSourceType ) { - CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( aStream, aType ); + CMceMediaSink* sink = MusEngMceUtils::GetMediaSink( aStream, aType, aAssociatedSourceType ); __ASSERT_ALWAYS( sink, User::Leave( KErrNotFound ) ); @@ -214,11 +236,14 @@ // ----------------------------------------------------------------------------- // CMceMediaSink* MusEngMceUtils::GetMediaSink( CMceSession& aSession, - TMceSinkType aType ) + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) { CMceMediaSink* sink = NULL; - TRAP_IGNORE( sink = MusEngMceUtils::GetMediaSinkL( aSession, aType ) ) + TRAP_IGNORE( sink = MusEngMceUtils::GetMediaSinkL( + aSession, aType, aAssociatedSourceType, aStrictMatch ) ) return sink; } @@ -229,7 +254,9 @@ // ----------------------------------------------------------------------------- // CMceMediaSink* MusEngMceUtils::GetMediaSinkL( CMceSession& aSession, - TMceSinkType aType ) + TMceSinkType aType, + TMceSourceType aAssociatedSourceType, + TBool aStrictMatch ) { CMceMediaSink* sink = NULL; @@ -237,7 +264,7 @@ for ( TInt i = 0; i < streams.Count(); ++i ) { - sink = MusEngMceUtils::GetMediaSink( *streams[i], aType ); + sink = MusEngMceUtils::GetMediaSink( *streams[i], aType, aAssociatedSourceType ); if ( sink ) { return sink; @@ -246,13 +273,20 @@ if ( streams[i]->BoundStream() ) { sink = MusEngMceUtils::GetMediaSink( streams[i]->BoundStreamL(), - aType ); + 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 ) ); @@ -342,12 +376,15 @@ // Gets handle to a display sink. // ----------------------------------------------------------------------------- // -CMceDisplaySink* MusEngMceUtils::GetDisplay( CMceSession& aSession ) +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 ) ); + MusEngMceUtils::GetMediaSink( aSession, KMceDisplaySink, preferredSource ) ); } @@ -356,11 +393,12 @@ // Gets handle to a display sink. // ----------------------------------------------------------------------------- // -CMceDisplaySink* MusEngMceUtils::GetDisplayL( CMceSession& aSession ) +CMceDisplaySink* MusEngMceUtils::GetDisplayL( + CMceSession& aSession, TBool aPreferViewFinder ) { MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::GetDisplayL()" ) - CMceDisplaySink* display = MusEngMceUtils::GetDisplay( aSession ); + CMceDisplaySink* display = MusEngMceUtils::GetDisplay( aSession, aPreferViewFinder ); __ASSERT_ALWAYS( display, User::Leave( KErrNotFound ) ); @@ -368,6 +406,51 @@ 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. @@ -376,7 +459,8 @@ // void MusEngMceUtils::AddDisplayL( CMceMediaStream& aStream, CMceManager& aManager, - const TRect& aDisplayRect ) + const TRect& aDisplayRect, + TBool aDisabled ) { MUS_LOG( "mus: [ENGINE] -> MusEngMceUtils::AddDisplayL()" ) @@ -394,6 +478,11 @@ CleanupStack::Pop( display ); } + if ( aDisabled ) + { + MUS_LOG( "mus: [ENGINE] Initially disabled display" ) + display->DisableL(); + } display->SetDisplayRectL( aDisplayRect ); MUS_LOG( "mus: [ENGINE] <- MusEngMceUtils::AddDisplayL()" ) @@ -449,9 +538,63 @@ 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