engine/collectionframework/thumbnailcreator/src/glxtnvideoutility.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:28:59 +0200
changeset 23 74c9f037fd5d
permissions -rw-r--r--
Revision: 201007 Kit: 201011

/*
* 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:   Utility for creating bitmaps from video files
*
*/



/**
 * @internal reviewed 31/07/2007 by Simon Brooks
 */

#include "glxtnvideoutility.h"

#include <fbs.h>
#include <glxtracer.h>
#include <glxpanic.h>

// -----------------------------------------------------------------------------
// Constructor
// -----------------------------------------------------------------------------
//
CGlxtnVideoUtility::CGlxtnVideoUtility() : iDestination(NULL)
    {
    TRACER("CGlxtnVideoUtility::CGlxtnVideoUtility()");
    }

// -----------------------------------------------------------------------------
// Destructor
// -----------------------------------------------------------------------------
//
CGlxtnVideoUtility::~CGlxtnVideoUtility()
    {
    TRACER("CGlxtnVideoUtility::~CGlxtnVideoUtility()");
    delete iVideoInfo;
    }

// -----------------------------------------------------------------------------
// GetVideoFrameL
// -----------------------------------------------------------------------------
//
void CGlxtnVideoUtility::GetVideoFrameL(TRequestStatus* aRequestStatus,
                            CFbsBitmap*& aDestination, const TDesC& aFileName,
                                RArray<TSize>& aTargetSizes, TDisplayMode aMode)
    {
    TRACER("void CGlxtnVideoUtility::GetVideoFrameL(TRequestStatus* aRequestStatus, CFbsBitmap*& aDestination, const TDesC& aFileName, RArray<TSize>& aTargetSizes, TDisplayMode aMode)");
    if ( iRequestStatus )
        {
        User::Leave(KErrNotReady);
        }
        
    iDisplayMode = aMode;
    iSize = aTargetSizes[0];
            
    iRequestStatus = aRequestStatus;
    *iRequestStatus = KRequestPending;

    iDestination = &aDestination;
    delete *iDestination;
    *iDestination = NULL;

    delete iVideoInfo;
    iVideoInfo = NULL;
#ifdef ENABLE_VED
    iVideoInfo = CVedVideoClipInfo::NewL(aFileName, *this);
#else
    iVideoInfo = CTNEVideoClipInfo::NewL(aFileName, *this);
#endif
    }

// -----------------------------------------------------------------------------
// Cancel
// -----------------------------------------------------------------------------
//
void CGlxtnVideoUtility::Cancel()
    {
    TRACER("void CGlxtnVideoUtility::Cancel()");
    if ( iVideoInfo )
        {
#ifdef ENABLE_VED
        iVideoInfo->CancelFrame();
#else
        iVideoInfo->CancelThumb();
#endif
        delete iVideoInfo;
        iVideoInfo = NULL;
        }
    }

// -----------------------------------------------------------------------------
// NotifyVideoClipInfoReady
// -----------------------------------------------------------------------------
//
#ifdef ENABLE_VED
void CGlxtnVideoUtility::NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo,
                                                        TInt aError )
#else
void CGlxtnVideoUtility::NotifyVideoClipInfoReady( CTNEVideoClipInfo& aInfo,
                                                        TInt aError )
#endif
    {
    TRACER("void CGlxtnVideoUtility::NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo, TInt aError )");
    __ASSERT_DEBUG(&aInfo == iVideoInfo, Panic(EGlxPanicIllegalArgument));

    //adding a check if the callback is for iVideoInfo
	if ( KErrNone == aError && (&aInfo == iVideoInfo))
        {
#ifdef ENABLE_VED
        TRAP(aError, iVideoInfo->GetFrameL(*this, KFrameIndexBestThumb,
                                            NULL /*aResolution*/, iDisplayMode));
#else
        TRAP(aError, iVideoInfo->GetThumbL(*this, KBestThumbIndex,
                                            &iSize, iDisplayMode));
#endif
        }

    if ( KErrNone != aError )
        {
        User::RequestComplete(iRequestStatus, aError);
        }
    }

// -----------------------------------------------------------------------------
// NotifyVideoClipFrameCompleted
// -----------------------------------------------------------------------------
//
#ifdef ENABLE_VED
void CGlxtnVideoUtility::NotifyVideoClipFrameCompleted(
                    CVedVideoClipInfo& /*aInfo*/, TInt aError, CFbsBitmap* aFrame )
#else
void CGlxtnVideoUtility::NotifyVideoClipThumbCompleted(
                    CTNEVideoClipInfo& /*aInfo*/, TInt aError, CFbsBitmap* aFrame )
#endif
    {
    TRACER("void CGlxtnVideoUtility::NotifyVideoClipFrameCompleted( CVedVideoClipInfo& aInfo, TInt aError, CFbsBitmap* aFrame )");
	//removing as this is not used anymore
   // __ASSERT_DEBUG(&aInfo == iVideoInfo, Panic(EGlxPanicIllegalArgument));
    *iDestination = aFrame;

    User::RequestComplete(iRequestStatus, aError);
    }