diff -r 45459746d5e8 -r 27f2d7aec52a engine/collectionframework/thumbnailcreator/src/glxtnbackgroundgenerationtask.cpp --- 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 -#include -#include -#include - -#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