multimediacommscontroller/mmccvideosourcesink/src/mccvideosourcewrapper.cpp
changeset 0 1bce908db942
child 17 a5ac35ca6d81
--- /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 <e32def.h>
+#include <CCMRMediaRecorder.h>
+
+#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 );
+	}
+
+
+