imageadaptationextensions/iclextjpegapi/src/IclExtJpegApi.cpp
changeset 25 3c4e2b88bdcd
parent 24 d8e463b04c5c
child 26 33125ea6abcb
--- a/imageadaptationextensions/iclextjpegapi/src/IclExtJpegApi.cpp	Wed Aug 25 12:58:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1296 +0,0 @@
-/*
-* Copyright (c) 2006-2008 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:  Implementation of CVisualFrame, CExtJpegDecoder and CExtJpegEncoder
-*
-*/
-
-// INCLUDE FILES
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <icl_uids_def.hrh>
-#endif
-#include "IclExtJpegApi.h"
-#include "IclExtJpegApiFrameImpl.h"
-
-
-/*****************************************************/
-/* Visual Frame Data Structure in Extended ICL API   */
-/*****************************************************/
-
-// ---------------------------------------------------------
-// CVisualFrame* CVisualFrame::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------
-//
-EXPORT_C CVisualFrame* CVisualFrame::NewL( 
-                                    TDes8& aBuffer, 
-                                    const TSize& aDimension, 
-                                    TInt aFrameFormat )
-    {
-    
-    CVisualFrame* self = new ( ELeave ) CVisualFrame();
-    CleanupStack::PushL( self );
-    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aBuffer, aDimension, aFrameFormat );
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CVisualFrame* CVisualFrame::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------
-//
-EXPORT_C CVisualFrame* CVisualFrame::NewL( 
-                                    RChunk& aChunk, 
-                                    TInt aSize, 
-                                    TInt aMaxSize, 
-                                    TInt aDataOffset,
-                                    const TSize& aDimension, 
-                                    TInt aFrameFormat )
-    {
-    CVisualFrame* self = new ( ELeave ) CVisualFrame();
-    CleanupStack::PushL( self );
-    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aChunk, aSize, aMaxSize, 
-                                                     aDataOffset, aDimension, aFrameFormat );
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CVisualFrame* CVisualFrame::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------
-//
-EXPORT_C CVisualFrame* CVisualFrame::NewL( 
-                                    TDes8& aBuffer, 
-                                    const TSize& aDimension, 
-                                    TInt aFrameFormat, 
-                                    const TFrameLayout& aFrameLayout )
-    {
-    CVisualFrame* self = new ( ELeave ) CVisualFrame();
-    CleanupStack::PushL( self );
-    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aBuffer, aDimension, 
-                                                     aFrameFormat, aFrameLayout );
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CVisualFrame* CVisualFrame::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------
-//
-EXPORT_C CVisualFrame* CVisualFrame::NewL( 
-                                    RChunk& aChunk, 
-                                    TInt aSize, 
-                                    TInt aMaxSize, 
-                                    const TSize& aDimension, 
-                                    TInt aFrameFormat, 
-                                    const TFrameLayout& aFrameLayout )
-    {
-    CVisualFrame* self = new ( ELeave ) CVisualFrame();
-    CleanupStack::PushL( self );
-    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aChunk, aSize, aMaxSize, 
-                                                     aDimension, aFrameFormat, 
-                                                     aFrameLayout );
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// ----------------------------------------------------------
-// CVisualFrame::DataChunkL
-// ----------------------------------------------------------
-//
-EXPORT_C const RChunk& CVisualFrame::DataChunkL() const
-    {
-    return iVisualFrameImpl->DataChunkL();
-    }
-
-// ----------------------------------------------------------
-// CVisualFrame::DataPtrL
-// ----------------------------------------------------------
-//
-EXPORT_C TPtr8 CVisualFrame::DataPtrL() const
-    {
-    return iVisualFrameImpl->DataPtrL();
-    }
-
-// ----------------------------------------------------------
-// CVisualFrame::Dimension
-// ----------------------------------------------------------
-//
-EXPORT_C TSize CVisualFrame::Dimension() const
-    {
-    return iVisualFrameImpl->Dimension();
-    }
-
-// ----------------------------------------------------------
-// CVisualFrame::FrameFormat
-// ----------------------------------------------------------
-//
-EXPORT_C TInt CVisualFrame::FrameFormat() const
-    {
-    return iVisualFrameImpl->FrameFormat2();
-    }
-        
-// ----------------------------------------------------------
-// CVisualFrame::DataOffset
-// ----------------------------------------------------------
-//
-EXPORT_C TInt CVisualFrame::DataOffset() const
-    {
-    return iVisualFrameImpl->DataOffset();
-    }
-        
-// ----------------------------------------------------------
-// CVisualFrame::Size
-// ----------------------------------------------------------
-//
-EXPORT_C TInt CVisualFrame::Size() const
-    {
-    return iVisualFrameImpl->Size();
-    }
-
-// ----------------------------------------------------------
-// CVisualFrame::SetSizeL
-// ----------------------------------------------------------
-//
-EXPORT_C void CVisualFrame::SetSizeL( TInt aSize )
-    {
-    iVisualFrameImpl->SetSizeL( aSize );
-    }
-    
-// ----------------------------------------------------------
-// CVisualFrame::MaxSize
-// ----------------------------------------------------------
-//
-EXPORT_C TInt CVisualFrame::MaxSize() const
-    {
-    return iVisualFrameImpl->MaxSize();
-    }
-         
-// ----------------------------------------------------------
-// CVisualFrame::DataContainer
-// ----------------------------------------------------------
-//
-EXPORT_C CVisualFrame::TDataContainer CVisualFrame::DataContainer() const
-    {
-    return ( TDataContainer )iVisualFrameImpl->DataContainer();
-    }
-        
-// ----------------------------------------------------------
-// CVisualFrame::FrameLayout
-// ----------------------------------------------------------
-//
-EXPORT_C const CVisualFrame::TFrameLayout& CVisualFrame::FrameLayout() const
-    {
-    return iVisualFrameImpl->FrameLayout2();
-    }
-
-// ----------------------------------------------------------
-// CVisualFrame::~CVisualFrame
-// Destructor
-// ----------------------------------------------------------
-//
-EXPORT_C CVisualFrame::~CVisualFrame()
-    {
-    delete iVisualFrameImpl;
-    } 
-
-// ---------------------------------------------------------
-// CVisualFrame* CVisualFrame::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------
-//
-EXPORT_C CVisualFrame* CVisualFrame::NewL( const CImageFrame* aImageFrame )
-    {
-    CVisualFrame* self = new ( ELeave ) CVisualFrame();
-    CleanupStack::PushL( self );
-    self->iVisualFrameImpl = CVisualFrameImpl::NewL( aImageFrame );
-    CleanupStack::Pop( self );
-
-    return self;
-    }
-
-// ----------------------------------------------------------
-// CVisualFrame::GetImageFrameL
-// ----------------------------------------------------------
-//
-EXPORT_C CImageFrame* CVisualFrame::GetImageFrameL()
-    {
-    return iVisualFrameImpl->GetImageFrameL();    
-    }
-
-
-/*****************************************************/
-/* Extended ICL Jpeg Decoder API                     */
-/*****************************************************/
-
-// ---------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::NewL()
-    {
-    return new (ELeave) CExtJpegDecoder();
-    }
-
-// ---------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::FileNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::FileNewL( 
-                                        RFs& aFs, const TDesC& aSourceFilename, 
-                                        const TDesC8& aMIMEType, 
-                                        const TOptions aOptions )
-    {
-    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
-                                CImageDecoder::FileNewL( aFs, aSourceFilename, 
-                                aMIMEType, aOptions ) );
-    CleanupStack::PushL( dec );
-    if ( dec->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return dec;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::FileNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::FileNewL( 
-                                        RFs& aFs, 
-                                        const TDesC& aSourceFilename, 
-                                        const TOptions aOptions, 
-                                        const TUid aImageType, 
-                                        const TUid aImageSubType, 
-                                        const TUid aDecoderUid )
-    {
-    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
-                                CImageDecoder::FileNewL( aFs, aSourceFilename, aOptions, 
-                                aImageType, aImageSubType, aDecoderUid ) );
-    CleanupStack::PushL( dec );
-    if ( dec->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return dec;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
-                                        RFs& aFs, 
-                                        const TDesC8& aSourceData, 
-                                        const TDesC8& aMIMEType, 
-                                        const TOptions aOptions )
-    {
-    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
-                                CImageDecoder::DataNewL( aFs, aSourceData, 
-                                aMIMEType, aOptions ) );
-    CleanupStack::PushL( dec );
-    if ( dec->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return dec;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
-                                        RFs& aFs, 
-                                        const TDesC8& aSourceData, 
-                                        const TOptions aOptions, 
-                                        const TUid aImageType, 
-                                        const TUid aImageSubType, 
-                                        const TUid aDecoderUid )
-    {
-    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
-                                CImageDecoder::DataNewL( aFs, aSourceData, aOptions, 
-                                aImageType, aImageSubType, aDecoderUid ) );
-    CleanupStack::PushL( dec );
-    if ( dec->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return dec;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
-                                        RFs& aFs, 
-                                        const CVisualFrame* aSourceData, 
-                                        const TDesC8& aMIMEType, 
-                                        const TOptions aOptions )
-    {
-    
-    TUint8* sourcePtr = NULL;
-    CVisualFrame* sourceDataFrame = const_cast<CVisualFrame*>( aSourceData );
-    if ( sourceDataFrame->DataContainer() == CVisualFrame::EInChunk )
-        {
-        sourcePtr = sourceDataFrame->DataChunkL().Base() + sourceDataFrame->DataOffset();
-        }
-    else if ( sourceDataFrame->DataContainer() == CVisualFrame::EInDescriptor )
-        {
-        sourcePtr = const_cast<TUint8*>( sourceDataFrame->DataPtrL().Ptr() ) 
-                                       + sourceDataFrame->DataOffset();
-        }
-    else
-        {
-        User::Leave( KErrArgument );            
-        }
-    TPtrC8 sourceData( sourcePtr, sourceDataFrame->Size() );
-    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
-                                CImageDecoder::DataNewL( aFs, sourceData, 
-                                aMIMEType, aOptions ) );
-    CleanupStack::PushL( dec );
-    if ( dec->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return dec;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
-                                        RFs& aFs, 
-                                        const CVisualFrame* aSourceData, 
-                                        const TOptions aOptions, 
-                                        const TUid aImageType, 
-                                        const TUid aImageSubType, 
-                                        const TUid aDecoderUid )
-    {
-    TUint8* sourcePtr = NULL;
-    CVisualFrame* sourceDataFrame = const_cast<CVisualFrame*>( aSourceData );    
-    if ( sourceDataFrame->DataContainer() == CVisualFrame::EInChunk )
-        {
-        sourcePtr = sourceDataFrame->DataChunkL().Base() + sourceDataFrame->DataOffset();
-        }
-    else if ( aSourceData->DataContainer() == CVisualFrame::EInDescriptor )
-        {
-        sourcePtr = const_cast<TUint8*>( sourceDataFrame->DataPtrL().Ptr() ) 
-                                       + sourceDataFrame->DataOffset();
-        }
-    else
-        {
-        User::Leave( KErrArgument );            
-        }
-
-    TPtrC8 sourceData( sourcePtr, sourceDataFrame->Size() );
-    CExtJpegDecoder* dec = reinterpret_cast<CExtJpegDecoder*>( 
-                                CImageDecoder::DataNewL( aFs, sourceData, aOptions, 
-                                aImageType, aImageSubType, aDecoderUid ) );
-    CleanupStack::PushL( dec );
-    if ( dec->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return dec;
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::~CExtJpegDecoder
-// Destructor
-// ----------------------------------------------------------
-//
-EXPORT_C CExtJpegDecoder::~CExtJpegDecoder()
-    {
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::SetCroppingL
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::SetCroppingL( TRect aCropRect )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapCropping );
-    CustomSyncL( reinterpret_cast<TInt>( &aCropRect ) );
-    CustomSyncL( EEnd );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::SetStreamingL
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::SetStreamingL( TSize& aMacroBlockSize )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapStreaming );
-    CustomSyncL( reinterpret_cast<TInt>( &aMacroBlockSize ) );
-    CustomSyncL( EEnd );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::SetRotationL
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::SetRotationL( TInt aDegree )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapRotation );
-    CustomSyncL( aDegree );
-    CustomSyncL( EEnd );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::SetFlippingL
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::SetFlippingL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapFlipping );
-    CustomSyncL( EEnd );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::SetMirroringL
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::SetMirroringL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapMirroring );
-    CustomSyncL( EEnd );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::SetDctDecodingL
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::SetDctDecodingL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapDctDecoding );
-    CustomSyncL( EEnd );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::ConvertL
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::ConvertL( 
-                        TRequestStatus* aRequestStatus, 
-                        const CVisualFrame* aDestinationFrame, 
-                        TInt& aNoOfDecodedMBlocks,
-                        TInt aFrameNumber )
-    {
-    iIsExtConvert = ETrue;
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( EConvert );
-    CustomSyncL( reinterpret_cast<TInt>( aDestinationFrame ) );
-    CustomSyncL( reinterpret_cast<TInt>( &aNoOfDecodedMBlocks ) );
-    CustomSyncL( aFrameNumber );
-    CustomSyncL( EReadyForAsync );
-    CustomAsync( aRequestStatus, 0 );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::ContinueConvertL
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::ContinueConvertL( 
-                        TRequestStatus* aRequestStatus, 
-                        const CVisualFrame* aDestinationFrame, 
-                        TInt& aNoOfDecodedMBlocks,
-                        TInt aFrameNumber )
-    {
-    iIsExtConvert = ETrue;
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( EContinueConvert );
-    CustomSyncL( reinterpret_cast<TInt>( aDestinationFrame ) );
-    CustomSyncL( reinterpret_cast<TInt>( &aNoOfDecodedMBlocks ) );
-    CustomSyncL( aFrameNumber );
-    CustomSyncL( EReadyForAsync );
-    CustomAsync( aRequestStatus, 0 );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::SupportedFormatsL
-// ----------------------------------------------------------
-//
-EXPORT_C TInt CExtJpegDecoder::SupportedFormatsL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ESupportedFormats );
-    TInt retVal = KErrNotFound;
-    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
-    CustomSyncL( EEnd );
-    return retVal;
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::CapabilitiesL
-// ----------------------------------------------------------
-//
-EXPORT_C TInt CExtJpegDecoder::CapabilitiesL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapabilities );
-    TInt retVal = KErrNotFound;
-    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
-    CustomSyncL( EEnd );
-    return retVal;
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::CExtJpegDecoder
-// ----------------------------------------------------------
-//
-CExtJpegDecoder::CExtJpegDecoder() : CJPEGImageFrameDecoder()
-    {
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::Convert
-// ----------------------------------------------------------
-//
-EXPORT_C  void CExtJpegDecoder::Convert( TRequestStatus* aRequestStatus,
-                                         CFbsBitmap& aDestination, TInt aFrameNumber )    
-    {
-    iIsExtConvert = EFalse;
-    CImageDecoder::Convert( aRequestStatus, aDestination, aFrameNumber );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder::Convert
-// ----------------------------------------------------------
-//
-EXPORT_C  void CExtJpegDecoder::Convert( TRequestStatus* aRequestStatus, 
-                                         CFbsBitmap& aDestination, 
-                                         CFbsBitmap& aDestinationMask, TInt aFrameNumber )
-    {
-    iIsExtConvert = EFalse;
-    CImageDecoder::Convert( aRequestStatus, aDestination, aDestinationMask, aFrameNumber );
-    }
-    
-// ----------------------------------------------------------
-// CExtJpegDecoder::ContinueConvert
-// ----------------------------------------------------------
-//
-EXPORT_C void CExtJpegDecoder::ContinueConvert( TRequestStatus* aRequestStatus )
-    {
-    if( iIsExtConvert )
-        {
-        User::RequestComplete( aRequestStatus, KErrUnknown );
-        }
-    else
-        {
-        CImageDecoder::ContinueConvert( aRequestStatus );
-        }    
-    } 
-      
-// ----------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::FileNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ----------------------------------------------------------
-//                             
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::FileNewL( 
-                            const TDecoderType aDecoderType,
-                            RFs& aFs, 
-                            const TDesC& aSourceFileName, 
-                            const TOptions aOptions )
-    {
-    TInt versionMin = KMinSwVersion;
-    TInt versionMax = KMaxSwVersion;
-    if ( aDecoderType == EHwImplementation )
-        {
-        versionMin = KMinHwVersion;
-        versionMax = KMaxHwVersion;
-        }
-    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
-    if ( uId == KNullUid )
-        {
-        User::Leave( KErrNotFound );
-        }
-    return CExtJpegDecoder::FileNewL( aFs, aSourceFileName, aOptions, 
-                                      KImageTypeJPGUid, KNullUid, uId );
-    }
-
-// ----------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ----------------------------------------------------------
-// 
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
-                            const TDecoderType aDecoderType,
-                            RFs& aFs, 
-                            const TDesC8& aSourceData, 
-                            const TOptions aOptions )
-    {
-    TInt versionMin = KMinSwVersion;
-    TInt versionMax = KMaxSwVersion;
-    if ( aDecoderType == EHwImplementation )
-        {
-        versionMin = KMinHwVersion;
-        versionMax = KMaxHwVersion;
-        }
-    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
-    if ( uId == KNullUid )
-        {
-        User::Leave( KErrNotFound );
-        }
-    return CExtJpegDecoder::DataNewL( aFs, aSourceData, aOptions, 
-                                      KImageTypeJPGUid, KNullUid, uId );
-
-    }
-                                    
-// ----------------------------------------------------------
-// CExtJpegDecoder* CExtJpegDecoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegDecoder
-// ----------------------------------------------------------
-// 
-EXPORT_C CExtJpegDecoder* CExtJpegDecoder::DataNewL( 
-                            const TDecoderType aDecoderType, 
-                            RFs& aFs, 
-                            const CVisualFrame* aSourceData, 
-                            const TOptions aOptions )
-    {
-    TInt versionMin = KMinSwVersion;
-    TInt versionMax = KMaxSwVersion;
-    if ( aDecoderType == EHwImplementation )
-        {
-        versionMin = KMinHwVersion;
-        versionMax = KMaxHwVersion;
-        }
-    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
-    if ( uId == KNullUid )
-        {
-        User::Leave( KErrNotFound );
-        }
-    return CExtJpegDecoder::DataNewL( aFs, aSourceData, aOptions, 
-                                      KImageTypeJPGUid, KNullUid, uId );
-    }
-    
-    
-// ----------------------------------------------------------
-// CExtJpegDecoder::GetUidByVersionRangeL
-// ----------------------------------------------------------
-// 
-TUid CExtJpegDecoder::GetUidByVersionRangeL( TInt aMinVersion, TInt aMaxVersion )
-    {
-    TUid uId = KNullUid;
-    TUid propertyUid = KUidSwCodec; 
-    
-    RUidDataArray implArray;
-    // based on the version decide what kind of codec to fetch
-    if( ( aMinVersion == KMinSwVersion ) && ( aMaxVersion == KMaxSwVersion ) )
-        {
-        propertyUid = KUidSwCodec; 
-        }
-    else if( ( aMinVersion == KMinHwVersion ) && ( aMaxVersion == KMaxHwVersion ) )
-        {
-        propertyUid = KUidHwCodec; 
-        }
-        
-    // property array to be verified
-    const TUid properties[] = { propertyUid, KImageTypeJPGUid };
-    
-    // Request existing plugins with the desired properties
-    TRAPD( getIntErr, CImageDecoder::GetInterfaceImplementationsL( 
-                                                properties, 
-                                                2, 
-                                                implArray ) ); 
-	CleanupClosePushL( implArray );                                                
-    User::LeaveIfError( getIntErr );
-    
-    TInt count = implArray.Count();
-    for( --count; uId == KNullUid && count >= 0; --count )
-        {
-        // Get the Jpeg decoder UID and find out whether it is requested
-        // type of decoder by version number.
-        TUid tempUid = implArray[ count ];
-        CImplementationInformationType* implInfo = NULL;
-        TRAPD( error, implInfo = 
-            CImageDecoder::GetImplementationInformationL( tempUid ) );
-            
-        User::LeaveIfError( error );
-                
-        // check the opaque data and version no
-        TInt version = implInfo->Version();
-        if ( ( implInfo->OpaqueData().Find( KJpgMimeType ) != KErrNotFound )
-            && ( version <= aMaxVersion ) && ( version >= aMinVersion ) )
-            {
-            uId = tempUid;
-            }
-        delete implInfo;    
-        } // for - count
-    CleanupStack::PopAndDestroy(&implArray);
-    return uId;
-
-    }
-
-
-
-/*****************************************************/
-/* Extended ICL Jpeg Encoder API                     */
-/*****************************************************/
-
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::NewL()
-    {
-    return new (ELeave) CExtJpegEncoder();
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::FileNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::FileNewL( 
-                                            RFs& aFs, 
-                                            const TDesC& aDestinationFilename, 
-                                            const TDesC8& aMIMEType, 
-                                            const TOptions aOptions )
-    {
-    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
-                                CImageEncoder::FileNewL( aFs, aDestinationFilename, 
-                                aMIMEType, aOptions ) );
-    CleanupStack::PushL( enc );
-    if ( enc->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return enc;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::FileNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::FileNewL( 
-                                            RFs& aFs, 
-                                            const TDesC& aDestinationFilename, 
-                                            const TOptions aOptions, 
-                                            const TUid aImageType, 
-                                            const TUid aImageSubType, 
-                                            const TUid aEncoderUid )
-    {
-    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
-                                CImageEncoder::FileNewL( aFs, aDestinationFilename, 
-                                aOptions, aImageType, aImageSubType, aEncoderUid ) );
-    CleanupStack::PushL( enc );
-    if ( enc->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return enc;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
-                                            HBufC8*& aDestinationData, 
-                                            const TDesC8& aMIMEType, 
-                                            const TOptions aOptions )
-    {
-    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
-                                CImageEncoder::DataNewL( aDestinationData, 
-                                aMIMEType, aOptions ) );
-    CleanupStack::PushL( enc );
-    if ( enc->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return enc;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
-                                            HBufC8*& aDestinationData, 
-                                            const TOptions aOptions, 
-                                            const TUid aImageType, 
-                                            const TUid aImageSubType, 
-                                            const TUid aEncoderUid )
-    {
-    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
-                                CImageEncoder::DataNewL( aDestinationData, 
-                                aOptions, aImageType, aImageSubType, aEncoderUid ) );
-    CleanupStack::PushL( enc );
-    if ( enc->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    CleanupStack::Pop();
-    return enc;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
-                                            const CVisualFrame* aDestinationData, 
-                                            const TDesC8& aMIMEType, 
-                                            const TOptions aOptions )
-    {
-    HBufC8* tmp = NULL;
-    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
-                                CImageEncoder::DataNewL( tmp, 
-                                aMIMEType, aOptions ) );
-    CleanupStack::PushL( enc );
-    if ( enc->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    enc->CustomSyncL( KExtensionUID );
-    enc->CustomSyncL( EDestVisualFrame );
-    enc->CustomSyncL( reinterpret_cast<TInt>( aDestinationData ) );
-    enc->CustomSyncL( EEnd );
-    CleanupStack::Pop();
-    return enc;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
-                                            const CVisualFrame* aDestinationData, 
-                                            const TOptions aOptions, 
-                                            const TUid aImageType, 
-                                            const TUid aImageSubType, 
-                                            const TUid aEncoderUid )
-    {
-    HBufC8* tmp = NULL;
-    CExtJpegEncoder* enc = reinterpret_cast<CExtJpegEncoder*>( 
-                            CImageEncoder::DataNewL( tmp, aOptions, 
-                            aImageType, aImageSubType, aEncoderUid ) );
-    CleanupStack::PushL( enc );
-    if ( enc->CapabilitiesL() < ECapNone )
-        {
-        User::Leave( KErrNotFound );
-        }
-    enc->CustomSyncL( KExtensionUID );
-    enc->CustomSyncL( EDestVisualFrame );
-    enc->CustomSyncL( reinterpret_cast<TInt>( aDestinationData ) );
-    enc->CustomSyncL( EEnd );
-    CleanupStack::Pop();
-    return enc;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::~CExtJpegEncoder
-// Destructor.
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder::~CExtJpegEncoder()
-    {
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SetStreamingL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::SetStreamingL( TSize& aMacroBlockSize, 
-                                              const CFrameImageData* aFrameImageData )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapStreaming );
-    CustomSyncL( reinterpret_cast<TInt>( &aMacroBlockSize ) );
-    CustomSyncL( reinterpret_cast<TInt>( aFrameImageData ) );
-    CustomSyncL( EEnd );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SetImageReplaceL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::SetImageReplaceL( const CVisualFrame* aReplaceImage, 
-                                                 TPoint aReplacePoint )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapImageReplacing );
-    CustomSyncL( reinterpret_cast<TInt>( aReplaceImage ) );
-    CustomSyncL( reinterpret_cast<TInt>( &aReplacePoint ) );
-    CustomSyncL( EEnd );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SetBitmapReplaceL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::SetBitmapReplaceL( const CFbsBitmap& aReplaceBitmap, 
-                                                  TPoint aReplacePoint )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapBitmapReplacing );
-    CustomSyncL( reinterpret_cast<TInt>( &aReplaceBitmap ) );
-    CustomSyncL( reinterpret_cast<TInt>( &aReplacePoint ) );
-    CustomSyncL( EEnd );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SetBitmapOverlayL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::SetBitmapOverlayL( const CFbsBitmap& aOverlayBitmap, 
-                                                  TUint aAlphaValue, TPoint aOverlayPoint )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapBitmapOverlay );
-    CustomSyncL( reinterpret_cast<TInt>( &aOverlayBitmap ) );
-    CustomSyncL( aAlphaValue );
-    CustomSyncL( reinterpret_cast<TInt>( &aOverlayPoint ) );
-    CustomSyncL( EEnd );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SetLosslessRotationL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::SetLosslessRotationL( TInt aDegree )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapLosslessRotation );
-    CustomSyncL( aDegree );
-    CustomSyncL( EEnd );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SetLosslessFlippingL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::SetLosslessFlippingL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapLosslessFlipping );
-    CustomSyncL( EEnd );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SetLosslessMirroringL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::SetLosslessMirroringL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapLosslessMirroring );
-    CustomSyncL( EEnd );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SetDctEncodingL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::SetDctEncodingL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapDctEncoding );
-    CustomSyncL( EEnd );
-    }
-    
-// ---------------------------------------------------------
-// CExtJpegEncoder::ProvideNewDestDataL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::ProvideNewDestDataL( const CVisualFrame* aDestinationData )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ENewDestData );
-    CustomSyncL( reinterpret_cast<TInt>( aDestinationData ) );
-    CustomSyncL( EEnd );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::ConvertL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::ConvertL( 
-                TRequestStatus* aRequestStatus, 
-                const CVisualFrame* aSourceFrame, 
-                TInt& aNoOfEncodedMBlocks,
-                const CFrameImageData* aFrameImageData )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( EConvert );
-    CustomSyncL( reinterpret_cast<TInt>( aSourceFrame ) );
-    CustomSyncL( reinterpret_cast<TInt>( &aNoOfEncodedMBlocks ) );
-    CustomSyncL( reinterpret_cast<TInt>( aFrameImageData ) );
-    CustomSyncL( EReadyForAsync );
-    CustomAsync( aRequestStatus, 0 );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::ContinueConvertL
-// ---------------------------------------------------------
-//
-EXPORT_C void CExtJpegEncoder::ContinueConvertL( 
-                TRequestStatus* aRequestStatus, 
-                const CVisualFrame* aSourceFrame,
-                TInt& aNoOfEncodedMBlocks )
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( EContinueConvert );
-    CustomSyncL( reinterpret_cast<TInt>( aSourceFrame ) );
-    CustomSyncL( reinterpret_cast<TInt>( &aNoOfEncodedMBlocks ) );
-    CustomSyncL( EReadyForAsync );
-    CustomAsync( aRequestStatus, 0 );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::SupportedFormatsL
-// ---------------------------------------------------------
-//
-EXPORT_C TInt CExtJpegEncoder::SupportedFormatsL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ESupportedFormats );
-    TInt retVal = KErrNotFound;
-    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
-    CustomSyncL( EEnd );
-    return retVal;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::CapabilitiesL
-// ---------------------------------------------------------
-//
-EXPORT_C TInt CExtJpegEncoder::CapabilitiesL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( ECapabilities );
-    TInt retVal = KErrNotFound;
-    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
-    CustomSyncL( EEnd );
-    return retVal;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::CExtJpegEncoder
-// ---------------------------------------------------------
-//
-CExtJpegEncoder::CExtJpegEncoder() : CJPEGImageFrameEncoder()
-    {
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::FileNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::FileNewL( 
-                            const TEncoderType aEncoderType,
-                            RFs& aFs, 
-                            const TDesC& aDestinationFilename, 
-                            const TOptions aOptions )
-    {
-    TInt versionMin = KMinSwVersion;
-    TInt versionMax = KMaxSwVersion;
-    if ( aEncoderType == EHwImplementation )
-        {
-        versionMin = KMinHwVersion;
-        versionMax = KMaxHwVersion;
-        }
-    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
-    if ( uId == KNullUid )
-        {
-        User::Leave( KErrNotFound );
-        }
-    return CExtJpegEncoder::FileNewL( aFs, aDestinationFilename, aOptions, 
-                                      KImageTypeJPGUid, KNullUid, uId );
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
-                            const TEncoderType aEncoderType,
-                            HBufC8*& aDestinationData, 
-                            const TOptions aOptions )
-    {
-    TInt versionMin = KMinSwVersion;
-    TInt versionMax = KMaxSwVersion;
-    if ( aEncoderType == EHwImplementation )
-        {
-        versionMin = KMinHwVersion;
-        versionMax = KMaxHwVersion;
-        }
-    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
-    if ( uId == KNullUid )
-        {
-        User::Leave( KErrNotFound );
-        }
-    return CExtJpegEncoder::DataNewL( aDestinationData, aOptions, 
-                                      KImageTypeJPGUid, KNullUid, uId );
-
-    }
-                                    
-// ---------------------------------------------------------
-// CExtJpegEncoder* CExtJpegEncoder::DataNewL
-// Creates, initializes and returns a pointer to an object of 
-// class CExtJpegEncoder
-// ---------------------------------------------------------
-//           
-EXPORT_C CExtJpegEncoder* CExtJpegEncoder::DataNewL( 
-                            const TEncoderType aEncoderType, 
-                            const CVisualFrame* aDestinationData, 
-                            const TOptions aOptions )
-    {
-    TInt versionMin = KMinSwVersion;
-    TInt versionMax = KMaxSwVersion;
-    if ( aEncoderType == EHwImplementation )
-        {
-        versionMin = KMinHwVersion;
-        versionMax = KMaxHwVersion;
-        }
-    TUid uId = GetUidByVersionRangeL( versionMin, versionMax );
-    if ( uId == KNullUid )
-        {
-        User::Leave( KErrNotFound );
-        }
-    return CExtJpegEncoder::DataNewL( aDestinationData, aOptions, 
-                                      KImageTypeJPGUid, KNullUid, uId );
-    }
-    
-// ---------------------------------------------------------
-// CExtJpegEncoder::GetDestinationDataSizeL
-// ---------------------------------------------------------
-//
-EXPORT_C TInt CExtJpegEncoder::GetDestinationDataSizeL()
-    {
-    CustomSyncL( KExtensionUID );
-    CustomSyncL( EDestDataSize );
-    TInt retVal = KErrNotFound;
-    CustomSyncL( reinterpret_cast<TInt>( &retVal ) );
-    CustomSyncL( EEnd );
-    return retVal;
-    }
-
-// ---------------------------------------------------------
-// CExtJpegEncoder::GetUidByVersionRangeL
-// ---------------------------------------------------------
-//
-TUid CExtJpegEncoder::GetUidByVersionRangeL( TInt aMinVersion, TInt aMaxVersion )
-    {
-    TUid uId = KNullUid;
-    TUid propertyUid = KUidSwCodec; 
-    
-    // based on the version decide what kind of codec to fetch
-    if( ( aMinVersion == KMinSwVersion ) && ( aMaxVersion == KMaxSwVersion ) )
-        {
-        propertyUid = KUidSwCodec; 
-        }
-    else if( ( aMinVersion == KMinHwVersion ) && ( aMaxVersion == KMaxHwVersion ) )
-        {
-        propertyUid = KUidHwCodec; 
-        }
-        
-    // property array to be verified
-    const TUid properties[] = { propertyUid, KImageTypeJPGUid };
-    
-    RUidDataArray implArray;
-    // Request existing plugins with the desired properties
-    TRAPD( getIntErr, CImageEncoder::GetInterfaceImplementationsL( 
-                                                properties, 
-                                                2, 
-                                                implArray ) ); 
-    CleanupClosePushL( implArray );
-    User::LeaveIfError( getIntErr );
-    
-    TInt count = implArray.Count();
-    for( --count; uId == KNullUid && count >= 0; --count )
-        {
-        // Check all encoders and find the one having Jpeg mime type, 
-        TUid tempUid = implArray[ count ];
-        
-        // Get the same encoder UID and find out more info for testing
-        TUid uId2 = { KEncoderInterfaceUidValue };
-        RImplInfoPtrArray implInfo;
-        REComSession::ListImplementationsL( uId2, implInfo );
-        TInt count2 = implInfo.Count();
-        uId2 = tempUid;
-        for ( --count2; uId == KNullUid && count2 >= 0; --count2 )
-            {
-            CImplementationInformation& implInfoCur = *implInfo[count2];
-            if ( ( implInfoCur.ImplementationUid() == uId2 ) && 
-                ( implInfoCur.OpaqueData().Find( KJpgMimeType ) != KErrNotFound ) ) 
-                {
-                uId = uId2; 
-                }
-			}
-        implInfo.ResetAndDestroy();
-        } // for - count
-        
-    CleanupStack::PopAndDestroy( &implArray );   
-    return uId;
-    }
-
-// End of File