Mercurial > s60_experiments
changeset 1:0a2b5a968ce7
Modifications that turn this Nokia-supplied DemoCube demo into a web-browser mockup that uses optical flow for panning operations.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Tue, 12 Feb 2008 17:32:01 -0600 |
parents | 43361e733c66 |
children | 34f8c30a3a6f |
files | DemoCube/data/firefox.png DemoCube/group/DemoCube.mmp DemoCube/makestuff.bat DemoCube/sis/DemoCube.pkg DemoCube/sis/mycert.cer DemoCube/sis/mykey.key DemoCube/src/DemoCubeAppUi.cpp DemoCube/src/DemoCubeAppView.cpp DemoCube/src/ImageLoader.cpp |
diffstat | 9 files changed, 247 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/DemoCube/group/DemoCube.mmp Tue Feb 12 17:18:02 2008 -0600 +++ b/DemoCube/group/DemoCube.mmp Tue Feb 12 17:32:01 2008 -0600 @@ -18,7 +18,7 @@ SOURCE DemoCubeAppUi.cpp SOURCE DemoCube.cpp SOURCE DemoCamera.cpp - +SOURCE ImageLoader.cpp SOURCEPATH ..\data START RESOURCE DemoCube.rss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DemoCube/makestuff.bat Tue Feb 12 17:32:01 2008 -0600 @@ -0,0 +1,7 @@ +cd group +call bldmake bldfiles +call abld build gcce urel +cd ..\sis +call makesis DemoCube.pkg +call signsis DemoCube.sis DemoCube.sisx mycert.cer mykey.key +cd ..
--- a/DemoCube/sis/DemoCube.pkg Tue Feb 12 17:18:02 2008 -0600 +++ b/DemoCube/sis/DemoCube.pkg Tue Feb 12 17:32:01 2008 -0600 @@ -24,10 +24,12 @@ ;Files to install ;You should change the source paths to match that of your environment ;<source> <destination> -"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\DemoCube.exe" -"!:\sys\bin\DemoCube.exe" -"$(EPOCROOT)Epoc32\data\z\resource\apps\DemoCube.rsc" -"!:\resource\apps\DemoCube.rsc" -"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\DemoCube_reg.rsc" -"!:\private\10003a3f\import\apps\DemoCube_reg.rsc" -"$(EPOCROOT)Epoc32\data\z\resource\apps\DemoCube.mif" -"!:\resource\apps\DemoCube.mif" +"\Symbian\9.2\S60_3rd_FP1_2\Epoc32\release\gcce\urel\DemoCube.exe" -"!:\sys\bin\DemoCube.exe" +"\Symbian\9.2\S60_3rd_FP1_2\Epoc32\data\z\resource\apps\DemoCube.rsc" -"!:\resource\apps\DemoCube.rsc" +"\Symbian\9.2\S60_3rd_FP1_2\Epoc32\data\z\private\10003a3f\apps\DemoCube_reg.rsc" -"!:\private\10003a3f\import\apps\DemoCube_reg.rsc" +"\Symbian\9.2\S60_3rd_FP1_2\Epoc32\data\z\resource\apps\DemoCube.mif" -"!:\resource\apps\DemoCube.mif" + +"..\data\firefox.png" -"!:\firefox.png" ; Add any installation notes if applicable ;"DemoCube.txt" -"C:\private\E6A6AA91\DemoCube.txt"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DemoCube/sis/mycert.cer Tue Feb 12 17:32:01 2008 -0600 @@ -0,0 +1,27 @@ +-----BEGIN CERTIFICATE----- +MIIEjjCCBEygAwIBAgIBADALBgcqhkjOOAQDBQAwajELMAkGA1UEBhMCRkkxEDAO +BgNVBAoTB0NvbXBhbnkxFDASBgNVBAsTC0RldmVsb3BtZW50MRIwEAYDVQQDEwlU +ZXN0IFVzZXIxHzAdBgkqhkiG9w0BCQEWEHRlc3RAY29tcGFueS5jb20wHhcNMDgw +MjEyMTUzNTA3WhcNMDkwMjExMTUzNTA3WjBqMQswCQYDVQQGEwJGSTEQMA4GA1UE +ChMHQ29tcGFueTEUMBIGA1UECxMLRGV2ZWxvcG1lbnQxEjAQBgNVBAMTCVRlc3Qg +VXNlcjEfMB0GCSqGSIb3DQEJARYQdGVzdEBjb21wYW55LmNvbTCCAzswggItBgcq +hkjOOAQBMIICIAKCAQEAyMkodkPGAAn5+bfUClYEbNbCCbviNbMI9AZKVLw6CAMZ +wrd57q2nCtWmnROhVA8vuWy/X6OcvQ+VioN4GgRXXqH5q5WfEQDVmtYfm7rE3+uo +g5vd/AqosxsTL/tFMspQt/Xlm6xb2HV7z8EMPUfoDbV9YQ6wFBmUFlg2+cXNyFHG +pETKUULVJ9UAFEUD3QqOfEBmWT+G/vgDnydAm72CSHApS4ie+zBlSh+NvYKVOWho +7yBe5CIwAIQ/wegPIQ+c0acCQcwIl97E4xDwvNZL/t+3BSG/5Mp4GqkljUHSsIzT +J2K0srHXFOTLrIW695wsz3H630eIlFfKsO3YXi18KwIVAI8B/HY7h8DHta0oF6Be +x2+uQDvTAoIBADY58JT1m4FnYvTgb1F/+u80EqPFHzE+nJ5Of/YeaNob20nBA/5K +0C9sRMxKqBXclhpc8OAdIPh/ZOzOqHu9o4ByNhEkQuBq46n7LhA6tYjsfVMbgYFX +YP/vI2fwEwxPHV/DF45tSPSiQ90XqTRLzoDrm+BkWnW3g6cKl32FDy3oo5AtCnmF +Fmw4zbgHT0tXw7sLBOvV27Iwp0jjg+QcvigDFatN1692JUoKOL1YrIyuts51g2SY +OrV6dTv98qDuu2NB20JQwystGSnd3pfUPPOJsPyOeztjalShUkuFqmCubp36d/D7 +HcntnO1G4Ii1ztGKdj5faUOJndpgrfrpBQUDggEGAAKCAQEAwZX653ZIKqfr9wIQ +qgWYGwgbpaalOpFTZtzU8hY2WeDEULGhTmM7xVPd/91cYvFjoC7x9gMHzwGgYivg +CQALLmRsBd3KA+wxNZWNSEutSZwTIUkdoSIWb3ABGoIrde7ds1cYBbKtgEf7WsIT +KXokSaZoe2Xcqr5dxchZOwUZvAlLoRnsWj10XinfzSOn8BuG11Fp83TPfCtmwbCa +JxFnwoQwLWeoAW7tFyknCHatWt++ZvFBHLoL8GxsnEgovcrShK9DcG9t2YrBpiSV +j20XZC5zAFDDhP/Ce9vPWupnRz7s6R2XMSzlJoXlWrcfX0ME85H1jgs9JtU1T1T8 +SxhsozALBgcqhkjOOAQDBQADLwAwLAIUbMTFVoYndGxNMzE1kz3aitKDbCMCFHMs +huMLxM/PoGtSmUpSyFdOZPiI +-----END CERTIFICATE-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DemoCube/sis/mykey.key Tue Feb 12 17:32:01 2008 -0600 @@ -0,0 +1,20 @@ +-----BEGIN DSA PRIVATE KEY----- +MIIDPgIBAAKCAQEAyMkodkPGAAn5+bfUClYEbNbCCbviNbMI9AZKVLw6CAMZwrd5 +7q2nCtWmnROhVA8vuWy/X6OcvQ+VioN4GgRXXqH5q5WfEQDVmtYfm7rE3+uog5vd +/AqosxsTL/tFMspQt/Xlm6xb2HV7z8EMPUfoDbV9YQ6wFBmUFlg2+cXNyFHGpETK +UULVJ9UAFEUD3QqOfEBmWT+G/vgDnydAm72CSHApS4ie+zBlSh+NvYKVOWho7yBe +5CIwAIQ/wegPIQ+c0acCQcwIl97E4xDwvNZL/t+3BSG/5Mp4GqkljUHSsIzTJ2K0 +srHXFOTLrIW695wsz3H630eIlFfKsO3YXi18KwIVAI8B/HY7h8DHta0oF6Bex2+u +QDvTAoIBADY58JT1m4FnYvTgb1F/+u80EqPFHzE+nJ5Of/YeaNob20nBA/5K0C9s +RMxKqBXclhpc8OAdIPh/ZOzOqHu9o4ByNhEkQuBq46n7LhA6tYjsfVMbgYFXYP/v +I2fwEwxPHV/DF45tSPSiQ90XqTRLzoDrm+BkWnW3g6cKl32FDy3oo5AtCnmFFmw4 +zbgHT0tXw7sLBOvV27Iwp0jjg+QcvigDFatN1692JUoKOL1YrIyuts51g2SYOrV6 +dTv98qDuu2NB20JQwystGSnd3pfUPPOJsPyOeztjalShUkuFqmCubp36d/D7Hcnt +nO1G4Ii1ztGKdj5faUOJndpgrfrpBQUCggEBAMGV+ud2SCqn6/cCEKoFmBsIG6Wm +pTqRU2bc1PIWNlngxFCxoU5jO8VT3f/dXGLxY6Au8fYDB88BoGIr4AkACy5kbAXd +ygPsMTWVjUhLrUmcEyFJHaEiFm9wARqCK3Xu3bNXGAWyrYBH+1rCEyl6JEmmaHtl +3Kq+XcXIWTsFGbwJS6EZ7Fo9dF4p380jp/AbhtdRafN0z3wrZsGwmicRZ8KEMC1n +qAFu7RcpJwh2rVrfvmbxQRy6C/BsbJxIKL3K0oSvQ3BvbdmKwaYklY9tF2QucwBQ +w4T/wnvbz1rqZ0c+7OkdlzEs5SaF5Vq3H19DBPOR9Y4LPSbVNU9U/EsYbKMCFG/m +JadOYrZINHBHQ+8XDcYxciAs +-----END DSA PRIVATE KEY-----
--- a/DemoCube/src/DemoCubeAppUi.cpp Tue Feb 12 17:18:02 2008 -0600 +++ b/DemoCube/src/DemoCubeAppUi.cpp Tue Feb 12 17:32:01 2008 -0600 @@ -44,6 +44,7 @@ // Create view object iAppView = CDemoCubeAppView::NewL(ClientRect(), this); AddToStackL(iAppView); + iAppView->StartImgLoader(); } // ----------------------------------------------------------------------------- // CDemoCubeAppUi::CDemoCubeAppUi()
--- a/DemoCube/src/DemoCubeAppView.cpp Tue Feb 12 17:18:02 2008 -0600 +++ b/DemoCube/src/DemoCubeAppView.cpp Tue Feb 12 17:32:01 2008 -0600 @@ -23,10 +23,13 @@ #include "ncvOpticalFlow.h" #include "ncvEgoMovement.h" #include "DemoCube.h" +#include "ImageLoader.h" #define PADDING_WIDTH 40 #define PADDING_HEIGHT 30 +_LIT( KPicture, "firefox.png" ); + // ============================ MEMBER FUNCTIONS =============================== // ----------------------------------------------------------------------------- @@ -67,6 +70,7 @@ TPoint tmp(0, 0); iCubePoints->AppendL(tmp); } + // Create a window for this application view CreateWindowL(); @@ -77,6 +81,21 @@ ActivateL(); } +void CDemoCubeAppView::StartImgLoader() +{ + // was 50,50 + TSize iSize(493, 305); + TInt color; + TInt gray; + TDisplayMode displayMode = CEikonEnv::Static()->WsSession().GetDefModeMaxNumColors( color, gray ); + + iPicture = new (ELeave) CFbsBitmap; + if (iPicture) + iPicture->Create(iSize, displayMode); //EColor16MA + iLoader = CImageLoader::NewL( 'c' ); + iLoader->LoadImage( KPicture, iPicture ); +} + // ----------------------------------------------------------------------------- // CDemoCubeAppView::CDemoCubeAppView() // C++ default constructor can NOT contain any code, that might leave. @@ -89,7 +108,9 @@ iBitmapSize(25, 18), iCamus(NULL), iOpticalFlow(NULL), - iCube(NULL) + iCube(NULL), + iLoader(NULL), + iPicture(NULL) { } @@ -138,6 +159,16 @@ delete iCubePoints; iCubePoints = NULL; } + if(iLoader) + { + delete iLoader; + iLoader = NULL; + } + if(iPicture) + { + delete iPicture; + iPicture = NULL; + } } // ----------------------------------------------------------------------------- @@ -145,14 +176,18 @@ // Draws the display. // ----------------------------------------------------------------------------- // -void CDemoCubeAppView::Draw(CFbsBitmap& aBitmap, CArrayFixFlat<TPoint>* aCube) const +void CDemoCubeAppView::Draw(CFbsBitmap& aBitmap, CArrayFixFlat<TPoint>* aCube) { CWindowGc& gc = SystemGc(); gc.Activate(Window()); gc.Clear(); - gc.BitBlt(TPoint(PADDING_WIDTH / 2, PADDING_HEIGHT / 2), &aBitmap); - gc.SetPenColor(TRgb(0xff, 0, 0)); - gc.DrawPolyLine(aCube); + //gc.BitBlt(TPoint(PADDING_WIDTH / 2, PADDING_HEIGHT / 2), &aBitmap); + + + //gc.BitBlt(TPoint(PADDING_WIDTH / 2, PADDING_HEIGHT / 2), iPicture); + gc.BitBlt(TPoint( (TInt)iMove.iY.Real(), (TInt)iMove.iX.Real()), iPicture); + //gc.SetPenColor(TRgb(0xff, 0, 0)); + //gc.DrawPolyLine(aCube); gc.Deactivate(); iCoeEnv->WsSession().Flush(); } @@ -175,7 +210,7 @@ iCamus->GetOpticalFlow(*iOpticalFlow, *iCamusImage, CAMUS_SETCAMUSOPTS(CCamus::EMedium, CCamus::EMedium, 3)); CEgoMovement mean = iOpticalFlow->Mean(); iMove.iX -= mean.iX * 6.3; - iMove.iY += mean.iY * 6.3; + iMove.iY -= mean.iY * 6.3; iAngle += iOpticalFlow->Rotation().Real() * 10.5; //
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DemoCube/src/ImageLoader.cpp Tue Feb 12 17:32:01 2008 -0600 @@ -0,0 +1,144 @@ +/*===================================================================== + + Copyright © 2007 Nokia Corporation. All rights reserved. + +======================================================================*/ + +// ImageSaver.cpp: implementation of the CImageLoader class. +// +////////////////////////////////////////////////////////////////////// + +#include <eikenv.h> // for CEikonEnv - "Eikon Environment" +#include <PathInfo.h> +#include <ImageConversion.h> + +#include "ImageLoader.h" + +_LIT8(KMimeType,"image/png"); + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +void CImageLoader::ConstructL() +{ +} + + +CImageLoader* CImageLoader::NewL(TChar tDrive) +{ + CImageLoader* self = new (ELeave) CImageLoader(tDrive); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; +} + + +CImageLoader::CImageLoader(TChar tDrive):CActive( CActive::EPriorityStandard ) +{ + CActiveScheduler::Add( this ); + + pImageDecoder = NULL; + iDrive = tDrive; +} + + +CImageLoader::~CImageLoader() +{ + if (pImageDecoder) + delete pImageDecoder; + pImageDecoder = NULL; + +// delete iImagePath; +} + + +//functions +void CImageLoader::DoCancel() +{ + //in case image saving is cancelled for whatever reason + pImageDecoder->Cancel(); + + DeleteDecoder(); +} + + +void CImageLoader::RunL() +{ + if (iStatus != KErrNone) { + TRequestStatus* s=&iStatus; + User::RequestComplete(s, KErrNone); + + SetActive(); + return; + } + + DeleteDecoder(); +} + + +void CImageLoader::RunError() +{ + RunL(); //cleanup +} + + +void CImageLoader::DeleteDecoder() +{ + if (pImageDecoder) + delete pImageDecoder; + pImageDecoder = NULL; +} + + +void CImageLoader::LoadImage(const TDesC &aFilename, CFbsBitmap *pImg) +{ + RFs fSystem = CEikonEnv::Static()->FsSession(); + +#if defined( __WINS__ ) + _LIT(SpriteFilePath, "%c:\\pictures\\"); // Path for emulator build + iFilename.Format( SpriteFilePath, iDrive ); + iFilename.Append(aFilename); +#else +// _LIT(KFileName, "%c:\\system\\apps\\Track\\"); // Path for HW release + _LIT(SpriteFilePath, "%c:\\"); // Path for HW release + iFilename.Format( SpriteFilePath, (char)iDrive ); + iFilename.Append(aFilename); +#endif + + iNewFileName.Copy(iFilename); + + if (!pImageDecoder) + pImageDecoder = CImageDecoder::FileNewL(fSystem, iNewFileName, KMimeType, CImageDecoder::EOptionAlwaysThread ); + + //if not busy, start to do the conversion + if ( !IsActive() ) { + pImageDecoder->Convert( &iStatus, *pImg ); + SetActive(); + + //loop until the encoding is done + do { +// SleepForSecs(1); + SleepForMicrosecs(1); + } while (iStatus != KErrNone); + } +} + + + +void CImageLoader::SleepForMicrosecs(TInt iMicroSecsToSleep) +{ + TTime tNow; + tNow.HomeTime(); + + TTimeIntervalMicroSeconds tMicroSecsToSleep; + tMicroSecsToSleep = iMicroSecsToSleep; + + //sleep for iMicroSecsToSleep + User::At(tNow + tMicroSecsToSleep); + +} +