3333#include < libfreenect2/threading.h>
3434#include < libfreenect2/registration.h>
3535#include < libfreenect2/packet_pipeline.h>
36+ #include < libfreenect2/logger.h>
3637#ifdef LIBFREENECT2_WITH_OPENGL_SUPPORT
3738#include " viewer.h"
3839#endif
@@ -45,6 +46,29 @@ void sigint_handler(int s)
4546 protonect_shutdown = true ;
4647}
4748
49+ // The following demostrates how to create a custom logger
50+ #include < fstream>
51+ #include < cstdlib>
52+ class MyFileLogger : public libfreenect2 ::Logger
53+ {
54+ private:
55+ std::ofstream logfile_;
56+ public:
57+ MyFileLogger (const char *filename)
58+ : logfile_(filename)
59+ {
60+ level_ = Debug;
61+ }
62+ bool good ()
63+ {
64+ return logfile_.good ();
65+ }
66+ virtual void log (Level level, const std::string &message)
67+ {
68+ logfile_ << " [" << libfreenect2::Logger::level2str (level) << " ] " << message << std::endl;
69+ }
70+ };
71+
4872int main (int argc, char *argv[])
4973{
5074 std::string program_path (argv[0 ]);
@@ -58,6 +82,12 @@ int main(int argc, char *argv[])
5882 }
5983
6084 libfreenect2::Freenect2 freenect2;
85+ // create a console logger with debug level (default is console logger with info level)
86+ libfreenect2::setGlobalLogger (libfreenect2::createConsoleLogger (libfreenect2::Logger::Debug));
87+ MyFileLogger *filelogger = new MyFileLogger (getenv (" LOGFILE" ));
88+ if (filelogger->good ())
89+ libfreenect2::setGlobalLogger (filelogger);
90+
6191 libfreenect2::Freenect2Device *dev = 0 ;
6292 libfreenect2::PacketPipeline *pipeline = 0 ;
6393
@@ -69,6 +99,8 @@ int main(int argc, char *argv[])
6999
70100 std::string serial = freenect2.getDefaultDeviceSerialNumber ();
71101
102+ bool viewer_enabled = true ;
103+
72104 for (int argI = 1 ; argI < argc; ++argI)
73105 {
74106 const std::string arg (argv[argI]);
@@ -100,6 +132,10 @@ int main(int argc, char *argv[])
100132 {
101133 serial = arg;
102134 }
135+ else if (arg == " -noviewer" )
136+ {
137+ viewer_enabled = false ;
138+ }
103139 else
104140 {
105141 std::cout << " Unknown argument: " << arg << std::endl;
@@ -137,9 +173,13 @@ int main(int argc, char *argv[])
137173
138174 libfreenect2::Registration* registration = new libfreenect2::Registration (dev->getIrCameraParams (), dev->getColorCameraParams ());
139175
176+ size_t framecount = 0 ;
140177#ifdef LIBFREENECT2_WITH_OPENGL_SUPPORT
141178 Viewer viewer;
142- viewer.initialize ();
179+ if (viewer_enabled)
180+ viewer.initialize ();
181+ #else
182+ viewer_enabled = false ;
143183#endif
144184
145185 while (!protonect_shutdown)
@@ -151,15 +191,22 @@ int main(int argc, char *argv[])
151191
152192 registration->apply (rgb, depth, &undistorted, ®istered);
153193
194+ framecount++;
195+ if (!viewer_enabled)
196+ {
197+ if (framecount % 100 == 0 )
198+ std::cout << " The viewer is turned off. Received " << framecount << " frames. Ctrl-C to stop." << std::endl;
199+ listener.release (frames);
200+ continue ;
201+ }
202+
154203#ifdef LIBFREENECT2_WITH_OPENGL_SUPPORT
155204 viewer.addFrame (" RGB" , rgb);
156205 viewer.addFrame (" ir" , ir);
157206 viewer.addFrame (" depth" , depth);
158207 viewer.addFrame (" registered" , ®istered);
159208
160- protonect_shutdown = viewer.render ();
161- #else
162- protonect_shutdown = true ;
209+ protonect_shutdown = protonect_shutdown || viewer.render ();
163210#endif
164211
165212 listener.release (frames);
0 commit comments