Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

mainDemoCamera2d.cpp

Go to the documentation of this file.
00001 #include "Basis/CmdOptions.h"
00002 #include "Basis/Timer.h"
00003 #include "Core/Array/MakeFromData.h"
00004 #include "Core/Array/RGB2Intensity.h"
00005 #include "Core/Array/PixMin.h"
00006 #include "Core/Array/PixMax.h"
00007 #include "Core/Array/GetRgbPixels.h"
00008 #include "Core/Array/GaussDerivative.h"
00009 #include "Core/Array/Mul.h"
00010 #include "Core/Array/Add.h"
00011 #include "Core/Array/ColorSpace.h"
00012 #include "Core/Array/ProjectRange.h"
00013 #include "Core/Array/Sub.h"
00014 #include "Core/Array/Norm2Sqr.h"
00015 #include "Core/Array/InvLvvLw2.h"
00016 #include "Core/Array/InvEw.h"
00017 #include "Core/Array/InvWw.h"
00018 #include "Core/Array/InvCw.h"
00019 #include "Core/Array/InvNw.h"
00020 #include "Core/Array/InvHw.h"
00021 #include "Core/Array/InvRGBw.h"
00022 #include "Core/Array/InvANGw.h"
00023 #include "Core/Array/InvANG2w.h"
00024 #include "Core/Array/InvJOSAw.h"
00025 #include "Core/Array/InvOBw.h"
00026 #include "Core/Array/InvHUEw.h"
00027 #include "Core/Array/InvCompDer.h"
00028 #include "Core/Array/ArrayListDelete.h"
00029 #include "Core/Stream/RgbDataSrcFactory.h"
00030 #include "Visualization/Window.h"
00031 #include "Visualization/AppControlSrc.h"
00032 
00033 // since we are not using libraries:
00034 #include "OglGui/OglLib.cpp"
00035 #include "Link/ImpalaLib.cpp"
00036 
00037 namespace Impala
00038 {
00039 namespace Application
00040 {
00041 namespace DemoCamera2d
00042 {
00043 
00044 
00045 using namespace Impala::Visualization;
00046 using namespace Impala::Core::Array;
00047 using namespace Impala::Core::Stream;
00048 
00049 Impala::Visualization::Window* oglWnd = 0;
00050 
00051 // command line parameters
00052 int verbose = 0;
00053 Real64 sigma = 2.0;
00054 Real64 precision = 3.0;
00055 std::string demo[10] = {"source", "njet", "e", "einv", "rgb", "rgbinv", "compinv"};
00056 int nrDemo = 7;
00057 int curDemo = 0;
00058 std::string disp0Mode("Stretch"); // "normal" scalar values
00059 std::string disp1Mode("Stretch"); // values may be positive as well as negative
00060 std::string disp2Mode("LogMagnitude"); // values are positive (gradient magnitude)
00061 Real64 logScale = 32.0;
00062 
00063 // buffers for processing done in DoProcessing
00064 Array2dVec3Real64* srcV;
00065 std::vector<Array2dScalarReal64*> lList;
00066 std::vector<Array2dScalarReal64*> eList;
00067 std::vector<Array2dScalarReal64*> rgbList;
00068 Array2dScalarReal64* funcRes;
00069 
00070 
00071 // L based
00072 
00073 void
00074 DoLw2()
00075 {
00076     if (verbose == 1) 
00077         std::cout << "DoLw2 " << std::endl;
00078     //Lx2+Ly2
00079     funcRes = 0;
00080     Norm2Sqr(funcRes, lList[1], lList[2]);
00081 }
00082 
00083 void
00084 DoLvvLw2()
00085 {
00086     if (verbose == 1) 
00087         std::cout << "DoLvvLw2 " << std::endl;
00088     funcRes = 0;
00089     InvLvvLw2<Array2dScalarReal64>(funcRes, lList);
00090 }
00091 
00092 // E based
00093 
00094 void
00095 DoEw()
00096 {
00097     if (verbose == 1) 
00098         std::cout << "DoEw " << std::endl;
00099     funcRes = 0;
00100     InvEw<Array2dScalarReal64>(funcRes, eList);
00101 }
00102 
00103 void
00104 DoWw()
00105 {
00106     if (verbose == 1) 
00107         std::cout << "DoWw " << std::endl;
00108     funcRes = 0;
00109     InvWw<Array2dScalarReal64>(funcRes, eList, sigma);
00110 }
00111 
00112 void
00113 DoCw()
00114 {
00115     if (verbose == 1) 
00116         std::cout << "DoCw " << std::endl;
00117     funcRes = 0;
00118     InvCw<Array2dScalarReal64>(funcRes, eList, sigma);
00119 }
00120 
00121 void
00122 DoNw()
00123 {
00124     if (verbose == 1) 
00125         std::cout << "DoNw " << std::endl;
00126     funcRes = 0;
00127     InvNw<Array2dScalarReal64>(funcRes, eList, sigma);
00128 }
00129 
00130 void
00131 DoHw()
00132 {
00133     if (verbose == 1) 
00134         std::cout << "DoHw " << std::endl;
00135     funcRes = 0;
00136     InvHw<Array2dScalarReal64>(funcRes, eList, sigma);
00137 }
00138 
00139 void
00140 DoCw_log()
00141 {
00142     if (verbose == 1) 
00143         std::cout << "DoCw_log " << std::endl;
00144     funcRes = 0;
00145     InvCw_log<Array2dScalarReal64>(funcRes, eList, sigma);
00146 }
00147 
00148 void
00149 DoNw_log()
00150 {
00151     if (verbose == 1) 
00152         std::cout << "DoNw_log " << std::endl;
00153     funcRes = 0;
00154     InvNw_log<Array2dScalarReal64>(funcRes, eList, sigma);
00155 }
00156 
00157 void
00158 DoHw_log()
00159 {
00160     if (verbose == 1) 
00161         std::cout << "DoHw_log " << std::endl;
00162     funcRes = 0;
00163     InvHw_log<Array2dScalarReal64>(funcRes, eList, sigma);
00164 }
00165 
00166 // RGB based
00167 
00168 void
00169 DoRGBw()
00170 {
00171     if (verbose == 1) 
00172         std::cout << "DoRGBw " << std::endl;
00173     funcRes = 0;
00174     InvRGBw<Array2dScalarReal64>(funcRes, rgbList);
00175 }
00176 
00177 void
00178 DoANGw()
00179 {
00180     if (verbose == 1) 
00181         std::cout << "DoANGw " << std::endl;
00182     funcRes = 0;
00183     InvANGw<Array2dScalarReal64>(funcRes, rgbList);
00184 }
00185 
00186 void
00187 DoANG2w()
00188 {
00189     if (verbose == 1) 
00190         std::cout << "DoANG2w " << std::endl;
00191     funcRes = 0;
00192     InvANG2w<Array2dScalarReal64>(funcRes, rgbList);
00193 }
00194 
00195 void
00196 DoJOSAw()
00197 {
00198     if (verbose == 1) 
00199         std::cout << "DoJOSAw " << std::endl;
00200     funcRes = 0;
00201     InvJOSAw<Array2dScalarReal64>(funcRes, rgbList);
00202 }
00203 
00204 void
00205 DoOBw()
00206 {
00207     if (verbose == 1) 
00208         std::cout << "DoOBw " << std::endl;
00209     funcRes = 0;
00210     InvOBw<Array2dScalarReal64>(funcRes, rgbList);
00211 }
00212 
00213 void
00214 DoHUEw()
00215 {
00216     if (verbose == 1) 
00217         std::cout << "DoHUEw " << std::endl;
00218     funcRes = 0;
00219     InvHUEw<Array2dScalarReal64>(funcRes, rgbList);
00220 }
00221 
00222 
00223 typedef void (*PINVF)();
00224 
00225 // Structure for information on demo functions.
00226 class InvInfo
00227 {
00228 public:
00229     InvInfo()
00230     {
00231         mActive = false;
00232     }
00233 
00234     InvInfo(std::string name, int imIdx, bool reqL, bool reqE, bool reqRGB,
00235             PINVF func, std::string displayMode)
00236     {
00237         mName = name;
00238         mImIdx = imIdx;
00239         mReqL = reqL;
00240         mReqE = reqE;
00241         mReqRGB = reqRGB;
00242         mFunc = func;
00243         mDisplayMode = displayMode;
00244         mActive = true;
00245     }
00246 
00247     bool        mActive;
00248     std::string mName;
00249     int         mImIdx;
00250     bool        mReqL;
00251     bool        mReqE;
00252     bool        mReqRGB;
00253     PINVF       mFunc;
00254     std::string mDisplayMode;
00255 };
00256 
00257 // The basic demo functions
00258 
00259 InvInfo basicInvs[] = {
00260     InvInfo("Source", 0, false, false, false, 0, ""),
00261     InvInfo("L", 0, true, false, false, 0, "DirectNC"),
00262     InvInfo("Lx", 1, true, false, false, 0, disp1Mode),
00263     InvInfo("Ly", 2, true, false, false, 0, disp1Mode),
00264     InvInfo("Lxx", 3, true, false, false, 0, disp1Mode),
00265     InvInfo("Lxy", 4, true, false, false, 0, disp1Mode),
00266     InvInfo("Lyy", 5, true, false, false, 0, disp1Mode),
00267     InvInfo("E", 0, false, true, false, 0, disp0Mode),
00268     InvInfo("El", 3, false, true, false, 0, disp0Mode),
00269     InvInfo("Ell", 6, false, true, false, 0, disp0Mode),
00270     InvInfo("Ex", 1, false, true, false, 0, disp1Mode),
00271     InvInfo("Elx", 4, false, true, false, 0, disp1Mode),
00272     InvInfo("Ellx", 7, false, true, false, 0, disp1Mode),
00273     InvInfo("Ey", 2, false, true, false, 0, disp1Mode),
00274     InvInfo("Ely", 5, false, true, false, 0, disp1Mode),
00275     InvInfo("Elly", 8, false, true, false, 0, disp1Mode),
00276     InvInfo("R", 0, false, false, true, 0, disp0Mode),
00277     InvInfo("G", 3, false, false, true, 0, disp0Mode),
00278     InvInfo("B", 6, false, false, true, 0, disp0Mode),
00279     InvInfo("Rx", 1, false, false, true, 0, disp1Mode),
00280     InvInfo("Gx", 4, false, false, true, 0, disp1Mode),
00281     InvInfo("Bx", 7, false, false, true, 0, disp1Mode),
00282     InvInfo("Ry", 2, false, false, true, 0, disp1Mode),
00283     InvInfo("Gy", 5, false, false, true, 0, disp1Mode),
00284     InvInfo("By", 8, false, false, true, 0, disp1Mode)
00285 };
00286 int nrBasicInvs = 25;
00287 
00288 // Compound demo functions
00289 InvInfo compoundInvs[] = {
00290     InvInfo("Lw2", -1, true, false, false, DoLw2, disp2Mode),
00291     InvInfo("LvvLw2", -1, true, false, false, DoLvvLw2, disp1Mode),
00292     InvInfo("Ew", -1, false, true, false, DoEw, disp2Mode),
00293     InvInfo("Ww", -1, false, true, false, DoWw, disp2Mode),
00294     InvInfo("Cw", -1, false, true, false, DoCw, disp2Mode),
00295     InvInfo("Nw", -1, false, true, false, DoNw, disp2Mode),
00296     InvInfo("Hw", -1, false, true, false, DoHw, disp2Mode),
00297     InvInfo("Cw_log", -1, false, true, false, DoCw_log, disp2Mode),
00298     InvInfo("Nw_log", -1, false, true, false, DoNw_log, disp2Mode),
00299     InvInfo("Hw_log", -1, false, true, false, DoHw_log, disp2Mode),
00300     InvInfo("RGBw", -1, false, false, true, DoRGBw, disp2Mode),
00301     InvInfo("ANGw", -1, false, false, true, DoANGw, disp2Mode),
00302     InvInfo("ANG2w", -1, false, false, true, DoANG2w, disp2Mode),
00303     InvInfo("JOSAw", -1, false, false, true, DoJOSAw, disp2Mode),
00304     InvInfo("OBw", -1, false, false, true, DoOBw, disp2Mode),
00305     InvInfo("HUEw", -1, false, false, true, DoHUEw, disp2Mode)
00306 };
00307 int nrCompoundInvs = 16;
00308 
00309 // The current demo setup
00310 
00311 std::vector<InvInfo> curInvList;
00312 
00313 // demo presets
00314 
00315 void
00316 DemoSource()
00317 {
00318     // empty list
00319 }
00320 
00321 void
00322 DemoCompInv()
00323 {
00324     curInvList.push_back(basicInvs[1]); // L
00325     curInvList.push_back(compoundInvs[0]); // Lw2
00326     curInvList.push_back(compoundInvs[2]); // Ew
00327     curInvList.push_back(compoundInvs[3]); // Ww
00328     curInvList.push_back(compoundInvs[4]); // Cw
00329     curInvList.push_back(compoundInvs[12]); // ANG2w
00330     curInvList.push_back(compoundInvs[11]); // ANGw
00331     curInvList.push_back(compoundInvs[14]); // OBw
00332 }
00333 
00334 void
00335 DemoNJet()
00336 {
00337     curInvList.push_back(basicInvs[0]); // Source
00338     curInvList.push_back(basicInvs[1]); // L
00339     curInvList.push_back(basicInvs[2]); // Lx
00340     curInvList.push_back(basicInvs[3]); // Ly
00341     curInvList.push_back(basicInvs[4]); // Lxx
00342     curInvList.push_back(basicInvs[5]); // Lxy
00343     curInvList.push_back(basicInvs[6]); // Lyy
00344 
00345     curInvList.push_back(compoundInvs[0]); // Lw2
00346     curInvList.push_back(compoundInvs[1]); // LvvLw2
00347 }
00348 
00349 void
00350 DemoE()
00351 {
00352     curInvList.push_back(basicInvs[7]); // E
00353     curInvList.push_back(basicInvs[8]); // El
00354     curInvList.push_back(basicInvs[9]); // Ell
00355     curInvList.push_back(basicInvs[10]); // Ex
00356     curInvList.push_back(basicInvs[11]); // Elx
00357     curInvList.push_back(basicInvs[12]); // Ellx
00358     curInvList.push_back(basicInvs[13]); // Ey
00359     curInvList.push_back(basicInvs[14]); // Ely
00360     curInvList.push_back(basicInvs[15]); // Elly
00361 }
00362 
00363 void
00364 DemoEinv()
00365 {
00366     curInvList.push_back(basicInvs[0]); // Source
00367     curInvList.push_back(compoundInvs[2]); // Ew
00368     curInvList.push_back(compoundInvs[3]); // Ww
00369     curInvList.push_back(compoundInvs[4]); // Cw
00370     curInvList.push_back(compoundInvs[5]); // Nw
00371     curInvList.push_back(compoundInvs[6]); // Hw
00372     curInvList.push_back(compoundInvs[7]); // Cw_log
00373     curInvList.push_back(compoundInvs[8]); // Nw_log
00374     curInvList.push_back(compoundInvs[9]); // Hw_log
00375 }
00376 
00377 void
00378 DemoRGB()
00379 {
00380     curInvList.push_back(basicInvs[16]); // R
00381     curInvList.push_back(basicInvs[17]); // G
00382     curInvList.push_back(basicInvs[18]); // B
00383     curInvList.push_back(basicInvs[19]); // Rx
00384     curInvList.push_back(basicInvs[20]); // Gx
00385     curInvList.push_back(basicInvs[21]); // Bx
00386     curInvList.push_back(basicInvs[22]); // Ry
00387     curInvList.push_back(basicInvs[23]); // Gy
00388     curInvList.push_back(basicInvs[24]); // By
00389 }
00390 
00391 void
00392 DemoRGBinv()
00393 {
00394     curInvList.push_back(basicInvs[0]); // Source
00395     curInvList.push_back(compoundInvs[10]); // RGBw
00396     curInvList.push_back(compoundInvs[11]); // ANGw
00397     curInvList.push_back(compoundInvs[12]); // ANG2w
00398     curInvList.push_back(compoundInvs[13]); // JOSAw
00399     curInvList.push_back(compoundInvs[14]); // OBw
00400     curInvList.push_back(compoundInvs[15]); // HUEw
00401     curInvList.push_back(basicInvs[0]); // Source
00402     curInvList.push_back(basicInvs[0]); // Source
00403 }
00404 
00405 void
00406 SetCurDemo(std::string d)
00407 {
00408     curInvList.clear();
00409     if (oglWnd)
00410         oglWnd->DeleteViewers();
00411 
00412     for (int i=0 ; i<nrDemo ; i++)
00413         if (demo[i] == d)
00414             curDemo = i;
00415 
00416     switch (curDemo) {
00417     case 0: DemoSource(); break;
00418     case 1: DemoNJet(); break;
00419     case 2: DemoE(); break;
00420     case 3: DemoEinv(); break;
00421     case 4: DemoRGB(); break;
00422     case 5: DemoRGBinv(); break;
00423     case 6: DemoCompInv(); break;
00424     default: DemoCompInv(); break;
00425     }
00426 }
00427 
00428 
00429 class WindowCamera2d : public Window, public AppControlSrc
00430 {
00431 public:
00432 
00433     WindowCamera2d(RgbDataSrc* src) :
00434         Window(0, 0, SuggestWndWidth(3, src->FrameWidth()),
00435                SuggestWndHeight(3, src->FrameHeight()) + 25, true),
00436         AppControlSrc(1)
00437     {
00438         CmdOptions& options = CmdOptions::GetInstance();
00439         SetSrc(src); // tell AppControlSrc about src
00440         AppController::Instance().AddControl((AppControlSrc*) this, true);
00441         mViewScale = options.GetDouble("viewScale");
00442         AppController::Instance().MainLoop();
00443     }
00444 
00445 
00446     template<class ArrayT>
00447     void
00448     DisplayIm(ArrayT* im, std::string displayMode, std::string viewName)
00449     {
00450         UpdateView(mCurView, im, displayMode, mViewScale);
00451         SetViewText(mCurView, viewName);
00452         mCurView++;
00453     }
00454 
00455     void
00456     HandleNewFrame()
00457     {
00458         UpdateView(0, GetSrc()->DataPtr(), GetSrc()->FrameWidth(),
00459                    GetSrc()->FrameHeight(), mViewScale);
00460 
00461         ArraySystem& aSys = ArraySystem::Instance();
00462         aSys.MarkMemoryUsage(verbose > 0);
00463 
00464         MakeFromData2<Array2dVec3Real64,Array2dVec3UInt8>(srcV, GetSrc()->DataPtr());
00465 
00466         bool oneReqL = false;
00467         bool oneReqE = false;
00468         bool oneReqRGB = false;
00469         int i;
00470         for (i=0 ; i<curInvList.size() ; i++)
00471         {
00472             if (curInvList[i].mReqL)
00473                 oneReqL = true;
00474             if (curInvList[i].mReqE)
00475                 oneReqE = true;
00476             if (curInvList[i].mReqRGB)
00477                 oneReqRGB = true;
00478         }
00479         if (oneReqL)
00480         {
00481             Array2dScalarReal64* l = 0;
00482             RGB2Intensity(l, srcV);
00483             lList = InvCompDer(l, sigma, precision, false);
00484             delete l;
00485         }
00486         if (oneReqE)
00487         {
00488             Array2dVec3Real64* ooo = 0;
00489             ColorSpace(ooo, srcV, Element::RGB, Element::OOO);
00490             eList = InvCompDer(ooo, sigma, precision, false);
00491             delete ooo;
00492         }
00493         if (oneReqRGB)
00494             rgbList = InvCompDer(srcV, sigma, precision, false);
00495         mCurView = 1;
00496         for (i=0 ; i<curInvList.size() ; i++)
00497         {
00498             InvInfo cI = curInvList[i];
00499             if (cI.mFunc)
00500                 cI.mFunc();
00501             if (verbose == 1)
00502                 std::cout << "Displaying " << i << " = " << cI.mName << std::endl;
00503             if (cI.mFunc)
00504             {
00505                 DisplayIm(funcRes, cI.mDisplayMode, cI.mName);
00506                 delete funcRes;
00507             }
00508             else
00509             {
00510                 if (cI.mReqL)
00511                     DisplayIm(lList[cI.mImIdx], cI.mDisplayMode, cI.mName);
00512                 if (cI.mReqE)
00513                     DisplayIm(eList[cI.mImIdx], cI.mDisplayMode, cI.mName);
00514                 if (cI.mReqRGB)
00515                     DisplayIm(rgbList[cI.mImIdx], cI.mDisplayMode, cI.mName);
00516             }
00517         }
00518         ArrayListDelete(&lList);
00519         ArrayListDelete(&eList);
00520         ArrayListDelete(&rgbList);
00521 
00522         aSys.CheckMemoryUsageSinceMark(verbose > 0);
00523     }
00524 
00525     void
00526     HandleCycleSrc()
00527     {
00528         mOglWnd->updateScene = 1;
00529         SetStatusStr((char*) GetFpsString().c_str());
00530     }
00531 
00532     // specialization of base classes
00533 
00534     virtual void
00535     MouseFunc(INT msg, INT but, INT state, INT x, INT y)
00536     {
00537         Window::MouseFunc(msg, but, state, x, y);
00538 
00539         if ((msg == oglMouseDown) && (but == oglRightButton))
00540         {
00541             OGLMENU menu, subMenu1, subMenu2, subMenu3;
00542             int     choice, i;
00543             menu = oglSys.MenuCreate();
00544             subMenu1 = oglSys.MenuCreate();
00545             oglSys.MenuAdd(menu, "demo preset", subMenu1, 0);
00546             for (i=0 ; i<nrDemo ; i++)
00547             {
00548                 oglSys.MenuAdd(subMenu1, (char *) demo[i].c_str(), 0, 1000+i);
00549                 if (curDemo == i)
00550                     oglSys.MenuCheck(menu, 1000+i, 1);
00551             }
00552             subMenu2 = oglSys.MenuCreate();
00553             oglSys.MenuAdd(menu, "add basic", subMenu2, 0);
00554             for (i=0 ; i<nrBasicInvs ; i++)
00555             {
00556                 oglSys.MenuAdd(subMenu2, (char *) basicInvs[i].mName.c_str(), 0,
00557                                2000+i);
00558             }
00559             subMenu3 = oglSys.MenuCreate();
00560             oglSys.MenuAdd(menu, "add compound", subMenu3, 0);
00561             for (i=0 ; i<nrCompoundInvs ; i++)
00562             {
00563                 oglSys.MenuAdd(subMenu3, (char *) compoundInvs[i].mName.c_str(), 0,
00564                                3000+i);
00565             }
00566             oglSys.MenuAdd(menu, NULL, 0, 0); // separator
00567             oglSys.MenuAdd(menu, "fps reset", 0, 2);
00568 
00569             choice = oglSys.MenuPopUp(mOglWnd, menu);
00570 
00571             if (choice >= 3000)
00572             {
00573                 int cInv = choice - 3000;
00574                 curInvList.push_back(compoundInvs[cInv]);
00575             }
00576             else if (choice >= 2000)
00577             {
00578                 int bInv = choice - 2000;
00579                 curInvList.push_back(basicInvs[bInv]);
00580             }
00581             else if (choice >= 1000)
00582             {
00583                 curDemo = choice - 1000;
00584                 SetCurDemo(demo[curDemo]);
00585             }
00586             else
00587             {
00588                 switch (choice)
00589                 {
00590                 case 2: 
00591                     FpsReset();
00592                     break;
00593                 }
00594             }
00595             //SetDoReprocess(true);
00596 
00597             oglSys.MenuDestroy(menu);
00598             oglSys.MenuDestroy(subMenu1);
00599             oglSys.MenuDestroy(subMenu2);
00600             oglSys.MenuDestroy(subMenu3);
00601             oglSys.UpdateSceneFlag(mOglWnd, 1);
00602         }
00603     }
00604 
00605 private:
00606 
00607     double        mViewScale;
00608     int           mCurView;
00609 
00610 };
00611 
00612 int
00613 mainDemoCamera2d(int argc, char* argv[])
00614 {
00615     CmdOptions& options = CmdOptions::GetInstance();
00616     options.Initialise(true, true);
00617     std::string demoAlt("");
00618     for (int i=0 ; i<nrDemo ; i++)
00619     {
00620         demoAlt += demo[i];
00621         if (i != nrDemo-1)
00622             demoAlt += "|";
00623     }
00624     options.AddOption(0, "demo", "name", "compinv", (char*) demoAlt.c_str());
00625     options.AddOption(0, "file", "name", "camera");
00626 
00627     if (! options.ParseArgs(argc, argv, "", 0))
00628         return 1;
00629 
00630     SetCurDemo(options.GetString("demo"));
00631     verbose = options.GetInt("verb");
00632     sigma = options.GetDouble("sigma");
00633     precision = options.GetDouble("precision");
00634     logScale = options.GetDouble("logScale");
00635     std::string srcName = options.GetString("file");
00636 
00637     RgbDataSrcFactory& factory = RgbDataSrcFactory::Instance();
00638     RgbDataSrc* src = factory.Construct(srcName, options.GetString("src"));
00639     if (! src->Valid())
00640     {
00641         std::cout << "RgbDataSrc failed" << std::endl;
00642         return 0;
00643     }
00644     std::cout << src->LastFrame()+1 << " frames of " << src->FrameWidth() 
00645               << " x " << src->FrameHeight() << std::endl;
00646 
00647     std::cout << "demo = " << demo[curDemo] << std::endl;
00648     std::cout << "sigma = " << sigma << ", precision = " << precision << std::endl;
00649     std::cout << "logScale = " << logScale << std::endl;
00650 
00651     Array2dScalarReal64* g = 0;
00652     g = MakeGaussian1d(sigma, 2, precision, 100);
00653     int borderSize = g->CW();
00654     delete g;
00655 
00656     srcV = ArrayCreate<Array2dVec3Real64>(src->FrameWidth(), src->FrameHeight(),
00657                                           borderSize, borderSize);
00658 
00659     //WindowCamera2d* oglWnd = new WindowCamera2d(srcName, src, &options);
00660     oglWnd = new WindowCamera2d(src);
00661     if (! oglWnd->Valid())
00662     {
00663         std::cout << "WindowCamera2d failed" << std::endl;
00664         return 0;
00665     }
00666     return 1;
00667 }
00668 
00669 } // namespace DemoCamera2d
00670 } // namespace Application
00671 } // namespace Impala
00672 
00673 int
00674 main(int argc, char* argv[])
00675 {
00676     return Impala::Application::DemoCamera2d::mainDemoCamera2d(argc, argv);
00677 }

Generated on Fri Mar 19 09:30:28 2010 for ImpalaSrc by  doxygen 1.5.1