examples/Multimedia/ICL/ICLExample/iclspmoexample.cpp

Go to the documentation of this file.
00001 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
00002 // All rights reserved.
00003 // This component and the accompanying materials are made available
00004 // under the terms of "Eclipse Public License v1.0"
00005 // which accompanies this distribution, and is available
00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
00007 //
00008 // Initial Contributors:
00009 // Nokia Corporation - initial contribution.
00010 //
00011 // Contributors:
00012 //
00013 // Description:
00014 // iclimageprocessorexample.cpp
00015 // The code demonstrates Caps Spmo Utility functionality
00016 //
00017 
00018 
00019 
00024 #include "iclexample.h"
00025 #include <capsspmoutility/capsspmoutility.h>
00026 
00027 using namespace CapsSpmoUtility;
00028 
00029 void CIclExample::GeneratingSpmoL()
00030         {
00031         // Start new spmo optimized for QVGA screen size.
00032         CCapsSpmo* spmo = CapsSpmoUtility::CCapsSpmoUtility::NewSpmoL(TSize(320, 240));
00033         CleanupStack::PushL(spmo);
00034 
00035         // Generate spmo data from the input file
00036         spmo->SetInputL(KInputFileName);
00037         spmo->GenerateFromInputL();
00038 
00039         // Add the generated Spmo data to the output file.
00040         spmo->AddToFileL(KInputWithSpmoFileName);
00041         
00042         CleanupStack::PopAndDestroy(spmo);
00043         }
00044 
00045 #define CHUNK_SIZE 8192 
00046 void CIclExample::GeneratingSpmoIterativelyL()
00047         {
00048         // Start new spmo optimized for QVGA screen size.
00049         CCapsSpmo* spmo = CapsSpmoUtility::CCapsSpmoUtility::NewSpmoL(TSize(320, 240));
00050         CleanupStack::PushL(spmo);
00051 
00052         RFile file;
00053         TInt fileSize = 0;
00054 
00055         // Open the file for reading.
00056         User::LeaveIfError(file.Open(iFs, KInputFileName, EFileRead));
00057         CleanupClosePushL(file);
00058 
00059     User::LeaveIfError(file.Size(fileSize));
00060 
00061         // Prepare memory buffer for 8K chunk
00062         HBufC8* chunk = HBufC8::NewMaxL(CHUNK_SIZE);
00063         TPtr8 chunkPtr = chunk->Des();
00064 
00065         // We must reorder the cleanupstack.
00066         CleanupStack::Pop(); // file
00067     CleanupStack::PushL(chunk);
00068     CleanupClosePushL(file);
00069 
00070     if (file.SubSessionHandle())
00071                 {
00072                 // Begin spmo streaming
00073                 spmo->BeginInputStreamL();
00074 
00075                 TInt leftToRead = fileSize;
00076                 while (leftToRead >= CHUNK_SIZE)
00077                         {
00078                         leftToRead -= CHUNK_SIZE;
00079                         User::LeaveIfError(file.Read(chunkPtr, CHUNK_SIZE)); 
00080                         spmo->ContinueInputStreamL(chunkPtr);                   
00081                         }       
00082 
00083                 if (leftToRead != 0) 
00084                         {
00085                         User::LeaveIfError(file.Read(chunkPtr, leftToRead)); 
00086                         spmo->ContinueInputStreamL(chunkPtr);
00087                         }
00088 
00089                 spmo->EndInputStreamL();
00090                 }
00091 
00092         // Generate spmo data from the processed input stream.
00093         spmo->GenerateFromInputL();
00094         
00095         CleanupStack::PopAndDestroy(2); // file chunk
00096 
00097         // Get just generated spmo data and save it to a binary file.
00098         TPtr8 spmoData = spmo->BufferL();
00099 
00100         // Open the file for writing.
00101         User::LeaveIfError(file.Replace(iFs, KSpmoFileName, EFileWrite));
00102         CleanupClosePushL(file);
00103 
00104         User::LeaveIfError(file.Write(spmoData)); 
00105         
00106         CleanupStack::PopAndDestroy(2,spmo); // file spmo
00107         }

Generated on Thu Jan 21 10:32:59 2010 for TB10.1 Example Applications by  doxygen 1.5.3