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
Binary file DemoCube/data/firefox.png has changed
--- 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);
+
+}
+