diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccvideosourcesink/src/mccvideosourcewrapper.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccvideosourcesink/src/mccvideosourcewrapper.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,394 @@ +/* +* Copyright (c) 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: +* +*/ + + + + +// INCLUDE FILES +#include +#include + +#include "mccvideosourcewrapper.h" +#include "mccvideosourcesinklogs.h" + +#define VIDEO_SOURCE_ASSERT_READINESS \ +__ASSERT_ALWAYS( iMediaRecorder && !iFatalErrorOccured, User::Leave( KErrNotReady ) ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::NewL +// ----------------------------------------------------------------------------- +// +CMccVideoSourceWrapper* CMccVideoSourceWrapper::NewL( + MCMRMediaSink& aObserver, + MCMRMediaRecorderObserver& aObserver2 ) + { + CMccVideoSourceWrapper* self = new ( ELeave ) CMccVideoSourceWrapper( + aObserver, aObserver2 ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::ConstructL +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::CMccVideoSourceWrapper +// ----------------------------------------------------------------------------- +// +CMccVideoSourceWrapper::CMccVideoSourceWrapper( + MCMRMediaSink& aObserver, + MCMRMediaRecorderObserver& aObserver2 ) + : iObserver( aObserver ), iObserver2( aObserver2 ) + { + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::~CMccVideoSourceWrapper +// ----------------------------------------------------------------------------- +// +CMccVideoSourceWrapper::~CMccVideoSourceWrapper() + { + if ( iMediaRecorder && + !iFatalErrorOccured && + iMediaRecorder->State() == CCMRMediaRecorder::EStateRecording ) + { + TRAP_IGNORE( StopL() ) + } + delete iMediaRecorder; + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::OpenL +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::OpenL( + MDataSource* aAudioSource, + TInt aCameraHandle, + const TDesC8& aVideoMimeType, + TFourCC aAudioType, + TUid aEncoderUid ) + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::OpenL" ) + + __ASSERT_ALWAYS( !iMediaRecorder, User::Leave( KErrAlreadyExists ) ); + iMediaRecorder = CCMRMediaRecorder::NewL(); + + iFatalErrorOccured = EFalse; + + iMediaRecorder->OpenL( this, aAudioSource, this, aCameraHandle, + aVideoMimeType, aAudioType ) ; + iMediaRecorder->SetAudioEnabledL( EFalse ); + + if ( iMediaRecorder->State() == CCMRMediaRecorder::EStateOpen ) + { + if ( aEncoderUid != KNullUid ) + { + __V_SOURCESINK_CONTROLL_INT1( "SetPreferredVideoEncoderL, uid:", + aEncoderUid.iUid ) + iMediaRecorder->SetPreferredVideoEncoderL( aEncoderUid ); + __V_SOURCESINK_CONTROLL( "SetPreferredVideoEncapsulationL" ) + iMediaRecorder->SetPreferredVideoEncapsulationL( EDuElementaryStream ); + } + + __V_SOURCESINK_CONTROLL( "SetVideoCodingOptionsL" ) + //set mediarecorder to insert GOB:s + TCCMRVideoCodingOptions CodingOptions; + CodingOptions.iSyncIntervalInPicture = 1; + CodingOptions.iMinRandomAccessPeriodInSeconds = KIPULRandomAccessPeriod; + iMediaRecorder->SetVideoCodingOptionsL( CodingOptions ); + + __V_SOURCESINK_CONTROLL( "PrepareL" ) + iMediaRecorder->PrepareL(); + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper, \ +preparing recorder success" ) + } + else + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper, \ +opening recorder success, waiting" ) + } + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::OpenL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::PlayL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::PlayL() + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SourcePlayL" ) + + VIDEO_SOURCE_ASSERT_READINESS + iMediaRecorder->RecordL(); + + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SourcePlayL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::ResumeL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::ResumeL() + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::ResumeL" ) + + VIDEO_SOURCE_ASSERT_READINESS + iMediaRecorder->ResumeL(); + + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::ResumeL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::PauseL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::PauseL() + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SourcePauseL") + + VIDEO_SOURCE_ASSERT_READINESS + iMediaRecorder->PauseL(); + + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SourcePauseL, exit") + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::StopL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::StopL() + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SourceStopL" ) + + if ( iMediaRecorder && !iFatalErrorOccured ) + { + iMediaRecorder->StopL(); + } + + // Delete the recorder in order to free camera resources + delete iMediaRecorder; + iMediaRecorder = 0; + + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SourceStopL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::GetVideoBitrate() +// ----------------------------------------------------------------------------- +// +TUint CMccVideoSourceWrapper::GetVideoBitrateL() + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetVideoBitrateL" ) + + VIDEO_SOURCE_ASSERT_READINESS + return iMediaRecorder->VideoBitRateL(); + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::SetVideoBitrateL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::SetVideoBitrateL( TUint aVideoBitRate ) + { + __V_SOURCESINK_CONTROLL_INT1( "CMccVideoSourceWrapper::SetVideoBitrateL", aVideoBitRate ) + + VIDEO_SOURCE_ASSERT_READINESS + iMediaRecorder->SetVideoBitRateL( aVideoBitRate ); + + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetVideoBitrateL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::SetVideoFrameRateL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::SetVideoFrameRateL( TReal32 aFramesPerSecond ) + { + __V_SOURCESINK_CONTROLL_REAL( "CMccVideoSourceWrapper::SetVideoFrameRateL", + aFramesPerSecond ) + + VIDEO_SOURCE_ASSERT_READINESS + + if ( aFramesPerSecond > 0 ) + { + iMediaRecorder->SetVideoFrameRateL( aFramesPerSecond ); + } + + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetVideoFrameRateL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::SetVideoRateControlOptionsL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::SetVideoRateControlOptionsL( const TRateControlOptions& aOptions ) + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetVideoRateControlOptionsL") + + VIDEO_SOURCE_ASSERT_READINESS + iMediaRecorder->SetVideoRateControlOptionsL( aOptions ); + + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetVideoRateControlOptionsL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::GetVideoRateControlOptionsL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::GetVideoRateControlOptionsL( TRateControlOptions& aOptions ) + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::GetVideoRateControlOptionsL") + + VIDEO_SOURCE_ASSERT_READINESS + iMediaRecorder->GetVideoRateControlOptionsL( aOptions ); + + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::GetVideoRateControlOptionsL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::SetVideoBitrateL() +// ----------------------------------------------------------------------------- +// +CCMRMediaRecorder::TRecorderState CMccVideoSourceWrapper::State() + { + if ( iMediaRecorder && !iFatalErrorOccured ) + { + return iMediaRecorder->State(); + } + else + { + return CCMRMediaRecorder::EStateNone; + } + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::WriteBufferL() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::WriteBufferL( CCMRMediaBuffer* aBuffer ) + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::WriteBufferL" ) + iObserver.WriteBufferL( aBuffer ); + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::WriteBufferL, exit" ) + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::SetVideoFrameSize() +// ----------------------------------------------------------------------------- +// +TInt CMccVideoSourceWrapper::SetVideoFrameSize( TSize aSize ) + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetVideoFrameSize" ) + return iObserver.SetVideoFrameSize( aSize ); + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::SetAverageVideoBitRate() +// ----------------------------------------------------------------------------- +// +TInt CMccVideoSourceWrapper::SetAverageVideoBitRate( TInt aBitRate ) + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetAverageVideoBitRate" ) + return iObserver.SetAverageVideoBitRate( aBitRate ); + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::SetMaxVideoBitRate() +// ----------------------------------------------------------------------------- +// +TInt CMccVideoSourceWrapper::SetMaxVideoBitRate( TInt aBitRate ) + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetMaxVideoBitRate" ) + return iObserver.SetMaxVideoBitRate( aBitRate ); + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::SetAverageAudioBitRate() +// ----------------------------------------------------------------------------- +// +TInt CMccVideoSourceWrapper::SetAverageAudioBitRate( TInt aBitRate ) + { + __V_SOURCESINK_CONTROLL( "CMccVideoSourceWrapper::SetAverageAudioBitRate" ) + return iObserver.SetAverageAudioBitRate( aBitRate ); + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::MmroPrepareComplete() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::MmroPrepareComplete( TInt aError ) + { + __V_SOURCESINK_CONTROLL_INT1( "CMccVideoSourceWrapper::MmroPrepareComplete=", + aError ) + iObserver2.MmroPrepareComplete( aError ); + + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::MmroStateChange() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::MmroStateChange( TInt aState, TInt aError ) + { + __V_SOURCESINK_CONTROLL_INT2( "CMccVideoSourceWrapper::MmroStateChange, \ +aState=", aState, "aError=", aError ) + + if ( iMediaRecorder ) + { + __V_SOURCESINK_CONTROLL_INT1( "CMccVideoSourceWrapper, media recorder state:", + iMediaRecorder->State() ) + } + + iObserver2.MmroStateChange( aState, aError ); + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::MmroTemporaryError() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::MmroTemporaryError( TInt aError ) + { + __V_SOURCESINK_CONTROLL_INT1( "CMccVideoSourceWrapper::MmroTemporaryError=", + aError ) + iObserver2.MmroTemporaryError( aError ); + } + +// ----------------------------------------------------------------------------- +// CMccVideoSourceWrapper::MmroFatalError() +// ----------------------------------------------------------------------------- +// +void CMccVideoSourceWrapper::MmroFatalError( TInt aError ) + { + __V_SOURCESINK_CONTROLL_INT1( "CMccVideoSourceWrapper::MmroFatalError=", aError ) + + // Remember fatal error + iFatalErrorOccured = ETrue; + + iObserver2.MmroFatalError( aError ); + } + + +