vtengines/videoteleng/Src/Media/CVtEngDrawDSA.cpp
changeset 18 d9b6a8729acd
parent 4 6dc066157ed4
child 23 c378a0498b84
child 27 dcbddbbaf8fd
--- 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