engine/collectionframework/thumbnailcreator/src/glxtnbackgroundgenerationtask.cpp
changeset 71 27f2d7aec52a
parent 69 45459746d5e8
child 72 0a8e959402e5
--- a/engine/collectionframework/thumbnailcreator/src/glxtnbackgroundgenerationtask.cpp	Mon Sep 27 15:13:20 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,376 +0,0 @@
-/*
-* Copyright (c) 2008-2009 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:   Thumbnail background generation task implementation
-*
-*/
-
-
-
-/**
- * @internal reviewed 31/07/2007 by Simon Brooks
- */
-
-// INCLUDE FILES
-
-#include "glxtnbackgroundgenerationtask.h"
-
-#include <fbs.h>
-#include <glxassert.h>
-#include <glxtracer.h>
-#include <glxthumbnail.h>
-
-#include "glxtnfileinfo.h"
-#include "glxscreenresolutions.h"
-#include "glxtnfileutility.h"
-#include "glxtnimageutility.h"
-#include "glxtnvideoutility.h"
-#include "mglxtnstorage.h"
-#include "mglxtnthumbnailcreatorclient.h"
-
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CGlxtnBackgroundGenerationTask::CGlxtnBackgroundGenerationTask
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CGlxtnBackgroundGenerationTask::CGlxtnBackgroundGenerationTask(
-                    const TGlxMediaId& iItemId, CGlxtnFileUtility& aFileUtility,
-                    MGlxtnThumbnailCreatorClient& aClient, 
-                    CGlxSettingsModel::TSupportedOrientations aSupportedOrientations) :
-    CGlxtnSaveThumbnailTask(KGlxtnTaskIdBackgroundThumbnailGeneration,
-                            iItemId, aClient.ThumbnailStorage()),
-    iClient(&aClient), iFileUtility(aFileUtility),
-    iSupportedOrientations(aSupportedOrientations)
-    {
-    TRACER("CGlxtnBackgroundGenerationTask::CGlxtnBackgroundGenerationTask()");
-    // Background task is always low priority
-    SetPriority(EPriorityLow);
-    }
-
-// -----------------------------------------------------------------------------
-// CGlxtnBackgroundGenerationTask::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CGlxtnBackgroundGenerationTask::ConstructL()
-    {
-    TRACER("void CGlxtnBackgroundGenerationTask::ConstructL()");
-    iImageUtility = new (ELeave) CGlxtnImageUtility(iFileUtility.FsSession());
-    }
-
-// -----------------------------------------------------------------------------
-// CGlxtnBackgroundGenerationTask::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CGlxtnBackgroundGenerationTask* CGlxtnBackgroundGenerationTask::NewL(
-                    const TGlxMediaId& iItemId, CGlxtnFileUtility& aFileUtility,
-                    MGlxtnThumbnailCreatorClient& aClient, 
-                    CGlxSettingsModel::TSupportedOrientations aSupportedOrientations)
-    {
-    TRACER("CGlxtnBackgroundGenerationTask* CGlxtnBackgroundGenerationTask::NewL()");
-    CGlxtnBackgroundGenerationTask* self
-            = new (ELeave) CGlxtnBackgroundGenerationTask(
-                                                iItemId, aFileUtility, aClient,
-                                                aSupportedOrientations);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// Destructor
-CGlxtnBackgroundGenerationTask::~CGlxtnBackgroundGenerationTask()
-    {
-    TRACER("Destructor CGlxtnBackgroundGenerationTask::~CGlxtnBackgroundGenerationTask()");
-    delete iImageUtility;
-    delete iVideoUtility;
-    delete iImage;
-    delete iFilteredImage;
-    iSizes.Close();
-    }
-
-// -----------------------------------------------------------------------------
-// DoStartL
-// -----------------------------------------------------------------------------
-//
-TBool CGlxtnBackgroundGenerationTask::DoStartL(TRequestStatus& aStatus)
-    {
-    TRACER("CGlxtnBackgroundGenerationTask::DoStartL()");
-    // Sizes to generate, largest first
-    iSizes.AppendL(TSize(KGlxThumbnailLargeWidth, KGlxThumbnailLargeHeight));
-    iSizes.AppendL(TSize(KGlxThumbnailSmallWidth, KGlxThumbnailSmallHeight));
-    if( CGlxSettingsModel::ELandscapeAndPortrait == iSupportedOrientations )
-        {
-        iSizes.AppendL(TSize(KGlxThumbnailPortraitWidth, KGlxThumbnailPortraitHeight));
-        }
-
-    iFileInfo = new (ELeave) CGlxtnFileInfo;
-    iClient->FetchFileInfoL(iFileInfo, ItemId(), &aStatus);
-    iState = EStateFetchingUri;
-
-    return ETrue; // Request has been issued
-    }
-
-// -----------------------------------------------------------------------------
-// DoCancel
-// -----------------------------------------------------------------------------
-//
-void CGlxtnBackgroundGenerationTask::DoCancel()
-    {
-    TRACER("void CGlxtnBackgroundGenerationTask::DoCancel()");
-    CGlxtnSaveThumbnailTask::DoCancel();
-    
-    Storage()->NotifyBackgroundError(ItemId(), KErrCancel);
-
-    if ( iClient && EStateFetchingUri == iState )
-        {
-        iClient->CancelFetchUri(ItemId());
-        }
-
-	iImageUtility->Cancel();
-
-	if ( iVideoUtility ) 
-		{
-		iVideoUtility->Cancel();
-		}
-
-    iFileUtility.ClearBadFileMarker();
-    }
-
-// -----------------------------------------------------------------------------
-// DoRunL
-// -----------------------------------------------------------------------------
-//
-TBool CGlxtnBackgroundGenerationTask::DoRunL(TRequestStatus& aStatus)
-    {
-    TRACER("TBool CGlxtnBackgroundGenerationTask::DoRunL()");
-    User::LeaveIfError(aStatus.Int());
-
-    TBool active = EFalse;
-
-    switch ( iState )
-        {
-        case EStateFetchingUri:
-            {
-            iImageDecoded = EFalse;
-            iBadFileMarkerNotNeededFlag = ETrue;
-            // Client is no longer needed
-            iClient->ThumbnailFetchComplete(ItemId(),
-                                        EGlxThumbnailQualityHigh, KErrNone);
-            iClient = NULL;
-
-            User::LeaveIfNull(iFileInfo);
- 
-            TBool isVideo, isProtected;
-            iFileInfo->IdentifyFileL(isVideo, isProtected);
-            // if DRM protected leave
-            // assume DRM capablity not present
-            if(isProtected)
-                {
-                User::Leave(KErrAccessDenied);
-                }
-            
-            active = CheckNextL(aStatus);
-            }
-            break;
-
-        case EStateDecoding:
-            iImageUtility->FreeDecoder();
-            iImageDecoded = ETrue;
-            FilterThumbnailL(aStatus);
-            active = ETrue;
-            break;
-
-        case EStateFiltering:
-            ScaleThumbnailL(aStatus);
-            active = ETrue;
-            break;
-
-        case EStateSaving:
-            active = ProcessNextL(aStatus);
-            break;
-
-        case EStateChecking:
-            if ( KGlxThumbnailNotAvailable == aStatus.Int() )
-                {
-                iTodoSizes.AppendL(iSize);
-                }
-            active = CheckNextL(aStatus);
-            break;
-
-        case EStateScaling:
-            EncodeThumbnailL(aStatus);
-            active = ETrue;
-            break;
-
-        case EStateEncoding:
-            SaveThumbnailL(aStatus);
-            active = ETrue;
-            break;
-
-        default:
-            GLX_ASSERT_ALWAYS( EFalse, Panic( EGlxPanicIllegalState ),
-                            "CGlxtnBackgroundGenerationTask: Illegal state" );
-            break;
-        }
-
-    if ( !active )
-        {
-        if( !iBadFileMarkerNotNeededFlag )
-            {
-            iFileUtility.ClearBadFileMarker();
-            }
-        // Send notification that we've finished
-        Storage()->NotifyBackgroundError( ItemId(), KErrNone );
-        }
-
-    return active;  // Task is complete
-    }
-
-// -----------------------------------------------------------------------------
-// DoRunError
-// -----------------------------------------------------------------------------
-//
-TBool CGlxtnBackgroundGenerationTask::DoRunError(TInt aError)
-    {
-    TRACER("CGlxtnBackgroundGenerationTask::DoRunError()");
-    if( !iBadFileMarkerNotNeededFlag )
-        {
-        iFileUtility.ClearBadFileMarker();
-        }
-    if ( iClient )
-        {
-        iClient->ThumbnailFetchComplete(
-                                ItemId(), EGlxThumbnailQualityHigh, aError);
-        }
-    else
-        {
-        Storage()->NotifyBackgroundError(ItemId(), aError);
-        }
-
-    return EFalse;  // Task is complete
-    }
-
-// -----------------------------------------------------------------------------
-// CheckNextL
-// -----------------------------------------------------------------------------
-//
-TBool CGlxtnBackgroundGenerationTask::CheckNextL(TRequestStatus& aStatus)
-    {
-    TRACER("CGlxtnBackgroundGenerationTask::CheckNextL()");
-    if ( iSizes.Count() == 0 )
-        {
-        return ProcessNextL(aStatus);
-        }
-
-    iSize = iSizes[0];
-    iSizes.Remove(0);
-
-    Storage()->IsThumbnailAvailableL(ItemId(), *iFileInfo, iSize, &aStatus);
-    iState = EStateChecking;
-    return ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// ProcessNextL
-// -----------------------------------------------------------------------------
-//
-TBool CGlxtnBackgroundGenerationTask::ProcessNextL(TRequestStatus& aStatus)
-    {
-    TRACER("TBool CGlxtnBackgroundGenerationTask::ProcessNextL()");
-    if ( iTodoSizes.Count() == 0 )
-        {
-        return EFalse;
-        }
-
-    iSize = iTodoSizes[0];
-    if( iImageDecoded )
-        {
-        FilterThumbnailL(aStatus);
-        }
-    else
-        {
-        DecodeImageL(aStatus);
-        }
-    return ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// FilterThumbnailL
-// -----------------------------------------------------------------------------
-//
-void CGlxtnBackgroundGenerationTask::FilterThumbnailL(TRequestStatus& aStatus)
-    {
-    TRACER("void CGlxtnBackgroundGenerationTask::FilterThumbnailL()");
-    // Create thumbnail bitmap of required size
-    TSize targetSize(iTodoSizes[0]);
-    iTodoSizes.Remove(0);
-    iImageUtility->AdjustSize(targetSize, iImage->SizeInPixels());
-
-    delete iThumbnail;
-    iThumbnail = NULL;
-    iThumbnail = new (ELeave) CFbsBitmap;
-    User::LeaveIfError(iThumbnail->Create(targetSize, KGlxThumbnailDisplayMode));
-
-    iImageUtility->FilterImageL(&aStatus, iImage, iFilteredImage, iThumbnail);
-    iState = EStateFiltering;
-    }
-
-// -----------------------------------------------------------------------------
-// ScaleThumbnailL
-// -----------------------------------------------------------------------------
-//
-void CGlxtnBackgroundGenerationTask::ScaleThumbnailL(TRequestStatus& aStatus)
-    {
-    TRACER("void CGlxtnBackgroundGenerationTask::ScaleThumbnailL()");
-    TSize targetSize(iSize);
-    const TSize srcSize = iImage->SizeInPixels();
-    iImageUtility->AdjustSize(targetSize, iImage->SizeInPixels());
-    iImageUtility->ScaleImageL(aStatus, *iImage, srcSize, *iThumbnail, targetSize);
-    iState = EStateScaling;
-    }
-
-// -----------------------------------------------------------------------------
-// DecodeImageL
-// -----------------------------------------------------------------------------
-//
-void CGlxtnBackgroundGenerationTask::DecodeImageL(TRequestStatus& aStatus)
-    {
-    TRACER("void CGlxtnBackgroundGenerationTask::DecodeImageL()");
-    iBadFileMarkerNotNeededFlag = EFalse;
-    iFileUtility.CheckBadFileListL( iFileInfo->FilePath() );
-    TBool isVideo, isProtected;
-    iFileInfo->IdentifyFileL(isVideo, isProtected);
-    if ( isVideo )
-        {
-        iVideoUtility = new (ELeave) CGlxtnVideoUtility;
-        iVideoUtility->GetVideoFrameL(&aStatus, iImage,
-                                        iFileInfo->FilePath(), iTodoSizes, KGlxThumbnailDisplayMode);
-        }
-    else
-        {
-        iImage = iImageUtility->DecodeImageL(aStatus,
-                    iFileInfo->FilePath(), iTodoSizes, KGlxThumbnailDisplayMode);
-        }
-    delete iFilteredImage;
-    iFilteredImage = NULL;
-    iState = EStateDecoding;
-    }
-
-//  End of File