--- a/vtengines/videoteleng/Src/Media/CVtEngDrawDSA.cpp Tue Jan 26 12:01:21 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,586 +0,0 @@
-/*
-* 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: Remote video handler.
-*
-*/
-
-
-// INCLUDE FILES
-
-#include "CVtEngDrawDSA.h"
-#include "CVtEngEventManager.h"
-#include "VtEngPanic.h"
-#include "MVtEngFrameObserver.h"
-#include "CVtEngSettings.h"
-#include "VtEngUtils.h"
-#include <videotelephonyvariant.hrh>
-#include <tdisplaysinkparamsdsa.h>
-#include <cvtlogger.h>
-
-// LOCAL CONSTANTS
-
-// Default display mode.
-const TDisplayMode KVtEngDefaultDisplayMode( EColor64K );
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::NewL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-CVtEngDrawDSA* CVtEngDrawDSA::NewL(
- MDisplaySinkObserver* aObserver )
- {
- CVtEngDrawDSA* self = new ( ELeave ) CVtEngDrawDSA( aObserver );
- CleanupStack::PushL( self );
- self->ConstructL( );
- CleanupStack::Pop();
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::~CVtEngDrawDSA
-// Destructor. Cannot leave.
-// -----------------------------------------------------------------------------
-//
-CVtEngDrawDSA::~CVtEngDrawDSA()
- {
- __VTPRINTENTER( "RVD(DSA).~" )
- Cancel();
- delete iBitmap1;
- delete iBitmap2;
- if ( iImageScaler )
- {
- iImageScaler->Release();
- }
- __VTPRINTEXIT( "RVD(DSA).~" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::CVtEngDrawDSA
-// C++ constructor. Cannot leave.
-// -----------------------------------------------------------------------------
-//
-CVtEngDrawDSA::CVtEngDrawDSA( MDisplaySinkObserver* aObserver ) :
- CVtEngDraw( aObserver ), iBitmapSetAvail( ETrue )
- {
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseConstructL
-// Base construction.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseConstructL( )
- {
- __VTPRINTENTER( "RVD(DSA).BaseConstructL" )
- TSize vtEngRemoteVideoDefaultSize( KVtEngRemoteVideoDefaultWidth,
- KVtEngRemoteVideoDefaultHeight );
-
- iBitmap1 = new ( ELeave ) CFbsBitmap();
- User::LeaveIfError( iBitmap1->Create(
- vtEngRemoteVideoDefaultSize, KVtEngDefaultDisplayMode ) );
- iBitmap2 = new ( ELeave ) CFbsBitmap();
- User::LeaveIfError( iBitmap2->Create(
- vtEngRemoteVideoDefaultSize, KVtEngDefaultDisplayMode ) );
- iImageScaler = VtEngScalerFactory::CreateScalerL( *this );
- __VTPRINT2( DEBUG_MEDIA | DEBUG_CONSTRUCT,
- "RVD.ConL scaler ok %d", iImageScaler != NULL )
- __VTPRINTEXIT( "RVD(DSA).BaseConstructL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::CreateSinkL
-// Instantiates display sink.
-// -----------------------------------------------------------------------------
-//
-MDisplaySink* CVtEngDrawDSA::CreateSinkL()
- {
- __VTPRINTENTER( "RVD(DSA).CreateSinkL" )
- TDisplaySinkParamsDSA params;
- GetSinkParams( params );
- MDisplaySink* sink = ::CreateSinkL( params, KNullDesC8 );
- __VTPRINTEXITR( "RVD(DSA).CreateSinkL flags=%d", params.iFlags )
- return sink;
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseDoCancel
-// DoCancel for derived class.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseDoCancel()
- {
- __VTPRINTENTER( "RVD(DSA).BaseDoCancel" )
- __VTPRINTEXIT( "RVD(DSA).BaseDoCancel" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseVerifyConfigL
-// Checks current configuration against DSA implementation.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseVerifyConfigL()
- {
- __VTPRINTENTER( "RVD(DSA).BaseVerifyConfigL" )
- __VTPRINTEXIT( "RVD(DSA).BaseVerifyConfigL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseRestartL
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseRestartL()
- {
- __VTPRINTENTER( "RVD(DSA).BaseRestartL" )
- __VTPRINTEXIT( "RVD(DSA).BaseRestartL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseAbortNow
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseAbortNow()
- {
- __VTPRINTENTER( "RVD(DSA).BaseAbortNow" )
- __VTPRINTEXIT( "RVD(DSA).BaseAbortNow" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseStartDrawL
-// Starts the drawing.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseStartDrawL()
- {
- __VTPRINTENTER( "RVD(DSA).BaseStartDrawL" )
- if ( iDSA )
- {
- SetFlag( EReadyInternal );
- if ( !IsActive() )
- {
- Activate();
- iDisplaySink->SetBitmapAvailable( MDisplaySink::EFirstBitmap );
- __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL,
- "RVD(DSA).BaseStartDrawL bmp avail done" )
- iWatcher->Start( KVtEngWatcherTimeout, KVtEngWatcherTimeout,
- iCallback );
- }
- SetFlag( ERemoteVideoDrawing );
- }
- else
- {
- User::Leave( KErrNotReady );
- }
- __VTPRINTEXIT( "RVD(DSA).BaseStartDrawL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseStopDraw
-// Stop the drawing.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseStopDraw()
- {
- // Cancel the timer in any case.
- __VTPRINTENTER( "RVD(DSA).BaseStopDraw" )
- iWatcher->Cancel();
- if ( iDSA )
- {
- ClearFlag( ERemoteVideoDrawing | EStarted );
- iDSA->Cancel();
- }
-
- // Stop also scaling
- if ( iImageScaler )
- {
- iImageScaler->Cancel();
- }
-
- Cancel();
- __VTPRINTEXIT( "RVD(DSA).BaseStopDraw" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseSetConfigL
-// Sets new configuration.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseSetConfigL( const TVtEngRenderConfig& aConfig )
- {
- __VTPRINTENTER( "RVD(DSA).BaseSetConfigL" )
- Mem::FillZ( &iConfig, sizeof( TVtEngRenderConfigDSA ) );
- iConfig = aConfig;
- ConfigUpdatedL();
- __VTPRINTEXIT( "RVD(DSA).BaseSetConfigL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseSetUIForegroundL
-// Sets UI foreground status.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseSetUIForegroundL( TBool aForeground )
- {
- __VTPRINTENTER( "RVD(DSA).BaseSetUIForegroundL" )
- if ( aForeground )
- {
- TBool wasSentToBackground( IsFlag( ESentToBackground ) );
- SetFlag( EFlagUIForeground );
- ClearFlag( ESentToBackground );
- if ( wasSentToBackground )
- {
- BaseRefreshBitmapsL();
- Restart( RDirectScreenAccess::ETerminateCancel );
- BaseStartDrawL();
- }
- }
- else
- {
- BaseStopDraw();
- ClearFlag( EFlagUIForeground );
- SetFlag( ESentToBackground );
- }
- __VTPRINTEXIT( "RVD(DSA).BaseSetUIForegroundL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseVideoFrameSizeChangedL
-// Called when incoming frame buffer size changes.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseVideoFrameSizeChangedL( const TSize& /*aTo*/ )
- {
- __VTPRINTENTER( "RVD(DSA).BaseVideoFrameSizeChangedL" )
- __VTPRINTEXIT( "RVD(DSA).BaseVideoFrameSizeChangedL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseRequestLastFrame
-// Request update last remote video frame through MVtEngFrameObserver::vtSetFrame
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseRequestLastFrame()
- {
- __VTPRINTENTER( "RVD(DSA).BaseRequestLastFrame" )
- __VTPRINTEXIT( "RVD(DSA).BaseRequestLastFrame" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::Config
-// Returns current configuration.
-// -----------------------------------------------------------------------------
-//
-TVtEngRenderConfig& CVtEngDrawDSA::Config()
- {
- return iConfig;
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::RunL
-// CActive heir execution method.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::RunL()
- {
- __VTPRINTENTER( "RVD(DSA).RunL" )
- __VTPRINT2( DEBUG_MEDIA, " bmpNo=%d", iBitmapNo )
- iBitmapNo = iStatus.Int() == 0 ?
- MDisplaySink::ESecondBitmap :
- MDisplaySink::EFirstBitmap ;
-
- iBitmapSetAvail = EFalse;
-
- TBool dropFrame( EFalse );
-
- if ( !iDSUpdated )
- {
- __VTPRINT( DEBUG_MEDIA, "RVD(DSA).RunL !Updated" )
- dropFrame = ETrue;
- }
- else if ( !IsFlag( EFlagUIForeground ) )
- {
- __VTPRINT( DEBUG_MEDIA, "RVD(DSA).RunL !Flag( EFlagUIForeground )" )
- dropFrame = ETrue;
- }
-
- if ( dropFrame )
- {
- iBitmapSetAvail = ETrue;
- Activate();
- iDisplaySink->SetBitmapAvailable( iBitmapNo );
- __VTPRINTEXIT( "RVD(DSA).RunL" )
- return;
- }
-
- // Image received, reset counter.
- iCheckpoint = KVtEngWatcherThreshold;
-
- __VTPRINT2( DEBUG_MEDIA, "RVD(DSA).RunL iStatus=%d", iStatus.Int() )
- if ( iStatus >= KErrNone )
- {
- __VTPRINT2( DEBUG_MEDIA, "RVD(DSA).RunL flags=%d", iFlags )
- TBool firstFrame( !IsFlag ( EFirstFrameReceived ) );
- SetFlag( EFirstFrameReceived );
-
- // Remote video is about to start?
- if ( !IsFlag( EStarted ) && IsFlag( EReadyInternal ) )
- {
- SetFlag( EStarted );
- iDSA->StartL();
- if ( !iConfig.iClipRect.IsEmpty() )
- {
- SetFlag( EReadyForeground );
- iDSA->Gc()->SetClippingRect( iConfig.iClipRect );
- }
- __VTPRINT( DEBUG_MEDIA, "RVD(DSA).RunL notify rvd start" )
- //CVtEngEventManager::NotifyEvent( KVtEngRemoteVideoStarted );
- }
- if ( firstFrame )
- {
- CVtEngEventManager::NotifyEvent( KVtEngRemoteVideoStarted );
- }
- if ( IsFlag( EStarted ) )
- {
- __VTPRINT( DEBUG_MEDIA, "RVD(DSA).RunL refresh" )
- BaseRefreshL();
- }
- }
- else
- {
- __VTPRINT( DEBUG_MEDIA, "RVD.RunL notify rvd problem" )
- CVtEngEventManager::NotifyEvent( KVtEngRemoteRenderingProblem );
- __VTPRINTEXIT( "RVD(DSA).RunL" )
- return;
- }
-
- __VTPRINT( DEBUG_MEDIA, "RVD.RunL setting active" )
- Activate();
-
- // Set bitmap only if not to be scaled
- if( !iImageScaler )
- {
- if ( !iBitmapSetAvail )
- {
- iDisplaySink->SetBitmapAvailable( iBitmapNo );
- iBitmapSetAvail = ETrue;
- }
- __VTPRINT( DEBUG_MEDIA, "RVD(DSA).ScalingCompleted set bmp available" )
- }
-
- __VTPRINTEXIT( "RVD(DSA).RunL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::ScalingCompleted
-// Callback to receive scaled images.
-// Draws received image.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::ScalingCompleted(
- CFbsBitmap* aBitmap,
- TInt aError )
- {
- __VTPRINTENTER( "RVD(DSA).ScalingCompleted" )
- __VTPRINT2( DEBUG_MEDIA, "RVD(DSA).ScalingReady %d", aError )
- __VTPRINT2( DEBUG_MEDIA, "RVD(DSA).ScalingReady image %d", aBitmap ? 1 : 0 )
- if ( aError == KErrNone &&
- aBitmap != NULL )
- {
- DrawBitmap( *aBitmap );
- if ( !iBitmapSetAvail )
- {
- // Set bitmap available if not already set
- __VTPRINT( DEBUG_MEDIA, "RVD(DSA).ScalingCompleted set bmp available" )
- Activate();
- iDisplaySink->SetBitmapAvailable( iBitmapNo );
- iBitmapSetAvail = ETrue;
- }
- __VTPRINT( DEBUG_MEDIA, "RVD(DSA).ScalingCompleted available?" )
- }
- else if ( aError != KErrCancel )
- {
- // Notification of failed scaling.
- CVtEngEventManager::NotifyEvent( KVtEngRemoteRenderingProblem );
- __VTPRINT( DEBUG_MEDIA, "RVD(DSA).ScalingReady problems" )
- }
- __VTPRINTEXITR( "RVD(DSA).ScalingCompleted err=%d", aError )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseRefreshL
-// If using scaler, start the scaling otherwise draw a bitmap.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseRefreshL()
- {
- __VTPRINTENTER( "RVD(DSA).BaseRefreshL" )
- if ( iConfig.iWindow )
- {
- if ( IsFlag( EReady ) && IsFlag( EFirstFrameReceived ) &&
- IsFlag( EFlagUIForeground ) )
- {
- CFbsBitmap* current = iBitmapNo != 0 ? iBitmap1 : iBitmap2;
- if ( current )
- {
- if ( iImageScaler )
- {
- __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL,
- "RVD(DSA).BaseRefreshL scaling" )
- TInt index = 0;
- if ( current == iBitmap2 )
- {
- index = 1;
- }
- iImageScaler->Cancel();
- iImageScaler->ScaleL( index );
- }
- else
- {
- DrawBitmap( *current );
- }
- }
- }
- }
- __VTPRINTEXIT( "RVD(DSA).BaseRefreshL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::BaseRefreshBitmapsL
-// Refreshes bitmaps sizes and display mode if needed.
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::BaseRefreshBitmapsL()
- {
- __VTPRINTENTER( "RVD(DSA).BaseRefreshBitmapsL" )
- const TDisplayMode currentMode( iConfig.iWsSreenDevice->DisplayMode() );
- TBool refreshDisplayMode = EFalse;
- TSize newSize( KVtEngRemoteVideoDefaultWidth,
- KVtEngRemoteVideoDefaultHeight );
-
- // Use new size if supplied
- if ( iSourceSize.iHeight > 0 && iSourceSize.iWidth > 0 )
- {
- newSize = iSourceSize;
- iSourceSize.iHeight = 0;
- iSourceSize.iWidth = 0;
- }
-
- __VTPRINT( DEBUG_MEDIA , "================== RVD.RFBM ==================" )
- __VTPRINT2( DEBUG_MEDIA , " newSize.iWidth: %d", newSize.iWidth)
- __VTPRINT2( DEBUG_MEDIA , " newSize.iHeight: %d ", newSize.iHeight )
- __VTPRINT( DEBUG_MEDIA , "================== RVD.RFBM ==================" )
-
- TBool refreshSize = EFalse;
- if ( iBitmap1 )
- {
- refreshDisplayMode = ( iBitmap1->DisplayMode() != currentMode );
- refreshSize = ( newSize != iBitmap1->SizeInPixels() );
- }
-
- // Delete and create the bitmaps
- if ( refreshDisplayMode || refreshSize || !iBitmap1 || !iBitmap2 )
- {
- __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL,
- "RVD(DSA).BaseRefreshBitmapsL bmp create" )
- if ( iImageScaler )
- {
- iImageScaler->Cancel();
- }
-
- iConfig.iObserver->vtSetFrame(
- MVtEngFrameObserver::ERemoteVideoFrame, 0 );
- delete iBitmap1;
- iBitmap1 = NULL;
- delete iBitmap2;
- iBitmap2 = NULL;
-
- iBitmap1 = new ( ELeave ) CFbsBitmap();
- User::LeaveIfError( iBitmap1->Create(
- newSize, currentMode ) );
- iBitmap2 = new ( ELeave ) CFbsBitmap();
- User::LeaveIfError( iBitmap2->Create(
- newSize, currentMode ) );
- ClearFlag( EFirstFrameReceived );
- }
-
- // set the params for DS
- TDisplaySinkParamsDSA params;
- GetSinkParams( params );
-
- // Update the scaler
- if ( iImageScaler )
- {
- // Try to configure first, if returns true
- // configure again
- __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL,
- "RVD(DSA).BaseRefreshBitmapsL cnfg" )
-
- iImageScaler->ConfigureL( currentMode,
- iConfig.iRect.Size(), params.iBitmap1Handle,
- params.iBitmap2Handle );
-
- if ( IsFlag( EFirstFrameReceived ) )
- {
- __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL,
- "CVtEngDrawDSA::RefreshBitmapsL RFR" )
- BaseRefreshL();
- }
-
- }
- __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL,
- "RVD(DSA).BaseRefreshBitmapsL USP" )
- __VTPRINT( DEBUG_MEDIA | DEBUG_DETAIL,
- "RVD(DSA).BaseRefreshBitmapsL USP flag" )
- iDisplaySink->UpdateSinkParamsL( params, iDSUpdated );
- Activate();
- iDisplaySink->SetBitmapAvailable( MDisplaySink::EFirstBitmap );
- __VTPRINTEXIT( "RVD(DSA).BaseRefreshBitmapsL" )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::DrawBitmap
-// Draws bitmap
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::DrawBitmap( CFbsBitmap& aBitmap )
- {
- __VTPRINTENTER( "RVD(DSA).DrawBitmap" )
- __ASSERT_ALWAYS( aBitmap.Handle(),
- Panic( EVtEngPanicInvalidBitmapHandle ) );
- __ASSERT_ALWAYS( iDSA, Panic( EVtEngPanicInvalidPointer ) );
- iDSA->Gc()->SetFaded( iConfig.iWindow->IsFaded() );
- iDSA->Gc()->BitBlt( iConfig.iRect.iTl, &aBitmap );
- iDSA->ScreenDevice()->Update();
- iConfig.iObserver->vtSetFrame( MVtEngFrameObserver::ERemoteVideoFrame,
- &aBitmap );
- __VTPRINTEXITR( "RVD(DSA).DrawBitmap h=%d", aBitmap.Handle() )
- }
-
-// -----------------------------------------------------------------------------
-// CVtEngDrawDSA::GetSinkParams
-// -----------------------------------------------------------------------------
-//
-void CVtEngDrawDSA::GetSinkParams( TDisplaySinkParamsDSA& aSinkParams )
- {
- __VTPRINTENTER( "RVD(DSA).GetSinkParams" )
- aSinkParams.iThreadId = RThread().Id();
- aSinkParams.iRequestStatusPtr = &iStatus;
- aSinkParams.iObserver = iObserver;
- aSinkParams.iBitmap1Handle = iBitmap1->Handle();
- aSinkParams.iBitmap2Handle = iBitmap2->Handle();
- aSinkParams.iFlags = TDisplaySinkParams::EDisplaySinkDSA;
- __VTPRINTEXIT( "RVD(DSA).GetSinkParams" )
- }
-
-// End of File