From: <da...@us...> - 2006-09-16 21:00:19
|
Revision: 12 http://svn.sourceforge.net/freepv/?rev=12&view=rev Author: dangelo Date: 2006-09-16 14:00:14 -0700 (Sat, 16 Sep 2006) Log Message: ----------- updated configure script Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/m4/ax_opengl.m4 Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-09-16 20:58:21 UTC (rev 11) +++ freepv/trunk/configure.in 2006-09-16 21:00:14 UTC (rev 12) @@ -5,8 +5,22 @@ AC_LANG_CPLUSPLUS AC_PROG_CXX +AC_LIBTOOL_DLOPEN AM_PROG_LIBTOOL +dnl debugging options +AC_ARG_ENABLE([debug], + AC_HELP_STRING([--enable-debug], + [enable debugging output (default=no).]), + [enable_debug=$enableval], + [enable_debug=no]) + +if test "x$enable_debug" != xno; then + CFLAGS="$CFLAGS -g -DDEBUG" + CXXFLAGS="$CXXFLAGS -g -DDEBUG" +fi + + AX_CHECK_JPEG if test "x$have_jpeg" != xyes; then AC_MSG_ERROR([ @@ -39,5 +53,56 @@ PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([QUICKTIME], [libquicktime]) +PKG_CHECK_MODULES([GTK2], [gtk+-2.0]) -AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile) +# Checks for libraries. + +# gecko sdk check from mplayerplug-in +# +#tell us where gecko-sdk is, try to find if not provided + +AC_ARG_WITH([gecko-sdk],[ --with-gecko-sdk=<path> prefix of gecko-sdk installation], +[GECKO_SDK_PREFIX=$with_gecko_sdk +AC_SUBST(GECKO_SDK_PREFIX) +if test -d ${GECKO_SDK_PREFIX}/xpcom/include; then + MOZPLUG_CFLAGS="-I${GECKO_SDK_PREFIX} -I${GECKO_SDK_PREFIX}/xpcom/include -I${GECKO_SDK_PREFIX}/nspr/include -I${GECKO_SDK_PREFIX}/string/include -I${GECKO_SDK_PREFIX}/plugin/include -I${GECKO_SDK_PREFIX}/java/include -DGECKOSDK_ENABLED" + GECKO_DEFINES="-DXPCOM_GLUE -DMOZILLA_STRICT_API" + AC_SUBST(GECKO_DEFINES) +else + echo "Using new (v1.7+) gecko-sdk" + MOZPLUG_CFLAGS="-I${GECKO_SDK_PREFIX} -I${GECKO_SDK_PREFIX}/include" + GECKO_DEFINES="-DXPCOM_GLUE -DMOZILLA_STRICT_API" + AC_SUBST(GECKO_DEFINES) +fi +AC_ARG_ENABLE(rpath, + AC_HELP_STRING([--enable-rpath], [Add gecko-sdk bin and lib directories to the rpath]), + [if test "$enableval" = ""; then use_rpath=yes; else use_rpath=$enableval; fi], [use_rpath=no]) + +if test "$use_rpath" = "yes"; then + LDFLAGS="$LDFLAGS -Wl,-R${GECKO_SDK_PREFIX}/bin:${GECKO_SDK_PREFIX}/lib" +fi + + +],[ + AC_MSG_NOTICE([Determining mozilla/firefox packages to build against]) + PKG_CHECK_MODULES(MOZPLUG,[mozilla-plugin],[AC_SUBST(MOZPLUG_CFLAGS) MOZPLUG_CFLAGS="${MOZPLUG_CFLAGS} -I`$PKG_CONFIG --variable=includedir mozilla-plugin`"],[AC_MSG_WARN([mozilla-plugin not found])]) + + if test "$MOZPLUG_CFLAGS" = ""; then + PKG_CHECK_MODULES(MOZPLUG,[firefox-plugin],[AC_SUBST(MOZPLUG_CFLAGS) MOZPLUG_CFLAGS="${MOZPLUG_CFLAGS} -I`$PKG_CONFIG --variable=includedir firefox-plugin`"],[AC_MSG_WARN([firefox-plugin not found])]) + fi + if test "$MOZPLUG_CFLAGS" = ""; then + PKG_CHECK_MODULES(MOZPLUG,[seamonkey-plugin],[AC_SUBST(MOZPLUG_CFLAGS) MOZPLUG_CFLAGS="${MOZPLUG_CFLAGS} -I`$PKG_CONFIG --variable=includedir seamonkey-plugin`"],[AC_MSG_WARN([seamonkey-plugin not found])]) + fi + if test "$MOZPLUG_CFLAGS" = ""; then + PKG_CHECK_MODULES(MOZPLUG,[xulrunner-plugin],[AC_SUBST(MOZPLUG_CFLAGS) MOZPLUG_CFLAGS="${MOZPLUG_CFLAGS} -I`$PKG_CONFIG --variable=includedir xulrunner-plugin`"],[AC_MSG_WARN([xulrunner-plugin not found])]) + fi + + if test "$MOZPLUG_CFLAGS" = ""; then + AC_MSG_ERROR([Unable to find mozilla or firefox development files]) + fi + ] +) + + +AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile) +dnl AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/freepv-mozilla/Makefile src/pluginmoz/Makefile src/plugin_simple/Makefile src/libfreepv/glutfont/Makefile) Modified: freepv/trunk/m4/ax_opengl.m4 =================================================================== --- freepv/trunk/m4/ax_opengl.m4 2006-09-16 20:58:21 UTC (rev 11) +++ freepv/trunk/m4/ax_opengl.m4 2006-09-16 21:00:14 UTC (rev 12) @@ -49,10 +49,10 @@ AC_SEARCH_LIBS(glAccum, $GL_search_list, have_GL=yes, have_GL=no) AC_SEARCH_LIBS(gluBeginCurve, $GLU_search_list, have_GLU=yes, have_GLU=no) AC_SEARCH_LIBS(glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no) - AC_SEARCH_LIBS(glutInit, glut, have_glut=yes, have_glut=no) + dnl AC_SEARCH_LIBS(glutInit, glut, have_glut=yes, have_glut=no) + have_glut=no - # Restore pretty messages. exec AC_FD_MSG>&8 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-09-27 16:18:53
|
Revision: 21 http://svn.sourceforge.net/freepv/?rev=21&view=rev Author: dangelo Date: 2006-09-27 09:18:46 -0700 (Wed, 27 Sep 2006) Log Message: ----------- modified unix build scripts Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/freepv.kdevelop freepv/trunk/m4/ax_opengl.m4 Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-09-27 16:16:25 UTC (rev 20) +++ freepv/trunk/configure.in 2006-09-27 16:18:46 UTC (rev 21) @@ -54,6 +54,7 @@ PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([QUICKTIME], [libquicktime]) PKG_CHECK_MODULES([GTK2], [gtk+-2.0]) +PKG_CHECK_MODULES([GTKGLEXT], [gtkglext-1.0]) # Checks for libraries. @@ -104,5 +105,4 @@ ) -AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile) -dnl AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/freepv-mozilla/Makefile src/pluginmoz/Makefile src/plugin_simple/Makefile src/libfreepv/glutfont/Makefile) +AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile src/freepv-mozilla/Makefile src/freepv-gtk/Makefile src/freepv-glut/Makefile) Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-09-27 16:16:25 UTC (rev 20) +++ freepv/trunk/freepv.kdevelop 2006-09-27 16:18:46 UTC (rev 21) @@ -14,22 +14,23 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description></description> + <description/> </general> <kdevautoproject> <general> - <activetarget>src/libfreepv/libfreepv.a</activetarget> + <activetarget>src/freepv-gtk/freepv-gtk</activetarget> <useconfiguration>debug</useconfiguration> </general> <run> - <mainprogram>src/freepv-glx/freepv-glx</mainprogram> + <mainprogram>src/freepv-glut/freepv-glut</mainprogram> <terminal>true</terminal> <directoryradio>executable</directoryradio> <runarguments> <freepv-glx/> + <freepv-gtk/> </runarguments> <customdirectory>/</customdirectory> - <programargs>cube_front=pano_front.jpg cube_back=pano_back.jpg cube_bottom=pano_bottom.jpg cube_left=pano_left.jpg cube_right=pano_right.jpg cube_top=pano_top.jpg</programargs> + <programargs>src=../../../testcases/good/InsideSionHillCampus.mov</programargs> <autocompile>true</autocompile> <envvars/> </run> @@ -42,7 +43,7 @@ <cxxflags>-O2 -g0</cxxflags> </optimized> <debug> - <configargs>--enable-debug=full</configargs> + <configargs>--enable-debug</configargs> <builddir>debug</builddir> <ccompiler>kdevgccoptions</ccompiler> <cxxcompiler>kdevgppoptions</cxxcompiler> @@ -172,10 +173,10 @@ <qt> <used>false</used> <version>3</version> - <root></root> + <root/> </qt> <creategettersetter> - <prefixGet></prefixGet> + <prefixGet/> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -191,12 +192,12 @@ </cppsupportpart> <kdevdebugger> <general> - <programargs>src=pittstmall.mov3</programargs> - <gdbpath></gdbpath> - <dbgshell></dbgshell> - <configGdbScript></configGdbScript> - <runShellScript></runShellScript> - <runGdbScript></runGdbScript> + <programargs>src=../../../testcases/good/InsideSionHillCampus.mov</programargs> + <gdbpath/> + <dbgshell/> + <configGdbScript/> + <runShellScript/> + <runGdbScript/> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Modified: freepv/trunk/m4/ax_opengl.m4 =================================================================== --- freepv/trunk/m4/ax_opengl.m4 2006-09-27 16:16:25 UTC (rev 20) +++ freepv/trunk/m4/ax_opengl.m4 2006-09-27 16:18:46 UTC (rev 21) @@ -49,8 +49,8 @@ AC_SEARCH_LIBS(glAccum, $GL_search_list, have_GL=yes, have_GL=no) AC_SEARCH_LIBS(gluBeginCurve, $GLU_search_list, have_GLU=yes, have_GLU=no) AC_SEARCH_LIBS(glXChooseVisual, $GLX_search_list, have_GLX=yes, have_GLX=no) - dnl AC_SEARCH_LIBS(glutInit, glut, have_glut=yes, have_glut=no) - have_glut=no + AC_SEARCH_LIBS(glutInit, glut, have_glut=yes, have_glut=no) + dnl have_glut=no # Restore pretty messages. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-09-28 22:22:18
|
Revision: 26 http://svn.sourceforge.net/freepv/?rev=26&view=rev Author: dangelo Date: 2006-09-28 15:22:10 -0700 (Thu, 28 Sep 2006) Log Message: ----------- removed gtk directory from automake build, it is not required, since the mozilla-plugin uses glx now. Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/src/Makefile.am Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-09-28 15:44:27 UTC (rev 25) +++ freepv/trunk/configure.in 2006-09-28 22:22:10 UTC (rev 26) @@ -53,8 +53,8 @@ PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([QUICKTIME], [libquicktime]) -PKG_CHECK_MODULES([GTK2], [gtk+-2.0]) -PKG_CHECK_MODULES([GTKGLEXT], [gtkglext-1.0]) +dnl PKG_CHECK_MODULES([GTK2], [gtk+-2.0]) +dnl PKG_CHECK_MODULES([GTKGLEXT], [gtkglext-1.0]) # Checks for libraries. @@ -105,4 +105,4 @@ ) -AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile src/freepv-mozilla/Makefile src/freepv-gtk/Makefile src/freepv-glut/Makefile) +AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile src/freepv-mozilla/Makefile src/freepv-glut/Makefile) Modified: freepv/trunk/src/Makefile.am =================================================================== --- freepv/trunk/src/Makefile.am 2006-09-28 15:44:27 UTC (rev 25) +++ freepv/trunk/src/Makefile.am 2006-09-28 22:22:10 UTC (rev 26) @@ -3,4 +3,4 @@ INCLUDES = $(all_includes) # the library search path. -SUBDIRS = libfreepv freepv-glx freepv-glut freepv-gtk freepv-mozilla +SUBDIRS = libfreepv freepv-glx freepv-glut freepv-mozilla This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-09-29 06:28:21
|
Revision: 29 http://svn.sourceforge.net/freepv/?rev=29&view=rev Author: dangelo Date: 2006-09-28 23:26:09 -0700 (Thu, 28 Sep 2006) Log Message: ----------- added some test files Added Paths: ----------- freepv/trunk/testcases/ freepv/trunk/testcases/good/ freepv/trunk/testcases/good/OutsideSionHillCampus.mov freepv/trunk/testcases/good/outside_000000.jpg freepv/trunk/testcases/good/outside_000001.jpg freepv/trunk/testcases/good/outside_000002.jpg freepv/trunk/testcases/good/outside_000003.jpg freepv/trunk/testcases/good/outside_000004.jpg freepv/trunk/testcases/good/outside_000005.jpg freepv/trunk/testcases/good/test.html freepv/trunk/testcases/good/test_cube.html Added: freepv/trunk/testcases/good/OutsideSionHillCampus.mov =================================================================== (Binary files differ) Property changes on: freepv/trunk/testcases/good/OutsideSionHillCampus.mov ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: freepv/trunk/testcases/good/outside_000000.jpg =================================================================== (Binary files differ) Property changes on: freepv/trunk/testcases/good/outside_000000.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: freepv/trunk/testcases/good/outside_000001.jpg =================================================================== (Binary files differ) Property changes on: freepv/trunk/testcases/good/outside_000001.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: freepv/trunk/testcases/good/outside_000002.jpg =================================================================== (Binary files differ) Property changes on: freepv/trunk/testcases/good/outside_000002.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: freepv/trunk/testcases/good/outside_000003.jpg =================================================================== (Binary files differ) Property changes on: freepv/trunk/testcases/good/outside_000003.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: freepv/trunk/testcases/good/outside_000004.jpg =================================================================== (Binary files differ) Property changes on: freepv/trunk/testcases/good/outside_000004.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: freepv/trunk/testcases/good/outside_000005.jpg =================================================================== (Binary files differ) Property changes on: freepv/trunk/testcases/good/outside_000005.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: freepv/trunk/testcases/good/test.html =================================================================== --- freepv/trunk/testcases/good/test.html (rev 0) +++ freepv/trunk/testcases/good/test.html 2006-09-29 06:26:09 UTC (rev 29) @@ -0,0 +1,18 @@ +<html> +<body> + +<center><h1>Basic Plugin Example for Mozilla Test Case</h1></center> + +This test case is to demonstrate the Basic Plugin example. You should see the +plugin window with the black frame aroung it and the browser user agent string +which plugin draws inside the window. +<br><br> + +<center> +<embed type="application/freepv-plugin" + src="OutsideSionHillCampus.mov" + width=600 height=400/> +</center> + +</html> +</body> Added: freepv/trunk/testcases/good/test_cube.html =================================================================== --- freepv/trunk/testcases/good/test_cube.html (rev 0) +++ freepv/trunk/testcases/good/test_cube.html 2006-09-29 06:26:09 UTC (rev 29) @@ -0,0 +1,23 @@ +<html> +<body> + +<center><h1>Basic Plugin Example for Mozilla Test Case</h1></center> + +This test case is to demonstrate the Basic Plugin example. You should see the +plugin window with the black frame aroung it and the browser user agent string +which plugin draws inside the window. +<br><br> + +<center> +<embed type="application/freepv-plugin" + cube_front="outside_000000.jpg" + cube_right="outside_000001.jpg" + cube_back="outside_000002.jpg" + cube_left="outside_000003.jpg" + cube_top="outside_000004.jpg" + cube_bottom="outside_000005.jpg" + width=600 height=400/> +</center> + +</html> +</body> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-09-29 21:30:28
|
Revision: 38 http://svn.sourceforge.net/freepv/?rev=38&view=rev Author: dangelo Date: 2006-09-29 14:30:15 -0700 (Fri, 29 Sep 2006) Log Message: ----------- added fpv prefix to font code copied from freeglut Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/freepv-glut/Makefile.am freepv/trunk/src/freepv-mozilla/Makefile.am freepv/trunk/src/freepv-mozilla/plugin.cpp freepv/trunk/src/libfreepv/OpenGLRenderer.cpp freepv/trunk/src/libfreepv/glutfont/freeglut_font.c freepv/trunk/src/libfreepv/glutfont/freeglut_font_copy.h freepv/trunk/src/libfreepv/glutfont/freeglut_font_data.c Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-09-29 13:03:12 UTC (rev 37) +++ freepv/trunk/freepv.kdevelop 2006-09-29 21:30:15 UTC (rev 38) @@ -14,7 +14,7 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description/> + <description></description> </general> <kdevautoproject> <general> @@ -30,7 +30,7 @@ <freepv-gtk/> </runarguments> <customdirectory>/</customdirectory> - <programargs>src=../../../testcases/good/InsideSionHillCampus.mov</programargs> + <programargs>src=../../../testcases/good/OutsideSionHillCampus.mov</programargs> <autocompile>true</autocompile> <envvars/> </run> @@ -173,10 +173,10 @@ <qt> <used>false</used> <version>3</version> - <root/> + <root></root> </qt> <creategettersetter> - <prefixGet/> + <prefixGet></prefixGet> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -193,11 +193,11 @@ <kdevdebugger> <general> <programargs>src=../../../testcases/good/InsideSionHillCampus.mov</programargs> - <gdbpath/> - <dbgshell/> - <configGdbScript/> - <runShellScript/> - <runGdbScript/> + <gdbpath></gdbpath> + <dbgshell></dbgshell> + <configGdbScript></configGdbScript> + <runShellScript></runShellScript> + <runGdbScript></runGdbScript> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Modified: freepv/trunk/src/freepv-glut/Makefile.am =================================================================== --- freepv/trunk/src/freepv-glut/Makefile.am 2006-09-29 13:03:12 UTC (rev 37) +++ freepv/trunk/src/freepv-glut/Makefile.am 2006-09-29 21:30:15 UTC (rev 38) @@ -6,4 +6,5 @@ bin_PROGRAMS = freepv-glut freepv_glut_SOURCES = glut_platform.cpp freepv-glut.cpp glut_platform.h noinst_HEADERS = glut_platform.h -freepv_glut_LDADD = $(top_builddir)/src/libfreepv/libfreepv.a +freepv_glut_LDADD = $(top_builddir)/src/libfreepv/libfreepv.a \ +$(top_builddir)/src/libfreepv/glutfont/libglutfont.a Modified: freepv/trunk/src/freepv-mozilla/Makefile.am =================================================================== --- freepv/trunk/src/freepv-mozilla/Makefile.am 2006-09-29 13:03:12 UTC (rev 37) +++ freepv/trunk/src/freepv-mozilla/Makefile.am 2006-09-29 21:30:15 UTC (rev 38) @@ -7,5 +7,4 @@ libnsfreepv_la_SOURCES = plugin_unix.cpp np_entry.cpp npn_gate.cpp npp_gate.cpp \ plugin.cpp -libnsfreepv_la_LDFLAGS = $(top_builddir)/src/libfreepv/glutfont/libglutfont.a \ - $(top_builddir)/src/libfreepv/libfreepv.a +libnsfreepv_la_LDFLAGS = $(top_builddir)/src/libfreepv/libfreepv.a \ $(top_builddir)/src/libfreepv/glutfont/libglutfont.a Modified: freepv/trunk/src/freepv-mozilla/plugin.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin.cpp 2006-09-29 13:03:12 UTC (rev 37) +++ freepv/trunk/src/freepv-mozilla/plugin.cpp 2006-09-29 21:30:15 UTC (rev 38) @@ -135,7 +135,8 @@ NPError nsPluginInstance::DestroyStream(NPStream* stream, NPError reason) { DEBUG_TRACE("reason: " << reason); - m_eventListener->onDownloadComplete(m_fpvDownBuffer, m_fpvDownloadedBytes); + // todo: notify if premature finish + //m_eventListener->onDownloadComplete(m_fpvDownBuffer, m_fpvDownloadedBytes); return NPERR_NO_ERROR; } Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-09-29 13:03:12 UTC (rev 37) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-09-29 21:30:15 UTC (rev 38) @@ -55,11 +55,12 @@ { // render text in single line // TODO: support multiple lines of text - glColor4f(1.0f, 1.0f, 1.0f,1.0f); - glRasterPos3i(20,20,0); + glColor3f(1.0f, 1.0f, 1.0f); + glRasterPos3f(20,20,0.9); + glColor3f(1.0f, 1.0f, 1.0f); const unsigned char * str = (const unsigned char *) m_text->m_text.c_str(); - DEBUG_DEBUG("string output: " << str << ", " << m_text->m_text.c_str()); - glutBitmapString(GLUT_BITMAP_HELVETICA_18, str); + //DEBUG_DEBUG("string output: " << str << ", " << m_text->m_text.c_str()); + FPVglutBitmapString(FPVGLUT_BITMAP_HELVETICA_18, str); //glutBitmapString(GLUT_BITMAP_HELVETICA_18, (const unsigned char *)"Hello World"); } @@ -307,7 +308,6 @@ gluPerspective(scene.getCamera()->fov, ratio, 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); glRotatef(scene.getCamera()->yaw, 1.0f, 0.0f, 0.0f); /* rotate on the X axis */ @@ -339,19 +339,19 @@ glLoadIdentity(); glTranslatef(0.0f,0.0f,0.0f); // Left 1.5 Then Into Screen Six Units - glBegin(GL_TRIANGLES); // Begin Drawing Triangles - glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red - glVertex3f( 0.0f, 1.0f, 0.0f); // Move Up One Unit From Center (Top Point) - - glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green - glVertex3f(-1.0f,-1.0f, 0.0f); // Left And Down One Unit (Bottom Left) - - glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue - glVertex3f( 1.0f,-1.0f, 0.0f); // Right And Down One Unit (Bottom Right) - glEnd(); // Done Drawing A Triangle - + glBegin(GL_TRIANGLES); // Begin Drawing Triangles + glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red + glVertex3f( 0.0f, 1.0f, 0.0f); // Move Up One Unit From Center (Top Point) + glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green + glVertex3f(-1.0f,-1.0f, 0.0f); // Left And Down One Unit (Bottom Left) + glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue + glVertex3f( 1.0f,-1.0f, 0.0f); // Right And Down One Unit (Bottom Right) + glEnd(); // Done Drawing A Triangle + + + #endif #if 1 @@ -372,16 +372,16 @@ /* glTranslatef((GLfloat)m_size.w/2.0f,(GLfloat)m_size.h/2.0f,0.0f); - glBegin(GL_TRIANGLES); // Begin Drawing Triangles - glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red - glVertex3f( 0.0f, 100.0f, 0.0f); // Move Up One Unit From Center (Top Point) - - glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green - glVertex3f(-100.0f,-100.0f, 0.0f); // Left And Down One Unit (Bottom Left) - - glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue - glVertex3f( 100.0f,-100.0f, 0.0f); // Right And Down One Unit (Bottom Right) - glEnd(); // Done Drawing A Triangle + glBegin(GL_TRIANGLES); // Begin Drawing Triangles + glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red + glVertex3f( 0.0f, 100.0f, 0.0f); // Move Up One Unit From Center (Top Point) + + glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green + glVertex3f(-100.0f,-100.0f, 0.0f); // Left And Down One Unit (Bottom Left) + + glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue + glVertex3f( 100.0f,-100.0f, 0.0f); // Right And Down One Unit (Bottom Right) + glEnd(); // Done Drawing A Triangle */ { Modified: freepv/trunk/src/libfreepv/glutfont/freeglut_font.c =================================================================== --- freepv/trunk/src/libfreepv/glutfont/freeglut_font.c 2006-09-29 13:03:12 UTC (rev 37) +++ freepv/trunk/src/libfreepv/glutfont/freeglut_font.c 2006-09-29 21:30:15 UTC (rev 38) @@ -31,8 +31,8 @@ #include <stdio.h> /* The bitmap font structure */ -typedef struct tagSFG_Font SFG_Font; -struct tagSFG_Font +typedef struct tagFPVSFG_Font FPVSFG_Font; +struct tagFPVSFG_Font { char* Name; /* The source font name */ int Quantity; /* Number of chars in font */ @@ -53,39 +53,39 @@ /* * These are the font faces defined in freeglut_font_data.c file: */ -extern SFG_Font fgFontFixed8x13; -extern SFG_Font fgFontFixed9x15; -extern SFG_Font fgFontHelvetica10; -extern SFG_Font fgFontHelvetica12; -extern SFG_Font fgFontHelvetica18; -extern SFG_Font fgFontTimesRoman10; -extern SFG_Font fgFontTimesRoman24; -//extern SFG_StrokeFont fgStrokeRoman; -//extern SFG_StrokeFont fgStrokeMonoRoman; +extern FPVSFG_Font FPVfgFontFixed8x13; +extern FPVSFG_Font FPVfgFontFixed9x15; +extern FPVSFG_Font FPVfgFontHelvetica10; +extern FPVSFG_Font FPVfgFontHelvetica12; +extern FPVSFG_Font FPVfgFontHelvetica18; +extern FPVSFG_Font FPVfgFontTimesRoman10; +extern FPVSFG_Font FPVfgFontTimesRoman24; +//extern FPVSFG_StrokeFont fgStrokeRoman; +//extern FPVSFG_StrokeFont fgStrokeMonoRoman; /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ /* - * Matches a font ID with a SFG_Font structure pointer. + * Matches a font ID with a FPVSFG_Font structure pointer. * This was changed to match the GLUT header style. */ -static SFG_Font* fghFontByID( int font ) +static FPVSFG_Font* FPVfghFontByID( int font ) { - if( font == GLUT_BITMAP_8_BY_13 ) - return &fgFontFixed8x13; - if( font == GLUT_BITMAP_9_BY_15 ) - return &fgFontFixed9x15; - if( font == GLUT_BITMAP_HELVETICA_10 ) - return &fgFontHelvetica10; - if( font == GLUT_BITMAP_HELVETICA_12 ) - return &fgFontHelvetica12; - if( font == GLUT_BITMAP_HELVETICA_18 ) - return &fgFontHelvetica18; - if( font == GLUT_BITMAP_TIMES_ROMAN_10 ) - return &fgFontTimesRoman10; - if( font == GLUT_BITMAP_TIMES_ROMAN_24 ) - return &fgFontTimesRoman24; + if( font == FPVGLUT_BITMAP_8_BY_13 ) + return &FPVfgFontFixed8x13; + if( font == FPVGLUT_BITMAP_9_BY_15 ) + return &FPVfgFontFixed9x15; + if( font == FPVGLUT_BITMAP_HELVETICA_10 ) + return &FPVfgFontHelvetica10; + if( font == FPVGLUT_BITMAP_HELVETICA_12 ) + return &FPVfgFontHelvetica12; + if( font == FPVGLUT_BITMAP_HELVETICA_18 ) + return &FPVfgFontHelvetica18; + if( font == FPVGLUT_BITMAP_TIMES_ROMAN_10 ) + return &FPVfgFontTimesRoman10; + if( font == FPVGLUT_BITMAP_TIMES_ROMAN_24 ) + return &FPVfgFontTimesRoman24; return 0; } @@ -96,11 +96,11 @@ /* * Draw a bitmap character */ -void FGAPIENTRY glutBitmapCharacter( int fontID, int character ) +void FGAPIENTRY FPVglutBitmapCharacter( int fontID, int character ) { const GLubyte* face; - SFG_Font* font; - font = fghFontByID( fontID ); + FPVSFG_Font* font; + font = FPVfghFontByID( fontID ); assert (( character >= 1 )&&( character < 256 ) ); assert ( font ); @@ -125,12 +125,12 @@ glPopClientAttrib( ); } -void FGAPIENTRY glutBitmapString( int fontID, const unsigned char *string ) +void FGAPIENTRY FPVglutBitmapString( int fontID, const unsigned char *string ) { unsigned char c; float x = 0.0f ; - SFG_Font* font; - font = fghFontByID( fontID ); + FPVSFG_Font* font; + font = FPVfghFontByID( fontID ); assert( font ); if ( !string || ! *string ) return; @@ -174,10 +174,10 @@ /* * Returns the width in pixels of a font's character */ -int FGAPIENTRY glutBitmapWidth( int fontID, int character ) +int FGAPIENTRY FPVglutBitmapWidth( int fontID, int character ) { - SFG_Font* font; - font = fghFontByID( fontID ); + FPVSFG_Font* font; + font = FPVfghFontByID( fontID ); assert( character > 0 && character < 256); assert( font); return *( font->Characters[ character ] ); @@ -186,12 +186,12 @@ /* * Return the width of a string drawn using a bitmap font */ -int FGAPIENTRY glutBitmapLength( int fontID, const unsigned char* string ) +int FGAPIENTRY FPVglutBitmapLength( int fontID, const unsigned char* string ) { unsigned char c; int length = 0, this_line_length = 0; - SFG_Font* font; - font = fghFontByID( fontID ); + FPVSFG_Font* font; + font = FPVfghFontByID( fontID ); assert( font ); if ( !string || ! *string ) return 0; @@ -216,10 +216,10 @@ /* * Returns the height of a bitmap font */ -int FGAPIENTRY glutBitmapHeight( int fontID ) +int FGAPIENTRY FPVglutBitmapHeight( int fontID ) { - SFG_Font* font; - font = fghFontByID( fontID ); + FPVSFG_Font* font; + font = FPVfghFontByID( fontID ); assert( font); return font->Height; } Modified: freepv/trunk/src/libfreepv/glutfont/freeglut_font_copy.h =================================================================== --- freepv/trunk/src/libfreepv/glutfont/freeglut_font_copy.h 2006-09-29 13:03:12 UTC (rev 37) +++ freepv/trunk/src/libfreepv/glutfont/freeglut_font_copy.h 2006-09-29 21:30:15 UTC (rev 38) @@ -90,13 +90,13 @@ * * Steve Baker suggested to make it binary compatible with GLUT: */ -# define GLUT_BITMAP_9_BY_15 2 -# define GLUT_BITMAP_8_BY_13 3 -# define GLUT_BITMAP_TIMES_ROMAN_10 4 -# define GLUT_BITMAP_TIMES_ROMAN_24 5 -# define GLUT_BITMAP_HELVETICA_10 6 -# define GLUT_BITMAP_HELVETICA_12 7 -# define GLUT_BITMAP_HELVETICA_18 8 +# define FPVGLUT_BITMAP_9_BY_15 2 +# define FPVGLUT_BITMAP_8_BY_13 3 +# define FPVGLUT_BITMAP_TIMES_ROMAN_10 4 +# define FPVGLUT_BITMAP_TIMES_ROMAN_24 5 +# define FPVGLUT_BITMAP_HELVETICA_10 6 +# define FPVGLUT_BITMAP_HELVETICA_12 7 +# define FPVGLUT_BITMAP_HELVETICA_18 8 #if 0 struct freeglutBitmapFont @@ -131,10 +131,10 @@ /* * Font stuff, see freeglut_font.c */ -FGAPI void FGAPIENTRY glutBitmapCharacter( int font, int character ); -FGAPI int FGAPIENTRY glutBitmapWidth( int font, int character ); -FGAPI int FGAPIENTRY glutBitmapLength( int font, const unsigned char* string ); -FGAPI void FGAPIENTRY glutBitmapString( int fontID, const unsigned char *string ); +FGAPI void FGAPIENTRY FPVglutBitmapCharacter( int font, int character ); +FGAPI int FGAPIENTRY FPVglutBitmapWidth( int font, int character ); +FGAPI int FGAPIENTRY FPVglutBitmapLength( int font, const unsigned char* string ); +FGAPI void FGAPIENTRY FPVglutBitmapString( int fontID, const unsigned char *string ); Modified: freepv/trunk/src/libfreepv/glutfont/freeglut_font_data.c =================================================================== --- freepv/trunk/src/libfreepv/glutfont/freeglut_font_data.c 2006-09-29 13:03:12 UTC (rev 37) +++ freepv/trunk/src/libfreepv/glutfont/freeglut_font_data.c 2006-09-29 21:30:15 UTC (rev 38) @@ -55,8 +55,8 @@ #include <stdio.h> /* The bitmap font structure */ -typedef struct tagSFG_Font SFG_Font; -struct tagSFG_Font +typedef struct tagFPVSFG_Font FPVSFG_Font; +struct tagFPVSFG_Font { char* Name; /* The source font name */ int Quantity; /* Number of chars in font */ @@ -361,7 +361,7 @@ Fixed8x13_Character_240,Fixed8x13_Character_241,Fixed8x13_Character_242,Fixed8x13_Character_243,Fixed8x13_Character_244,Fixed8x13_Character_245,Fixed8x13_Character_246,Fixed8x13_Character_247,Fixed8x13_Character_248,Fixed8x13_Character_249,Fixed8x13_Character_250,Fixed8x13_Character_251,Fixed8x13_Character_252,Fixed8x13_Character_253,Fixed8x13_Character_254,Fixed8x13_Character_255,NULL}; /* The font structure: */ -const SFG_Font fgFontFixed8x13 = { "-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1", 256, 14, Fixed8x13_Character_Map, 0, 3 }; +const FPVSFG_Font FPVfgFontFixed8x13 = { "-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1", 256, 14, Fixed8x13_Character_Map, 0, 3 }; static const GLubyte Fixed9x15_Character_000[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 64, 0, 1, 0, 65, 0, 64, 0, 1, 0, 65, 0, 64, 0, 1, 0,109, 0, 0, 0, 0, 0}; static const GLubyte Fixed9x15_Character_001[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 28, 0, 62, 0,127, 0,255,128,127, 0, 62, 0, 28, 0, 8, 0, 0, 0, 0, 0, 0, 0}; @@ -639,7 +639,7 @@ Fixed9x15_Character_240,Fixed9x15_Character_241,Fixed9x15_Character_242,Fixed9x15_Character_243,Fixed9x15_Character_244,Fixed9x15_Character_245,Fixed9x15_Character_246,Fixed9x15_Character_247,Fixed9x15_Character_248,Fixed9x15_Character_249,Fixed9x15_Character_250,Fixed9x15_Character_251,Fixed9x15_Character_252,Fixed9x15_Character_253,Fixed9x15_Character_254,Fixed9x15_Character_255,NULL}; /* The font structure: */ -const SFG_Font fgFontFixed9x15 = { "-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1", 256, 16, Fixed9x15_Character_Map, 0, 4 }; +const FPVSFG_Font FPVfgFontFixed9x15 = { "-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1", 256, 16, Fixed9x15_Character_Map, 0, 4 }; static const GLubyte Helvetica10_Character_000[] = { 8, 0, 0, 0, 84, 0, 68, 0, 68, 0, 84, 0, 0, 0, 0}; static const GLubyte Helvetica10_Character_001[] = { 13, 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, 68, 0, 0, 0, 68, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -917,7 +917,7 @@ Helvetica10_Character_240,Helvetica10_Character_241,Helvetica10_Character_242,Helvetica10_Character_243,Helvetica10_Character_244,Helvetica10_Character_245,Helvetica10_Character_246,Helvetica10_Character_247,Helvetica10_Character_248,Helvetica10_Character_249,Helvetica10_Character_250,Helvetica10_Character_251,Helvetica10_Character_252,Helvetica10_Character_253,Helvetica10_Character_254,Helvetica10_Character_255,NULL}; /* The font structure: */ -const SFG_Font fgFontHelvetica10 = { "-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1", 256, 14, Helvetica10_Character_Map, 0, 3 }; +const FPVSFG_Font FPVfgFontHelvetica10 = { "-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1", 256, 14, Helvetica10_Character_Map, 0, 3 }; static const GLubyte Helvetica12_Character_000[] = { 9, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0}; static const GLubyte Helvetica12_Character_001[] = { 12, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0, 65, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0}; @@ -1195,7 +1195,7 @@ Helvetica12_Character_240,Helvetica12_Character_241,Helvetica12_Character_242,Helvetica12_Character_243,Helvetica12_Character_244,Helvetica12_Character_245,Helvetica12_Character_246,Helvetica12_Character_247,Helvetica12_Character_248,Helvetica12_Character_249,Helvetica12_Character_250,Helvetica12_Character_251,Helvetica12_Character_252,Helvetica12_Character_253,Helvetica12_Character_254,Helvetica12_Character_255,NULL}; /* The font structure: */ -const SFG_Font fgFontHelvetica12 = { "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1", 256, 16, Helvetica12_Character_Map, 0, 4 }; +const FPVSFG_Font FPVfgFontHelvetica12 = { "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1", 256, 16, Helvetica12_Character_Map, 0, 4 }; static const GLubyte Helvetica18_Character_000[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 80, 0, 0, 64, 16, 0, 0, 64, 16, 0, 0, 64, 16, 0, 0, 64, 16, 0, 0, 64, 16, 0, 0, 85, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; static const GLubyte Helvetica18_Character_001[] = { 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 80, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 85, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -1473,7 +1473,7 @@ Helvetica18_Character_240,Helvetica18_Character_241,Helvetica18_Character_242,Helvetica18_Character_243,Helvetica18_Character_244,Helvetica18_Character_245,Helvetica18_Character_246,Helvetica18_Character_247,Helvetica18_Character_248,Helvetica18_Character_249,Helvetica18_Character_250,Helvetica18_Character_251,Helvetica18_Character_252,Helvetica18_Character_253,Helvetica18_Character_254,Helvetica18_Character_255,NULL}; /* The font structure: */ -const SFG_Font fgFontHelvetica18 = { "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1", 256, 23, Helvetica18_Character_Map, 0, 5 }; +const FPVSFG_Font FPVfgFontHelvetica18 = { "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1", 256, 23, Helvetica18_Character_Map, 0, 5 }; static const GLubyte TimesRoman10_Character_000[] = { 8, 0, 0, 0, 0,170, 0,130, 0,130, 0,170, 0, 0, 0}; static const GLubyte TimesRoman10_Character_001[] = { 13, 0, 0, 0, 0, 0, 0, 0, 0,170, 0, 0, 0,130, 0, 0, 0,130, 0, 0, 0,170, 0, 0, 0, 0, 0, 0, 0}; @@ -1751,7 +1751,7 @@ TimesRoman10_Character_240,TimesRoman10_Character_241,TimesRoman10_Character_242,TimesRoman10_Character_243,TimesRoman10_Character_244,TimesRoman10_Character_245,TimesRoman10_Character_246,TimesRoman10_Character_247,TimesRoman10_Character_248,TimesRoman10_Character_249,TimesRoman10_Character_250,TimesRoman10_Character_251,TimesRoman10_Character_252,TimesRoman10_Character_253,TimesRoman10_Character_254,TimesRoman10_Character_255,NULL}; /* The font structure: */ -const SFG_Font fgFontTimesRoman10 = { "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1", 256, 14, TimesRoman10_Character_Map, 0, 4 }; +const FPVSFG_Font FPVfgFontTimesRoman10 = { "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1", 256, 14, TimesRoman10_Character_Map, 0, 4 }; static const GLubyte TimesRoman24_Character_000[] = { 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 64, 0, 0, 0, 64, 0, 64, 0, 0, 0, 64, 0, 64, 0, 0, 0, 64, 0, 64, 0, 0, 0, 64, 0, 64, 0, 0, 0, 64, 0, 64, 0, 0, 0, 64, 0, 64, 0, 0, 0, 64, 0, 64, 0, 0, 0, 85, 85, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; static const GLubyte TimesRoman24_Character_001[] = { 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 85, 64, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 0, 0, 0, 85, 85, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -2029,5 +2029,5 @@ TimesRoman24_Character_240,TimesRoman24_Character_241,TimesRoman24_Character_242,TimesRoman24_Character_243,TimesRoman24_Character_244,TimesRoman24_Character_245,TimesRoman24_Character_246,TimesRoman24_Character_247,TimesRoman24_Character_248,TimesRoman24_Character_249,TimesRoman24_Character_250,TimesRoman24_Character_251,TimesRoman24_Character_252,TimesRoman24_Character_253,TimesRoman24_Character_254,TimesRoman24_Character_255,NULL}; /* The font structure: */ -const SFG_Font fgFontTimesRoman24 = { "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1", 256, 29, TimesRoman24_Character_Map, 0, 7 }; +const FPVSFG_Font FPVfgFontTimesRoman24 = { "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1", 256, 29, TimesRoman24_Character_Map, 0, 7 }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-09-30 00:15:30
|
Revision: 42 http://svn.sourceforge.net/freepv/?rev=42&view=rev Author: dangelo Date: 2006-09-29 17:15:21 -0700 (Fri, 29 Sep 2006) Log Message: ----------- fixed autoconf system, shared libraries are created with .so extension Added Paths: ----------- freepv/trunk/config.guess freepv/trunk/config.sub freepv/trunk/ltmain.sh Removed Paths: ------------- freepv/trunk/config.guess freepv/trunk/config.sub freepv/trunk/ltmain.sh Deleted: freepv/trunk/config.guess =================================================================== --- freepv/trunk/config.guess 2006-09-29 23:55:56 UTC (rev 41) +++ freepv/trunk/config.guess 2006-09-30 00:15:21 UTC (rev 42) @@ -1,1466 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -timestamp='2005-08-03' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner <pe...@bo...>. -# Please send patches to <con...@gn...>. Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to <con...@gn...>." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (gh...@no... 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerppc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # ak...@wp... (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include <stdio.h> /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include <sys/systemcfg.h> - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include <stdlib.h> - #include <unistd.h> - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include <unistd.h> - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - x86:Interix*:[34]*) - echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' - exit ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include <features.h> - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #ifdef __INTEL_COMPILER - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` - echo ${UNAME_MACHINE}-pc-isc$UNAME_REL - elif /bin/uname -X 2>/dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says <Ric...@cc...> - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes <he...@op...>. - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From se...@sw.... - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Pau...@st.... - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Pau...@st.... - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - *86) UNAME_PROCESSOR=i686 ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c <<EOF -#ifdef _SEQUENT_ -# include <sys/types.h> -# include <sys/utsname.h> -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include <sys/param.h> - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include <sys/param.h> -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 <<EOF -$0: unable to guess system type - -This script, last modified $timestamp, has failed to recognize -the operating system you are using. It is advised that you -download the most up to date version of the config scripts from - - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess -and - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub - -If the version you run ($0) is already up to date, please -send the following data and any information you think might be -pertinent to <con...@gn...> in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: Added: freepv/trunk/config.guess =================================================================== --- freepv/trunk/config.guess (rev 0) +++ freepv/trunk/config.guess 2006-09-30 00:15:21 UTC (rev 42) @@ -0,0 +1 @@ +link /usr/share/libtool/config.guess \ No newline at end of file Property changes on: freepv/trunk/config.guess ___________________________________________________________________ Name: svn:special + * Deleted: freepv/trunk/config.sub =================================================================== --- freepv/trunk/config.sub 2006-09-29 23:55:56 UTC (rev 41) +++ freepv/trunk/config.sub 2006-09-30 00:15:21 UTC (rev 42) @@ -1,1579 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. - -timestamp='2005-07-08' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to <con...@gn...>. Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to <con...@gn...>." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ - kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64vr | mips64vrel \ - | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | ms1 \ - | msp430 \ - | ns16k | ns32k \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m32c) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | ms1-* \ - | msp430-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ - | ymp-* \ - | z8k-*) - ;; - m32c-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16c) - basic_machine=cr16c-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-am... [truncated message content] |
From: <da...@us...> - 2006-09-30 21:57:18
|
Revision: 43 http://svn.sourceforge.net/freepv/?rev=43&view=rev Author: dangelo Date: 2006-09-30 14:57:09 -0700 (Sat, 30 Sep 2006) Log Message: ----------- print svn revision and time difference between each redraw Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/freepv-mozilla/plugin_unix.cpp freepv/trunk/src/libfreepv/PanoViewer.cpp freepv/trunk/src/libfreepv/Scene.cpp freepv/trunk/src/libfreepv/Scene.h Property Changed: ---------------- freepv/trunk/src/libfreepv/PanoViewer.cpp Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-09-30 00:15:21 UTC (rev 42) +++ freepv/trunk/freepv.kdevelop 2006-09-30 21:57:09 UTC (rev 43) @@ -14,7 +14,7 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description></description> + <description/> </general> <kdevautoproject> <general> @@ -173,10 +173,10 @@ <qt> <used>false</used> <version>3</version> - <root></root> + <root/> </qt> <creategettersetter> - <prefixGet></prefixGet> + <prefixGet/> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -193,11 +193,11 @@ <kdevdebugger> <general> <programargs>src=../../../testcases/good/InsideSionHillCampus.mov</programargs> - <gdbpath></gdbpath> - <dbgshell></dbgshell> - <configGdbScript></configGdbScript> - <runShellScript></runShellScript> - <runGdbScript></runGdbScript> + <gdbpath/> + <dbgshell/> + <configGdbScript/> + <runShellScript/> + <runGdbScript/> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Modified: freepv/trunk/src/freepv-mozilla/plugin_unix.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin_unix.cpp 2006-09-30 00:15:21 UTC (rev 42) +++ freepv/trunk/src/freepv-mozilla/plugin_unix.cpp 2006-09-30 21:57:09 UTC (rev 43) @@ -36,7 +36,7 @@ #define FPV_MIME_TYPES_HANDLED "application/freepv-plugin" #define FPV_PLUGIN_NAME "FreePV interactive panoramic viewer plugin" -#define FPV_MIME_TYPES_DESCRIPTION FPV_MIME_TYPES_HANDLED":fpv:"FPV_PLUGIN_NAME +#define FPV_MIME_TYPES_DESCRIPTION FPV_MIME_TYPES_HANDLED":mov;jpg:"FPV_PLUGIN_NAME #define FPV_PLUGIN_DESCRIPTION FPV_PLUGIN_NAME " Opensource software, licensed under LGPL 2.1" Modified: freepv/trunk/src/libfreepv/PanoViewer.cpp =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-09-30 00:15:21 UTC (rev 42) +++ freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-09-30 21:57:09 UTC (rev 43) @@ -42,6 +42,7 @@ m_currentCubeFaceDownload(0) { + std::cerr << "Starting freepv, revision: $Revision$ " << std::endl; DEBUG_TRACE(""); m_currentCube=0; m_scene = new Scene(); Property changes on: freepv/trunk/src/libfreepv/PanoViewer.cpp ___________________________________________________________________ Name: svn:keywords - Id + Id Revision Modified: freepv/trunk/src/libfreepv/Scene.cpp =================================================================== --- freepv/trunk/src/libfreepv/Scene.cpp 2006-09-30 00:15:21 UTC (rev 42) +++ freepv/trunk/src/libfreepv/Scene.cpp 2006-09-30 21:57:09 UTC (rev 43) @@ -27,6 +27,45 @@ using namespace FPV; + +Camera::Camera() +{ + yaw = pitch = 0; + fov = 70; + yaw_speed = 0; + pitch_speed = 0; + fov_speed = 0; + + m_angleDecay = 0.95f; + m_fovDecay = 0.93f; + + m_lastTime = 0; +} + + +void Camera::onTimer(unsigned long time_ms) +{ + // default time step for first call + float dt=0.01f; + if (m_lastTime != 0) { + dt = (time_ms - m_lastTime) / 1000.0f; + } + m_lastTime = time_ms; + DEBUG_DEBUG("time step: " << dt << " sec."); + yaw += yaw_speed * dt; + pitch += pitch_speed * dt; + fov += fov_speed * dt; + if (fov > 170) + fov = 170; + if (fov < 1) + fov = 1; + + yaw_speed *= m_angleDecay; + pitch_speed *= m_angleDecay; + fov_speed *= m_fovDecay; +} + + Scene::Scene() : m_pano(0) { Modified: freepv/trunk/src/libfreepv/Scene.h =================================================================== --- freepv/trunk/src/libfreepv/Scene.h 2006-09-30 00:15:21 UTC (rev 42) +++ freepv/trunk/src/libfreepv/Scene.h 2006-09-30 21:57:09 UTC (rev 43) @@ -49,44 +49,13 @@ /** struct around the camera */ struct Camera { - Camera() - { - yaw = pitch = 0; - fov = 70; - yaw_speed = 0; - pitch_speed = 0; - fov_speed = 0; + Camera(); - m_angleDecay = 0.95f; - m_fovDecay = 0.93f; - - m_lastTime = 0; - } - /** timer function required for the simulation of * inertia */ - void onTimer(unsigned long time_ms) - { - // default time step for first call - float dt=0.01f; - if (m_lastTime != 0) { - dt = (time_ms - m_lastTime) / 1000.0f; - } - m_lastTime = time_ms; - yaw += yaw_speed * dt; - pitch += pitch_speed * dt; - fov += fov_speed * dt; - if (fov > 170) - fov = 170; - if (fov < 1) - fov = 1; + void onTimer(unsigned long time_ms); - yaw_speed *= m_angleDecay; - pitch_speed *= m_angleDecay; - fov_speed *= m_fovDecay; - } - float m_angleDecay; float m_fovDecay; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-03 20:08:28
|
Revision: 45 http://svn.sourceforge.net/freepv/?rev=45&view=rev Author: dangelo Date: 2006-10-03 13:08:14 -0700 (Tue, 03 Oct 2006) Log Message: ----------- added qtvr parser from pangeaVR Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/src/freepv-mozilla/FreePV.vcproj freepv/trunk/src/freepv-mozilla/plugin_windows.cpp freepv/trunk/src/libfreepv/JpegReader.cpp freepv/trunk/src/libfreepv/JpegReader.h freepv/trunk/src/libfreepv/OpenGLRenderer.cpp freepv/trunk/src/libfreepv/PanoViewer.cpp freepv/trunk/src/libfreepv/QTVRDecoder.cpp Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-10-03 20:07:29 UTC (rev 44) +++ freepv/trunk/configure.in 2006-10-03 20:08:14 UTC (rev 45) @@ -52,7 +52,7 @@ fi PKG_PROG_PKG_CONFIG -PKG_CHECK_MODULES([QUICKTIME], [libquicktime]) +dnl PKG_CHECK_MODULES([QUICKTIME], [libquicktime]) dnl PKG_CHECK_MODULES([GTK2], [gtk+-2.0]) dnl PKG_CHECK_MODULES([GTKGLEXT], [gtkglext-1.0]) Modified: freepv/trunk/src/freepv-mozilla/FreePV.vcproj =================================================================== --- freepv/trunk/src/freepv-mozilla/FreePV.vcproj 2006-10-03 20:07:29 UTC (rev 44) +++ freepv/trunk/src/freepv-mozilla/FreePV.vcproj 2006-10-03 20:08:14 UTC (rev 45) @@ -23,7 +23,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - AdditionalIncludeDirectories="..;"..\..\..\..\..\..\lib\gecko-sdk\plugin\include";"..\..\..\..\..\..\lib\gecko-sdk\nspr\include";"..\..\..\..\..\..\lib\gecko-sdk\java\include"" + AdditionalIncludeDirectories="..;"..\..\..\..\..\..\lib\gecko-sdk\plugin\include";"..\..\..\..\..\..\lib\gecko-sdk\nspr\include";"..\..\..\..\..\..\lib\gecko-sdk\java\include";"..\..\..\..\..\..\lib\gecko-sdk\include"" PreprocessorDefinitions="DEBUG;_DEBUG;MOZILLA_STRICT_API;XP_WIN;_X86_;WIN32;_WINDOWS;_USRDLL;NPBASIC_EXPORTS" BasicRuntimeChecks="3" RuntimeLibrary="1" @@ -60,7 +60,7 @@ HeaderFileName=""/> <Tool Name="VCPostBuildEventTool" - CommandLine="copy Debug\npFreePV.dll $(FIREFOX_DIR)\plugins"/> + CommandLine="copy Debug\npFreePV.dll "$(FIREFOX_DIR)\plugins""/> <Tool Name="VCPreBuildEventTool"/> <Tool @@ -92,7 +92,7 @@ Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" - AdditionalIncludeDirectories="..;"..\..\..\..\..\..\lib\GeckoPluginSDK-Win32\gecko-sdk\plugin\include";"..\..\..\..\..\..\lib\GeckoPluginSDK-Win32\gecko-sdk\nspr\include";"..\..\..\..\..\..\lib\GeckoPluginSDK-Win32\gecko-sdk\java\include"" + AdditionalIncludeDirectories="..;"..\..\..\..\..\..\lib\gecko-sdk\plugin\include";"..\..\..\..\..\..\lib\gecko-sdk\nspr\include";"..\..\..\..\..\..\lib\gecko-sdk\java\include";"..\..\..\..\..\..\lib\gecko-sdk\include"" PreprocessorDefinitions="NDEBUG;MOZILLA_STRICT_API;XP_WIN;_X86_;WIN32;_WINDOWS;_USRDLL;NPBASIC_EXPORTS" StringPooling="TRUE" RuntimeLibrary="0" Modified: freepv/trunk/src/freepv-mozilla/plugin_windows.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin_windows.cpp 2006-10-03 20:07:29 UTC (rev 44) +++ freepv/trunk/src/freepv-mozilla/plugin_windows.cpp 2006-10-03 20:08:14 UTC (rev 45) @@ -14,6 +14,8 @@ #include <windows.h> #include <windowsx.h> +#include <mmsystem.h> + /* gl stuff */ #include <GL/gl.h> #include <GL/glu.h> @@ -28,6 +30,15 @@ // misc platform utility functions // +#if 1 +static unsigned long +getTime() +{ + return timeGetTime(); +} + +#else + // return a time in milliseconds since some fixed date (usually the start of freepv) static unsigned long getTime() @@ -51,8 +62,8 @@ deltaTime = currTime - oldTime; return (unsigned long)(deltaTime / 10000); } +#endif - ////////////////////////////////////// // // general initialization and shutdown @@ -167,7 +178,7 @@ m_viewer->start(); // const int ID_TIMER = 1; - int ret = SetTimer(mhWnd, 1, 30, NULL); + int ret = SetTimer(mhWnd, 10, 30, NULL); if(ret == 0) MessageBox(mhWnd, "Could not SetTimer()!", "Error", MB_OK | MB_ICONEXCLAMATION); return TRUE; @@ -292,7 +303,7 @@ { static unsigned long tlast = 0; unsigned long t = getTime(); - DEBUG_TRACE("WM_TIMER: delta:" << t-tlast); + //DEBUG_TRACE("WM_TIMER: delta:" << t-tlast); tlast=t; if (thisp->m_eventListener) { wglMakeCurrent( thisp->m_hDC, thisp->m_hRC ); Modified: freepv/trunk/src/libfreepv/JpegReader.cpp =================================================================== --- freepv/trunk/src/libfreepv/JpegReader.cpp 2006-10-03 20:07:29 UTC (rev 44) +++ freepv/trunk/src/libfreepv/JpegReader.cpp 2006-10-03 20:08:14 UTC (rev 45) @@ -344,4 +344,114 @@ } +// read jpeg image from memory +bool +decodeJPEG(FILE * infile, Image & image) +{ + /* This struct contains the JPEG decompression parameters and pointers to + * working space (which is allocated as needed by the JPEG library). + */ + struct jpeg_decompress_struct cinfo; + /* We use our private extension JPEG error handler. + * Note that this struct must live as long as the main JPEG parameter + * struct, to avoid dangling-pointer problems. + */ + struct my_error_mgr jerr; + /* More stuff */ + int row_stride; /* physical row width in output buffer */ + + /* Step 1: allocate and initialize JPEG decompression object */ + + /* We set up the normal JPEG error routines, then override error_exit. */ + cinfo.err = jpeg_std_error(&jerr.pub); + jerr.pub.error_exit = my_error_exit; + /* Establish the setjmp return context for my_error_exit to use. */ + if (setjmp(jerr.setjmp_buffer)) { + /* If we get here, the JPEG code has signaled an error. + * We need to clean up the JPEG object, close the input file, and return. + */ + jpeg_destroy_decompress(&cinfo); + return false; + } + /* Now we can initialize the JPEG decompression object. */ + jpeg_create_decompress(&cinfo); + + /* Step 2: specify data source (eg, a file) */ + jpeg_stdio_src(&cinfo, infile); + + /* Step 3: read file parameters with jpeg_read_header() */ + + (void) jpeg_read_header(&cinfo, TRUE); + /* We can ignore the return value from jpeg_read_header since + * (a) suspension is not possible with the stdio data source, and + * (b) we passed TRUE to reject a tables-only JPEG file as an error. + * See libjpeg.doc for more info. + */ + + /* Step 4: set parameters for decompression */ + + /* In this example, we don't need to change any of the defaults set by + * jpeg_read_header(), so we do nothing here. + */ + + /* Step 5: Start decompressor */ + + (void) jpeg_start_decompress(&cinfo); + /* We can ignore the return value since suspension is not possible + * with the stdio data source. + */ + + /* We may need to do some setup of our own at this point before reading + * the data. After jpeg_start_decompress() we have the correct scaled + * output image dimensions available, as well as the output colormap + * if we asked for color quantization. + * In this example, we need to make an output work buffer of the right size. + */ + + /* resize output image to correct size */ + image.setSize(Size2D(cinfo.output_width, cinfo.output_height)); + + /* JSAMPLEs per row in output buffer */ + row_stride = cinfo.output_width * cinfo.output_components; + + /* Make a one-row-high sample array that will go away when done with image */ + JOCTET * buffer = image.getData(); + + /* Step 6: while (scan lines remain to be read) */ + /* jpeg_read_scanlines(...); */ + + + /* Here we use the library's state variable cinfo.output_scanline as the + * loop counter, so that we don't have to keep track ourselves. + */ + while (cinfo.output_scanline < cinfo.output_height) { + /* jpeg_read_scanlines expects an array of pointers to scanlines. + * Here the array is only one element long, but you could ask for + * more than one scanline at a time if that's more convenient. + */ + (void) jpeg_read_scanlines(&cinfo, &buffer, 1); + buffer += row_stride; + } + + /* Step 7: Finish decompression */ + + (void) jpeg_finish_decompress(&cinfo); + /* We can ignore the return value since suspension is not possible + * with the stdio data source. + */ + + /* Step 8: Release JPEG decompression object */ + + /* This is an important step since it will release a good deal of memory. */ + jpeg_destroy_decompress(&cinfo); + + /* At this point you may want to check to see whether any corrupt-data + * warnings occurred (test whether jerr.pub.num_warnings is nonzero). + */ + + /* And we're done! */ + return true; +} + + } // namespace Modified: freepv/trunk/src/libfreepv/JpegReader.h =================================================================== --- freepv/trunk/src/libfreepv/JpegReader.h 2006-10-03 20:07:29 UTC (rev 44) +++ freepv/trunk/src/libfreepv/JpegReader.h 2006-10-03 20:08:14 UTC (rev 45) @@ -33,6 +33,8 @@ /** decode a jpeg image stored in \p buffer into \p image */ bool decodeJPEG(unsigned char * buffer, size_t buf_len, Image & image); +bool decodeJPEG(FILE *f, Image & image); + } // namespace #endif Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-03 20:07:29 UTC (rev 44) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-03 20:08:14 UTC (rev 45) @@ -56,7 +56,7 @@ // render text in single line // TODO: support multiple lines of text glColor3f(1.0f, 1.0f, 1.0f); - glRasterPos3f(20,20,0.9); + glRasterPos3f(20.0f,20.0f,0.9f); glColor3f(1.0f, 1.0f, 1.0f); const unsigned char * str = (const unsigned char *) m_text->m_text.c_str(); //DEBUG_DEBUG("string output: " << str << ", " << m_text->m_text.c_str()); @@ -94,6 +94,9 @@ break; } } + // TODO: remove this hack + if (m_tex_size > 2048) m_tex_size = 2048; + if (m_tex_size < pano->m_size.w) { fprintf(stderr, "Warning: reducing cube size. Your graphics card only supports %d by %d pixels textures\n", m_tex_size, m_tex_size); } Modified: freepv/trunk/src/libfreepv/PanoViewer.cpp =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-10-03 20:07:29 UTC (rev 44) +++ freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-10-03 20:08:14 UTC (rev 45) @@ -308,6 +308,10 @@ case STATE_DOWNLOADING_QTVR: // TODO: create panorama object and set to renderer Image *cubeFaces[6]; + for (int i=0; i < 6 ; i++) { + cubeFaces[i] = 0; + }; + FPV_S2S(m_statusMessage, "Received " << m_platform->currentDownloadURL() << ", decoding QTVR."); DEBUG_TRACE(m_statusMessage); m_scene->setStatusText( m_statusMessage ); Modified: freepv/trunk/src/libfreepv/QTVRDecoder.cpp =================================================================== --- freepv/trunk/src/libfreepv/QTVRDecoder.cpp 2006-10-03 20:07:29 UTC (rev 44) +++ freepv/trunk/src/libfreepv/QTVRDecoder.cpp 2006-10-03 20:08:14 UTC (rev 45) @@ -1,100 +1,947 @@ +/* -*- c-basic-offset: 4 -*- */ +/* + * This file is part of the freepv panoramic viewer. + * + * Author: Brian Greenstone <br...@pa...> + * + * Modified for FreePV by Pablo d'Angelo <pab...@we...> + * + * $Id$ + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; version 2.1 of + * the License + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ +/* + SPECIAL NOTE: + ----------------------------------------------- + + This Quicktime .mov parser sucks! I can't belive it actually works. + It will parse through the Atoms in the file and try it's best to handle them. + However, the shoddy documentation on this made it impossible to completely figure out, + so hopefully this will simply work. -#include <string.h> +*/ +#include <math.h> + +#include "utils.h" +#include "JpegReader.h" #include "QTVRDecoder.h" -#include "Image.h" -#include "JpegReader.h" -#ifdef unix -#include <lqt/lqt.h> -#include <lqt/quicktime.h> +namespace FPV +{ -// this is an internal? prototype, not included in the public headers!? -// but we require it! -extern "C" { -int quicktime_read_data(quicktime_t *file, uint8_t *data, int64_t size); -} +typedef unsigned int uint32; +typedef int int32; + +typedef unsigned long u_long; +typedef bool Boolean; + +#define MAX_TILE_DIMENSIONS 10 // this is the maximum # of tiles x/y that we'll support +#define MAX_TILES_PER_FACE (MAX_TILE_DIMENSIONS * MAX_TILE_DIMENSIONS) + +#define MAX_IMAGE_OFFSETS (MAX_TILES_PER_FACE*6) + + +struct ChunkOffsetAtom +{ + int32 size; + int32 type; + char version; + char flags[3]; + int32 numEntries; + int32 chunkOffsetTable[200]; +}; + +struct SampleSizeAtom +{ + int32 size; + int32 type; + char version; + char flags[3]; + int32 sampleSize; + int32 numEntries; + int32 sampleSizeTable[200]; +}; + + +struct PublicHandlerInfo +{ + int32 componentType; + int32 componentSubType; +}; + +struct HandlerAtom +{ + int32 size; + int32 type; + char version; + char flags[3]; + PublicHandlerInfo hInfo; +}; + +// dangelo: wrap the parser into a class, this makes the parser +// reentrant. Might be important if multiple plugin instances decode a qtvr +// at the same time. +class QTVRDecoder +{ + +public: + +/****************************/ +/* PROTOTYPES */ +/****************************/ + + +QTVRDecoder(); + +bool decodeCubic(const char * theDataFilePath, Image * cubefaces[6]); + +long ReadMovieAtom(void); +void ReadAtom_STCO(long size); +void ReadAtom_HDLR(int size); +void ReadAtom_STSZ(long size); +bool SeekAndExtractImages(Image * imgs[6]); +bool SeekAndExtractImages_Tiled(Image * imgs[6]); +void LoadTilesForFace(int chunkNum); +void Swizzle(int32 *value); + + +/*********************/ +/* VARIABLES */ +/*********************/ + +uint32 gCurrentTrackMedia; // 'pano' or ... +Boolean gAlreadyGotVideoMedia; // we assume that the first video media track is what we want, + // anything after that is the fast-start track, so we ignore it. +Boolean gFoundJPEGs; +Boolean gImagesAreTiled; +int gNumTilesPerImage; + +int32 gPanoChunkOffset; +int32 gPanoSampleSize; +int32 gVideoChunkOffset[MAX_IMAGE_OFFSETS]; +int gVideoSampleSize[MAX_IMAGE_OFFSETS]; + +int32 gTileSize[MAX_TILES_PER_FACE]; + +#ifdef TARGET_OS_MAC +short gMovfRefNum; +#else + FILE *gFile; // FILE ref used for fopen(). Not used on Mac since mac uses FSSpec #endif + bool m_HostBigEndian; +}; -bool FPV::decodeQTVR(const char * input, Image * imgs[6]) +/**************** PARSE QUICKTIME MOVIE ***********************/ +// +// Parses through the QT movie's atoms looking for our 6 cube textures. +// + +bool decodeQTVR(const char * theDataFilePath, Image * imgs[6]) { -#ifdef unix - quicktime_t *file; - int i, j; - int64_t length; - uint8_t *data = 0; - int bytes = 0, old_bytes = 0; - float output_rate = 0; - float input_rate; - int64_t input_frame; - int64_t new_length; - int width, height; - int rgb_to_ppm = 0; + QTVRDecoder decoder; + return decoder.decodeCubic(theDataFilePath, imgs); +} - if(!(file = quicktime_open(const_cast<char*>(input), 1, 0))) + +QTVRDecoder::QTVRDecoder() +{ + gCurrentTrackMedia = 0; + gAlreadyGotVideoMedia = false; + gFoundJPEGs = false; + + // determine byteorder + int testint = 0x01; + unsigned char * testchar = reinterpret_cast< unsigned char * >(&testint); + if ( testchar[0] == 0x01 ) + m_HostBigEndian = false; + else + m_HostBigEndian = true; +} + + + +bool QTVRDecoder::decodeCubic(const char * theDataFilePath, Image * imgs[6]) +{ + + int32 atomSize; + gFile = fopen (theDataFilePath, "rb"); + if (!gFile) { - fprintf(stderr,"Open failed\n"); - return false; + DEBUG_ERROR("fopen() failed: " << strerror(errno) ); + return false; } + + + /*************************/ + /* RECURSE THROUGH ATOMS */ + /*************************/ + do + { + atomSize = ReadMovieAtom(); + }while(atomSize > 0); + + + + /***************************/ + /* SEEK AND EXTRACT IMAGES */ + /***************************/ + + SeekAndExtractImages(imgs); + + /**************/ + /* CLOSE FILE */ + /**************/ + + fclose(gFile); + + //gMyInstances[instanceNum].drawDecodingBar = false; + + return(true); +} + + + +/********************* READ MOVIE ATOM ************************/ +// +// INPUT: parentAtomSize = size of the enclosing atom (or -1 if root). +// This is used to determine when we've read all the child atoms from +// the enclosing parent that we sub-recursed. +// +// OUTPUT: size of the atom +// + + +long QTVRDecoder::ReadMovieAtom(void) +{ +int32 atomSize, atomType, remainingSize; +size_t filePos; +char *c = (char *)&atomType; +//OSErr iErr; + + + + /*******/ + /* MAC */ + /*******/ + +#ifdef TARGET_OS_MAC + /* GET CURRENT FILE POS */ + // + // We get the current file position, so that we can add the atom size + // to skip over it later. + // + + GetFPos(gMovfRefNum, &filePos); + + /* READ THE ATOM SIZE */ + + count = 4; // size is 4 bytes + iErr = FSRead(gMovfRefNum, &count, &atomSize); + if (iErr) + { + printf("ReadMovieAtom: FSRead failed! %d\n", iErr); + return(-1); + } + + /* READ THE ATOM TYPE */ + + count = 4; // type is 4 bytes + if (FSRead(gMovfRefNum, &count, &atomType) != noErr) + { + printf("ReadMovieAtom: FSRead failed!\n"); + return(1); + } + + + /***********/ + /* WINDOWS */ + /***********/ + +#else + /* GET CURRENT FILE POS */ + + filePos = ftell(gFile); + + /* READ THE ATOM SIZE */ + + fread(&atomSize, 4, 1, gFile); + if (ferror(gFile)) + { + printf("ReadMovieAtom: fread() failed!\n"); + return(-1); + } + + /* READ THE ATOM TYPE */ + + fread(&atomType, 4, 1, gFile); + if (ferror(gFile)) + { + printf("ReadMovieAtom: fread() failed!\n"); + return(-1); + } + + + Swizzle(&atomSize); // convert BigEndian data to LittleEndian + Swizzle(&atomType); + +#endif + + + printf("Atom Size = %d\n", (int)atomSize); + printf("Atom Type = %c%c%c%c\n", *(c +3), *(c + 2), *(c + 1) ,*c ); + + + + /* READ EXTENDED DATA IF NEEDED */ + + if (atomSize == 1) // if atom size == 1 then there's extended data in the header + { + printf("ReadMovieAtom: Extended size isn't supported yet...\n"); + return(-1); + } + + + + /********************/ + /* HANDLE THIS ATOM */ + /********************/ + // + // Any atom types not in the table below just get skipped. + // + + switch(atomType) + { + /* MOOV */ + // + // This contains more sub-atoms, so just recurse + // + + case 'moov': // MovieAID: //'moov' + printf(" [Subrecursing 'moov' atom]\n"); + remainingSize = atomSize - 8; // there are n bytes left in this atom to parse + do + { + remainingSize -= ReadMovieAtom(); // read atom and dec by its size + } + while(remainingSize > 0); + printf(" [End subrecurse 'moov' atom]\n"); + break; - if(!quicktime_video_tracks(file)) + + + /* TRAK */ + + case 'trak'://TrackAID: //'trak' + printf(" [Subrecursing 'trak' atom]\n"); + remainingSize = atomSize - 8; // there are n bytes left in this atom to parse + do + { + remainingSize -= ReadMovieAtom(); // read atom and dec by its size + } + while(remainingSize > 0); + printf(" [End subrecurse 'trak' atom]\n"); + break; + + + /* MDIA */ + + case 'mdia': //MediaAID: //'mdia' + printf(" [Subrecursing 'mdia' atom]\n"); + remainingSize = atomSize - 8; // there are n bytes left in this atom to parse + do + { + remainingSize -= ReadMovieAtom(); // read atom and dec by its size + } + while(remainingSize > 0); + printf(" [End subrecurse 'mdia' atom]\n"); + break; + + + /* MINF */ + + case 'minf': //MediaInfoAID: //'minf' + printf(" [Subrecursing 'minf' atom]\n"); + remainingSize = atomSize - 8; // there are n bytes left in this atom to parse + do + { + remainingSize -= ReadMovieAtom(); // read atom and dec by its size + } + while(remainingSize > 0); + printf(" [End subrecurse 'minf' atom]\n"); + break; + + /* DINF */ + + case 'dinf': //DataInfoAID: //'dinf' + printf(" [Subrecursing 'dinf' atom]\n"); + ReadMovieAtom(); + printf(" [End subrecurse 'dinf' atom]\n"); + break; + + + + + /* STBL */ + + case 'stbl': //SampleTableAID: //'stbl' + + printf(" [Subrecursing 'stbl' atom]\n"); + remainingSize = atomSize - 8; // there are n bytes left in this atom to parse + do + { + remainingSize -= ReadMovieAtom(); // read atom and dec by its size + } + while(remainingSize > 0); + printf(" [End subrecurse 'stbl' atom]\n"); + break; + + + /* STCO */ + + case 'stco': // STChunkOffsetAID: //'stco' + ReadAtom_STCO(atomSize); + break; + + + /* STSZ */ + + case 'stsz': //STSampleSizeAID: //'stsz' + ReadAtom_STSZ(atomSize); + break; + + + /* HDLR */ + + case 'hdlr': //HandlerAID: //'hdlr' + ReadAtom_HDLR(atomSize); + break; + } + + + //if (iErr != noErr) + // return(-1); + + + /*************************/ + /* SET FPOS TO NEXT ATOM */ + /*************************/ + + if (atomSize == 0) // if last atom size was 0 then that was the end { - fprintf(stderr,"No video tracks.\n"); - return false; + printf("\n===== that should have been the end.\n"); + return(-1); } + else + { +#ifdef TARGET_OS_MAC + if (SetFPos(gMovfRefNum, fsFromStart, filePos + atomSize)) + printf("ReadMovieAtom: SetFPos failed, probably EOF?\n"); +#else + fseek(gFile, (long)filePos + atomSize, SEEK_SET); + if (ferror(gFile)) + printf("ReadMovieAtom: fseek() failed, probably EOF?\n"); +#endif + } + + return(atomSize); // return the size of the atom +} + + + + +/********************** READ ATOM: STCO ****************************/ + +void QTVRDecoder::ReadAtom_STCO(long size) +{ +//int32 count; +int i; +ChunkOffsetAtom *atom; +int numEntries; + + /*****************/ + /* READ THE ATOM */ + /*****************/ + +#ifdef TARGET_OS_MAC + SetFPos(gMovfRefNum, fsFromMark, -8); // back up 8 bytes to the atom's start so we can read it all in +#else + fseek(gFile, -8, SEEK_CUR); +#endif + + + /* ALLOC MEMORY FOR IT */ + // + // This is a variable size structure, so we need to allocated based on the size of the atom that's passed in + // + + atom = (FPV::ChunkOffsetAtom *) malloc(size); + + + /* READ IT */ + +#ifdef TARGET_OS_MAC + count = size; + if (FSRead(gMovfRefNum, &count, atom) != noErr) + { + printf("ReadAtom_STCO: FSRead failed!\n"); + return; + } +#else + fread(atom, size, 1, gFile); + if (ferror(gFile)) + { + printf("ReadAtom_STCO: fread() failed!\n"); + return; + } +#endif + + + /* SEE WHAT KIND OF TRACK WE'VE PARSED INTO AND GET CHUNKS BASED ON THAT */ + + numEntries = atom->numEntries; + Swizzle(&numEntries); // convert BigEndian data to LittleEndian (if not Mac) - if(strcmp(quicktime_video_compressor(file, 0), QUICKTIME_JPEG) != 0) + + switch(gCurrentTrackMedia) { - fprintf(stderr,"QTVR cube faces must be compressed with jpeg"); - return false; + case 'pano': + gPanoChunkOffset = atom->chunkOffsetTable[0]; + Swizzle(&gPanoChunkOffset); // convert BigEndian data to LittleEndian (if not Mac) + printf(" Chunk offset to 'pano' is : %d\n", gPanoChunkOffset); + gCurrentTrackMedia = 0; // reset this now! + break; + + + case 'vide': + + if (numEntries < 6) // there MUST be at least 6 jpegs or this isn't a cube + { + printf("THERE ARE NOT 6 JPEGS IN THIS FILE! We only support cubic QTVR's, and those have 6 or more JPEGs!\n"); + printf("This appears to only have %d\n", numEntries); + goto bail; + } + + gFoundJPEGs = true; + + + /* ARE THE IMAGES TILED? */ + + gNumTilesPerImage = numEntries / 6; + + if (gNumTilesPerImage > 1) + { + printf("_____ There are more than 6 entires in the 'vide' track, so this QTVR has tiled images!\n"); + gImagesAreTiled = true; + if (numEntries > MAX_IMAGE_OFFSETS) // are there too many tiles + { + printf("THERE APPEAR TO BE TOO MANY TILE IMAGES IN THIS FILE!!!!!!! %d\n", numEntries); + goto bail; + } + } + else + { + gImagesAreTiled = false; + } + + /* EXTRACT THE OFFSETS TO THE IMAGES */ + + for (i = 0; i < numEntries; i++) + { + printf(" # Chunk Offset entries: %d\n", numEntries); + + for (i = 0; i < numEntries; i++) + { + gVideoChunkOffset[i] = atom->chunkOffsetTable[i]; + Swizzle(&gVideoChunkOffset[i]); // convert BigEndian data to LittleEndian (if not Mac) + printf(" Chunk offset #%d = %d\n", i, gVideoChunkOffset[i] ); + } + gCurrentTrackMedia = 0; // reset this now! + break; + } } - length = quicktime_video_length(file, 0); - input_rate = quicktime_frame_rate(file, 0); - if(!output_rate) output_rate = input_rate; - new_length = (int64_t) (output_rate / input_rate * length); - width = quicktime_video_width(file, 0); - height = quicktime_video_height(file, 0); +bail: + free(atom); +} - if (new_length != 6) - { - fprintf(stderr,"QTVR with more than 6 images found"); - return false; - } - for(i = 0; i < new_length; i++) + +/********************** READ ATOM: STSZ ****************************/ + +void QTVRDecoder::ReadAtom_STSZ(long size) +{ +//int32 count; +SampleSizeAtom *atom; +int32 numEntries, i; + + /*****************/ + /* READ THE ATOM */ + /*****************/ + +#ifdef TARGET_OS_MAC + SetFPos(gMovfRefNum, fsFromMark, -8); // back up 8 bytes to the atom's start so we can read it all in +#else + fseek(gFile, -8, SEEK_CUR); +#endif + + + /* ALLOC MEMORY FOR IT */ + // + // This is a variable size structure, so we need to allocated based on the size of the atom that's passed in + // + + atom = (SampleSizeAtom *) malloc(size); + + + /* READ IT */ + +#ifdef TARGET_OS_MAC + count = size; + if (FSRead(gMovfRefNum, &count, atom) != noErr) { - input_frame = (int64_t)(input_rate / output_rate * i); - bytes = quicktime_frame_size(file, input_frame, 0); + printf("ReadAtom_STSZ: FSRead failed!\n"); + return; + } +#else + fread(atom, size, 1, gFile); + if (ferror(gFile)) + { + printf("ReadAtom_STSZ: fread() failed!\n"); + return; + } +#endif - if(data) - { - if(bytes > old_bytes) { free(data); data = 0; } - } + /* SEE WHAT KIND OF TRACK WE'VE PARSED INTO AND GET CHUNKS BASED ON THAT */ - if(!data) + numEntries = atom->numEntries; + Swizzle(&numEntries); // convert BigEndian data to LittleEndian (if not Mac) + + + switch(gCurrentTrackMedia) + { + case 'pano': + gPanoSampleSize = atom->sampleSize; + Swizzle(&gPanoSampleSize); // convert BigEndian data to LittleEndian (if not Mac) + printf(" 'pano' sample size = : %d\n", gPanoSampleSize); + break; + + case 'vide': + printf(" # Sample Size entries: %d\n", numEntries); + + for (i = 0; i < numEntries; i++) + { + gVideoSampleSize[i] = atom->sampleSizeTable[i]; + Swizzle(&gVideoSampleSize[i]); + printf(" sample size %d = %d\n", i, gVideoSampleSize[i] ); + } + break; + } + + + free(atom); +} + + + + +/********************** READ ATOM: HDLR ****************************/ + +void QTVRDecoder::ReadAtom_HDLR(int size) +{ +//int32 count; +HandlerAtom *atom; +PublicHandlerInfo *info; +int32 componentSubType; + + /*****************/ + /* READ THE ATOM */ + /*****************/ + +#ifdef TARGET_OS_MAC + SetFPos(gMovfRefNum, fsFromMark, -8); // back up 8 bytes to the atom's start so we can read it all in +#else + fseek(gFile, -8, SEEK_CUR); +#endif + + + /* ALLOC MEMORY FOR IT */ + // + // This is a variable size structure, so we need to allocated based on the size of the atom that's passed in + // + + atom = (HandlerAtom *) malloc(size); + + + /* READ IT */ + +#ifdef TARGET_OS_MAC + count = size; + if (FSRead(gMovfRefNum, &count, atom) != noErr) + { + printf("ReadAtom_HDLR: FSRead failed!\n"); + return; + } +#else + fread(atom, size, 1, gFile); + if (ferror(gFile)) + { + printf("ReadAtom_HDLR: fread() failed!\n"); + return; + } +#endif + + /* POINT TO HANDLER INFO */ + + info = &atom->hInfo; + + componentSubType = info->componentSubType; // get comp sub type + Swizzle(&componentSubType); // convert BigEndian data to LittleEndian (if not Mac) + char * t = (char*) & componentSubType; + DEBUG_DEBUG("componentSubType: " << t[0] << t[1] << t[2] << t[3]); + + + if (componentSubType == 'pano') + { + printf("ReadAtom_HDLR: We found the 'pano' media!\n"); + gCurrentTrackMedia = 'pano'; + } + else + if (componentSubType == 'vide') + { + if (!gAlreadyGotVideoMedia) // if we already got the 'vide' then this one is just the fast-start track, so ignore it! { - old_bytes = bytes; - data = (uint8_t *) malloc(bytes); + printf("ReadAtom_HDLR: We found the 'vide' media!\n"); + gCurrentTrackMedia = 'vide'; + gAlreadyGotVideoMedia = true; } + else + printf("Found an additional 'vide' media track, but we're going to ignore it since it's probably the fast-start track...\n"); + } - quicktime_set_video_position(file, input_frame, 0); - quicktime_read_data(file, data, bytes); - imgs[i] = new FPV::Image(Size2D(width, height)); - if (!FPV::decodeJPEG(data, bytes, *(imgs[i]))) { - if (data) - free(data); - fprintf(stderr,"could not decode jpeg"); - return false; - } + + free(atom); +} + + + + +/********************* SEEK AND EXTRACT IMAGES ***************************/ +// +// Finds the 6 cube faces JPEG's in the .mov file and then draws them into texture buffers. +// + +bool QTVRDecoder::SeekAndExtractImages(Image * cubefaces[6]) +{ +//long count; +int i; + + /* SEE IF WE NEED TO SPECIAL-CASE TILED IMAGES */ + + if (gImagesAreTiled) + { + return SeekAndExtractImages_Tiled(cubefaces); } - if (data) - free(data); - quicktime_close(file); -#else - fprintf(stderr, "ERROR: QTVR parser only available using libqt under unix\n"); + printf("\n\n_______SEEK & EXTRACT IMAGES_______\n\n"); + + + if (!gFoundJPEGs) + { + printf("No usable JPEG images were found, or we didn't find 6 which is needed to make a cubic pano\n"); + return false; + } + + for (i = 0; i < 6; i++) + { + DEBUG_DEBUG("extracting tile # " << i); + printf("Processing image # %d...\n", i); + + /***************************/ + /* SEEK TO THE JPEG'S DATA */ + /***************************/ + + fseek(gFile, gVideoChunkOffset[i], SEEK_SET); + + cubefaces[i] = new Image; + // decode jpeg cube face + decodeJPEG(gFile, *cubefaces[i]); + } + return true; +} + + + + + +/********************* SEEK AND EXTRACT IMAGES: TILED ***************************/ + +bool QTVRDecoder::SeekAndExtractImages_Tiled(Image * cubefaces[6]) +{ +int i; +int tileDimensions; //, compSize; +int faceSize; + + + + printf("\n\n_______SEEK & EXTRACT TILED IMAGES_______\n\n"); + + tileDimensions = (int) sqrt((float)gNumTilesPerImage); + + printf("tileDimensions = %d\n", tileDimensions); + + + + for (i = 0; i < 6; i++) // for each Cube face... + { + int chunkNum = i * gNumTilesPerImage; + + /* LOAD ALL OF THE TILE IMAGES FOR THIS FACE */ + // + // We load each tile image into a temp buffer. + // + + printf("\nLoading tiles for Face #%d\n", i); + + + // init tile assembly + if (cubefaces[i]) { + delete cubefaces[i]; + } + cubefaces[i] = 0; + int tileSize = 0; + + // load and assemble tiles. + for (int t = 0; t < gNumTilesPerImage; t++) + { + int cChunk = chunkNum + t; + + printf("Processing tile #%d...\n", t); + DEBUG_DEBUG(" tile: " << t << " chunk: " << cChunk << " offset: " << gVideoChunkOffset[cChunk]); + /* SEEK TO THE JPEG'S DATA */ + + fseek(gFile, gVideoChunkOffset[cChunk], SEEK_SET); + if (ferror(gFile)) + { + printf("LoadTilesForFace: fseek failed!\n"); + continue; + } + + /* DECODE IT */ + + Image img; + // decode jpg + if (!decodeJPEG(gFile, img)) { + DEBUG_ERROR("Jpeg decoding failed"); + return false; + } + + #ifdef DEBUG + { + std::string tfn; + FPV_S2S(tfn, "fpv_dbg_face_" << i << "_tile_" << t << ".ppm"); + img.writePPM(tfn); + } #endif - return true; + + /* CALCULATE THE DIMENSIONS OF THE TARGET IMAGE */ + if (cubefaces[i] == 0) { + // resize cube face + tileSize = img.size().w; + if (img.size().h != img.size().w) { + DEBUG_ERROR("non square tiles not supported: " + << "cube face # " << i + << " tileSize : " << img.size().h << " , " << img.size().w); + return false; + } + tileSize = img.size().w; + faceSize = tileSize * tileDimensions; + cubefaces[i] = new Image(Size2D(faceSize, faceSize)); + DEBUG_DEBUG("cube face # " << i << " tileSize : " << tileSize + << " faceSize: " << faceSize); + } + + if (img.size().w != tileSize) { + // jpeg image size doesn't correspond to tile size + DEBUG_ERROR("JPEG size != tile size, tile # " << cChunk); + return false; + } + + + //////////////////////////////////////// + // copy to cube face + + int h = t % tileDimensions; + int v = t / tileDimensions; + + int left = h * tileSize; + int right = left + tileSize; + + int top = v * tileSize; + int bottom = top + tileSize; + + unsigned char * srcPtr = img.getData(); + unsigned char * destPtr = cubefaces[i]->getData() + 3*left + 3*faceSize*top; + + for (int y=0; y< tileSize; y++) + { + memcpy(destPtr, srcPtr, 3*tileSize); + destPtr += 3*faceSize; + srcPtr += 3*tileSize; + } + } +#ifdef DEBUG + { + std::string t; + FPV_S2S(t, "fpv_dbg_face_" << i << ".ppm"); + cubefaces[i]->writePPM(t); + } +#endif + } + return true; } + + +/**************************** SWIZZLE INT ***********************************/ +// +// Converts a 4-byte int to reverse the Big-Little Endian order of the bytes. +// +// Quicktime movies are in BigEndian format, so when reading on a PC or other Little-Endian +// machine, we've got to swap the bytes around. +// + +void QTVRDecoder::Swizzle(int32 *value) +{ + if (!m_HostBigEndian) { + char *n, b1,b2,b3,b4; + n = (char *)value; + + b1 = n[0]; // get the 4 bytes + b2 = n[1]; + b3 = n[2]; + b4 = n[3]; + + n[0] = b4; // save in reverse order + n[1] = b3; + n[2] = b2; + n[3] = b1; + } +} + + +} // namespace + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-04 20:32:04
|
Revision: 53 http://svn.sourceforge.net/freepv/?rev=53&view=rev Author: dangelo Date: 2006-10-04 13:31:53 -0700 (Wed, 04 Oct 2006) Log Message: ----------- use partial textures, fixed endless loop when loading some qtvr files Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/libfreepv/Image.cpp freepv/trunk/src/libfreepv/Image.h freepv/trunk/src/libfreepv/QTVRDecoder.cpp freepv/trunk/src/libfreepv/Scene.cpp Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-04 20:31:04 UTC (rev 52) +++ freepv/trunk/freepv.kdevelop 2006-10-04 20:31:53 UTC (rev 53) @@ -14,7 +14,7 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description/> + <description></description> </general> <kdevautoproject> <general> @@ -173,10 +173,10 @@ <qt> <used>false</used> <version>3</version> - <root/> + <root></root> </qt> <creategettersetter> - <prefixGet/> + <prefixGet></prefixGet> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -192,12 +192,12 @@ </cppsupportpart> <kdevdebugger> <general> - <programargs>src=../../../testcases/good/InsideSionHillCampus.mov</programargs> - <gdbpath/> - <dbgshell/> - <configGdbScript/> - <runShellScript/> - <runGdbScript/> + <programargs>src=../../../testcases/bad/RCA2.mov</programargs> + <gdbpath></gdbpath> + <dbgshell></dbgshell> + <configGdbScript></configGdbScript> + <runShellScript></runShellScript> + <runGdbScript></runGdbScript> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Modified: freepv/trunk/src/libfreepv/Image.cpp =================================================================== --- freepv/trunk/src/libfreepv/Image.cpp 2006-10-04 20:31:04 UTC (rev 52) +++ freepv/trunk/src/libfreepv/Image.cpp 2006-10-04 20:31:53 UTC (rev 53) @@ -57,9 +57,63 @@ for (int y=size.h; y; y--) { - memcpy(destPtr, srcPtr, 3*sizeof(T)); + memcpy(destPtr, srcPtr, destStride); destPtr += destStride; srcPtr += srcStride; } return ret; } + +void FPV::copyImgToTexImg(Image * dest, Point2D destPos, Image * src) +{ + if ((destPos.x+src->size().w > dest->size().w) || (destPos.y+src->size().h > dest->size().h) ) + { + return; + } + + bool padX = (destPos.x+src->size().w != dest->size().w); + bool padY = (destPos.y+src->size().h != dest->size().h); + + int srcStride = src->getRowStride(); + int destStride = dest->getRowStride(); + int pixelStride = 3; + // copy image + unsigned char * destPtr = dest->getData() + 3*destPos.x + destStride*destPos.y; + unsigned char * srcPtr = src->getData(); + + if (padX) { + for (int y=src->size().h; y; y--) + { + // pad texture + memcpy(destPtr, srcPtr, srcStride); + destPtr += srcStride; + srcPtr += srcStride; + for (int i=dest->size().w + destPos.x - src->size().w; i; i--) { + *destPtr++ = *(srcPtr-3); + *destPtr++ = *(srcPtr-2); + *destPtr++ = *(srcPtr-1); + } + } + } else { + for (int y=src->size().h; y; y--) + { + memcpy(destPtr, srcPtr, srcStride); + destPtr += destStride; + srcPtr += srcStride; + } + } + srcPtr -= srcStride; + if (padY) { + for (int y=dest->size().h-(destPos.y + src->size().h); y; y--) + { + memcpy(destPtr, srcPtr, srcStride); + destPtr += srcStride; + for (int i=dest->size().w + destPos.x - src->size().w; i; i--) { + *destPtr++ = *(srcPtr+srcStride-3); + *destPtr++ = *(srcPtr+srcStride-2); + *destPtr++ = *(srcPtr+srcStride-1); + } + } + } +} + Modified: freepv/trunk/src/libfreepv/Image.h =================================================================== --- freepv/trunk/src/libfreepv/Image.h 2006-10-04 20:31:04 UTC (rev 52) +++ freepv/trunk/src/libfreepv/Image.h 2006-10-04 20:31:53 UTC (rev 53) @@ -89,6 +89,9 @@ unsigned char * getData() { return m_data; } + size_t getRowStride() + { return 3*m_size.w; } + Size2D size() { return m_size; } @@ -111,6 +114,18 @@ void operator=(const Image & other) {}; }; +// various utility functions for image "processing" +/** Copy the \p src image into the \p dest image. + * \p destPos gives the target position in the dest image. + * + * if the src image is to large, nothing will be copied. + * + * This function will repeat the src image 1 pixel on the + * left and bottom edge, if there is space in the source image. + */ +void copyImgToTexImg(Image * dest, Point2D destPos, Image * src); + + } // namespace #endif Modified: freepv/trunk/src/libfreepv/QTVRDecoder.cpp =================================================================== --- freepv/trunk/src/libfreepv/QTVRDecoder.cpp 2006-10-04 20:31:04 UTC (rev 52) +++ freepv/trunk/src/libfreepv/QTVRDecoder.cpp 2006-10-04 20:31:53 UTC (rev 53) @@ -179,6 +179,7 @@ bool QTVRDecoder::decodeCubic(const char * theDataFilePath, Image * imgs[6]) { + bool ok = true; int32 atomSize; gFile = fopen (theDataFilePath, "rb"); if (!gFile) @@ -202,7 +203,7 @@ /* SEEK AND EXTRACT IMAGES */ /***************************/ - SeekAndExtractImages(imgs); + ok = SeekAndExtractImages(imgs); /**************/ /* CLOSE FILE */ @@ -212,7 +213,7 @@ //gMyInstances[instanceNum].drawDecodingBar = false; - return(true); + return(ok); } @@ -280,8 +281,8 @@ /* READ THE ATOM SIZE */ - fread(&atomSize, 4, 1, gFile); - if (ferror(gFile)) + int sz = fread(&atomSize, 1, 4, gFile); + if (ferror(gFile) || sz != 4) { printf("ReadMovieAtom: fread() failed!\n"); return(-1); @@ -289,8 +290,8 @@ /* READ THE ATOM TYPE */ - fread(&atomType, 4, 1, gFile); - if (ferror(gFile)) + sz = fread(&atomType, 1, 4, gFile); + if (ferror(gFile) || sz != 4) { printf("ReadMovieAtom: fread() failed!\n"); return(-1); @@ -303,8 +304,7 @@ #endif - printf("Atom Size = %d\n", (int)atomSize); - printf("Atom Type = %c%c%c%c\n", *(c +3), *(c + 2), *(c + 1) ,*c ); + printf("Atom 0x%08X (0x%08X) %c%c%c%c \n", filePos, (int)atomSize, *(c +3), *(c + 2), *(c + 1) ,*c ); Modified: freepv/trunk/src/libfreepv/Scene.cpp =================================================================== --- freepv/trunk/src/libfreepv/Scene.cpp 2006-10-04 20:31:04 UTC (rev 52) +++ freepv/trunk/src/libfreepv/Scene.cpp 2006-10-04 20:31:53 UTC (rev 53) @@ -51,7 +51,7 @@ dt = (time_ms - m_lastTime) / 1000.0f; } m_lastTime = time_ms; - DEBUG_DEBUG("time step: " << dt << " sec."); + //DEBUG_DEBUG("time step: " << dt << " sec."); yaw += yaw_speed * dt; pitch += pitch_speed * dt; fov += fov_speed * dt; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-04 21:49:12
|
Revision: 54 http://svn.sourceforge.net/freepv/?rev=54&view=rev Author: dangelo Date: 2006-10-04 14:49:07 -0700 (Wed, 04 Oct 2006) Log Message: ----------- accidently commited debug code that saved the opengl textures to disk.. Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/libfreepv/OpenGLRenderer.cpp Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-04 20:31:53 UTC (rev 53) +++ freepv/trunk/freepv.kdevelop 2006-10-04 21:49:07 UTC (rev 54) @@ -14,7 +14,7 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description></description> + <description/> </general> <kdevautoproject> <general> @@ -173,10 +173,10 @@ <qt> <used>false</used> <version>3</version> - <root></root> + <root/> </qt> <creategettersetter> - <prefixGet></prefixGet> + <prefixGet/> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -193,11 +193,11 @@ <kdevdebugger> <general> <programargs>src=../../../testcases/bad/RCA2.mov</programargs> - <gdbpath></gdbpath> - <dbgshell></dbgshell> - <configGdbScript></configGdbScript> - <runShellScript></runShellScript> - <runGdbScript></runGdbScript> + <gdbpath/> + <dbgshell/> + <configGdbScript/> + <runShellScript/> + <runGdbScript/> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-04 20:31:53 UTC (rev 53) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-04 21:49:07 UTC (rev 54) @@ -129,7 +129,7 @@ if (m_tex_size != pano->m_images[i]->size().w) { if (m_tex_size > pano->m_images[i]->size().w) { copyImgToTexImg(scaled, Point2D(0,0), pano->m_images[i]); - scaled->writePPM( "/tmp/test.ppm"); + //scaled->writePPM( "/tmp/test.ppm"); } else { gluScaleImage(GL_RGB, pano->m_size.w, pano->m_size.w, GL_UNSIGNED_BYTE, pano->m_images[i]->getData(), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-08 10:54:38
|
Revision: 64 http://svn.sourceforge.net/freepv/?rev=64&view=rev Author: dangelo Date: 2006-10-08 03:54:23 -0700 (Sun, 08 Oct 2006) Log Message: ----------- added support for compressed headers in mov files Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/freepv.kdevelop freepv/trunk/src/freepv-glut/glut_platform.cpp freepv/trunk/src/libfreepv/QTVRDecoder.cpp freepv/trunk/src/libfreepv/QTVRDecoder.h Added Paths: ----------- freepv/trunk/m4/zlib.m4 Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-10-07 23:52:41 UTC (rev 63) +++ freepv/trunk/configure.in 2006-10-08 10:54:23 UTC (rev 64) @@ -20,7 +20,19 @@ CXXFLAGS="$CXXFLAGS -g -DDEBUG" fi +dnl check for zlib +CHECK_ZLIB +if test "x$have_zlib" != xyes; then + AC_MSG_ERROR([ + the zlib library MUST be installed on your system + but configure could not find it. Use --with-zlib=DIR to + specify the location of the zlib library. Note that + freepv cannot be build without zlib, so specifing + --disable-zlib is useless. + ]) +fi + AX_CHECK_JPEG if test "x$have_jpeg" != xyes; then AC_MSG_ERROR([ @@ -51,7 +63,7 @@ ]) fi -PKG_PROG_PKG_CONFIG +dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_MODULES([QUICKTIME], [libquicktime]) dnl PKG_CHECK_MODULES([GTK2], [gtk+-2.0]) dnl PKG_CHECK_MODULES([GTKGLEXT], [gtkglext-1.0]) Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-07 23:52:41 UTC (rev 63) +++ freepv/trunk/freepv.kdevelop 2006-10-08 10:54:23 UTC (rev 64) @@ -14,7 +14,7 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description/> + <description></description> </general> <kdevautoproject> <general> @@ -130,8 +130,6 @@ <groups> <group pattern="*.h" name="Header files" /> <group pattern="*.cpp" name="Source files" /> - <hidenonprojectfiles>false</hidenonprojectfiles> - <hidenonlocation>false</hidenonlocation> </groups> <tree> <hidepatterns>*.o,*.lo,CVS</hidepatterns> @@ -173,10 +171,10 @@ <qt> <used>false</used> <version>3</version> - <root/> + <root></root> </qt> <creategettersetter> - <prefixGet/> + <prefixGet></prefixGet> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -192,12 +190,12 @@ </cppsupportpart> <kdevdebugger> <general> - <programargs>src=../../../testcases/bad/RCA2.mov</programargs> - <gdbpath/> - <dbgshell/> - <configGdbScript/> - <runShellScript/> - <runGdbScript/> + <programargs>src=../../../testcases/bad/gasalley-2.mov</programargs> + <gdbpath></gdbpath> + <dbgshell></dbgshell> + <configGdbScript></configGdbScript> + <runShellScript></runShellScript> + <runGdbScript></runGdbScript> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Added: freepv/trunk/m4/zlib.m4 =================================================================== --- freepv/trunk/m4/zlib.m4 (rev 0) +++ freepv/trunk/m4/zlib.m4 2006-10-08 10:54:23 UTC (rev 64) @@ -0,0 +1,64 @@ +AC_DEFUN([CHECK_ZLIB], +# +# Handle user hints +# +[AC_MSG_CHECKING(if zlib is wanted) +AC_ARG_WITH(zlib, +[ --with-zlib=DIR root directory path of zlib installation [defaults to + /usr/local or /usr if not found in /usr/local] + --without-zlib to disable zlib usage completely], +[if test "$withval" != no ; then + AC_MSG_RESULT(yes) + if test -d "$withval" + then + ZLIB_HOME="$withval" + else + AC_MSG_WARN([Sorry, $withval does not exist, checking usual places]) + fi +else + AC_MSG_RESULT(no) +fi]) + +ZLIB_HOME=/usr/local +if test ! -f "${ZLIB_HOME}/include/zlib.h" +then + ZLIB_HOME=/usr +fi + +# +# Locate zlib, if wanted +# +if test -n "${ZLIB_HOME}" +then + ZLIB_OLD_LDFLAGS=$LDFLAGS + ZLIB_OLD_CPPFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" + CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" + AC_LANG_SAVE + AC_LANG_C + AC_CHECK_LIB(z, inflateEnd, [zlib_cv_libz=yes], [zlib_cv_libz=no]) + AC_CHECK_HEADER(zlib.h, [zlib_cv_zlib_h=yes], [zlib_cv_zlib_h=no]) + AC_LANG_RESTORE + if test "$zlib_cv_libz" = "yes" -a "$zlib_cv_zlib_h" = "yes" + then + # + # If both library and header were found, use them + # + AC_CHECK_LIB(z, inflateEnd) + AC_MSG_CHECKING(zlib in ${ZLIB_HOME}) + AC_MSG_RESULT(ok) + have_zlib=yes + else + # + # If either header or library was not found, revert and bomb + # + AC_MSG_CHECKING(zlib in ${ZLIB_HOME}) + LDFLAGS="$ZLIB_OLD_LDFLAGS" + CPPFLAGS="$ZLIB_OLD_CPPFLAGS" + AC_MSG_RESULT(failed) + AC_MSG_ERROR(either specify a valid zlib installation with --with-zlib=DIR or disable zlib usage with --without-zlib) + have_zlib=no + fi +fi + +]) Modified: freepv/trunk/src/freepv-glut/glut_platform.cpp =================================================================== --- freepv/trunk/src/freepv-glut/glut_platform.cpp 2006-10-07 23:52:41 UTC (rev 63) +++ freepv/trunk/src/freepv-glut/glut_platform.cpp 2006-10-08 10:54:23 UTC (rev 64) @@ -176,7 +176,7 @@ void GLUTPlatform::glutMouseCallback(int button, int state,int x, int y) { MouseEvent mev; - printf("glutMouseCallback, button %d, state %d, pos: %d, %d\n", button, state, x, y); + //printf("glutMouseCallback, button %d, state %d, pos: %d, %d\n", button, state, x, y); mev.pos.x=x; mev.pos.y=y; int mask; @@ -209,7 +209,7 @@ void GLUTPlatform::glutScrollWheelCallback(int button, int state,int x, int y) { MouseEvent mev; - printf("glutScrollWheelCallback, button %d, state %d, pos: %d, %d\n", button, state, x, y); + //printf("glutScrollWheelCallback, button %d, state %d, pos: %d, %d\n", button, state, x, y); mev.pos.x=x; mev.pos.y=y; mev.modifiers = m_modifiers; @@ -246,7 +246,7 @@ void GLUTPlatform::glutOnTimerCallback(void) { // call timer function, which does the animation and other stuff. unsigned long t = getTime(); - printf("glutOnTimerCallback, t= %d\n", t); +// printf("glutOnTimerCallback, t= %d\n", t); m_eventListener->onTimer(t); // restart timer glutTimerFunc(10,timerCallback,0); Modified: freepv/trunk/src/libfreepv/QTVRDecoder.cpp =================================================================== --- freepv/trunk/src/libfreepv/QTVRDecoder.cpp 2006-10-07 23:52:41 UTC (rev 63) +++ freepv/trunk/src/libfreepv/QTVRDecoder.cpp 2006-10-08 10:54:23 UTC (rev 64) @@ -42,6 +42,8 @@ #include <errno.h> #include <vector> +#include <zlib.h> + #include "utils.h" #include "JpegReader.h" #include "QTVRDecoder.h" @@ -160,8 +162,73 @@ uint32 trackRefIndex; } ; +#define DECOMP_CHUNK 4096 +/* Decompress from file source to file dest until stream ends or EOF. + inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_DATA_ERROR if the deflate data is + invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and + the version of the library linked do not match, or Z_ERRNO if there + is an error reading or writing the files. */ +int decompressZLIBFile(FILE *source, FILE *dest) +{ + int ret; + unsigned have; + z_stream strm; + unsigned char in[DECOMP_CHUNK]; + unsigned char out[DECOMP_CHUNK]; + /* allocate inflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); + if (ret != Z_OK) + return ret; + + /* decompress until deflate stream ends or end of file */ + do { + strm.avail_in = fread(in, 1, DECOMP_CHUNK, source); + if (ferror(source)) { + (void)inflateEnd(&strm); + return Z_ERRNO; + } + if (strm.avail_in == 0) + break; + strm.next_in = in; + + /* run inflate() on input until output buffer not full */ + do { + strm.avail_out = DECOMP_CHUNK; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + switch (ret) { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; /* and fall through */ + case Z_DATA_ERROR: + case Z_MEM_ERROR: + (void)inflateEnd(&strm); + return ret; + } + have = DECOMP_CHUNK - strm.avail_out; + if (fwrite(out, 1, have, dest) != have || ferror(dest)) { + (void)inflateEnd(&strm); + return Z_ERRNO; + } + } while (strm.avail_out == 0); + + /* done when inflate() says it's done */ + } while (ret != Z_STREAM_END); + + /* clean up and return */ + (void)inflateEnd(&strm); + return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR; +} + + /**************** PARSE QUICKTIME MOVIE ***********************/ // // Parses through the QT movie's atoms looking for our 6 cube textures. @@ -177,6 +244,8 @@ m_mainTrack = 0; m_currTrackIsImageTrack = false; m_type = Parameters::PANO_UNKNOWN; + m_cmovZLib = false; + // determine byteorder int testint = 0x01; unsigned char * testchar = reinterpret_cast< unsigned char * >(&testint); @@ -208,6 +277,7 @@ DEBUG_ERROR("fopen() failed: " << strerror(errno) ); return false; } + m_mainFile = gFile; /*************************/ @@ -480,7 +550,32 @@ break; + /* CMOV */ + // + // This contains more sub-atoms, so just recurse + // + + case 'cmov': // MovieAID: //'moov' + printf(" [Subrecursing 'cmov' atom]\n"); + remainingSize = atomSize - 8; // there are n bytes left in this atom to parse + do + { + remainingSize -= ReadMovieAtom(); // read atom and dec by its size + } + while(remainingSize > 0); + printf(" [End subrecurse 'cmov' atom]\n"); + break; + + case 'dcom': + ReadAtom_DCOM(atomSize-8); + break; + + case 'cmvd': + ReadAtom_CMVD(atomSize-8); + break; + + /* TRAK */ case 'trak'://TrackAID: //'trak' @@ -583,9 +678,6 @@ case 'hdlr': //HandlerAID: //'hdlr' ReadAtom_HDLR(atomSize); break; - case 'cmov': - m_error = "Compressed headers not supported."; - break; } @@ -618,8 +710,87 @@ } +/********************** READ ATOM: DCOM ****************************/ +void QTVRDecoder::ReadAtom_DCOM(long size) +{ + char comp[5]; + comp[4] = 0; +//int32 count; +// HandlerAtom *atom; +// PublicHandlerInfo *info; +// int32 componentSubType; + size_t sz = fread(&comp,1 , 4, gFile); + if (ferror(gFile) || sz != 4) + { + printf("ReadAtom_DCOM: fread() failed!\n"); + return; + } + + DEBUG_DEBUG("compression type: " << comp); + + if (strcmp(comp, "zlib") != 0 ) { + m_error = std::string("unsupported compressed header: ") + comp; + return; + } + m_cmovZLib = true; +} + + +/********************** READ ATOM: CMVD****************************/ + +void QTVRDecoder::ReadAtom_CMVD(long size) +{ + int32 uncomp_size; + + size_t sz = fread(&uncomp_size,1 , 4, gFile); + if (ferror(gFile) || sz != 4) + { + printf("ReadAtom_CMVD: fread() failed!\n"); + return; + } + size -= sz; + + if (m_cmovZLib) { + // decompress compressed header + // create temporary file + FILE * decomp = tmpfile(); + if (! decomp) { + // error + m_error = "Could not open temporary file for header decompression"; + return; + } + + if (decompressZLIBFile(gFile, decomp) != Z_OK) { + m_error = "zlib decompression failed"; + fclose(decomp); + return; + } + // restart parser on now decompressed header. + fseek(decomp,0,SEEK_SET); + m_mainFile = gFile; + m_cmovFile = decomp; + + gFile = m_cmovFile; + /*************************/ + /* RECURSE THROUGH ATOMS */ + /*************************/ + int atomSize; + do + { + atomSize = ReadMovieAtom(); + }while(atomSize > 0); + + // switch back to main file + gFile = m_mainFile; + + // close header file + fclose(m_cmovFile); + } +} + + /********************** READ ATOM: STCO ****************************/ void QTVRDecoder::ReadAtom_STCO(long size) @@ -682,6 +853,13 @@ printf(" Chunk offset to 'pano' is : %d\n", gPanoChunkOffset); // TODO: parse the pano info atom here! size_t fpos_saved = ftell(gFile); + + bool switchChunk = (m_cmovFile == gFile); + // the pano chunk is always stored in the main file.. + if (switchChunk) { + gFile = m_mainFile; + } + // seek to panorama description. skip first 12 bytes // of new QT atom. fseek(gFile, gPanoChunkOffset + 12, SEEK_SET); @@ -694,7 +872,12 @@ } while(remainingSize > 0); printf(" [End subrecurse pano 'stco' atom]\n"); - + + // switch back to compressed file, if needed + if (switchChunk) { + gFile = m_cmovFile; + } + fseek(gFile, fpos_saved, SEEK_SET); gCurrentTrackMedia = 0; // reset this now! } @@ -1268,7 +1451,17 @@ cubefaces[i] = new Image; // decode jpeg cube face - decodeJPEG(gFile, *cubefaces[i]); + if (!decodeJPEG(gFile, *cubefaces[i])) { + m_error = "JPEG decoding failed"; + DEBUG_ERROR(m_error); + for (int i=0; i<6; i++) { + if (cubefaces[i]) { + delete cubefaces[i]; + cubefaces[i] = 0; + } + } + return false; + } } return true; } @@ -1334,8 +1527,16 @@ Image img; // decode jpg - if (!decodeJPEG(gFile, img)) { - DEBUG_ERROR("Jpeg decoding failed"); + if (!decodeJPEG(gFile, img)) + { + m_error = "JPEG decoding failed"; + DEBUG_ERROR(m_error); + for (int i=0; i<6; i++) { + if (cubefaces[i]) { + delete cubefaces[i]; + cubefaces[i] = 0; + } + } return false; } @@ -1449,7 +1650,14 @@ img = new Image; // decode jpeg cube face, and rotate 90 CW, if required - decodeJPEG(gFile, *img, (!m_horizontalCyl)); + if (!decodeJPEG(gFile, *img, (!m_horizontalCyl))) { + m_error = "JPEG decoding failed"; + DEBUG_ERROR(m_error); + if (img) { + delete img; + } + return false; + } return true; } @@ -1620,5 +1828,6 @@ } + } // namespace Modified: freepv/trunk/src/libfreepv/QTVRDecoder.h =================================================================== --- freepv/trunk/src/libfreepv/QTVRDecoder.h 2006-10-07 23:52:41 UTC (rev 63) +++ freepv/trunk/src/libfreepv/QTVRDecoder.h 2006-10-08 10:54:23 UTC (rev 64) @@ -91,6 +91,8 @@ long ReadMovieAtom(void); long ReadQTMovieAtom(void); +void ReadAtom_DCOM(long size); +void ReadAtom_CMVD(long size); void ReadAtom_STCO(long size); void ReadAtom_HDLR(int size); void ReadAtom_STSZ(long size); @@ -127,11 +129,10 @@ int32 gTileSize[MAX_TILES_PER_FACE]; -#ifdef TARGET_OS_MAC -short gMovfRefNum; -#else FILE *gFile; // FILE ref used for fopen(). Not used on Mac since mac uses FSSpec -#endif + FILE * m_mainFile; + FILE * m_cmovFile; + bool m_HostBigEndian; int32 m_imageRefTrackIndex; @@ -145,6 +146,8 @@ std::string m_error; bool m_horizontalCyl; + bool m_cmovZLib; + // information about the panorama track Parameters::PanoType m_type; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-08 18:42:14
|
Revision: 66 http://svn.sourceforge.net/freepv/?rev=66&view=rev Author: dangelo Date: 2006-10-08 11:42:01 -0700 (Sun, 08 Oct 2006) Log Message: ----------- include data files in makefile.am, make dist works now Modified Paths: -------------- freepv/trunk/Makefile.am freepv/trunk/src/freepv-glut/Makefile.am freepv/trunk/src/freepv-mozilla/Makefile.am freepv/trunk/src/libfreepv/Makefile.am Added Paths: ----------- freepv/trunk/m4/Makefile.am Modified: freepv/trunk/Makefile.am =================================================================== --- freepv/trunk/Makefile.am 2006-10-08 18:39:23 UTC (rev 65) +++ freepv/trunk/Makefile.am 2006-10-08 18:42:01 UTC (rev 66) @@ -1,5 +1,6 @@ # not a GNU package. You can remove this line, if # have all needed files, that a GNU package needs -AUTOMAKE_OPTIONS = foreign 1.4 +#AUTOMAKE_OPTIONS = foreign 1.4 +AUTOMAKE_OPTIONS = 1.4 -SUBDIRS = src +SUBDIRS = m4 src Added: freepv/trunk/m4/Makefile.am =================================================================== --- freepv/trunk/m4/Makefile.am (rev 0) +++ freepv/trunk/m4/Makefile.am 2006-10-08 18:42:01 UTC (rev 66) @@ -0,0 +1,2 @@ +EXTRA_DIST = ax_check_graphics.m4 ax_opengl.m4 zlib.m4 + Modified: freepv/trunk/src/freepv-glut/Makefile.am =================================================================== --- freepv/trunk/src/freepv-glut/Makefile.am 2006-10-08 18:39:23 UTC (rev 65) +++ freepv/trunk/src/freepv-glut/Makefile.am 2006-10-08 18:42:01 UTC (rev 66) @@ -1,3 +1,5 @@ +EXTRA_DIST = freepv-glut.vcproj + AM_CPPFLAGS = -I$(top_srcdir)/src $(JPEG_FLAGS) AM_CXXFLAGS = $(GL_CFLAGS) AM_LDFLAGS = $(GL_LIBS) -lXxf86vm $(LIB_JPEG) Modified: freepv/trunk/src/freepv-mozilla/Makefile.am =================================================================== --- freepv/trunk/src/freepv-mozilla/Makefile.am 2006-10-08 18:39:23 UTC (rev 65) +++ freepv/trunk/src/freepv-mozilla/Makefile.am 2006-10-08 18:42:01 UTC (rev 66) @@ -1,3 +1,8 @@ +EXTRA_DIST = FreePV.vcproj freepv.def freepv.rc \ + plugin_windows.h plugin_windows.cpp resource.h + +noinst_HEADERS = npplat.h plugin.h plugin_unix.h pluginbase.h + AM_CPPFLAGS = -I$(top_srcdir)/src -DXP_UNIX -DMOZ_X11 AM_CXXFLAGS = $(MOZPLUG_CFLAGS) $(JPEG_FLAGS) $(GL_CFLAGS) -fPIC -DPIC AM_LDFLAGS = -module -avoid-version -lXxf86vm $(LIB_JPEG) $(GL_LIBS) Modified: freepv/trunk/src/libfreepv/Makefile.am =================================================================== --- freepv/trunk/src/libfreepv/Makefile.am 2006-10-08 18:39:23 UTC (rev 65) +++ freepv/trunk/src/libfreepv/Makefile.am 2006-10-08 18:42:01 UTC (rev 66) @@ -1,3 +1,5 @@ +EXTRA_DIST = libfreepv.vcproj + AM_CXXFLAGS = -fPIC -DPIC #INCLUDES = $(all_includes) METASOURCES = AUTO This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-08 18:46:07
|
Revision: 68 http://svn.sourceforge.net/freepv/?rev=68&view=rev Author: dangelo Date: 2006-10-08 11:45:45 -0700 (Sun, 08 Oct 2006) Log Message: ----------- switched updates back to absolute timing. Use proper exponential delay for "inertia" simulation, the inertia is now independent of the framerate. Modified Paths: -------------- freepv/trunk/ChangeLog freepv/trunk/configure.in freepv/trunk/freepv.kdevelop freepv/trunk/src/freepv-glut/freepv-glut.cpp freepv/trunk/src/freepv-glut/glut_platform.cpp freepv/trunk/src/freepv-glx/glx_platform.cpp freepv/trunk/src/freepv-glx/main.cpp freepv/trunk/src/freepv-mozilla/plugin.cpp freepv/trunk/src/freepv-mozilla/plugin_windows.cpp freepv/trunk/src/libfreepv/Controller.h freepv/trunk/src/libfreepv/Image.h freepv/trunk/src/libfreepv/PanoViewer.cpp freepv/trunk/src/libfreepv/PanoViewer.h freepv/trunk/src/libfreepv/Parameters.cpp freepv/trunk/src/libfreepv/Parameters.h freepv/trunk/src/libfreepv/Platform.h freepv/trunk/src/libfreepv/Scene.cpp freepv/trunk/src/libfreepv/Scene.h Removed Paths: ------------- freepv/trunk/src/msvc/ Modified: freepv/trunk/ChangeLog =================================================================== --- freepv/trunk/ChangeLog 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/ChangeLog 2006-10-08 18:45:45 UTC (rev 68) @@ -0,0 +1,552 @@ +2006-10-06 22:50 dangelo + + * freepv/trunk/src/libfreepv/QTVRDecoder.cpp: improved QTVR + decoder to deal with multiple samples in one chunk + +2006-10-06 21:04 dangelo + + * freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/Scene.cpp: limit pitch to -90..90 + +2006-10-06 20:54 dangelo + + * freepv/trunk/src/libfreepv/QTVRDecoder.cpp: recognize full + resolution pano tracks and cylindrical panoramas + +2006-10-06 14:43 dangelo + + * freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/freepv-glut.vcproj: parameters + specified in ~/.freepv override the command line parameters. + Useful for setting the + quality for all panos. + +2006-10-06 14:40 dangelo + + * freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/Parameters.cpp, + freepv/trunk/src/libfreepv/Parameters.h, + freepv/trunk/src/libfreepv/Renderer.h, + freepv/trunk/src/libfreepv/libfreepv.vcproj: added 3 render + quality settings, low, medium, high. They can be selected with + the quality= parameter. + +2006-10-05 15:32 dangelo + + * freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.h: detect compressed mov + files, and print appropriate error message. + +2006-10-04 21:49 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp: accidently + commited debug code that saved the opengl textures to disk.. + +2006-10-04 20:31 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/libfreepv/Image.cpp, + freepv/trunk/src/libfreepv/Image.h, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp, + freepv/trunk/src/libfreepv/Scene.cpp: use partial textures, + fixed endless loop when loading some qtvr files + +2006-10-04 20:31 dangelo + + * freepv/trunk/src/libfreepv/OpenGLRenderer.cpp: use partial + textures instead of rescaling textures that do not have 2^n width + +2006-10-04 12:57 dangelo + + * freepv/trunk/src/libfreepv/Image.cpp, + freepv/trunk/src/libfreepv/Image.h: added function to get + subImages, useful for further tiled texture generation. + +2006-10-04 12:56 dangelo + + * freepv/trunk/src/libfreepv/Parameters.cpp, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/utils.cpp, + freepv/trunk/src/libfreepv/utils.h: strip leading and trailing + spaces from input file/url + +2006-10-03 20:29 dangelo + + * freepv/trunk/AUTHORS: updated authors file + +2006-10-03 20:25 dangelo + + * freepv/trunk/src/libfreepv/QTVRDecoder.cpp: allow compilation of + qtvr decoder with gcc + +2006-10-03 20:22 dangelo + + * freepv/trunk/testcases/good/MichelThoby_tiled_qtvr.mov, + freepv/trunk/testcases/good/test_qt_embed.html, + freepv/trunk/testcases/good/writecontrol.js: added typical html + code used in real world webpages + added new tiled test QTVR by MichelThoby + +2006-10-03 20:09 dangelo + + * freepv/trunk/src/freepv-glut/Makefile.am, + freepv/trunk/src/freepv-glx/Makefile.am, + freepv/trunk/src/freepv-mozilla/Makefile.am, + freepv/trunk/src/libfreepv/Makefile.am: remove references to + libquicktime + +2006-10-03 20:08 dangelo + + * freepv/trunk/configure.in, + freepv/trunk/src/freepv-mozilla/FreePV.vcproj, + freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/libfreepv/JpegReader.cpp, + freepv/trunk/src/libfreepv/JpegReader.h, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp: added qtvr parser + from pangeaVR + +2006-10-03 20:07 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_unix.cpp: added mime + types for .mov files. the unix mozilla plugin will now also be + used for QTVR files + +2006-09-30 21:57 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/Scene.cpp, + freepv/trunk/src/libfreepv/Scene.h: print svn revision and time + difference between each redraw + +2006-09-30 00:15 dangelo + + * freepv/trunk/config.guess, freepv/trunk/config.sub, + freepv/trunk/ltmain.sh: fixed autoconf system, shared libraries + are created with .so extension + +2006-09-29 23:55 dangelo + + * freepv/trunk/src/freepv-glut/glut_platform.h, + freepv/trunk/src/freepv-glx/glx_platform.h, + freepv/trunk/src/freepv-mozilla/plugin.cpp, + freepv/trunk/src/freepv-mozilla/plugin.h, + freepv/trunk/src/libfreepv/Makefile.am, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.h, + freepv/trunk/src/libfreepv/Platform.cpp, + freepv/trunk/src/libfreepv/Platform.h: better stream handling + for mozilla plugin + +2006-09-29 22:38 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.h: mozilla-unix + plugin: fixed crash when closing page with panorama. + +2006-09-29 21:33 dangelo + + * freepv/trunk/src/freepv-glut/glut_platform.h: fixed compilation + on gcc 4.1 (Bruno Postle) + +2006-09-29 21:30 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/freepv-glut/Makefile.am, + freepv/trunk/src/freepv-mozilla/Makefile.am, + freepv/trunk/src/freepv-mozilla/plugin.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/glutfont/freeglut_font.c, + freepv/trunk/src/libfreepv/glutfont/freeglut_font_copy.h, + freepv/trunk/src/libfreepv/glutfont/freeglut_font_data.c: added + fpv prefix to font code copied from freeglut + +2006-09-29 13:03 dangelo + + * freepv/trunk/src/libfreepv/PanoViewer.cpp: changed status + messages + +2006-09-29 13:02 dangelo + + * freepv/trunk/src/freepv-mozilla/FreePV.vcproj: windows + compilation: modified to compile with gecko-sdk 1.4 - 1.6 (not + only 1.7) + +2006-09-29 13:01 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_windows.cpp: the windows + timer seems to be very unreliable and non periodic. Maybe a + special render thread is needed? + +2006-09-29 12:59 dangelo + + * freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.h: use mipmapping. + +2006-09-29 12:58 dangelo + + * freepv/trunk/src/freepv-glut/freepv-glut.cpp: glut: delay viewer + start until window has been created. + +2006-09-29 07:08 dangelo + + * freepv/trunk/testcases/good/test.html, + freepv/trunk/testcases/good/test_cube.html: + +2006-09-29 07:08 dangelo + + * freepv/trunk/src/freepv-mozilla/Makefile.am, + freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.h: fix unix + compilation + +2006-09-29 06:46 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.h, + freepv/trunk/src/libfreepv/glutfont/Makefile.am: unix mozilla + plugin: compilation fixes and minor cleanup + +2006-09-29 06:26 dangelo + + * freepv/trunk/testcases, freepv/trunk/testcases/good, + freepv/trunk/testcases/good/OutsideSionHillCampus.mov, + freepv/trunk/testcases/good/outside_000000.jpg, + freepv/trunk/testcases/good/outside_000001.jpg, + freepv/trunk/testcases/good/outside_000002.jpg, + freepv/trunk/testcases/good/outside_000003.jpg, + freepv/trunk/testcases/good/outside_000004.jpg, + freepv/trunk/testcases/good/outside_000005.jpg, + freepv/trunk/testcases/good/test.html, + freepv/trunk/testcases/good/test_cube.html: added some test files + +2006-09-28 22:25 dangelo + + * freepv/trunk/src/freepv-mozilla/FreePV.vcproj, + freepv/trunk/src/freepv-mozilla/plugin.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/libfreepv.vcproj, + freepv/trunk/src/libfreepv/utils.h: half working windows mozilla + plugin. + +2006-09-28 22:24 dangelo + + * freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/Platform.h: removed + MouseEvent.released, its just ! MouseEvent.down + +2006-09-28 22:22 dangelo + + * freepv/trunk/configure.in, freepv/trunk/src/Makefile.am: removed + gtk directory from automake build, it is not required, since the + mozilla-plugin uses glx now. + +2006-09-28 15:44 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.h: more work on + the event handlers + +2006-09-28 11:41 dangelo + + * freepv/trunk/AUTHORS: + +2006-09-28 11:40 dangelo + + * freepv/trunk/src/freepv-glut/freepv-glut.vcproj, + freepv/trunk/src/freepv-mozilla/FreePV.vcproj, + freepv/trunk/src/freepv-mozilla/freepv.rc, + freepv/trunk/src/freepv-mozilla/plugin.h, + freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.h, + freepv/trunk/src/freepv.sln, + freepv/trunk/src/libfreepv/glutfont/freeglut_font.h: added + windows mozilla plugin, not complete yet, conversion of timer, + mouse and key events missing. + +2006-09-28 11:38 dangelo + + * freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/glutfont/freeglut_font.c, + freepv/trunk/src/libfreepv/glutfont/freeglut_font_copy.h, + freepv/trunk/src/libfreepv/glutfont/freeglut_font_data.c, + freepv/trunk/src/libfreepv/glutfont/freeglut_glutfont_definitions.c, + freepv/trunk/src/libfreepv/libfreepv.vcproj: renamed font + renderer include copied from freeglut + +2006-09-27 16:18 dangelo + + * freepv/trunk/configure.in, freepv/trunk/freepv.kdevelop, + freepv/trunk/m4/ax_opengl.m4: modified unix build scripts + +2006-09-27 16:16 dangelo + + * freepv/trunk/src/freepv-mozilla/Makefile.am, + freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.h: working unix + mozilla plugin, based on Xt and glx. + currently the application/freepv mime type is + used. + +2006-09-26 20:14 dangelo + + * freepv/trunk/src/Makefile.am, + freepv/trunk/src/freepv-glut/Makefile.am, + freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/freepv-glut/glut_platform.h, + freepv/trunk/src/freepv-glx/Makefile.am, + freepv/trunk/src/freepv-glx/glx_platform.cpp, + freepv/trunk/src/freepv-glx/glx_platform.h, + freepv/trunk/src/freepv-glx/main.cpp: made freepv-glut compile + and run under unix + +2006-09-26 20:13 dangelo + + * freepv/trunk/src/libfreepv/Makefile.am, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.h, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/Renderer.h, + freepv/trunk/src/libfreepv/Scene.cpp, + freepv/trunk/src/libfreepv/glutfont/Makefile.am, + freepv/trunk/src/libfreepv/glutfont/freeglut_font.c, + freepv/trunk/src/libfreepv/glutfont/freeglut_font.h, + freepv/trunk/src/libfreepv/glutfont/freeglut_glutfont_definitions.c, + freepv/trunk/src/libfreepv/utils.cpp, + freepv/trunk/src/libfreepv/utils.h: divide init() into init() + and start(). init() does not require a valid opengl context, and + will not start + downloading and viewing the pano, while start() will do just + that. + +2006-09-26 20:11 dangelo + + * freepv/trunk/src/libfreepv/Parameters.cpp: fixed crash if cmd + line parameters do not contain a "=" char + +2006-09-26 20:08 dangelo + + * freepv/trunk/src/freepv-mozilla, + freepv/trunk/src/freepv-mozilla/FreePV.vcproj, + freepv/trunk/src/freepv-mozilla/Makefile.am, + freepv/trunk/src/freepv-mozilla/freepv.rc, + freepv/trunk/src/freepv-mozilla/np_entry.cpp, + freepv/trunk/src/freepv-mozilla/npn_gate.cpp, + freepv/trunk/src/freepv-mozilla/npp_gate.cpp, + freepv/trunk/src/freepv-mozilla/npplat.h, + freepv/trunk/src/freepv-mozilla/plugin.cpp, + freepv/trunk/src/freepv-mozilla/plugin.h, + freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.h, + freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/freepv-mozilla/pluginbase.h, + freepv/trunk/src/freepv-mozilla/resource.h: added first try at + mozilla plugin + +2006-09-26 13:40 dangelo + + * freepv/trunk/src/freepv.sln: updated msvc solution with relative + paths + +2006-09-26 13:39 dangelo + + * freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/JpegReader.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp, + freepv/trunk/src/libfreepv/libfreepv.vcproj: added changes by + thomas: + improved speed of cubic tile generation + disabled stupid qtvr parser on windows. + +2006-09-26 13:35 dangelo + + * freepv/trunk/src/freepv-glut, + freepv/trunk/src/freepv-glut/Makefile.am, + freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/freepv-glut.vcproj, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/freepv-glut/glut_platform.h, + freepv/trunk/src/freepv-glut/main.cpp: added glut platform by + thomas. + fixed timer event handling and added mouse wheel. + provide events with mouse button states. + disabled precompiled headers. + +2006-09-16 21:00 dangelo + + * freepv/trunk/configure.in, freepv/trunk/m4/ax_opengl.m4: updated + configure script + +2006-09-16 20:58 dangelo + + * freepv/trunk/src/libfreepv/glutfont/Makefile.in: removed + +2006-09-16 20:57 dangelo + + * freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/FPV_keysyms.h, + freepv/trunk/src/libfreepv/Image.cpp, + freepv/trunk/src/libfreepv/Image.h, + freepv/trunk/src/libfreepv/JpegReader.cpp, + freepv/trunk/src/libfreepv/JpegReader.h, + freepv/trunk/src/libfreepv/Makefile.am, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.h, + freepv/trunk/src/libfreepv/Parameters.cpp, + freepv/trunk/src/libfreepv/Parameters.h, + freepv/trunk/src/libfreepv/Platform.cpp, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.h, + freepv/trunk/src/libfreepv/Renderer.h, + freepv/trunk/src/libfreepv/Scene.cpp, + freepv/trunk/src/libfreepv/Scene.h, + freepv/trunk/src/libfreepv/glutfont, + freepv/trunk/src/libfreepv/glutfont/Makefile.am, + freepv/trunk/src/libfreepv/glutfont/Makefile.in, + freepv/trunk/src/libfreepv/glutfont/freeglut_font.c, + freepv/trunk/src/libfreepv/glutfont/freeglut_font.h, + freepv/trunk/src/libfreepv/glutfont/freeglut_font_data.c, + freepv/trunk/src/libfreepv/glutfont/freeglut_glutfont_definitions.c, + freepv/trunk/src/libfreepv/utils.cpp, + freepv/trunk/src/libfreepv/utils.h: added display of text + messages, using code borrowed from freeglut. + +2006-09-15 21:04 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp: fixed crash if + panorama could not be loaded + +2006-09-15 21:02 dangelo + + * freepv/trunk/configure.in, freepv/trunk/freepv.kdevelop, + freepv/trunk/src/freepv-glx/Makefile.am, + freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/Makefile.am, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.h, + freepv/trunk/src/libfreepv/Scene.h, + freepv/trunk/src/libfreepv/utils.cpp, + freepv/trunk/src/libfreepv/utils.h: -added (preliminary) support + for QTVR files. Only simple files without preview tracks and + other complicated stuff are supported + - changed zoom speed calculation. Should be more predictable now. + +2006-09-15 17:39 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/libfreepv/Makefile.am, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.h, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/Scene.h: - scale cube face size + texture size to next available + - faster loading of cubic panoramas + - added support for downloading to a file + +2006-09-14 15:05 dangelo + + * freepv/trunk/src/freepv-glx/glx_platform.cpp, + freepv/trunk/src/freepv-glx/glx_platform.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/Platform.h: added download to file + function + +2006-09-14 12:23 dangelo + + * freepv/trunk/doc, freepv/trunk/src/freepv-glx, + freepv/trunk/src/libfreepv, + freepv/trunk/src/libfreepv/Platform.h, freepv/trunk/src/msvc: + added declarations of file download + +2006-09-14 12:18 dangelo + + * freepv/trunk, freepv/trunk/Doxyfile, freepv/trunk/src, + freepv/trunk/src/freepv-glx, freepv/trunk/src/freepv.sln, + freepv/trunk/src/libfreepv, + freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/Image.cpp, + freepv/trunk/src/libfreepv/JpegReader.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/Parameters.cpp, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/Scene.h, + freepv/trunk/src/libfreepv/libfreepv.vcproj: initial support for + building with MSVC + +2006-09-14 09:16 dangelo + + * freepv/trunk/COPYING: initial version accidentally shipped with + GPL license instead of LGPL + +2006-09-14 00:16 dangelo + + * freepv/trunk/src/freepv-glx/crate.rgb: removed obselete file + +2006-09-14 00:07 dangelo + + * freepv, freepv/branches, freepv/tags, freepv/trunk, + freepv/trunk/AUTHORS, freepv/trunk/COPYING, + freepv/trunk/ChangeLog, freepv/trunk/Doxyfile, + freepv/trunk/INSTALL, freepv/trunk/Makefile.am, + freepv/trunk/Makefile.cvs, freepv/trunk/NEWS, + freepv/trunk/README, freepv/trunk/TODO, + freepv/trunk/config.guess, freepv/trunk/config.sub, + freepv/trunk/configure.in, freepv/trunk/depcomp, + freepv/trunk/freepv.kdevelop, freepv/trunk/install-sh, + freepv/trunk/libtool, freepv/trunk/ltmain.sh, freepv/trunk/m4, + freepv/trunk/m4/ax_check_graphics.m4, + freepv/trunk/m4/ax_opengl.m4, freepv/trunk/missing, + freepv/trunk/mkinstalldirs, freepv/trunk/src, + freepv/trunk/src/Makefile.am, freepv/trunk/src/freepv-glx, + freepv/trunk/src/freepv-glx/Makefile.am, + freepv/trunk/src/freepv-glx/crate.rgb, + freepv/trunk/src/freepv-glx/glx_platform.cpp, + freepv/trunk/src/freepv-glx/glx_platform.h, + freepv/trunk/src/freepv-glx/main.cpp, + freepv/trunk/src/libfreepv, + freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/FPV_keysyms.h, + freepv/trunk/src/libfreepv/Image.cpp, + freepv/trunk/src/libfreepv/Image.h, + freepv/trunk/src/libfreepv/JpegReader.cpp, + freepv/trunk/src/libfreepv/JpegReader.h, + freepv/trunk/src/libfreepv/Makefile.am, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.h, + freepv/trunk/src/libfreepv/Parameters.cpp, + freepv/trunk/src/libfreepv/Parameters.h, + freepv/trunk/src/libfreepv/Platform.cpp, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/Renderer.h, + freepv/trunk/src/libfreepv/Scene.cpp, + freepv/trunk/src/libfreepv/Scene.h, freepv/trunk/templates, + freepv/trunk/templates/cpp, freepv/trunk/templates/h: Initial + Import + Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/configure.in 2006-10-08 18:45:45 UTC (rev 68) @@ -117,4 +117,4 @@ ) -AC_OUTPUT(Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile src/freepv-mozilla/Makefile src/freepv-glut/Makefile) +AC_OUTPUT(Makefile m4/Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile src/freepv-mozilla/Makefile src/freepv-glut/Makefile) Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/freepv.kdevelop 2006-10-08 18:45:45 UTC (rev 68) @@ -130,6 +130,8 @@ <groups> <group pattern="*.h" name="Header files" /> <group pattern="*.cpp" name="Source files" /> + <hidenonprojectfiles>false</hidenonprojectfiles> + <hidenonlocation>false</hidenonlocation> </groups> <tree> <hidepatterns>*.o,*.lo,CVS</hidepatterns> Modified: freepv/trunk/src/freepv-glut/freepv-glut.cpp =================================================================== --- freepv/trunk/src/freepv-glut/freepv-glut.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/freepv-glut/freepv-glut.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -91,9 +91,23 @@ // setup viewer PanoViewer viewer; - FPV::Parameters para(argc-1, argv +1 ); + FPV::Parameters para; + // check if just one parameter. + if (argc-1 == 1) { + // add src, if not on commandline + std::string fn(argv[1]); + if(fn.find("src=") == 0) + { + para.parse(argv[1]); + } else { + fn.insert(0,"src="); + para.parse(fn.c_str()); + } + } else { + para.parse(argc-1, argv +1 ); + } const char * home = 0; // TODO: read preferences file and add to arguments @@ -127,7 +141,7 @@ continue; if (line[0] == '#') continue; - para.parseParameter(line.c_str()); + para.parse(line.c_str()); } } } Modified: freepv/trunk/src/freepv-glut/glut_platform.cpp =================================================================== --- freepv/trunk/src/freepv-glut/glut_platform.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/freepv-glut/glut_platform.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -38,30 +38,50 @@ void timerCallback(int id); #ifdef _WIN32 -// return a time in milliseconds since some fixed date (usually the start of freepv) -static unsigned long + +static double +getTimeInaccurate() +{ + static unsigned long oldTime= 0; + unsigned long currTime; + unsigned long deltaTime; + currTime = timeGetTime(); + if (oldTime == 0) { + oldTime = currTime; + } + deltaTime = currTime-oldTime; + return deltaTime/ 1000.0; +} + +// return the elapsed time since the first call in seconds. +static double getTime() { - long long unsigned currTime; - long long unsigned deltaTime; - static long long unsigned oldTime = 0; + LARGE_INTEGER currTime; + LARGE_INTEGER deltaTime; + static LARGE_INTEGER oldTime = {0,0}; + static LARGE_INTEGER ticksPerSecond = {0,0}; - FILETIME ft; - SYSTEMTIME st; + if (ticksPerSecond.QuadPart == 0) { + if (!QueryPerformanceFrequency(&ticksPerSecond)) + { + // no performance counter, use low resolution system clock + ticksPerSecond.QuadPart = 0; + return getTimeInaccurate(); + } + } - GetSystemTime(&st); // gets current time - SystemTimeToFileTime(&st, &ft); // converts to file time format + QueryPerformanceCounter(& currTime); - currTime = ft.dwHighDateTime * 4294967295LL + ft.dwLowDateTime; - - if (oldTime == 0) { - oldTime = currTime; + if (oldTime.QuadPart == 0) { + oldTime.QuadPart = currTime.QuadPart; } - deltaTime = currTime - oldTime; - oldTime = currTime; - return (unsigned long)(deltaTime / 10000); + deltaTime.QuadPart = currTime.QuadPart - oldTime.QuadPart; + if (deltaTime.QuadPart == 0) return 0; + return (deltaTime.QuadPart / ((double)ticksPerSecond.QuadPart)); } + #endif #ifdef unix @@ -81,7 +101,6 @@ oldTime = currTime; } deltaTime = currTime - oldTime; - oldTime = currTime; return (double)(deltaTime / 1000000.0); } #endif Modified: freepv/trunk/src/freepv-glx/glx_platform.cpp =================================================================== --- freepv/trunk/src/freepv-glx/glx_platform.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/freepv-glx/glx_platform.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -166,7 +166,6 @@ oldTime = currTime; } deltaTime = currTime - oldTime; - oldTime = currTime; return (double)(deltaTime / 1000000.0); } Modified: freepv/trunk/src/freepv-glx/main.cpp =================================================================== --- freepv/trunk/src/freepv-glx/main.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/freepv-glx/main.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -34,8 +34,23 @@ // setup viewer PanoViewer viewer; - char ** argv1 = argv +1; - Parameters para(argc-1, argv1); + + FPV::Parameters para; + // check if just one parameter and add src= if it is missing + if (argc-1 == 1) { + // add src, if not on commandline + std::string fn(argv[1]); + if(fn.find("src=") == 0) + { + para.parse(argv[1]); + } else { + fn.insert(0,"src="); + para.parse(fn.c_str()); + } + } else { + para.parse(argc-1, argv +1 ); + } + viewer.init(platform, para); viewer.start(); // run event loop Modified: freepv/trunk/src/freepv-mozilla/plugin.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/freepv-mozilla/plugin.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -68,7 +68,8 @@ DEBUG_TRACE(""); pCData = pcd; - m_fpvParam = new FPV::Parameters( pcd->argc, pcd->argn, pcd->argv ); + m_fpvParam = new FPV::Parameters; + m_fpvParam->parse( pcd->argc, pcd->argn, pcd->argv ); m_fpvIgnoreStreams = true; m_fpvDownloadToFile = true; m_fpvDownBuffer = 0; Modified: freepv/trunk/src/freepv-mozilla/plugin_windows.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin_windows.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/freepv-mozilla/plugin_windows.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -44,7 +44,7 @@ } static double -getDeltaTimeInaccurate() +getTimeInaccurate() { static unsigned long oldTime= 0; unsigned long currTime; @@ -54,13 +54,12 @@ oldTime = currTime; } deltaTime = currTime-oldTime; - oldTime = currTime; return deltaTime/ 1000.0; } -// return the elapsed time since the last call in seconds. +// return the elapsed time since the first call in seconds. static double -getDeltaTime() +getTime() { LARGE_INTEGER currTime; LARGE_INTEGER deltaTime; @@ -72,15 +71,17 @@ { // no performance counter, use low resolution system clock ticksPerSecond.QuadPart = 0; - return getDeltaTimeInaccurate(); + return getTimeInaccurate(); } } QueryPerformanceCounter(& currTime); + if (oldTime.QuadPart == 0) { + oldTime.QuadPart = currTime.QuadPart; + } deltaTime.QuadPart = currTime.QuadPart - oldTime.QuadPart; - oldTime.QuadPart = currTime.QuadPart; if (deltaTime.QuadPart == 0) return 0; return (deltaTime.QuadPart / ((double)ticksPerSecond.QuadPart)); } @@ -368,7 +369,7 @@ break; case FPV_WM_TIME: { - double t = getDeltaTime(); + double t = getTime(); //DEBUG_TRACE("WM_TIMER: delta:" << t); if (thisp->m_eventListener) { wglMakeCurrent( thisp->m_hDC, thisp->m_hRC ); Modified: freepv/trunk/src/libfreepv/Controller.h =================================================================== --- freepv/trunk/src/libfreepv/Controller.h 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/Controller.h 2006-10-08 18:45:45 UTC (rev 68) @@ -114,26 +114,27 @@ } /** timer event */ - virtual void onTimer(double deltatime) { + virtual void onTimer(double time) { + DEBUG_DEBUG(m_yawSpeed << " " << m_pitchSpeed << " " << m_fovSpeed); if (m_setYaw) { - m_scene->getCamera()->yaw_speed = m_yawSpeed; - } + m_scene->getCamera()->setYawSpeed(m_yawSpeed); + } if (m_setPitch) { - m_scene->getCamera()->pitch_speed = m_pitchSpeed; + m_scene->getCamera()->setPitchSpeed(m_pitchSpeed); } if (m_setFov) { - m_scene->getCamera()->fov_speed = m_fovSpeed; + m_scene->getCamera()->setFovSpeed(m_fovSpeed); } if (m_keyZoomIn) { m_fovSpeed = 2.0f*(2.0f*r2d(atan(0.5f*tan(d2r(m_scene->getCamera()->fov)/2.0f))) - m_scene->getCamera()->fov); - m_scene->getCamera()->fov_speed = m_fovSpeed; + m_scene->getCamera()->setFovSpeed(m_fovSpeed); } if (m_keyZoomOut) { m_fovSpeed = 2.0f*(2.0f*r2d(atan(2.0f*(tan(d2r(m_scene->getCamera()->fov)/2.0f)))) - m_scene->getCamera()->fov); - m_scene->getCamera()->fov_speed = m_fovSpeed; + m_scene->getCamera()->setFovSpeed(m_fovSpeed); } - m_scene->getCamera()->onTimer(deltatime); + m_scene->getCamera()->onTimer(time); if (m_setFovOnce) { m_setFov = false; Modified: freepv/trunk/src/libfreepv/Image.h =================================================================== --- freepv/trunk/src/libfreepv/Image.h 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/Image.h 2006-10-08 18:45:45 UTC (rev 68) @@ -31,6 +31,7 @@ //#include <vector> #include <string> +#include <assert.h> #include "Platform.h" @@ -97,7 +98,7 @@ Size2D size() { return m_size; } - /** access the red pixel compoment at coordinates \p x and \p y */ + /** access the red pixel component at coordinates \p x and \p y */ unsigned char & operator()(int x, int y) { assert(x < m_size.w); Modified: freepv/trunk/src/libfreepv/PanoViewer.cpp =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -155,11 +155,11 @@ } } -void PanoViewer::onTimer(double deltatime) +void PanoViewer::onTimer(double time) { Camera * cam = m_scene->getCamera(); if (m_controller){ - m_controller->onTimer(deltatime); + m_controller->onTimer(time); } if (m_renderer) { m_renderer->render(*m_scene); Modified: freepv/trunk/src/libfreepv/PanoViewer.h =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.h 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/PanoViewer.h 2006-10-08 18:45:45 UTC (rev 68) @@ -104,7 +104,7 @@ * @param time contains the absolute time in seconds relative to a unknown * date */ - virtual void onTimer(double deltatime); + virtual void onTimer(double time); // download events Modified: freepv/trunk/src/libfreepv/Parameters.cpp =================================================================== --- freepv/trunk/src/libfreepv/Parameters.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/Parameters.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -37,32 +37,23 @@ } // used by Netscape plugins -Parameters::Parameters( int argc, char* argn[], char* argv[] ) { +void Parameters::parse( int argc, char* argn[], char* argv[] ) { - initializeParameters(); - for( int i = 0; i < argc; i++ ) { - parseParameter( argn[i], argv[i] ); + parse( argn[i], argv[i] ); } } // used by command line -Parameters::Parameters( int argc, char* argv[] ) { +void Parameters::parse( int argc, char* argv[] ) { - initializeParameters(); - for( int i = 0; i < argc; i++ ) { - parseParameter(argv[i] ); + parse(argv[i] ); } } -Parameters::~Parameters(void) -{ -} - - // parses a single parameter -void Parameters::parseParameter(const char * para) +void Parameters::parse(const char * para) { char *p = NULL; p= new char[strlen(para) + 1]; @@ -79,21 +70,22 @@ *equal = 0; // parse name value pair - parseParameter( p, equal+1); + parse( p, equal+1); delete[] p; } + // parses a single parameter -void Parameters::parseParameter(const char * pname, const char * pvalue) +void Parameters::parse(const char * pname, const char * pvalue) { - // convert to uppercase and remove whitespace + // convert to uppercase and remove whitespace std::string name = removeWhitespace(string2UPPER(pname)); std::string value = removeWhitespace(pvalue); if( name == "HEIGHT" ) m_height = atoi( value.c_str() ); if( name == "WIDTH" ) m_width = atoi( value.c_str() ); if( name == "SRC" ) m_src = value; - if( name == "WAIT" ) m_waitImage = value; + if( name == "WAIT" ) m_waitImage = value; // single cube faces if( name == "CUBE_FRONT" ) m_cubeSrc[0] = value; @@ -120,6 +112,10 @@ } } +Parameters::~Parameters(void) +{ +} + // sets an initial value to the parameters void Parameters::initializeParameters(void) { Modified: freepv/trunk/src/libfreepv/Parameters.h =================================================================== --- freepv/trunk/src/libfreepv/Parameters.h 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/Parameters.h 2006-10-08 18:45:45 UTC (rev 68) @@ -58,11 +58,17 @@ Parameters(); // used by Netscape plugins - Parameters( int argc, char* argn[], char* argv[] ); + void parse( int argc, char* argn[], char* argv[] ); // used by standalone version - Parameters( int argc, char* argv[] ); + void parse( int argc, char* argv[] ); + // parses a single parameter + void parse(const char * pname, const char * value); + + // parse a single parameter in name=value style + void parse(const char * para); + ~Parameters(void); private: @@ -98,11 +104,6 @@ double getPanoHFOV() const { return m_panoHFOV; } - // parses a single parameter - void parseParameter(const char * pname, const char * value); - - // parse a single parameter in name=value style - void parseParameter(const char * para); private: // sets an initial value to the parameters void initializeParameters(void); Modified: freepv/trunk/src/libfreepv/Platform.h =================================================================== --- freepv/trunk/src/libfreepv/Platform.h 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/Platform.h 2006-10-08 18:45:45 UTC (rev 68) @@ -124,10 +124,10 @@ /** called when a timer event happens. * - * @param deltatime contains the time in seconds that has been - * elapsed since the last call to onTimer(). + * @param time contains the absolute time in seconds since some + * fixed point in the past. */ - virtual void onTimer(double deltatime) {}; + virtual void onTimer(double time) {}; // ================================================= // download events Modified: freepv/trunk/src/libfreepv/Scene.cpp =================================================================== --- freepv/trunk/src/libfreepv/Scene.cpp 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/Scene.cpp 2006-10-08 18:45:45 UTC (rev 68) @@ -22,6 +22,8 @@ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ +#include <math.h> + #include "Scene.h" #include "utils.h" @@ -36,31 +38,85 @@ pitch_speed = 0; fov_speed = 0; - m_angleDecay = 0.95f; - m_fovDecay = 0.93f; + m_minPitch = -90; + m_maxPitch = 90; + m_maxYaw = 180; + m_minYaw = -180; + m_minFov = 1; + m_maxFov = 160; + + m_angleDecay = 3.0f; + m_fovDecay = 3.0f; + m_lastTime = 0; } -void Camera::onTimer(double dt) +void Camera::setFovSpeed(float speed) { + fov_speed = speed; + m_fovTime = m_lastTime; +} + +void Camera::setYawSpeed(float speed) +{ + yaw_speed = speed; + m_yawTime = m_lastTime; +} + +void Camera::setPitchSpeed(float speed) +{ + pitch_speed = speed; + m_pitchTime = m_lastTime; +} + + +void Camera::onTimer(double time) +{ + double dt = time - m_lastTime; + + double yspeed = yaw_speed; + // calculate decay. This time it is independent from the update rate + if ( m_yawTime < m_lastTime) { + double decayTime = time - m_yawTime; + yspeed = yaw_speed * exp(-m_angleDecay* decayTime); + } + double pspeed = pitch_speed; + if ( m_pitchTime < m_lastTime) { + double decayTime = time - m_pitchTime; + pspeed = pitch_speed * exp(-m_angleDecay* decayTime); + } + double fspeed = fov_speed; + if ( m_fovTime < m_lastTime) { + double decayTime = time - m_fovTime; + fspeed = fov_speed * exp(-m_fovDecay* decayTime); + } + + m_lastTime = time; + + //DEBUG_DEBUG("time step: " << dt << " sec."); - yaw += yaw_speed * dt; - pitch += pitch_speed * dt; - fov += fov_speed * dt; - if (fov > 170) - fov = 170; - if (fov < 1) - fov = 1; + yaw += yspeed * dt; + pitch += pspeed * dt; + fov += fspeed * dt; + + DEBUG_DEBUG(yaw << " " << pitch << " " << fov << " speed: " << yspeed << " " << pspeed << " " << fspeed); + + if (fov > m_maxFov) + fov = m_maxFov; + if (fov < m_minFov) + fov = m_minFov; - if (pitch > 90) pitch = 90; - if (pitch < -90) pitch = -90; - - // TODO: make the decay independent of the update time - yaw_speed *= m_angleDecay; - pitch_speed *= m_angleDecay; - fov_speed *= m_fovDecay; + // ensure yaw stays within -180 .. 180 + while (yaw > 180) yaw -= 360; + while (yaw < -180) yaw +=360; + + if (pitch > m_maxPitch) pitch = m_maxPitch; + if (pitch < m_minPitch) pitch = m_minPitch; + + if (yaw > m_maxYaw) yaw = m_maxYaw; + if (yaw < m_minYaw) yaw = m_minYaw; } Modified: freepv/trunk/src/libfreepv/Scene.h =================================================================== --- freepv/trunk/src/libfreepv/Scene.h 2006-10-08 18:43:10 UTC (rev 67) +++ freepv/trunk/src/libfreepv/Scene.h 2006-10-08 18:45:45 UTC (rev 68) @@ -51,23 +51,36 @@ { Camera(); + void setFovSpeed(float speed); + void setYawSpeed(float speed); + void setPitchSpeed(float speed); + /** timer function required for the simulation of * inertia */ - void onTimer(double deltatime); + void onTimer(double time); float m_angleDecay; float m_fovDecay; + float yaw; + float pitch; + float fov; + + // limits + float m_maxYaw; + float m_minYaw; + float m_maxPitch; + float m_minPitch; + float m_minFov; + float m_maxFov; +protected: float yaw_speed; float pitch_speed; float fov_speed; - float yaw; - float pitch; - float fov; - - unsigned long m_lastTime; + float m_fovTime, m_yawTime, m_pitchTime; + double m_lastTime; }; /** main panorama class. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-09 16:48:31
|
Revision: 73 http://svn.sourceforge.net/freepv/?rev=73&view=rev Author: dangelo Date: 2006-10-09 09:48:19 -0700 (Mon, 09 Oct 2006) Log Message: ----------- implemented startTimer(), stopTimer() for unix platform Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/Makefile.am freepv/trunk/src/freepv-mozilla/plugin_unix.cpp freepv/trunk/src/freepv-mozilla/plugin_unix.h Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-09 15:07:34 UTC (rev 72) +++ freepv/trunk/freepv.kdevelop 2006-10-09 16:48:19 UTC (rev 73) @@ -14,7 +14,7 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description></description> + <description/> </general> <kdevautoproject> <general> @@ -173,10 +173,10 @@ <qt> <used>false</used> <version>3</version> - <root></root> + <root/> </qt> <creategettersetter> - <prefixGet></prefixGet> + <prefixGet/> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -193,11 +193,11 @@ <kdevdebugger> <general> <programargs>src=../../../testcases/bad/gasalley-2.mov</programargs> - <gdbpath></gdbpath> - <dbgshell></dbgshell> - <configGdbScript></configGdbScript> - <runShellScript></runShellScript> - <runGdbScript></runGdbScript> + <gdbpath/> + <dbgshell/> + <configGdbScript/> + <runShellScript/> + <runGdbScript/> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Modified: freepv/trunk/src/Makefile.am =================================================================== --- freepv/trunk/src/Makefile.am 2006-10-09 15:07:34 UTC (rev 72) +++ freepv/trunk/src/Makefile.am 2006-10-09 16:48:19 UTC (rev 73) @@ -1,3 +1,4 @@ +EXTRA_DIST=freepv.sln # set the include path found by configure INCLUDES = $(all_includes) Modified: freepv/trunk/src/freepv-mozilla/plugin_unix.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin_unix.cpp 2006-10-09 15:07:34 UTC (rev 72) +++ freepv/trunk/src/freepv-mozilla/plugin_unix.cpp 2006-10-09 16:48:19 UTC (rev 73) @@ -245,10 +245,6 @@ { DEBUG_TRACE(""); - // TODO: stop events - if (m_timerActive) { - XtRemoveTimeOut(m_timerID); - } delete (m_viewer); destroyGLXContext(); mInitialized = FALSE; @@ -346,7 +342,6 @@ // hope this does not happen too often.. start viewer m_viewer->start(); - // add timer XtAppContext context; if (NPN_GetValue(mInstance, NPNVxtAppContext, (void*)context) != NPERR_NO_ERROR ) { @@ -357,10 +352,6 @@ m_appContext = context; } m_appContext = context; - //XtWorkProcId id = XtAddTimerProc((XtWorkProc)nsPluginInstanceUnix::xtWorkProc, this); - m_timerID = XtAppAddTimeOut(m_appContext, 1, (XtTimerCallbackProc) nsPluginInstanceUnix::xtTimeOutProc, this); - m_timerActive = true; - DEBUG_DEBUG("added timeout proc, id: " << m_timerID); } else { DEBUG_ERROR("ERROR: Couldn't get new glxContext!" ); @@ -439,6 +430,27 @@ return 0; } +void nsPluginInstanceUnix::startTimer(int delay) +{ + if (! m_timerActive) { + // add timer + m_timerID = XtAppAddTimeOut(m_appContext, 1, (XtTimerCallbackProc) nsPluginInstanceUnix::xtTimeOutProc, this); + m_timerActive = true; + DEBUG_DEBUG("added timeout proc, id: " << m_timerID); + } +} + +void nsPluginInstanceUnix::stopTimer() +{ + // TODO: stop events + DEBUG_DEBUG("stop timer"); + if (m_timerActive) { + XtRemoveTimeOut(m_timerID); + } + m_timerActive = false; +} + + void nsPluginInstanceUnix::setGL() { // DEBUG_TRACE("setGL"); if (gxDisplay && m_glxContext && mWindow) { Modified: freepv/trunk/src/freepv-mozilla/plugin_unix.h =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin_unix.h 2006-10-09 15:07:34 UTC (rev 72) +++ freepv/trunk/src/freepv-mozilla/plugin_unix.h 2006-10-09 16:48:19 UTC (rev 73) @@ -113,10 +113,10 @@ // Timer functions /** start the timer, fires each \p delay milliseconds */ - virtual void startTimer(int delay) {}; + virtual void startTimer(int delay); /** stop the timer */ - virtual void stopTimer() {}; + virtual void stopTimer(); //////////////////////////////////////////////// // Drawing functions This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-12 18:46:07
|
Revision: 79 http://svn.sourceforge.net/freepv/?rev=79&view=rev Author: dangelo Date: 2006-10-12 11:45:46 -0700 (Thu, 12 Oct 2006) Log Message: ----------- support for tiled cube textures, added vram= parameter to specify the amount of vram that should be used for textures. Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/freepv-glut/freepv-glut.cpp freepv/trunk/src/freepv-mozilla/plugin_unix.cpp freepv/trunk/src/libfreepv/Image.cpp freepv/trunk/src/libfreepv/Image.h freepv/trunk/src/libfreepv/OpenGLRenderer.cpp freepv/trunk/src/libfreepv/OpenGLRenderer.h freepv/trunk/src/libfreepv/PanoViewer.cpp freepv/trunk/src/libfreepv/PanoViewer.h freepv/trunk/src/libfreepv/Parameters.cpp freepv/trunk/src/libfreepv/Parameters.h freepv/trunk/src/libfreepv/utils.h Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/freepv.kdevelop 2006-10-12 18:45:46 UTC (rev 79) @@ -14,7 +14,7 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description/> + <description></description> </general> <kdevautoproject> <general> @@ -48,7 +48,7 @@ <ccompiler>kdevgccoptions</ccompiler> <cxxcompiler>kdevgppoptions</cxxcompiler> <f77compiler>kdevg77options</f77compiler> - <cxxflags>-g</cxxflags> + <cxxflags>-O0 -g</cxxflags> <envvars/> <topsourcedir/> <cppflags/> @@ -173,10 +173,10 @@ <qt> <used>false</used> <version>3</version> - <root/> + <root></root> </qt> <creategettersetter> - <prefixGet/> + <prefixGet></prefixGet> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -192,12 +192,12 @@ </cppsupportpart> <kdevdebugger> <general> - <programargs>src=../../../testcases/bad/gasalley-2.mov</programargs> - <gdbpath/> - <dbgshell/> - <configGdbScript/> - <runShellScript/> - <runGdbScript/> + <programargs>src=../../../testcases/bad/gasalley-2.mov texture_memory=12</programargs> + <gdbpath></gdbpath> + <dbgshell></dbgshell> + <configGdbScript></configGdbScript> + <runShellScript></runShellScript> + <runGdbScript></runGdbScript> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Modified: freepv/trunk/src/freepv-glut/freepv-glut.cpp =================================================================== --- freepv/trunk/src/freepv-glut/freepv-glut.cpp 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/freepv-glut/freepv-glut.cpp 2006-10-12 18:45:46 UTC (rev 79) @@ -46,6 +46,7 @@ FPV::PanoViewer * gviewer=0; static bool g_started = false; + void keyCallback(unsigned char key,int x, int y) { platformptr->glutKeyboardCallback(key,x,y); } @@ -91,18 +92,16 @@ FPV::Parameters para; // check if just one parameter. - if (argc-1 == 1) { + for (int i=1; i < argc; i++) { // add src, if not on commandline - std::string fn(argv[1]); - if(fn.find("src=") == 0) + std::string fn(argv[i]); + if(fn.find("=") != std::string::npos) { - para.parse(argv[1]); + para.parse(argv[i]); } else { fn.insert(0,"src="); para.parse(fn.c_str()); } - } else { - para.parse(argc-1, argv +1 ); } const char * home = 0; Modified: freepv/trunk/src/freepv-mozilla/plugin_unix.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin_unix.cpp 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/freepv-mozilla/plugin_unix.cpp 2006-10-12 18:45:46 UTC (rev 79) @@ -434,7 +434,6 @@ { if (! m_timerActive) { // add timer - DEBUG_DEBUG("calling XtAppAddTimeOut"); m_timerID = XtAppAddTimeOut(m_appContext, 1, (XtTimerCallbackProc) nsPluginInstanceUnix::xtTimeOutProc, this); m_timerActive = true; DEBUG_DEBUG("added timeout proc, id: " << m_timerID); @@ -446,7 +445,6 @@ // TODO: stop events DEBUG_DEBUG("stop timer"); if (m_timerActive) { - DEBUG_DEBUG("calling XtRemoveTimeOut"); XtRemoveTimeOut(m_timerID); } m_timerActive = false; @@ -517,7 +515,6 @@ thisp->m_eventListener->onTimer(t); } if (thisp->m_timerActive) { - DEBUG_DEBUG("calling XtAppAddTimeOut"); thisp->m_timerID = XtAppAddTimeOut(thisp->m_appContext, 1, (XtTimerCallbackProc) nsPluginInstanceUnix::xtTimeOutProc, thisp); } } Modified: freepv/trunk/src/libfreepv/Image.cpp =================================================================== --- freepv/trunk/src/libfreepv/Image.cpp 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/Image.cpp 2006-10-12 18:45:46 UTC (rev 79) @@ -64,55 +64,67 @@ return ret; } -void FPV::copyImgToTexImg(Image * dest, Point2D destPos, Image * src) +void FPV::copyImgToTexImg(Image * dest, Image * src, Point2D destPos, Point2D srcPos, Size2D srcSize, bool pad) { - if ((destPos.x+src->size().w > dest->size().w) || (destPos.y+src->size().h > dest->size().h) ) - { - return; + if (srcSize.w == -1) srcSize = src->size() - Size2D(srcPos.x, srcPos.y); + + if (srcSize.w + srcPos.x > src->size().w) { + srcSize.w = src->size().w - srcPos.x; } + if (srcSize.h + srcPos.y > src->size().h) { + srcSize.h = src->size().h - srcPos.y; + } + + assert((srcPos.x + srcSize.w <= src->size().w) && (srcPos.x + srcSize.w <= src->size().w)); + assert((destPos.x+srcSize.w <= dest->size().w) && (destPos.y+srcSize.h <= dest->size().h)); - bool padX = (destPos.x+src->size().w != dest->size().w); - bool padY = (destPos.y+src->size().h != dest->size().h); + // pad if requested. + bool padX = (destPos.x+srcSize.w != dest->size().w) && pad; + bool padY = (destPos.y+srcSize.h != dest->size().h) && pad; int srcStride = src->getRowStride(); int destStride = dest->getRowStride(); int pixelStride = 3; // copy image unsigned char * destPtr = dest->getData() + 3*destPos.x + destStride*destPos.y; - unsigned char * srcPtr = src->getData(); + unsigned char * srcPtr = src->getData() + 3*srcPos.x + srcStride*srcPos.y; if (padX) { - for (int y=src->size().h; y; y--) + for (int y=srcSize.h; y; y--) { // pad texture - memcpy(destPtr, srcPtr, srcStride); - destPtr += srcStride; + memcpy(destPtr, srcPtr, srcSize.w*3); + unsigned char *srcPtrt = srcPtr + 3*(srcSize.w-1); + unsigned char *destPtrt = destPtr + srcSize.w*3; + for (int x=destPos.x + srcSize.w ; x < dest->size().w; x++) { + *destPtrt++ = *(srcPtrt); + *destPtrt++ = *(srcPtrt+1); + *destPtrt++ = *(srcPtrt+2); + } srcPtr += srcStride; - for (int i=dest->size().w + destPos.x - src->size().w; i; i--) { - *destPtr++ = *(srcPtr-3); - *destPtr++ = *(srcPtr-2); - *destPtr++ = *(srcPtr-1); - } + destPtr += destStride; } } else { - for (int y=src->size().h; y; y--) + for (int y=srcSize.h; y; y--) { - memcpy(destPtr, srcPtr, srcStride); + memcpy(destPtr, srcPtr, srcSize.w*3); destPtr += destStride; srcPtr += srcStride; } } srcPtr -= srcStride; if (padY) { - for (int y=dest->size().h-(destPos.y + src->size().h); y; y--) + for (int y=(destPos.y + srcSize.h); y < dest->size().h ; y++) { - memcpy(destPtr, srcPtr, srcStride); - destPtr += srcStride; - for (int i=dest->size().w + destPos.x - src->size().w; i; i--) { - *destPtr++ = *(srcPtr+srcStride-3); - *destPtr++ = *(srcPtr+srcStride-2); - *destPtr++ = *(srcPtr+srcStride-1); + memcpy(destPtr, srcPtr, srcSize.w*3); + unsigned char *srcPtrt = srcPtr + 3*(srcSize.w-1); + unsigned char *destPtrt = destPtr + srcSize.w*3; + for (int x=destPos.x + srcSize.w ; x < dest->size().w; x++) { + *destPtrt++ = *(srcPtrt); + *destPtrt++ = *(srcPtrt+1); + *destPtrt++ = *(srcPtrt+2); } + destPtr += destStride; } } } Modified: freepv/trunk/src/libfreepv/Image.h =================================================================== --- freepv/trunk/src/libfreepv/Image.h 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/Image.h 2006-10-12 18:45:46 UTC (rev 79) @@ -134,8 +134,11 @@ * * This function will repeat the src image 1 pixel on the * left and bottom edge, if there is space in the source image. + * This will lead to textures that can be used for mip-mapping. */ -void copyImgToTexImg(Image * dest, Point2D destPos, Image * src); +void copyImgToTexImg(Image * dest, Image * src, Point2D destPos, + Point2D srcPos, Size2D srcSize=Size2D(-1,-1), + bool pad = false); } // namespace Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-12 18:45:46 UTC (rev 79) @@ -23,6 +23,7 @@ */ +#include <vector> #include <math.h> #include "OpenGLRenderer.h" @@ -85,7 +86,7 @@ { public: /// Create textures - OGL_CylindricalRenderData(CylindricalPano * pano, RenderQuality quality) + OGL_CylindricalRenderData(CylindricalPano * pano, size_t maxTexMem, RenderQuality quality) { // load opengl textures if (pano->m_image != 0) { @@ -126,7 +127,7 @@ scaled = new Image(Size2D(m_tex_size, m_tex_size)); if (m_tex_size > panoSize) { DEBUG_DEBUG("using partial face texture, " << m_srcSize.w << "x" << m_srcSize.h << " to " << m_tex_size); - copyImgToTexImg(scaled, Point2D(0,0), pano->m_image); + copyImgToTexImg(scaled, pano->m_image, Point2D(0,0), Point2D(0,0), Size2D(-1,-1), true); } else { DEBUG_DEBUG("downsizing face image"); gluScaleImage(GL_RGB, pano->m_image->size().w, pano->m_image->size().h, @@ -138,7 +139,6 @@ data = pano->m_image->getData(); } - // create texture glBindTexture(GL_TEXTURE_2D, m_textures[0]); @@ -245,30 +245,56 @@ { public: /// Create textures - OGL_CubicRenderData(CubicPano * pano, RenderQuality quality) + OGL_CubicRenderData(CubicPano * pano, size_t maxTextureMem, RenderQuality quality) { - // load opengl textures - // TODO: hande texture sizes that are not a power of 2 - // split texture into smaller tiles, if they are too big, or do not - // fit well. - glGenTextures(6, &(m_textures[0])); /* create six textures */ - // select generate a suitable texture size. - GLint max_tex_size; - glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_tex_size); - // TODO: tile texture if needed - for (m_tex_size=64; m_tex_size <= max_tex_size ; m_tex_size = m_tex_size<<1) { - if (m_tex_size >= pano->m_size.w) { + if (maxTextureMem == 0) { + maxTextureMem = 256 * 1024 * 1024; + } + + int maxFaceMem = maxTextureMem / 6; + + int maxTileSize; + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTileSize); + + // try to create not more than 6x6 tiles per face + m_srcSize = pano->m_size.w; + + int maxFaceWidthMem = (int) sqrt((double)maxFaceMem/3); + int maxFaceWidth = std::min(m_srcSize, maxFaceWidthMem); + for (m_tileSize=64; m_tileSize < maxTileSize; m_tileSize = m_tileSize << 1) { + m_nTileDim = (int) ceil((float)maxFaceWidth / m_tileSize); + if (m_nTileDim <=6) { + // make sure this fits into the texture memory + while(m_nTileDim*m_tileSize > maxFaceWidthMem) { + m_nTileDim--; + } break; } } - // TODO: remove this hack, but 6 4096 by 4096 textures are a bit large.. - if (m_tex_size > 2048) m_tex_size = 2048; - if (m_tex_size < pano->m_size.w) { - fprintf(stderr, "Warning: reducing cube size. Your graphics card only supports %d by %d pixels textures\n", m_tex_size, m_tex_size); + m_faceSize = m_nTileDim*m_tileSize; + + DEBUG_DEBUG("tiled face size: " << m_faceSize << " original size: " << pano->m_size.w); + DEBUG_NOTICE("Pano cube width: " << m_srcSize << ". RAM for a face width: " << maxFaceWidthMem); + DEBUG_NOTICE("Used cube width: " << m_faceSize << ". " << m_nTileDim*m_nTileDim*6 << " tiles with a width of " << m_tileSize << " pixels"); + + if (m_srcSize > m_faceSize) + { + m_realFaceWidth = m_faceSize; + fprintf(stderr, "Warning: reducing cube size from %d to %d, due to memory limitations.\n", m_srcSize, m_faceSize); + } else { + m_realFaceWidth = m_srcSize; } - m_srcSize = pano->m_size.w; + + DEBUG_DEBUG("Tiling cube faces: " << m_nTileDim << "x" << m_nTileDim << " tiles, with " << m_tileSize << "x" << m_tileSize << " pixels"); + DEBUG_DEBUG("tiled face size: " << m_faceSize << " original size: " << pano->m_size.w); + + /* create textures */ + m_textures.resize(m_nTileDim*m_nTileDim*6); + glGenTextures(m_nTileDim*m_nTileDim*6, &(m_textures[0])); + // select generate a suitable texture size. + m_enabledCubefaces = 0; update(pano, quality); } @@ -276,71 +302,103 @@ void update(CubicPano * pano, RenderQuality quality) { Image * scaled = 0; - if (m_tex_size != pano->m_size.w) { - // allocate memory for rescaled image - scaled = new Image(Size2D(m_tex_size, m_tex_size)); - if (m_tex_size > pano->m_size.w) { - memset(scaled->getData(),0, 3*m_tex_size*m_tex_size); - DEBUG_DEBUG("using partial face texture, " << m_srcSize << " to " << m_tex_size); - } else { - DEBUG_DEBUG("downsizing face image, " << m_srcSize << " to " << m_tex_size); - } + bool downscale = (m_faceSize < m_srcSize); + if (downscale) { + scaled = new Image(Size2D(m_faceSize, m_faceSize)); } + Image * tile = new Image(Size2D(m_tileSize, m_tileSize)); + + int texId=0; for (int i=0; i < 6; i++) { if (pano->m_images[i] == 0 || m_enabledCubefaces & (1 << i) ) { continue; } + + Image * img = pano->m_images[i]; + if (downscale) { + gluScaleImage(GL_RGB, pano->m_size.w, pano->m_size.h, + GL_UNSIGNED_BYTE, pano->m_images[i]->getData(), + m_faceSize, m_faceSize, GL_UNSIGNED_BYTE, scaled->getData()); + img = scaled; + + { + std::string fn; + FPV_S2S(fn, "/tmp/scaled_face_" << i << ".pnm"); + img->writePPM(fn); + } + + } + // enable cubeface m_enabledCubefaces |= (1<<i); - glBindTexture(GL_TEXTURE_2D, m_textures[i]); - if (m_tex_size != pano->m_images[i]->size().w) { - if (m_tex_size > pano->m_images[i]->size().w) { - copyImgToTexImg(scaled, Point2D(0,0), pano->m_images[i]); - //scaled->writePPM( "/tmp/test.ppm"); - } else { - gluScaleImage(GL_RGB, pano->m_size.w, pano->m_size.w, - GL_UNSIGNED_BYTE, pano->m_images[i]->getData(), - m_tex_size, m_tex_size, GL_UNSIGNED_BYTE, scaled->getData()); - } - if (quality == RQ_HIGH) { - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, - m_tex_size, m_tex_size, - GL_RGB, GL_UNSIGNED_BYTE, scaled->getData()); - } else { - glTexImage2D(GL_TEXTURE_2D, 0, 3, - m_tex_size, m_tex_size, 0, - GL_RGB, GL_UNSIGNED_BYTE, scaled->getData()); - } - } else { - if (quality == RQ_HIGH) { - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, - pano->m_images[i]->size().w, pano->m_images[i]->size().h, - GL_RGB, GL_UNSIGNED_BYTE, pano->m_images[i]->getData()); - } else { - glTexImage2D(GL_TEXTURE_2D, 0, 3, - pano->m_images[i]->size().w, pano->m_images[i]->size().h, 0, - GL_RGB, GL_UNSIGNED_BYTE, pano->m_images[i]->getData()); + for (int k=0; k < m_nTileDim; k++) // y + { + for (int j=0; j < m_nTileDim; j++) // x + { + DEBUG_TRACE("timing tile creation"); + int edgeTile=false; + unsigned char * tilePixels; + if ( (j < (m_nTileDim-1)) && (k < (m_nTileDim-1)) ) + { + if (quality == RQ_HIGH) { + // inner tile, copy texture image. + // gluBuild2DMipmaps doesn't respect GL_UNPACK_ROW_LENGTH on my machine. + copyImgToTexImg(tile, img, Point2D(0,0), Point2D(j*m_tileSize, k*m_tileSize), + Size2D(m_tileSize, m_tileSize)); + tilePixels = tile->getData(); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + } else { + tilePixels = img->getData() + j*m_tileSize*3 + k*m_tileSize*img->getRowStride(); + glPixelStorei(GL_UNPACK_ROW_LENGTH, img->size().w); + } + } else { + // right or bottom tile, copy as much as possible, with padding + copyImgToTexImg(tile, img, Point2D(0,0), Point2D(j*m_tileSize, k*m_tileSize), + Size2D(m_tileSize,m_tileSize), true); + tilePixels = tile->getData(); + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + } + /* +{ + std::string fn; + FPV_S2S(fn, "/tmp/face_" << i << "_y" << k << "_x" << j << ".pnm"); + tile->writePPM(fn); +} + */ + glBindTexture(GL_TEXTURE_2D, m_textures[texId]); + texId++; + if (quality == RQ_HIGH) { + gluBuild2DMipmaps(GL_TEXTURE_2D, 3, + m_tileSize, m_tileSize, + GL_RGB, GL_UNSIGNED_BYTE, tilePixels); + } else { + glTexImage2D(GL_TEXTURE_2D, 0, 3, + m_tileSize, m_tileSize, 0, + GL_RGB, GL_UNSIGNED_BYTE, tilePixels); + } + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + /* use linear filtering */ + switch (quality) + { + case RQ_LOW: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + break; + case RQ_MEDIUM: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + break; + case RQ_HIGH: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + break; + } } } - /* use linear filtering */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - switch (quality) - { - case RQ_LOW: - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - break; - case RQ_MEDIUM: - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - break; - case RQ_HIGH: - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - } } + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); if (scaled) { delete scaled; } @@ -359,6 +417,7 @@ /** Draw the cube */ void render() { + /* static const Point3D coords[6][4] = { -CUBE_SIZE/2, CUBE_SIZE/2, -CUBE_SIZE/2, // FRONT back @@ -393,6 +452,18 @@ CUBE_SIZE/2, -CUBE_SIZE/2, -CUBE_SIZE/2 }; + // indicators, which axis needs to be scaled for + // the tiling + static const int scaleAxis[6][3] = + { + 0, 1, -1, + -1, 1, 0, + 0, 1, -1, + -1, 1, 0, + 0, -1, 1, + 0, -1, 1 + }; + static const TextureUV uvs[6][4] = { 0,0, 0,1, 1,1, 1,0, // FRONT back @@ -402,43 +473,118 @@ 0,1, 0,0, 1,0, 1,1, // top 0,0, 0,1, 1,1, 1,0 // bottom }; - + */ // setup texture properties glDisable(GL_BLEND); + // permutation index for x,y,z for the different cube sides: + static const int perm[6][6] = + { + // idx signs of the new axis + 0, 1, 2, 1, 1, 1, // front + 2, 1, 0, -1, 1, 1, // right + 0, 1, 2, -1, 1, -1, // back + 2, 1, 0, 1, 1, -1, // left + 0, 2, 1, 1, -1, 1, // top + 0, 2, 1, 1, 1, -1 // bottom + }; + + int texId=0; for (int i=0; i < 6; i++) { if (m_enabledCubefaces & (1 << i)) { - glBindTexture(GL_TEXTURE_2D, m_textures[i]); /* select right texture */ - glBegin(GL_QUADS); - for (int j=0; j < 4; j++) { - GLfloat u,v; - u = uvs[i][j].u; - v = uvs[i][j].v; - if (m_srcSize < m_tex_size) { - u *= (m_srcSize-1.0f)/(float)m_tex_size; - v *= (m_srcSize-1.0f)/(float)m_tex_size; + // loop over y + for (int k=0; k < m_nTileDim; k++) + { + // loop over x + for (int j=0; j < m_nTileDim; j++) + { + glBindTexture(GL_TEXTURE_2D, m_textures[texId]); /* select right texture */ + texId++; + glBegin(GL_QUADS); + + GLfloat z = -CUBE_SIZE/2.f; + + // position on cube: + GLfloat left = j*m_tileSize / (float) m_realFaceWidth; + left = (left - 0.5f) * CUBE_SIZE; + GLfloat right = (j == m_nTileDim-1) ? 1.0 : (j+1)*m_tileSize / (float) m_realFaceWidth; + right = (right - 0.5f) * CUBE_SIZE; + GLfloat top = (m_realFaceWidth - k*m_tileSize) / (float) m_realFaceWidth; + top = (top - 0.5f) * CUBE_SIZE; + GLfloat bottom = (k == m_nTileDim-1) ? 0.f : (m_realFaceWidth - (k+1)*m_tileSize) / (float) m_realFaceWidth; + bottom = (bottom - 0.5f) * CUBE_SIZE; + + // texture coordinates + GLfloat u_max = (j == m_nTileDim-1) ? ((m_realFaceWidth-(m_nTileDim-1)*m_tileSize))/(float)m_tileSize : 1.f; + GLfloat v_max = (k == m_nTileDim-1) ? ((m_realFaceWidth-(m_nTileDim-1)*m_tileSize))/(float)m_tileSize : 1.f; + + GLfloat vec[3]; + GLfloat rot[3]; + // lower left + glTexCoord2f(0, v_max); + vec[0] = left; + vec[1] = bottom; + vec[2] = z; + rot[0] = perm[i][3] * vec[perm[i][0]]; + rot[1] = perm[i][3+1] * vec[perm[i][1]]; + rot[2] = perm[i][3+2] * vec[perm[i][2]]; + + glVertex3f(perm[i][3] * vec[perm[i][0]], + perm[i][3+1] * vec[perm[i][1]], + perm[i][3+2] * vec[perm[i][2]]); + + // lower right + glTexCoord2f(u_max, v_max); + vec[0] = right; + glVertex3f(perm[i][3] * vec[perm[i][0]], + perm[i][3+1] * vec[perm[i][1]], + perm[i][3+2] * vec[perm[i][2]]); + + // upper right + glTexCoord2f(u_max, 0); + vec[1] = top; + glVertex3f(perm[i][3] * vec[perm[i][0]], + perm[i][3+1] * vec[perm[i][1]], + perm[i][3+2] * vec[perm[i][2]]); + + // upper left + glTexCoord2f(0, 0); + vec[0] = left; + vec[1] = top; + vec[2] = z; + glVertex3f(perm[i][3] * vec[perm[i][0]], + perm[i][3+1] * vec[perm[i][1]], + perm[i][3+2] * vec[perm[i][2]]); + glEnd(); } - glTexCoord2f(u, v); - glVertex3fv((GLfloat *)&coords[i][j]); } - glEnd(); } } } protected: bool m_init; - GLuint m_textures[6]; + std::vector<GLuint> m_textures; int m_enabledCubefaces; - int m_tex_size; + // number of tiles in x and y direction + int m_nTileDim; + // size of a single tile + int m_tileSize; + // size of QTVR/panorama cube face int m_srcSize; + // width of acutally used image data in the texture. Is smaller + // than m_faceSize, if m_faceSize is > m_srcSize + int m_realFaceWidth; + // size of a cube face for rendering, after possible downscaling + int m_faceSize; }; -OpenGLRenderer::OpenGLRenderer(Platform * platform, RenderQuality q) +OpenGLRenderer::OpenGLRenderer(Platform * platform, size_t texMem, RenderQuality q) : m_platform(platform), - m_quality(q) + m_quality(q), + m_maxTexMem(texMem) { }; @@ -455,6 +601,10 @@ /* we use resizeGLScene once to set up our initial perspective */ // resizeGLScene(GLWin.width, GLWin.height); + // we cannot guarantee that all the image rows are aligned to 4 bytes + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glPixelStorei(GL_PACK_ALIGNMENT, 1); + switch (m_quality) { case RQ_LOW: glDisable(GL_DITHER); @@ -477,14 +627,14 @@ if (pano.m_renderData) { static_cast<OGL_CubicRenderData*>(pano.m_renderData)->update((CubicPano*) &pano, m_quality); } else { - pano.m_renderData = new OGL_CubicRenderData((CubicPano*) &pano, m_quality); + pano.m_renderData = new OGL_CubicRenderData((CubicPano*) &pano, m_maxTexMem, m_quality); } break; case SceneElement::PANO_CYLINDRICAL: if (pano.m_renderData) { static_cast<OGL_CylindricalRenderData*>(pano.m_renderData)->update((CylindricalPano*) &pano, m_quality); } else { - pano.m_renderData = new OGL_CylindricalRenderData((CylindricalPano*) &pano, m_quality); + pano.m_renderData = new OGL_CylindricalRenderData((CylindricalPano*) &pano, m_maxTexMem, m_quality ); } break; case SceneElement::TEXT: Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.h =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.h 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.h 2006-10-12 18:45:46 UTC (rev 79) @@ -76,10 +76,14 @@ #include <GL/glu.h> +typedef GLfloat Point3D[3]; + +/* struct Point3D { GLfloat x,y,z; }; +*/ struct TextureUV { @@ -95,7 +99,7 @@ { public: - OpenGLRenderer(Platform * platform, RenderQuality q = RQ_HIGH); + OpenGLRenderer(Platform * platform, size_t m_maxTexMem, RenderQuality q = RQ_HIGH); /** Prepare render for rendering * @@ -114,6 +118,7 @@ Size2D m_size; Platform * m_platform; + size_t m_maxTexMem; }; } // namespace Modified: freepv/trunk/src/libfreepv/PanoViewer.cpp =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-10-12 18:45:46 UTC (rev 79) @@ -134,7 +134,7 @@ // create viewer structure // TODO: select suitable renderer here - m_renderer = new OpenGLRenderer(&platform, para.getRenderQuality()); + m_renderer = new OpenGLRenderer(&platform, para.getMaxTexMem(), para.getRenderQuality()); return true; } Modified: freepv/trunk/src/libfreepv/PanoViewer.h =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.h 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/PanoViewer.h 2006-10-12 18:45:46 UTC (rev 79) @@ -118,6 +118,11 @@ virtual void onDownloadComplete(const std::string & filename); + /** return parameter object */ + Parameters & getParam() + { + return m_param; + } protected: Modified: freepv/trunk/src/libfreepv/Parameters.cpp =================================================================== --- freepv/trunk/src/libfreepv/Parameters.cpp 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/Parameters.cpp 2006-10-12 18:45:46 UTC (rev 79) @@ -102,6 +102,8 @@ else if (value == "HIGH") m_renderQuality = RQ_HIGH; } + if (name == "VRAM") m_maxTexMem = atoi(value.c_str()) * 1024 * 1024; + if (name == "PANO_HFOV") m_panoHFOV = atof(value.c_str()); if (name == "PANO_TYPE") { value = string2UPPER(value); @@ -123,5 +125,6 @@ m_renderQuality = RQ_HIGH; m_panoType = PANO_UNKNOWN; m_panoHFOV = 360; + m_maxTexMem = 256 * 1024 * 1024; } Modified: freepv/trunk/src/libfreepv/Parameters.h =================================================================== --- freepv/trunk/src/libfreepv/Parameters.h 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/Parameters.h 2006-10-12 18:45:46 UTC (rev 79) @@ -82,6 +82,7 @@ PanoType m_panoType; // type of the main panorama double m_panoHFOV; // HFOV of the image, useful for partial // cylindrical and spherical images + size_t m_maxTexMem; // maximum texture memory public: @@ -104,6 +105,8 @@ double getPanoHFOV() const { return m_panoHFOV; } + size_t getMaxTexMem() const { return m_maxTexMem; } + private: // sets an initial value to the parameters void initializeParameters(void); Modified: freepv/trunk/src/libfreepv/utils.h =================================================================== --- freepv/trunk/src/libfreepv/utils.h 2006-10-10 05:27:04 UTC (rev 78) +++ freepv/trunk/src/libfreepv/utils.h 2006-10-12 18:45:46 UTC (rev 79) @@ -74,6 +74,11 @@ return (other.w == w && other.h == h); } + Size2D operator-(const Size2D & other) const + { + return Size2D(w-other.w, h-other.h); + } + int w,h; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-12 18:57:36
|
Revision: 80 http://svn.sourceforge.net/freepv/?rev=80&view=rev Author: dangelo Date: 2006-10-12 11:57:28 -0700 (Thu, 12 Oct 2006) Log Message: ----------- removed debug tile writer Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/libfreepv/OpenGLRenderer.cpp Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-12 18:45:46 UTC (rev 79) +++ freepv/trunk/freepv.kdevelop 2006-10-12 18:57:28 UTC (rev 80) @@ -192,7 +192,7 @@ </cppsupportpart> <kdevdebugger> <general> - <programargs>src=../../../testcases/bad/gasalley-2.mov texture_memory=12</programargs> + <programargs>src=../../../testcases/bad/gasalley-2.mov</programargs> <gdbpath></gdbpath> <dbgshell></dbgshell> <configGdbScript></configGdbScript> Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-12 18:45:46 UTC (rev 79) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-12 18:57:28 UTC (rev 80) @@ -321,11 +321,13 @@ m_faceSize, m_faceSize, GL_UNSIGNED_BYTE, scaled->getData()); img = scaled; + /* { std::string fn; FPV_S2S(fn, "/tmp/scaled_face_" << i << ".pnm"); img->writePPM(fn); } + */ } @@ -336,7 +338,7 @@ { for (int j=0; j < m_nTileDim; j++) // x { - DEBUG_TRACE("timing tile creation"); + //DEBUG_TRACE("timing tile creation"); int edgeTile=false; unsigned char * tilePixels; if ( (j < (m_nTileDim-1)) && (k < (m_nTileDim-1)) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-13 06:12:08
|
Revision: 81 http://svn.sourceforge.net/freepv/?rev=81&view=rev Author: dangelo Date: 2006-10-12 23:12:00 -0700 (Thu, 12 Oct 2006) Log Message: ----------- do not build mozilla plugin and glx based viewer, if glx hasn't been found. This should hopefully enable building freepv-glut on OSX using the autoconf build system Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/src/Makefile.am Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-10-12 18:57:28 UTC (rev 80) +++ freepv/trunk/configure.in 2006-10-13 06:12:00 UTC (rev 81) @@ -56,10 +56,15 @@ but configure could not find it. ]) fi + +AM_CONDITIONAL(HAS_GLX, test "x$have_GLX" = 'xyes') +AM_CONDITIONAL(BUILD_MOZ_PLUGIN, test "x$have_GLX" = 'xyes') + if test "x$have_GLX" != xyes; then - AC_MSG_ERROR([ - the glx library must be installed on your system - but configure could not find it. + AC_MSG_NOTICE([ + the mozilla plugin requires the glx library, + but configure could not find it. + THE MOZILLA PLUGIN WILL NOT BE BUILD ]) fi @@ -74,6 +79,8 @@ # #tell us where gecko-sdk is, try to find if not provided +if test "x$have_GLX" == xyes; then + AC_ARG_WITH([gecko-sdk],[ --with-gecko-sdk=<path> prefix of gecko-sdk installation], [GECKO_SDK_PREFIX=$with_gecko_sdk AC_SUBST(GECKO_SDK_PREFIX) @@ -116,5 +123,6 @@ ] ) +fi AC_OUTPUT(Makefile m4/Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile src/freepv-mozilla/Makefile src/freepv-glut/Makefile) Modified: freepv/trunk/src/Makefile.am =================================================================== --- freepv/trunk/src/Makefile.am 2006-10-12 18:57:28 UTC (rev 80) +++ freepv/trunk/src/Makefile.am 2006-10-13 06:12:00 UTC (rev 81) @@ -3,5 +3,11 @@ # set the include path found by configure INCLUDES = $(all_includes) +if HAS_GLX + MAYBE_MOZILLA = freepv-mozilla + MAYBE_GLX = freepv-glx +endif + + # the library search path. -SUBDIRS = libfreepv freepv-glx freepv-glut freepv-mozilla +SUBDIRS = libfreepv freepv-glut $(MAYBE_GLX) $(MAYBE_MOZILLA) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-14 13:42:23
|
Revision: 82 http://svn.sourceforge.net/freepv/?rev=82&view=rev Author: dangelo Date: 2006-10-14 06:42:15 -0700 (Sat, 14 Oct 2006) Log Message: ----------- tile cylindrical pano, enables viewing of high res panos. Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/freepv-glut/freepv-glut.cpp freepv/trunk/src/libfreepv/OpenGLRenderer.cpp Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-13 06:12:00 UTC (rev 81) +++ freepv/trunk/freepv.kdevelop 2006-10-14 13:42:15 UTC (rev 82) @@ -50,14 +50,14 @@ <f77compiler>kdevg77options</f77compiler> <cxxflags>-O0 -g</cxxflags> <envvars/> - <topsourcedir/> - <cppflags/> - <ldflags/> - <ccompilerbinary/> - <cxxcompilerbinary/> - <f77compilerbinary/> - <cflags/> - <f77flags/> + <topsourcedir></topsourcedir> + <cppflags></cppflags> + <ldflags></ldflags> + <ccompilerbinary></ccompilerbinary> + <cxxcompilerbinary></cxxcompilerbinary> + <f77compilerbinary></f77compilerbinary> + <cflags></cflags> + <f77flags></f77flags> </debug> </configurations> <make> @@ -130,8 +130,6 @@ <groups> <group pattern="*.h" name="Header files" /> <group pattern="*.cpp" name="Source files" /> - <hidenonprojectfiles>false</hidenonprojectfiles> - <hidenonlocation>false</hidenonlocation> </groups> <tree> <hidepatterns>*.o,*.lo,CVS</hidepatterns> @@ -192,7 +190,7 @@ </cppsupportpart> <kdevdebugger> <general> - <programargs>src=../../../testcases/bad/gasalley-2.mov</programargs> + <programargs>src=../../../testcases/bad/KrzysztofWojciechowski.mov</programargs> <gdbpath></gdbpath> <dbgshell></dbgshell> <configGdbScript></configGdbScript> Modified: freepv/trunk/src/freepv-glut/freepv-glut.cpp =================================================================== --- freepv/trunk/src/freepv-glut/freepv-glut.cpp 2006-10-13 06:12:00 UTC (rev 81) +++ freepv/trunk/src/freepv-glut/freepv-glut.cpp 2006-10-14 13:42:15 UTC (rev 82) @@ -47,6 +47,32 @@ static bool g_started = false; +#if 0 + +var reg :TRegistry; + hs :string; + Buffer: array[0..MAX_PATH] of Char; + +begin + result:=0; + try + reg:=TRegistry.Create(KEY_READ); + reg.RootKey:=HKEY_LOCAL_MACHINE; + reg.OpenKeyReadOnly('HARDWARE\DEVICEMAP\VIDEO'); + hs :=reg.ReadString('\Device\Video0'); + hs:=Copy(hs,length('\Registry\Hardware'),10000); + reg.OpenKeyReadOnly(hs); + reg.ReadBinaryData('HardwareInformation.MemorySize',Buffer, 4); + result:=PDWORD(@Buffer)^; +// DisplayMemoryLabel.Caption := Format('%.1f MB', [PDWORD(@Buffer)^ / OneMegabyte]); + except + end; + reg.Free; +end; + +#endif + + void keyCallback(unsigned char key,int x, int y) { platformptr->glutKeyboardCallback(key,x,y); } Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-13 06:12:00 UTC (rev 81) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-14 13:42:15 UTC (rev 82) @@ -40,7 +40,145 @@ #define GL_CLAMP_TO_EDGE 0x812F #endif +/////////////////////////////////////////////// +// +// utility functions +// +void queryTileSize(size_t maxTextureMem, Size2D imgsize, int nImg, + int & tileSize, Size2D & tileDim) +{ + if (maxTextureMem == 0) { + maxTextureMem = 256 * 1024 * 1024; + } + + int maxFaceMem = maxTextureMem / nImg; + + int maxTileSize; + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTileSize); + + // texture identifier. + int maxWidthMem = (int) sqrt((double)maxFaceMem/3.0*imgsize.w/imgsize.h); + int maxWidth = std::min(imgsize.w, maxWidthMem); + int maxHeight = maxWidth * imgsize.h / imgsize.w; + + int xTiles, yTiles; + for (tileSize=64; tileSize < maxTileSize; tileSize = tileSize << 1) { + // calculate number of tiles + xTiles = (int)ceil(maxWidth / (float)tileSize); + yTiles = (int)ceil(maxHeight / (float)tileSize); + if (std::max(xTiles, yTiles) <=6) { + break; + } + } + // make sure this fits into the texture memory + while(xTiles > 0 && xTiles*yTiles*tileSize*tileSize > maxFaceMem) { + xTiles--; + // calculate new number of y tiles. + maxWidth = xTiles * tileSize; + maxHeight = maxWidth * imgsize.h / imgsize.w; + yTiles = (int)ceil(maxHeight / (float)tileSize); + } + tileDim.w = xTiles; + tileDim.h = yTiles; +} + +class TiledTexture +{ + +public: + TiledTexture() + : init(false) + { + + } + + ~TiledTexture() + { + if (init) { + glDeleteTextures(xTiles*yTiles, &(texIds[0])); + } + } + + + void create(Image * img, Size2D tiles, int texWidth, RenderQuality quality) + { + tileWidth = texWidth; + // calculate x tile size + xTiles = (int)ceil(img->size().w / (float)tileWidth); + yTiles = (int)ceil(img->size().h / (float)tileWidth); + + texIds.resize(xTiles*yTiles); + glGenTextures(xTiles*yTiles, &(texIds[0])); /* create textures */ + + effTexSize.w = img->size().w / xTiles; + effTexSize.h = img->size().h / yTiles; + + int texId = 0; + Image tile(Size2D(tileWidth, tileWidth)); + for (int y=0; y < yTiles; y++) // y + { + for (int x=0; x < xTiles; x++) // x + { + copyImgToTexImg(&tile, img, Point2D(0,0), Point2D(x*effTexSize.w, y*effTexSize.h), + Size2D(effTexSize.w, effTexSize.h), true); + { + std::string fn; + FPV_S2S(fn, "/tmp/tile_" << "_y" << y << "_x" << x << ".pnm"); + tile.writePPM(fn); + } + + glBindTexture(GL_TEXTURE_2D, texIds[texId]); + texId++; + if (quality == RQ_HIGH) { + gluBuild2DMipmaps(GL_TEXTURE_2D, 3, + tileWidth, tileWidth, + GL_RGB, GL_UNSIGNED_BYTE, tile.getData()); + } else { + glTexImage2D(GL_TEXTURE_2D, 0, 3, + tileWidth, tileWidth, 0, + GL_RGB, GL_UNSIGNED_BYTE, tile.getData()); + } + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + switch (quality) + { + case RQ_LOW: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + break; + case RQ_MEDIUM: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + break; + case RQ_HIGH: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + break; + } + } + } + init = true; + } + + GLuint getTile(int x, int y) + { + assert(x < xTiles); + assert(y < yTiles); + return texIds[x+y*xTiles]; + } + + bool init; + std::vector<GLuint> texIds; + Size2D size; + // size of a single tile + int tileWidth; + int xTiles; + int yTiles; + Size2D effTexSize; +}; + + class OGL_RenderData : public RenderData { public: @@ -78,7 +216,120 @@ }; +// cylindrical renderer with a tiled texture +/** render data for cylindrical panoramas */ +class OGL_CylindricalRenderData : public OGL_RenderData +{ +public: + /// Create textures + OGL_CylindricalRenderData(CylindricalPano * pano, size_t maxTexMem, RenderQuality quality) + { + // load opengl textures + if (pano->m_image != 0) { + m_srcSize = pano->m_image->size(); + update(pano, maxTexMem, quality); + } + } + void update(CylindricalPano * pano, size_t maxTexMem, RenderQuality quality) + { + int tileWidth; + Size2D tileDim; + // select a suitable texture size. + queryTileSize(maxTexMem, pano->m_image->size(), 1, + tileWidth, tileDim); + if (tileWidth * tileDim.w < pano->m_image->size().w || + tileWidth * tileDim.h < pano->m_image->size().h ) + { + // create downscaled image for texturing + Image scaled(Size2D(tileWidth * tileDim.w, tileWidth * tileDim.h)); + gluScaleImage(GL_RGB, pano->m_image->size().w, pano->m_image->size().h, + GL_UNSIGNED_BYTE, pano->m_image->getData(), + scaled.size().w, scaled.size().h, GL_UNSIGNED_BYTE, scaled.getData()); + m_texture.create(&scaled, tileDim, tileWidth, quality); + } else { + // non scaled texture + m_texture.create(pano->m_image, tileDim, tileWidth, quality); + } + m_init = true; + } + + /// Delete textures + ~OGL_CylindricalRenderData() + { + } + + /** Draw the cylinder */ + void render() + { + // setup texture properties + glDisable(GL_BLEND); + + // radius of cylinder + float r = 10; + // circumfence of cylinder + float c = (float)(2*M_PI*r); + // half height of cylinder + float h = m_srcSize.h*c/m_srcSize.w/2; + + //float m_segments = 128; + + int nSegmentsPerTile = 100 / m_texture.xTiles; + int nSegments = nSegmentsPerTile* m_texture.xTiles; + + // Angular interval for each patch + double phiinterval = 2.0 * M_PI/m_texture.xTiles; + + // Angular increment for eatch patch step + double phistep = phiinterval / nSegmentsPerTile; + + // y1 coordinate for each patch + GLfloat v1 = m_texture.effTexSize.h/ (GLfloat) m_texture.tileWidth; + for (int x=0; x < m_texture.xTiles; x++) + { + for (int y=0; y < m_texture.yTiles; y++) + { + glBindTexture(GL_TEXTURE_2D, m_texture.getTile(x,y)); /* select right texture */ + glBegin(GL_QUADS); + //double phi = (x+1) * phiinterval - M_PI_2; + for(int i=0; i < nSegmentsPerTile; i++) + { + GLfloat u0 = (m_texture.effTexSize.w - (i / (double) nSegmentsPerTile * m_texture.effTexSize.w)) / m_texture.tileWidth; + GLfloat u1 = (m_texture.effTexSize.w - ((i+1) / (double) nSegmentsPerTile * m_texture.effTexSize.w)) / m_texture.tileWidth; + GLfloat v0=0; + + int ii = nSegmentsPerTile - i -1; + float x1 = (float)(-r*sin(2.0*M_PI*(x*nSegmentsPerTile+ii)/nSegments)); + float x0 = (float)(-r*sin(2.0*M_PI*(x*nSegmentsPerTile+ii+1)/nSegments)); + float z1 = (float)(r*cos(2.0*M_PI*(x*nSegmentsPerTile+ii)/nSegments)); + float z0 = (float)(r*cos(2.0*M_PI*(x*nSegmentsPerTile+ii+1)/nSegments)); + + glTexCoord2f(u0, v0); + glVertex3f(x0, h, z0); + glTexCoord2f(u0, v1); + glVertex3f(x0, -h, z0); + glTexCoord2f(u1, v1); + glVertex3f(x1, -h, z1); + glTexCoord2f(u1, v0); + glVertex3f(x1, h, z1); + } + glEnd(); + } + } + } + +protected: + bool m_init; + TiledTexture m_texture; + //GLuint m_textures[6]; + int m_enabledCubefaces; + int m_tex_size; + Size2D m_srcSize; +}; + + +// old renderer, with a single texture +#if 0 // cylindrical renderer still under construction /** render data for cylindrical panoramas */ @@ -238,8 +489,8 @@ int m_tex_size; Size2D m_srcSize; }; +#endif - /** render data for cubic panoramas */ class OGL_CubicRenderData : public OGL_RenderData { @@ -634,7 +885,7 @@ break; case SceneElement::PANO_CYLINDRICAL: if (pano.m_renderData) { - static_cast<OGL_CylindricalRenderData*>(pano.m_renderData)->update((CylindricalPano*) &pano, m_quality); + static_cast<OGL_CylindricalRenderData*>(pano.m_renderData)->update((CylindricalPano*) &pano, m_maxTexMem, m_quality); } else { pano.m_renderData = new OGL_CylindricalRenderData((CylindricalPano*) &pano, m_maxTexMem, m_quality ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-14 19:34:39
|
Revision: 84 http://svn.sourceforge.net/freepv/?rev=84&view=rev Author: dangelo Date: 2006-10-14 12:34:29 -0700 (Sat, 14 Oct 2006) Log Message: ----------- added support for equirectangular panoramas Modified Paths: -------------- freepv/trunk/freepv.kdevelop freepv/trunk/src/freepv-glut/glut_platform.cpp freepv/trunk/src/libfreepv/OpenGLRenderer.cpp freepv/trunk/src/libfreepv/PanoViewer.cpp freepv/trunk/src/libfreepv/Scene.h Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-14 14:10:12 UTC (rev 83) +++ freepv/trunk/freepv.kdevelop 2006-10-14 19:34:29 UTC (rev 84) @@ -30,7 +30,7 @@ <freepv-gtk/> </runarguments> <customdirectory>/</customdirectory> - <programargs>src=../../../testcases/good/OutsideSionHillCampus.mov</programargs> + <programargs>src=../../../testcases/good/ship.jpg</programargs> <autocompile>true</autocompile> <envvars/> </run> @@ -190,7 +190,7 @@ </cppsupportpart> <kdevdebugger> <general> - <programargs>src=../../../testcases/bad/KrzysztofWojciechowski.mov</programargs> + <programargs>src=../../../testcases/good/ship.jpg</programargs> <gdbpath></gdbpath> <dbgshell></dbgshell> <configGdbScript></configGdbScript> Modified: freepv/trunk/src/freepv-glut/glut_platform.cpp =================================================================== --- freepv/trunk/src/freepv-glut/glut_platform.cpp 2006-10-14 14:10:12 UTC (rev 83) +++ freepv/trunk/src/freepv-glut/glut_platform.cpp 2006-10-14 19:34:29 UTC (rev 84) @@ -316,7 +316,7 @@ void GLUTPlatform::startTimer(int delay) { - DEBUG_DEBUG("Timer start"); + //DEBUG_DEBUG("Timer start"); glutIdleFunc (idleCallback); }; Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-14 14:10:12 UTC (rev 83) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-14 19:34:29 UTC (rev 84) @@ -190,7 +190,7 @@ }; -/** render data for cubic panoramas */ +/** render data for a text string */ class OGL_TextRenderData : public OGL_RenderData { public: @@ -218,6 +218,127 @@ }; + +// spherical renderer with a tiled texture +/** render data for cylindrical panoramas, some parts of the algorithm taken from panoglview */ +class OGL_SphericalRenderData : public OGL_RenderData +{ +public: + /// Create textures + OGL_SphericalRenderData(SphericalPano * pano, size_t maxTexMem, RenderQuality quality) + { + // load opengl textures + if (pano->m_image != 0) { + m_srcSize = pano->m_image->size(); + update(pano, maxTexMem, quality); + } + } + + void update(SphericalPano * pano, size_t maxTexMem, RenderQuality quality) + { + int tileWidth; + Size2D tileDim; + // select a suitable texture size. + queryTileSize(maxTexMem, pano->m_image->size(), 1, + tileWidth, tileDim); + if (tileWidth * tileDim.w < pano->m_image->size().w || + tileWidth * tileDim.h < pano->m_image->size().h ) + { + // create downscaled image for texturing + Image scaled(Size2D(tileWidth * tileDim.w, tileWidth * tileDim.h)); + gluScaleImage(GL_RGB, pano->m_image->size().w, pano->m_image->size().h, + GL_UNSIGNED_BYTE, pano->m_image->getData(), + scaled.size().w, scaled.size().h, GL_UNSIGNED_BYTE, scaled.getData()); + m_texture.create(&scaled, tileDim, tileWidth, quality); + } else { + // non scaled texture + m_texture.create(pano->m_image, tileDim, tileWidth, quality); + } + m_init = true; + } + + /// Delete textures + ~OGL_SphericalRenderData() + { + } + + /** Draw the sphere */ + void render() + { + // setup texture properties + glDisable(GL_BLEND); + + // radius of sphere + float r = 10; + // circumfence of cylinder + float c = (float)(2*M_PI*r); + + int nSegmentsPerTileX = ceil(120.0f / m_texture.xTiles); + int nSegmentsPerTileY = ceil(60.0f / m_texture.yTiles); + int nSegmentsX = nSegmentsPerTileX* m_texture.xTiles; + int nSegmentsY = nSegmentsPerTileY* m_texture.yTiles; + + // Angular interval for each patch + double phiinterval = 2.0 * M_PI/m_texture.xTiles; + double thetainterval = M_PI/m_texture.yTiles; + + // Angular increment for eatch patch step + double phistep = phiinterval / nSegmentsPerTileX; + double thetastep = thetainterval/ nSegmentsPerTileY; + + for (int y=0; y < m_texture.yTiles; y++) + { + for (int x=0; x < m_texture.xTiles; x++) + { + glBindTexture(GL_TEXTURE_2D, m_texture.getTile(x,y)); /* select right texture */ + + // loop over theta (y) + for(int k=0; k < nSegmentsPerTileY; k++) + { + double theta = y * thetainterval - M_PI/2.0 + k*thetastep; + double nexttheta = theta + thetastep; + + glBegin(GL_QUAD_STRIP); + + // loop over phi (x) + for(int l=0; l<=nSegmentsPerTileX;l=l++){ + double phi = (x+1) * phiinterval + M_PI/2.0 - l*phistep; + + GLfloat u0 = (m_texture.effTexSize.w - ((l) / (double) nSegmentsPerTileX * m_texture.effTexSize.w)) / m_texture.tileWidth; + + + GLfloat v0 = (m_texture.effTexSize.h - ((nSegmentsPerTileY-k-1) / (double) nSegmentsPerTileY * m_texture.effTexSize.h)) / m_texture.tileWidth; + GLfloat v1 = (m_texture.effTexSize.h - ((nSegmentsPerTileY-k) / (double) nSegmentsPerTileY * m_texture.effTexSize.h)) / m_texture.tileWidth; + + glTexCoord2f(u0, v0); +// glTexCoord2f(m_maxtexturex - (l / (double) m_stepsPerTexture.x * m_maxtexturex), +// (k+1) / (double) m_stepsPerTexture.y * m_maxtexturey); + + glVertex3d (r*cos(nexttheta) * cos(phi),r*-sin(nexttheta),r*cos(nexttheta) * sin(phi)); + + glTexCoord2f(u0, v1); + //glTexCoord2f(m_maxtexturex - (l / (double) m_stepsPerTexture.x * m_maxtexturex), + // k / (double) m_stepsPerTexture.y * m_maxtexturey); + + glVertex3d (r*cos(theta) * cos(phi),r*-sin(theta),r*cos(theta) * sin(phi)); + + } + glEnd(); + } + } + } + } + +protected: + bool m_init; + TiledTexture m_texture; + //GLuint m_textures[6]; + int m_enabledCubefaces; + int m_tex_size; + Size2D m_srcSize; +}; + + // cylindrical renderer with a tiled texture /** render data for cylindrical panoramas */ class OGL_CylindricalRenderData : public OGL_RenderData @@ -895,12 +1016,18 @@ pano.m_renderData = new OGL_CylindricalRenderData((CylindricalPano*) &pano, m_maxTexMem, m_quality ); } break; + case SceneElement::PANO_SPHERICAL: + if (pano.m_renderData) { + static_cast<OGL_SphericalRenderData*>(pano.m_renderData)->update((SphericalPano*) &pano, m_maxTexMem, m_quality); + } else { + pano.m_renderData = new OGL_SphericalRenderData((SphericalPano*) &pano, m_maxTexMem, m_quality ); + } + break; case SceneElement::TEXT: if (!pano.m_renderData) { pano.m_renderData = new OGL_TextRenderData((TextElement*) &pano); } break; - case SceneElement::PANO_SPHERICAL: default: fprintf(stderr, "OpenGLRender: panoelement %d is not yet implemented\n", pano.getType()); Modified: freepv/trunk/src/libfreepv/PanoViewer.cpp =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-10-14 14:10:12 UTC (rev 83) +++ freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-10-14 19:34:29 UTC (rev 84) @@ -248,13 +248,16 @@ changeState(STATE_ERROR); return; } + free(data); + if (img->size().h * 2 == img->size().w) { - FPV_S2S(m_statusMessage, "equirectangular panorams currently not supported"); - m_scene->setStatusText( m_statusMessage ); + SphericalPano * pano = new SphericalPano(img->size(), (float) m_param.getPanoHFOV()); + pano->setImage(img); + m_scene->setSceneElement(pano); + m_statusMessage = "viewing"; + m_scene->setStatusText(m_statusMessage); + changeState(STATE_VIEWING); redraw(); - changeState(STATE_ERROR); - delete img; - free(data); } else { // cylindrical panorama. CylindricalPano * pano = new CylindricalPano(img->size(), (float) m_param.getPanoHFOV()); @@ -263,6 +266,7 @@ m_statusMessage = "viewing"; m_scene->setStatusText(m_statusMessage); changeState(STATE_VIEWING); + redraw(); } break; } @@ -381,6 +385,7 @@ m_statusMessage="viewing"; m_scene->setStatusText("QTVR successfully loaded"); changeState(STATE_VIEWING); + redraw(); } } else if (decoder.getType() == Parameters::PANO_CUBIC) { Modified: freepv/trunk/src/libfreepv/Scene.h =================================================================== --- freepv/trunk/src/libfreepv/Scene.h 2006-10-14 14:10:12 UTC (rev 83) +++ freepv/trunk/src/libfreepv/Scene.h 2006-10-14 19:34:29 UTC (rev 84) @@ -206,8 +206,6 @@ class CylindricalPano : public SceneElement { public: - - enum FaceID { FACE_FRONT=0, FACE_RIGHT, FACE_BACK, FACE_LEFT, FACE_TOP, FACE_BOTTOM }; /** construct a cylindrical panorama. */ CylindricalPano(Size2D sz, float HFOV) @@ -237,13 +235,53 @@ m_image = img; } - // cube face order: 'front', 'right', 'back', 'left', 'top', 'bottom' Image * m_image; - // size of one face + // hfov of pano double m_hfov; }; + +/** A spherical panorama + */ +class SphericalPano : public SceneElement +{ +public: + /** construct a cylindrical panorama. + */ + SphericalPano(Size2D sz, float HFOV) + { + m_type = PANO_SPHERICAL; + m_image = 0; + m_hfov = HFOV; + } + + ~SphericalPano() + { + if (m_image) { + delete m_image; + } + } + + /** set panorama image + * + * Ownership of Image pointed to by \p img is transferred to the CylindricalPano + * object. + */ + void setImage(Image * img) + { + if (m_image) { + delete m_image; + } + m_image = img; + } + + Image * m_image; + + // hfov of pano + double m_hfov; +}; + /** A text message * */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-15 16:29:38
|
Revision: 87 http://svn.sourceforge.net/freepv/?rev=87&view=rev Author: dangelo Date: 2006-10-15 09:29:26 -0700 (Sun, 15 Oct 2006) Log Message: ----------- try to detect platform in configure script Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/freepv.kdevelop freepv/trunk/src/freepv-mozilla/Makefile.am Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-10-14 20:24:25 UTC (rev 86) +++ freepv/trunk/configure.in 2006-10-15 16:29:26 UTC (rev 87) @@ -1,6 +1,6 @@ AC_INIT(configure.in) -AM_CONFIG_HEADER(config.h) +AM_CONFIG_HEADER(src/config.h) AM_INIT_AUTOMAKE(freepv, 0.1) AC_LANG_CPLUSPLUS @@ -8,6 +8,43 @@ AC_LIBTOOL_DLOPEN AM_PROG_LIBTOOL +dnl +dnl Check the operating system +dnl +case "${target_os}" in + "") + HSYS=unknown + ;; + linux*) + HSYS=linux + dnl + dnl Check the cpu to allow lib/lib64 decisions + dnl + case "${target_cpu}" in + "") + HCPU=unknown + ;; + x86_64*) + HCPU=amd64 + ;; + *) + HCPU="${target_cpu}" + ;; + esac + ;; + darwin*) + HSYS=darwin + HCPU="${target_cpu}" + ;; + *) + HSYS="${target_os}" + HCPU="${target_cpu}" + ;; +esac +AM_CONDITIONAL(HAVE_LINUX, test "${HSYS}" = "linux") +AM_CONDITIONAL(HAVE_DARWIN, test "${HSYS}" = "darwin") +AM_CONDITIONAL(HAVE_MINGW, test "${HSYS}" = "mingw32") + dnl debugging options AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug], @@ -125,4 +162,4 @@ fi -AC_OUTPUT(Makefile m4/Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile src/freepv-mozilla/Makefile src/freepv-glut/Makefile) +AC_OUTPUT(Makefile m4/Makefile src/Makefile src/libfreepv/Makefile src/freepv-glx/Makefile src/libfreepv/glutfont/Makefile src/freepv-mozilla/Makefile src/freepv-glut/Makefile src/utils/Makefile) Modified: freepv/trunk/freepv.kdevelop =================================================================== --- freepv/trunk/freepv.kdevelop 2006-10-14 20:24:25 UTC (rev 86) +++ freepv/trunk/freepv.kdevelop 2006-10-15 16:29:26 UTC (rev 87) @@ -14,7 +14,7 @@ <ignoreparts/> <projectdirectory>.</projectdirectory> <absoluteprojectpath>false</absoluteprojectpath> - <description></description> + <description/> </general> <kdevautoproject> <general> @@ -50,14 +50,14 @@ <f77compiler>kdevg77options</f77compiler> <cxxflags>-O0 -g</cxxflags> <envvars/> - <topsourcedir></topsourcedir> - <cppflags></cppflags> - <ldflags></ldflags> - <ccompilerbinary></ccompilerbinary> - <cxxcompilerbinary></cxxcompilerbinary> - <f77compilerbinary></f77compilerbinary> - <cflags></cflags> - <f77flags></f77flags> + <topsourcedir/> + <cppflags/> + <ldflags/> + <ccompilerbinary/> + <cxxcompilerbinary/> + <f77compilerbinary/> + <cflags/> + <f77flags/> </debug> </configurations> <make> @@ -130,6 +130,8 @@ <groups> <group pattern="*.h" name="Header files" /> <group pattern="*.cpp" name="Source files" /> + <hidenonprojectfiles>false</hidenonprojectfiles> + <hidenonlocation>false</hidenonlocation> </groups> <tree> <hidepatterns>*.o,*.lo,CVS</hidepatterns> @@ -171,10 +173,10 @@ <qt> <used>false</used> <version>3</version> - <root></root> + <root/> </qt> <creategettersetter> - <prefixGet></prefixGet> + <prefixGet/> <prefixSet>set</prefixSet> <prefixVariable>m_,_</prefixVariable> <parameterName>theValue</parameterName> @@ -191,11 +193,11 @@ <kdevdebugger> <general> <programargs>src=../../../testcases/good/ship.jpg</programargs> - <gdbpath></gdbpath> - <dbgshell></dbgshell> - <configGdbScript></configGdbScript> - <runShellScript></runShellScript> - <runGdbScript></runGdbScript> + <gdbpath/> + <dbgshell/> + <configGdbScript/> + <runShellScript/> + <runGdbScript/> <breakonloadinglibs>true</breakonloadinglibs> <separatetty>false</separatetty> <floatingtoolbar>false</floatingtoolbar> Modified: freepv/trunk/src/freepv-mozilla/Makefile.am =================================================================== --- freepv/trunk/src/freepv-mozilla/Makefile.am 2006-10-14 20:24:25 UTC (rev 86) +++ freepv/trunk/src/freepv-mozilla/Makefile.am 2006-10-15 16:29:26 UTC (rev 87) @@ -11,5 +11,5 @@ mozplugins_LTLIBRARIES = libnsfreepv.la libnsfreepv_la_SOURCES = plugin_unix.cpp np_entry.cpp npn_gate.cpp npp_gate.cpp \ plugin.cpp -libnsfreepv_DEPENDENCIES = $(top_builddir)/src/libfreepv/libfreepv.a \ $(top_builddir)/src/libfreepv/glutfont/libglutfont.a +libnsfreepv_la_DEPENDENCIES = $(top_builddir)/src/libfreepv/libfreepv.a \ $(top_builddir)/src/libfreepv/glutfont/libglutfont.a libnsfreepv_la_LDFLAGS = $(top_builddir)/src/libfreepv/libfreepv.a \ $(top_builddir)/src/libfreepv/glutfont/libglutfont.a This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-15 18:14:30
|
Revision: 88 http://svn.sourceforge.net/freepv/?rev=88&view=rev Author: dangelo Date: 2006-10-15 11:14:17 -0700 (Sun, 15 Oct 2006) Log Message: ----------- try to detect the different glut version Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/m4/ax_opengl.m4 Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-10-15 16:29:26 UTC (rev 87) +++ freepv/trunk/configure.in 2006-10-15 18:14:17 UTC (rev 88) @@ -8,6 +8,8 @@ AC_LIBTOOL_DLOPEN AM_PROG_LIBTOOL +echo "*********** target: $target host: $host" + dnl dnl Check the operating system dnl @@ -34,13 +36,17 @@ ;; darwin*) HSYS=darwin - HCPU="${target_cpu}" + HCPU="${target_cpu}" + AC_DEFINE(HAVE_DARWIN,1,We are compiling on darwin / MacOSX) ;; *) HSYS="${target_os}" HCPU="${target_cpu}" ;; esac + +echo "**** HSYS = $HSYS ****" + AM_CONDITIONAL(HAVE_LINUX, test "${HSYS}" = "linux") AM_CONDITIONAL(HAVE_DARWIN, test "${HSYS}" = "darwin") AM_CONDITIONAL(HAVE_MINGW, test "${HSYS}" = "mingw32") @@ -80,7 +86,19 @@ fi dnl check for opengl -MDL_HAVE_OPENGL + +if test "x$HSYS" == xdarwin; then +dnl custom flags for opengl on OSX +echo "Using OSX gl" + GL_CFLAGS="" + GL_LIBS="-lm -framework OpenGL -framework GLUT -framework Foundation -lstdc++" + AC_SUBST(GL_CFLAGS) + AC_SUBST(GL_LIBS) +else +echo "running opengl detection" + MDL_HAVE_OPENGL +fi + if test "x$have_GL" != xyes; then AC_MSG_ERROR([ the gl library must be installed on your system @@ -94,6 +112,21 @@ ]) fi +AC_CHECK_HEADER([GLUT/glut.h], + [AC_DEFINE([HAVE_OSXGLUT_H], [1], + [Define to 1 if you have OSX style <GLUT/glut.h>.])], + [AC_MSG_NOTICE([OSX glut not found])]) + +AC_CHECK_HEADER([GL/glut.h], + [AC_DEFINE([HAVE_GLUT_H], [1], + [Define to 1 if you have <GL/glut.h>.])], + [AC_MSG_NOTICE([GLUT not found])]) + +AC_CHECK_HEADER([GL/freeglut.h], + [AC_DEFINE([HAVE_OSXGLUT_H], [1], + [Define to 1 if you have <GL/freeglut.h>.])], + [AC_MSG_NOTICE([freeglut not found])]) + AM_CONDITIONAL(HAS_GLX, test "x$have_GLX" = 'xyes') AM_CONDITIONAL(BUILD_MOZ_PLUGIN, test "x$have_GLX" = 'xyes') Modified: freepv/trunk/m4/ax_opengl.m4 =================================================================== --- freepv/trunk/m4/ax_opengl.m4 2006-10-15 16:29:26 UTC (rev 87) +++ freepv/trunk/m4/ax_opengl.m4 2006-10-15 18:14:17 UTC (rev 88) @@ -52,9 +52,6 @@ AC_SEARCH_LIBS(glutInit, glut, have_glut=yes, have_glut=no) dnl have_glut=no - AC_CHECK_HEADER(GL/freeglut.h, , [AC_MSG_ERROR([Couldn't find GL/freeglut.h.\ - Please install the freeglut development package.] )]) - # Restore pretty messages. exec AC_FD_MSG>&8 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-16 20:32:26
|
Revision: 91 http://svn.sourceforge.net/freepv/?rev=91&view=rev Author: dangelo Date: 2006-10-16 13:32:08 -0700 (Mon, 16 Oct 2006) Log Message: ----------- zoom in/out with up/down keys (glut cannot detect single shift and ctrl keys..) Modified Paths: -------------- freepv/trunk/configure.in freepv/trunk/src/freepv-glut/Makefile.am freepv/trunk/src/freepv-glut/freepv-glut.cpp freepv/trunk/src/freepv-glut/glut_platform.cpp freepv/trunk/src/freepv-glut/glut_platform.h freepv/trunk/src/freepv-mozilla/Makefile.am freepv/trunk/src/libfreepv/Controller.h freepv/trunk/src/libfreepv/OpenGLRenderer.cpp Modified: freepv/trunk/configure.in =================================================================== --- freepv/trunk/configure.in 2006-10-16 19:21:00 UTC (rev 90) +++ freepv/trunk/configure.in 2006-10-16 20:32:08 UTC (rev 91) @@ -8,6 +8,8 @@ AC_LIBTOOL_DLOPEN AM_PROG_LIBTOOL +AC_CHECK_FUNCS(gettimeofday) + echo "*********** target: $target host: $host" dnl @@ -123,7 +125,7 @@ [AC_MSG_NOTICE([GLUT not found])]) AC_CHECK_HEADER([GL/freeglut.h], - [AC_DEFINE([HAVE_OSXGLUT_H], [1], + [AC_DEFINE([HAVE_FREEGLUT_H], [1], [Define to 1 if you have <GL/freeglut.h>.])], [AC_MSG_NOTICE([freeglut not found])]) Modified: freepv/trunk/src/freepv-glut/Makefile.am =================================================================== --- freepv/trunk/src/freepv-glut/Makefile.am 2006-10-16 19:21:00 UTC (rev 90) +++ freepv/trunk/src/freepv-glut/Makefile.am 2006-10-16 20:32:08 UTC (rev 91) @@ -2,7 +2,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/src $(JPEG_FLAGS) AM_CXXFLAGS = $(GL_CFLAGS) -AM_LDFLAGS = $(GL_LIBS) -lXxf86vm $(LIB_JPEG) +AM_LDFLAGS = $(GL_LIBS) $(LIB_JPEG) INCLUDES = $(all_includes) METASOURCES = AUTO bin_PROGRAMS = freepv-glut Modified: freepv/trunk/src/freepv-glut/freepv-glut.cpp =================================================================== --- freepv/trunk/src/freepv-glut/freepv-glut.cpp 2006-10-16 19:21:00 UTC (rev 90) +++ freepv/trunk/src/freepv-glut/freepv-glut.cpp 2006-10-16 20:32:08 UTC (rev 91) @@ -80,9 +80,23 @@ void keyCallback(unsigned char key,int x, int y) { - platformptr->glutKeyboardCallback(key,x,y); + platformptr->glutKeyboardCallback(key,x,y, true); } +void keyCallbackUp(unsigned char key,int x, int y) { + platformptr->glutKeyboardCallback(key,x,y, false); +} + +void keySpecialCallback(int key,int x, int y) { + DEBUG_TRACE(key) + platformptr->glutKeyboardSpecialCallback(key,x,y, true); +} + +void keySpecialCallbackUp(int key,int x, int y) { + DEBUG_TRACE(key); + platformptr->glutKeyboardSpecialCallback(key,x,y, false); +} + void mouseCallback(int button, int state,int x, int y) { platformptr->glutMouseCallback(button,state,x,y); } @@ -179,9 +193,15 @@ viewer.init(platform, para); gviewer = & viewer; + // disable keyboard repeat + glutIgnoreKeyRepeat(1); + glutDisplayFunc(displayCallback); glutKeyboardFunc(keyCallback); - glutMouseFunc(mouseCallback); + glutKeyboardUpFunc(keyCallbackUp); + glutSpecialFunc(keySpecialCallback); + glutSpecialUpFunc(keySpecialCallbackUp); + glutMouseFunc(mouseCallback); glutMotionFunc(mouseMotionCallback); #ifdef HAVE_FREEGLUT_H glutMouseWheelFunc(scrollWheelCallback); Modified: freepv/trunk/src/freepv-glut/glut_platform.cpp =================================================================== --- freepv/trunk/src/freepv-glut/glut_platform.cpp 2006-10-16 19:21:00 UTC (rev 90) +++ freepv/trunk/src/freepv-glut/glut_platform.cpp 2006-10-16 20:32:08 UTC (rev 91) @@ -25,6 +25,8 @@ #include <config.h> +#include <libfreepv/FPV_keysyms.h> + #ifdef _WIN32 #define FREEGLUT_STATIC #endif @@ -54,6 +56,20 @@ platformptr->glutIdleCallback(); } +static int convertModifiers(int glutMod) +{ + int ret = 0; + if (glutMod & GLUT_ACTIVE_SHIFT) { + ret |= SHIFT_MASK; + } + if (glutMod & GLUT_ACTIVE_CTRL) { + ret |= CONTROL_MASK; + } + if (glutMod & GLUT_ACTIVE_ALT) { + ret |= MOD1_MASK; + } +} + #ifdef _WIN32 static double @@ -129,6 +145,8 @@ /* default to fullscreen */ m_glwin.fs = false; + m_currentGlutMod = 0; + glutInit(&argc, argv); if (!createGLWindow("freepv", 640, 480, 24, m_glwin.fs)) @@ -188,32 +206,53 @@ m_eventListener->onResize(FPV::Size2D(width, height)); } -/* TODO: implement special keys (using glutSpecialFunc callback) -void GLUTPlatform::glutScrollCallback(unsigned char key,int x, int y) { +/* TODO: implement special keys (using glutSpecialFunc callback) */ +void GLUTPlatform::glutKeyboardSpecialCallback(int key,int x, int y, bool down) { KeyEvent kev; + kev.keysym = 0; + DEBUG_DEBUG("key: " << key << " x:" << x << " y:" << y); // TODO: need to translate to keysyms here - kev.keysym=key; - kev.down = true; - // TODO: add mouse buttons and modifier keys here (shift/ctrl/alt/meta etc) - kev.modifiers = 0; - m_eventListener->onKeyEvent(kev); + switch (key) { + case GLUT_KEY_UP: + kev.keysym = FPV_Up; + break; + case GLUT_KEY_DOWN: + kev.keysym = FPV_Down; + break; + default: + break; + } + + if (kev.keysym) { + kev.down = down; + // TODO: add mouse buttons and modifier keys here (shift/ctrl/alt/meta etc) + kev.modifiers = convertModifiers(glutGetModifiers()); + m_eventListener->onKeyEvent(kev); + } } -*/ -void GLUTPlatform::glutKeyboardCallback(unsigned char key,int x, int y) { + +void GLUTPlatform::glutKeyboardCallback(unsigned char key,int x, int y, bool down) +{ + DEBUG_DEBUG("keycode conversion not implemented yet"); + KeyEvent kev; + + kev.modifiers = convertModifiers(glutGetModifiers()); // TODO: need to translate to keysyms here kev.keysym=key; - kev.down = true; + kev.down = down; // TODO: add mouse buttons and modifier keys here (shift/ctrl/alt/meta etc) kev.modifiers = 0; kev.time = getTime(); - m_eventListener->onKeyEvent(kev); + //m_eventListener->onKeyEvent(kev); } void GLUTPlatform::glutMouseCallback(int button, int state,int x, int y) { MouseEvent mev; - //printf("glutMouseCallback, button %d, state %d, pos: %d, %d\n", button, state, x, y); + printf("glutMouseCallback, button %d, state %d, pos: %d, %d\n", button, state, x, y); + mev.modifiers = convertModifiers(glutGetModifiers()); + mev.pos.x=x; mev.pos.y=y; int mask; @@ -267,7 +306,7 @@ void GLUTPlatform::glutMouseMotionCallback(int x, int y) { MouseEvent mev; - + printf("glutMouseMotion, pos: %d, %d\n", x, y); mev.buttonNr=0; mev.down=false; mev.modifiers=m_modifiers; Modified: freepv/trunk/src/freepv-glut/glut_platform.h =================================================================== --- freepv/trunk/src/freepv-glut/glut_platform.h 2006-10-16 19:21:00 UTC (rev 90) +++ freepv/trunk/src/freepv-glut/glut_platform.h 2006-10-16 20:32:08 UTC (rev 91) @@ -53,7 +53,9 @@ /** methode called by by the GLUT display callback */ virtual void glutDisplayCallback(void); /** methode called by by the GLUT keyboard callback */ - virtual void glutKeyboardCallback(unsigned char key,int x, int y); + virtual void glutKeyboardCallback(unsigned char key,int x, int y, bool down); + /** methode called by by the GLUT keyboard callback */ + virtual void glutKeyboardSpecialCallback(int key,int x, int y, bool down); /** methode called by by the GLUT mouse callback */ virtual void glutMouseCallback(int button, int state,int x, int y); /** method called by GLUT mouse wheel callback */ @@ -138,6 +140,8 @@ // the url that is currently being downloaded std::string m_currentURL; + + int m_currentGlutMod; }; #endif Modified: freepv/trunk/src/freepv-mozilla/Makefile.am =================================================================== --- freepv/trunk/src/freepv-mozilla/Makefile.am 2006-10-16 19:21:00 UTC (rev 90) +++ freepv/trunk/src/freepv-mozilla/Makefile.am 2006-10-16 20:32:08 UTC (rev 91) @@ -11,5 +11,7 @@ mozplugins_LTLIBRARIES = libnsfreepv.la libnsfreepv_la_SOURCES = plugin_unix.cpp np_entry.cpp npn_gate.cpp npp_gate.cpp \ plugin.cpp -libnsfreepv_la_DEPENDENCIES = $(top_builddir)/src/libfreepv/libfreepv.a \ $(top_builddir)/src/libfreepv/glutfont/libglutfont.a + +#libnsfreepv_la_DEPENDENCIES = $(top_builddir)/src/libfreepv/libfreepv.a \ #$(top_builddir)/src/libfreepv/glutfont/libglutfont.a + libnsfreepv_la_LDFLAGS = $(top_builddir)/src/libfreepv/libfreepv.a \ $(top_builddir)/src/libfreepv/glutfont/libglutfont.a Modified: freepv/trunk/src/libfreepv/Controller.h =================================================================== --- freepv/trunk/src/libfreepv/Controller.h 2006-10-16 19:21:00 UTC (rev 90) +++ freepv/trunk/src/libfreepv/Controller.h 2006-10-16 20:32:08 UTC (rev 91) @@ -91,7 +91,7 @@ // m_fovSpeed = 50; // calculate speed in a way that if the movement would take 1/2 second, // the visible horizontal length of the image is double of what it is now - m_fovSpeed = 2.0f*(2.0f*r2d(atan(2.0f*(tan(d2r(m_scene->getCamera()->fov)/2.0f)))) - m_scene->getCamera()->fov); + m_fovSpeed = -2.0f*(2.0f*r2d(atan(0.5f*tan(d2r(m_scene->getCamera()->fov)/2.0f))) - m_scene->getCamera()->fov); // reset speed on next update m_setFov= true; m_setFovOnce = true; @@ -105,20 +105,20 @@ { bool animate = false; // TODO: implement keyboard control - if (event.keysym == FPV_Shift_L && event.down) { + if ((event.keysym == FPV_Shift_L || event.keysym == FPV_Up) && event.down) { m_keyZoomIn = true; animate = true; }; - if (event.keysym == FPV_Shift_L && !event.down) { + if ((event.keysym == FPV_Shift_L || event.keysym == FPV_Up) && !event.down) { m_keyZoomIn = false; animate = true; } - if (event.keysym == FPV_Control_L && event.down) { + if ((event.keysym == FPV_Control_L || event.keysym == FPV_Down) && event.down) { m_keyZoomOut = true; animate = true; }; - if (event.keysym == FPV_Control_L && !event.down) { + if ((event.keysym == FPV_Control_L || event.keysym == FPV_Down) && !event.down) { m_keyZoomOut = false; animate = true; } @@ -143,7 +143,7 @@ m_scene->getCamera()->setFovSpeed(m_fovSpeed, time); } if (m_keyZoomOut) { - m_fovSpeed = 2.0f*(2.0f*r2d(atan(2.0f*(tan(d2r(m_scene->getCamera()->fov)/2.0f)))) - m_scene->getCamera()->fov); + m_fovSpeed = -2.0f*(2.0f*r2d(atan(0.5f*tan(d2r(m_scene->getCamera()->fov)/2.0f))) - m_scene->getCamera()->fov); m_scene->getCamera()->setFovSpeed(m_fovSpeed, time); } Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-16 19:21:00 UTC (rev 90) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-16 20:32:08 UTC (rev 91) @@ -274,8 +274,8 @@ // circumfence of cylinder float c = (float)(2*M_PI*r); - int nSegmentsPerTileX = ceil(120.0f / m_texture.xTiles); - int nSegmentsPerTileY = ceil(60.0f / m_texture.yTiles); + int nSegmentsPerTileX = (int)ceil(120.0f / m_texture.xTiles); + int nSegmentsPerTileY = (int)ceil(60.0f / m_texture.yTiles); int nSegmentsX = nSegmentsPerTileX* m_texture.xTiles; int nSegmentsY = nSegmentsPerTileY* m_texture.yTiles; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-18 12:41:57
|
Revision: 93 http://svn.sourceforge.net/freepv/?rev=93&view=rev Author: dangelo Date: 2006-10-18 05:41:50 -0700 (Wed, 18 Oct 2006) Log Message: ----------- windows mozilla plugin: repaint immediately after receiving mouse events Modified Paths: -------------- freepv/trunk/src/freepv-mozilla/plugin_windows.cpp freepv/trunk/testcases/good/test.html Modified: freepv/trunk/src/freepv-mozilla/plugin_windows.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin_windows.cpp 2006-10-16 20:59:47 UTC (rev 92) +++ freepv/trunk/src/freepv-mozilla/plugin_windows.cpp 2006-10-18 12:41:50 UTC (rev 93) @@ -269,8 +269,10 @@ void nsPluginInstanceWin32::startTimer(int delay) { - m_timerPtr = SetTimer( mhWnd, 1, 1000.0/80, NULL); if (m_timerPtr == 0) { + m_timerPtr = SetTimer( mhWnd, 1, 1000.0/80, NULL); + } + if (m_timerPtr == 0) { DEBUG_ERROR("Could not start timer"); } #if 0 @@ -419,8 +421,10 @@ case WM_TIMER: case FPV_WM_TIME: { + static oldt = 0; double t = getTime(); - //DEBUG_TRACE("WM_TIMER: delta:" << t); + DEBUG_TRACE("WM_TIMER: time: " << t << "s delta:" << (t-oldt)*1000 << " ms"); + oldt = t; if (thisp->m_eventListener) { wglMakeCurrent( thisp->m_hDC, thisp->m_hRC ); thisp->m_eventListener->onTimer(t); @@ -455,6 +459,13 @@ wglMakeCurrent( thisp->m_hDC, thisp->m_hRC ); thisp->m_eventListener->onMouseEvent(mev); } + // repaint + double t = getTime(); + if (thisp->m_eventListener) { + wglMakeCurrent( thisp->m_hDC, thisp->m_hRC ); + thisp->m_eventListener->onTimer(t); + } + } break; case WM_MOUSEWHEEL: @@ -479,7 +490,7 @@ break; case WM_MOUSEMOVE: { - //DEBUG_TRACE("WM_MOUSEMOVE"); + DEBUG_TRACE("WM_MOUSEMOVE: " << getTime()); thisp->m_modifiers = convertModifiers(wParam); MouseEvent mev; mev.pos.x = GET_X_LPARAM(lParam); @@ -491,6 +502,12 @@ wglMakeCurrent( thisp->m_hDC, thisp->m_hRC ); thisp->m_eventListener->onMouseEvent(mev); } + // repaint + double t = getTime(); + if (thisp->m_eventListener) { + wglMakeCurrent( thisp->m_hDC, thisp->m_hRC ); + thisp->m_eventListener->onTimer(t); + } } break; Modified: freepv/trunk/testcases/good/test.html =================================================================== --- freepv/trunk/testcases/good/test.html 2006-10-16 20:59:47 UTC (rev 92) +++ freepv/trunk/testcases/good/test.html 2006-10-18 12:41:50 UTC (rev 93) @@ -8,7 +8,7 @@ <center> <embed type="application/freepv-plugin" src="OutsideSionHillCampus.mov" - width=600 height=400/> + width="95%" height="80%"/> </center> </html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-12-01 22:45:41
|
Revision: 100 http://svn.sourceforge.net/freepv/?rev=100&view=rev Author: dangelo Date: 2006-12-01 14:45:40 -0800 (Fri, 01 Dec 2006) Log Message: ----------- use mime types to detect QTVR vs JPEG, and only fall back to extension if an unknown mime type is encountered Modified Paths: -------------- freepv/trunk/README freepv/trunk/src/libfreepv/PanoViewer.cpp freepv/trunk/src/libfreepv/PanoViewer.h Modified: freepv/trunk/README =================================================================== --- freepv/trunk/README 2006-11-30 23:06:47 UTC (rev 99) +++ freepv/trunk/README 2006-12-01 22:45:40 UTC (rev 100) @@ -0,0 +1,14 @@ + +Required packages for compilation (ubuntu dapper): + +make +pkg-config +g++ +mozilla-dev +glutg3-dev +zlib1g-dev +libjpeg-dev +libxext-dev +libxmu-dev +x11proto-xf86vidmode-dev +libxxf86vm-dev Modified: freepv/trunk/src/libfreepv/PanoViewer.cpp =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-11-30 23:06:47 UTC (rev 99) +++ freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-12-01 22:45:40 UTC (rev 100) @@ -73,6 +73,46 @@ // TODO: setup loading progress + // always download to memory... + if (m_param.getSrc().size() != 0) { + // single image pano or QTVR + + // download to file + FPV_S2S(m_statusMessage, "downloading " << m_param.getSrc()); + m_scene->setStatusText( m_statusMessage ); + redraw(); + changeState(STATE_DOWNLOADING_SRC); + if (!m_platform->startDownloadURLToFile( m_param.getSrc() ) ) { + FPV_S2S(m_statusMessage, "download failed: " << m_param.getSrc()); + m_scene->setStatusText( m_statusMessage ); + redraw(); + changeState(STATE_ERROR); + } + } else { + // try to download the cube faces + if (m_param.getCubeSrc(0).size() > 0) { + // download singe pano file + FPV_S2S(m_statusMessage, "downloading: " << m_param.getCubeSrc(0)); + m_scene->setStatusText( m_statusMessage ); + redraw(); + changeState(STATE_DOWNLOADING_CUBEFACES); + m_currentCubeFaceDownload = 0; + if (!m_platform->startDownloadURL( m_param.getCubeSrc(0) ) ) { + FPV_S2S(m_statusMessage, "download failed: " << m_param.getCubeSrc(0)); + m_scene->setStatusText( m_statusMessage ); + redraw(); + changeState(STATE_ERROR); + } + return true; + } else { + m_statusMessage = "error: no panorama specified"; + m_scene->setStatusText( m_statusMessage ); + redraw(); + changeState(STATE_ERROR); + } + } + +#if 0 // TODO: check for preview image, once it is supported if (m_param.getSrc().size() != 0) { // check if we are downloading a .mov file @@ -123,6 +163,7 @@ changeState(STATE_ERROR); } } +#endif return true; } @@ -226,11 +267,15 @@ fprintf(stderr, "state %d: %d bytes downloaded\n",m_state, sz); // do some useful stuff here.. decode image etc. switch (m_state) { + /* case STATE_DOWNLOADING_PREVIEW: // TODO: setup preview rendering changeState(STATE_DOWNLOADING_PANO); m_platform->startDownloadURL( m_param.getSrc() ); break; + */ + +#if 0 case STATE_DOWNLOADING_PANO: { /* @@ -273,6 +318,7 @@ } break; } +#endif case STATE_DOWNLOADING_CUBEFACES: if (m_currentCubeFaceDownload == 0) { // we have downloaded the first cube @@ -335,6 +381,7 @@ } break; default: + DEBUG_ERROR("INVALID state after downloading to memory"); // unknown file, ignore free(data); break; @@ -345,6 +392,174 @@ { // currently only called if the fprintf(stderr, "state %d: file %s downloaded\n", m_state, filename.c_str()); + if (m_state == STATE_DOWNLOADING_SRC) { + // figure out what kind of file we got + std::string type; + std::string mime = m_platform->currentDownloadMimeType(); + if ( mime == "image/jpeg" ) { + type = "JPEG"; + } else if (mime == "video/quicktime" + || mime == "video/x-quicktime" + || mime == "image/x-quicktime" + || mime == "application/x-quicktime" + || mime == "application/quicktime" + || mime == "application/x-quicktimeplayer" + || mime == "graphics/pangeavr" + || mime == "graphics/pangeavr2" + || mime == "application/glpanoview") + { + type = "QTVR"; + } + // if no mimetype, check file extension + // assume jpeg if file doesn't have a MOV or QTVR extension + if (mime == "") { + std::string ext = string2UPPER(getExtension(m_param.getSrc())); + if (ext == "MOV" || ext == "QTVR") + { + type == "QTVR"; + } else { + type == "JPEG"; + } + } + + if (type == "QTVR") { + // ===================================================================================== + // decode QTVR + FPV_S2S(m_statusMessage, "Received " << m_platform->currentDownloadURL() << ", decoding QTVR."); + DEBUG_TRACE(m_statusMessage); + m_scene->setStatusText( m_statusMessage ); + redraw(); + + QTVRDecoder decoder; + bool ok = false; + ok = decoder.parseHeaders(filename.c_str()); + if (! ok) { + FPV_S2S(m_statusMessage, "Error during QTVR parsing: " << decoder.getErrorDescr()); + m_scene->setStatusText( m_statusMessage ); + changeState(STATE_ERROR); + redraw(); + return; + } + + if (decoder.getType() == Parameters::PANO_CYLINDRICAL) { + DEBUG_TRACE("got a cylindrical pano"); + Image * img = 0; + if (!decoder.extractCylImage(img)) { + FPV_S2S(m_statusMessage, "Error during QTVR decoding: " << decoder.getErrorDescr()); + m_scene->setStatusText( m_statusMessage ); + changeState(STATE_ERROR); + redraw(); + } else { + m_statusMessage = "Preparing rendering"; + DEBUG_TRACE(m_statusMessage); + m_scene->setStatusText( m_statusMessage ); + redraw(); + CylindricalPano * pano = new CylindricalPano(img->size(), 360); + pano->setImage(img); + m_scene->setSceneElement(pano); + // notify renderer of new cube faces + m_renderer->initElement(*pano); + + //m_platform->startTimer(10); + m_statusMessage="viewing"; + m_scene->setStatusText("QTVR successfully loaded"); + changeState(STATE_VIEWING); + redraw(); + } + + } else if (decoder.getType() == Parameters::PANO_CUBIC) { + DEBUG_TRACE("got a cubic pano"); + Image *cubeFaces[6]; + for (int i=0; i < 6 ; i++) { + cubeFaces[i] = 0; + }; + + + std::string decoderError; + if (decoder.extractCubeImages(cubeFaces)) + { + m_statusMessage = "Preparing rendering"; + DEBUG_TRACE(m_statusMessage); + m_scene->setStatusText( m_statusMessage ); + redraw(); + m_currentCube = new CubicPano(cubeFaces[0]->size()); + m_currentCube->setCubeFaces(cubeFaces); + m_scene->setSceneElement(m_currentCube); + // notify renderer of new cube faces + m_renderer->initElement(*m_currentCube); + + //m_platform->startTimer(10); + m_statusMessage="viewing"; + m_scene->setStatusText("QTVR successfully loaded"); + changeState(STATE_VIEWING); + redraw(); + } else { + FPV_S2S(m_statusMessage, "Error during QTVR decoding: " << decoder.getErrorDescr()); + m_scene->setStatusText( m_statusMessage ); + changeState(STATE_ERROR); + redraw(); + } + } else { + FPV_S2S(m_statusMessage, "Error during QTVR parsing: No panorama found"); + m_scene->setStatusText( m_statusMessage ); + changeState(STATE_ERROR); + redraw(); + return; + }; + + } else if (type == "JPEG") { + // ===================================================================================== + // decode single image pano + FPV_S2S(m_statusMessage, "Received " << m_platform->currentDownloadURL() << ", decoding JPEG image."); + + FILE * f = fopen (filename.c_str(), "rb"); + if (!f) + { + FPV_S2S(m_statusMessage, "Error opening downloaded file: " << filename); + m_scene->setStatusText( m_statusMessage ); + changeState(STATE_ERROR); + redraw(); + return; + } + + Image * img = new Image(); + if (!decodeJPEG(f, *img)) { + delete img; + FPV_S2S(m_statusMessage, "JPEG decoding error: " << m_platform->currentDownloadURL()); + m_scene->setStatusText( m_statusMessage ); + redraw(); + changeState(STATE_ERROR); + return; + } + + if (img->size().h * 2 == img->size().w) { + SphericalPano * pano = new SphericalPano(img->size(), (float) m_param.getPanoHFOV()); + pano->setImage(img); + m_scene->setSceneElement(pano); + m_statusMessage = "viewing"; + m_scene->setStatusText(m_statusMessage); + changeState(STATE_VIEWING); + redraw(); + } else { + // cylindrical panorama. + CylindricalPano * pano = new CylindricalPano(img->size(), (float) m_param.getPanoHFOV()); + pano->setImage(img); + m_scene->setSceneElement(pano); + m_statusMessage = "viewing"; + m_scene->setStatusText(m_statusMessage); + changeState(STATE_VIEWING); + redraw(); + } + } else { + m_statusMessage = "internal error: invalid state after downloading to file"; + m_scene->setStatusText( m_statusMessage ); + changeState(STATE_ERROR); + } + } + +#if 0 + // currently only called if the + fprintf(stderr, "state %d: file %s downloaded\n", m_state, filename.c_str()); // do some useful stuff here.. decode image etc. switch (m_state) { case STATE_DOWNLOADING_QTVR: @@ -433,9 +648,7 @@ } break; default: - m_statusMessage = "internal error: invalid state after downloading to file"; - m_scene->setStatusText( m_statusMessage ); - changeState(STATE_ERROR); break; } +#endif } Modified: freepv/trunk/src/libfreepv/PanoViewer.h =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.h 2006-11-30 23:06:47 UTC (rev 99) +++ freepv/trunk/src/libfreepv/PanoViewer.h 2006-12-01 22:45:40 UTC (rev 100) @@ -135,9 +135,9 @@ STATE_NOT_INTIALIZED, ///< the viewer has just been constructed, not initialized STATE_INIT, ///< setting up, arguments available STATE_DOWNLOADING_PREVIEW, ///< currently downloading the preview image - STATE_DOWNLOADING_PANO, ///< currently downloading the main panorama + STATE_DOWNLOADING_SRC, ///< currently downloading the file from the source type STATE_DOWNLOADING_CUBEFACES,///< currently downloading cubefaces - STATE_DOWNLOADING_QTVR, ///< currently downloading a QTVR +// STATE_DOWNLOADING_QTVR, ///< currently downloading a QTVR STATE_VIEWING, ///< viewer is fully constructed, normal viewing STATE_ERROR ///< an error has occured, cannot continue }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-12-01 23:42:34
|
Revision: 101 http://svn.sourceforge.net/freepv/?rev=101&view=rev Author: dangelo Date: 2006-12-01 15:42:33 -0800 (Fri, 01 Dec 2006) Log Message: ----------- minor code cleanup, remove some commented code, fixed most warnings Modified Paths: -------------- freepv/trunk/ChangeLog freepv/trunk/src/freepv-glx/glx_platform.cpp freepv/trunk/src/freepv-mozilla/plugin_unix.cpp freepv/trunk/src/libfreepv/Controller.h freepv/trunk/src/libfreepv/Image.cpp freepv/trunk/src/libfreepv/JpegReader.cpp freepv/trunk/src/libfreepv/OpenGLRenderer.cpp freepv/trunk/src/libfreepv/PanoViewer.cpp freepv/trunk/src/libfreepv/PanoViewer.h freepv/trunk/src/libfreepv/Platform.h freepv/trunk/src/libfreepv/QTVRDecoder.cpp freepv/trunk/src/libfreepv/Renderer.h Modified: freepv/trunk/ChangeLog =================================================================== --- freepv/trunk/ChangeLog 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/ChangeLog 2006-12-01 23:42:33 UTC (rev 101) @@ -1,3 +1,267 @@ +2006-10-16 19:21 dangelo + + * freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/glut_platform.cpp: added + modifications for glut on OSX + +2006-10-16 17:44 dangelo + + * freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/libfreepv/Makefile.am, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/glutfont/Makefile.am, + freepv/trunk/src/libfreepv/glutfont/freeglut_font.c, + freepv/trunk/src/libfreepv/glutfont/freeglut_font_copy.h, + freepv/trunk/src/libfreepv/glutfont/freeglut_font_data.c, + freepv/trunk/src/libfreepv/glutfont/freeglut_glutfont_definitions.c: + trying to add OSX support + +2006-10-15 18:14 dangelo + + * freepv/trunk/configure.in, freepv/trunk/m4/ax_opengl.m4: try to + detect the different glut version + +2006-10-15 16:29 dangelo + + * freepv/trunk/configure.in, freepv/trunk/freepv.kdevelop, + freepv/trunk/src/freepv-mozilla/Makefile.am: try to detect + platform in configure script + +2006-10-14 20:24 dangelo + + * freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp: commented printf + dump of the QTVR file structure + +2006-10-14 20:08 dangelo + + * freepv/trunk/src/Makefile.am, freepv/trunk/src/utils, + freepv/trunk/src/utils/Makefile.am, + freepv/trunk/src/utils/qtvr2img.cpp: added qtvr2img utility, + useful to extract images from a QTVR file + +2006-10-14 19:34 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/Scene.h: added support for + equirectangular panoramas + +2006-10-14 14:10 dangelo + + * freepv/trunk/src/libfreepv/OpenGLRenderer.cpp: fixed tiled + cylindricals with multiple rows + +2006-10-14 13:42 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp: tile cylindrical + pano, enables viewing of high res panos. + +2006-10-13 06:12 dangelo + + * freepv/trunk/configure.in, freepv/trunk/src/Makefile.am: do not + build mozilla plugin and glx based viewer, if glx hasn't been + found. + This should hopefully enable building freepv-glut on OSX using + the + autoconf build system + +2006-10-12 18:57 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp: removed debug + tile writer + +2006-10-12 18:45 dangelo + + * freepv/trunk/freepv.kdevelop, + freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/libfreepv/Image.cpp, + freepv/trunk/src/libfreepv/Image.h, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.h, + freepv/trunk/src/libfreepv/Parameters.cpp, + freepv/trunk/src/libfreepv/Parameters.h, + freepv/trunk/src/libfreepv/utils.h: support for tiled cube + textures, added vram= parameter + to specify the amount of vram that should be used for textures. + +2006-10-10 05:27 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_unix.cpp: unix + mozilla-plugin: really stop updating if scene is static.. + +2006-10-10 05:17 dangelo + + * freepv/trunk/src/freepv-mozilla/freepv.def: added missing def + file + +2006-10-09 20:55 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.h: windows + mozilla plugin: stop updating if no movement in scene + +2006-10-09 20:54 dangelo + + * freepv/trunk/m4/ax_opengl.m4: check for freeglut.h + +2006-10-09 16:59 dangelo + + * freepv/trunk/src/libfreepv/PanoViewer.cpp: redraw after loading + qtvr file + +2006-10-09 16:48 dangelo + + * freepv/trunk/freepv.kdevelop, freepv/trunk/src/Makefile.am, + freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.h: implemented + startTimer(), stopTimer() for unix platform + +2006-10-09 15:07 dangelo + + * freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/freepv-glut.vcproj, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/freepv-glut/glut_platform.h, + freepv/trunk/src/freepv-mozilla/FreePV.vcproj, + freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.h, + freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/Scene.cpp, + freepv/trunk/src/libfreepv/Scene.h: stop continous redraw if the + scene is static. (glut only, so far) + +2006-10-08 20:47 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_windows.cpp: added a + Sleep() to the main drawing loop to avoid slowing down the + system endlessly. But now its too jerky... + +2006-10-08 20:39 dangelo + + * freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/freepv-glut.vcproj, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/freepv-glut/main.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.h, + freepv/trunk/src/freepv.sln, + freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/JpegReader.cpp, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp, + freepv/trunk/src/libfreepv/Scene.cpp, + freepv/trunk/src/libfreepv/Scene.h, + freepv/trunk/src/libfreepv/libfreepv.vcproj: fixed some warnings + during msvc compilation. updated project files to include zlib. + tried to make windows mozilla plugin better behaved, but its + still not as smooth as the unix version. + +2006-10-08 18:45 dangelo + + * freepv/trunk/ChangeLog, freepv/trunk/configure.in, + freepv/trunk/freepv.kdevelop, + freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/freepv-glx/glx_platform.cpp, + freepv/trunk/src/freepv-glx/main.cpp, + freepv/trunk/src/freepv-mozilla/plugin.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/Image.h, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.h, + freepv/trunk/src/libfreepv/Parameters.cpp, + freepv/trunk/src/libfreepv/Parameters.h, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/Scene.cpp, + freepv/trunk/src/libfreepv/Scene.h, freepv/trunk/src/msvc: + switched updates back to absolute timing. Use proper exponential + delay for "inertia" simulation, the inertia is now independent + of the framerate. + +2006-10-08 18:43 dangelo + + * freepv/trunk/src/freepv-mozilla/plugin_unix.cpp: added pangea + and glpanoview mime types + +2006-10-08 18:42 dangelo + + * freepv/trunk/Makefile.am, freepv/trunk/m4/Makefile.am, + freepv/trunk/src/freepv-glut/Makefile.am, + freepv/trunk/src/freepv-mozilla/Makefile.am, + freepv/trunk/src/libfreepv/Makefile.am: include data files in + makefile.am, make dist works now + +2006-10-08 18:39 dangelo + + * freepv/trunk/src/libfreepv/OpenGLRenderer.cpp: use smaller font, + with the old one, not all error messages fitted into + most small web page panos + +2006-10-08 10:54 dangelo + + * freepv/trunk/configure.in, freepv/trunk/freepv.kdevelop, + freepv/trunk/m4/zlib.m4, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.h: added support for + compressed headers in mov files + +2006-10-07 23:52 dangelo + + * freepv/trunk/src/freepv-glut/freepv-glut.cpp, + freepv/trunk/src/freepv-glut/glut_platform.cpp, + freepv/trunk/src/freepv-glx/glx_platform.cpp, + freepv/trunk/src/freepv-mozilla/FreePV.vcproj, + freepv/trunk/src/freepv-mozilla/Makefile.am, + freepv/trunk/src/freepv-mozilla/plugin_unix.cpp, + freepv/trunk/src/freepv-mozilla/plugin_unix.h, + freepv/trunk/src/freepv-mozilla/plugin_windows.cpp, + freepv/trunk/src/freepv-mozilla/plugin_windows.h: platform + reports time differences with double precision + +2006-10-07 23:51 dangelo + + * freepv/trunk/src/libfreepv/PanoViewer.cpp: fixed crash when + cylindrical QTVR with a different image format than JPEG + are used + +2006-10-07 23:35 dangelo + + * freepv/trunk/src/libfreepv/Controller.h, + freepv/trunk/src/libfreepv/Image.h, + freepv/trunk/src/libfreepv/JpegReader.cpp, + freepv/trunk/src/libfreepv/JpegReader.h, + freepv/trunk/src/libfreepv/OpenGLRenderer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.cpp, + freepv/trunk/src/libfreepv/PanoViewer.h, + freepv/trunk/src/libfreepv/Parameters.cpp, + freepv/trunk/src/libfreepv/Parameters.h, + freepv/trunk/src/libfreepv/Platform.h, + freepv/trunk/src/libfreepv/QTVRDecoder.cpp, + freepv/trunk/src/libfreepv/QTVRDecoder.h, + freepv/trunk/src/libfreepv/Scene.cpp, + freepv/trunk/src/libfreepv/Scene.h, + freepv/trunk/src/libfreepv/utils.cpp, + freepv/trunk/src/libfreepv/utils.h: added support for + cylindrical panoramas. They are currently stored + in a single texture, so their resolution isn't too high. + 2006-10-06 22:50 dangelo * freepv/trunk/src/libfreepv/QTVRDecoder.cpp: improved QTVR Modified: freepv/trunk/src/freepv-glx/glx_platform.cpp =================================================================== --- freepv/trunk/src/freepv-glx/glx_platform.cpp 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/freepv-glx/glx_platform.cpp 2006-12-01 23:42:33 UTC (rev 101) @@ -32,7 +32,7 @@ void GLXPlatform::ConvertXEvent(XEvent * event) { - KeySym key; + //KeySym key; KeyEvent kev; MouseEvent mev; Modified: freepv/trunk/src/freepv-mozilla/plugin_unix.cpp =================================================================== --- freepv/trunk/src/freepv-mozilla/plugin_unix.cpp 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/freepv-mozilla/plugin_unix.cpp 2006-12-01 23:42:33 UTC (rev 101) @@ -67,8 +67,6 @@ { DEBUG_TRACE(""); - NPError err = NPERR_NO_ERROR; - gxDisplay = XOpenDisplay(NULL); if (gxDisplay) { DEBUG_DEBUG("Opened connection to X11 server" ); @@ -260,8 +258,8 @@ return NPERR_NO_ERROR; } if (aWindow->x == mX && aWindow->y == mY - && aWindow->width == mWidth - && aWindow->height == mHeight + && (int) aWindow->width == mWidth + && (int) aWindow->height == mHeight && (unsigned long)(aWindow->window) == mWindow) { DEBUG_DEBUG("called with same window as before"); @@ -524,8 +522,7 @@ void nsPluginInstanceUnix::xtEventHandler(Widget xtwidget, nsPluginInstanceUnix *thisp, XEvent *event, Boolean *b) { - KeySym key; - + //KeySym key; KeyEvent kev; MouseEvent mev; switch (event->type) Modified: freepv/trunk/src/libfreepv/Controller.h =================================================================== --- freepv/trunk/src/libfreepv/Controller.h 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/Controller.h 2006-12-01 23:42:33 UTC (rev 101) @@ -45,9 +45,11 @@ m_yawSpeed(0), m_pitchSpeed(0), m_fovSpeed(0), m_setFovOnce(false), m_setYaw(false), m_setPitch(false), m_setFov(false), - m_keyZoomIn(false), m_keyZoomOut(false) + m_keyZoomOut(false), m_keyZoomIn(false) { } + virtual ~Controller() {}; + /** called when a mouse event happend * return true if further redraws (animation) are needed */ Modified: freepv/trunk/src/libfreepv/Image.cpp =================================================================== --- freepv/trunk/src/libfreepv/Image.cpp 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/Image.cpp 2006-12-01 23:42:33 UTC (rev 101) @@ -84,7 +84,7 @@ int srcStride = src->getRowStride(); int destStride = dest->getRowStride(); - int pixelStride = 3; + //int pixelStride = 3; // copy image unsigned char * destPtr = dest->getData() + 3*destPos.x + destStride*destPos.y; unsigned char * srcPtr = src->getData() + 3*srcPos.x + srcStride*srcPos.y; Modified: freepv/trunk/src/libfreepv/JpegReader.cpp =================================================================== --- freepv/trunk/src/libfreepv/JpegReader.cpp 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/JpegReader.cpp 2006-12-01 23:42:33 UTC (rev 101) @@ -334,7 +334,7 @@ jpeg_destroy_decompress(&cinfo); return false; } - int x = cinfo.output_height -1; + //int x = cinfo.output_height -1; while (cinfo.output_scanline < cinfo.output_height) { (void) jpeg_read_scanlines(&cinfo, &tmpBuffer, 1); JOCTET *srcPtr = tmpBuffer; @@ -472,7 +472,7 @@ jpeg_destroy_decompress(&cinfo); return false; } - int x = cinfo.output_height -1; + //int x = cinfo.output_height -1; while (cinfo.output_scanline < cinfo.output_height) { (void) jpeg_read_scanlines(&cinfo, &tmpBuffer, 1); JOCTET *srcPtr = tmpBuffer; Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-12-01 23:42:33 UTC (rev 101) @@ -272,12 +272,12 @@ // radius of sphere float r = 10; // circumfence of cylinder - float c = (float)(2*M_PI*r); + //float c = (float)(2*M_PI*r); int nSegmentsPerTileX = (int)ceil(120.0f / m_texture.xTiles); int nSegmentsPerTileY = (int)ceil(60.0f / m_texture.yTiles); - int nSegmentsX = nSegmentsPerTileX* m_texture.xTiles; - int nSegmentsY = nSegmentsPerTileY* m_texture.yTiles; + //int nSegmentsX = nSegmentsPerTileX* m_texture.xTiles; + //int nSegmentsY = nSegmentsPerTileY* m_texture.yTiles; // Angular interval for each patch double phiinterval = 2.0 * M_PI/m_texture.xTiles; @@ -302,7 +302,7 @@ glBegin(GL_QUAD_STRIP); // loop over phi (x) - for(int l=0; l<=nSegmentsPerTileX;l=l++){ + for(int l=0; l<=nSegmentsPerTileX; l++){ double phi = (x+1) * phiinterval + M_PI/2.0 - l*phistep; GLfloat u0 = (m_texture.effTexSize.w - ((l) / (double) nSegmentsPerTileX * m_texture.effTexSize.w)) / m_texture.tileWidth; @@ -402,10 +402,10 @@ int nSegments = nSegmentsPerTile* m_texture.xTiles; // Angular interval for each patch - double phiinterval = 2.0 * M_PI/m_texture.xTiles; + //double phiinterval = 2.0 * M_PI/m_texture.xTiles; // Angular increment for eatch patch step - double phistep = phiinterval / nSegmentsPerTile; + //double phistep = phiinterval / nSegmentsPerTile; // y1 coordinate for each patch GLfloat v1 = m_texture.effTexSize.h/ (GLfloat) m_texture.tileWidth; @@ -557,7 +557,7 @@ for (int j=0; j < m_nTileDim; j++) // x { //DEBUG_TRACE("timing tile creation"); - int edgeTile=false; + //int edgeTile=false; unsigned char * tilePixels; if ( (j < (m_nTileDim-1)) && (k < (m_nTileDim-1)) ) { @@ -644,12 +644,12 @@ static const int perm[6][6] = { // idx signs of the new axis - 0, 1, 2, 1, 1, 1, // front - 2, 1, 0, -1, 1, 1, // right - 0, 1, 2, -1, 1, -1, // back - 2, 1, 0, 1, 1, -1, // left - 0, 2, 1, 1, -1, 1, // top - 0, 2, 1, 1, 1, -1 // bottom + { 0, 1, 2, 1, 1, 1 }, // front + { 2, 1, 0, -1, 1, 1 }, // right + { 0, 1, 2, -1, 1, -1 }, // back + { 2, 1, 0, 1, 1, -1 }, // left + { 0, 2, 1, 1, -1, 1 }, // top + { 0, 2, 1, 1, 1, -1 } // bottom }; for (int i=0; i < 6; i++) { @@ -745,9 +745,9 @@ OpenGLRenderer::OpenGLRenderer(Platform * platform, size_t texMem, RenderQuality q) -: m_platform(platform), - m_quality(q), - m_maxTexMem(texMem) + : m_quality(q), + m_platform(platform), + m_maxTexMem(texMem) { }; Modified: freepv/trunk/src/libfreepv/PanoViewer.cpp =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/PanoViewer.cpp 2006-12-01 23:42:33 UTC (rev 101) @@ -71,8 +71,10 @@ // its own uiElement, just motify the renderer here. m_renderer->initElement(*(m_scene->getUIElement())); - // TODO: setup loading progress + // TODO: check for preview image, once it is supported + // TODO: setup loading progress bar + // always download to memory... if (m_param.getSrc().size() != 0) { // single image pano or QTVR @@ -112,58 +114,7 @@ } } -#if 0 - // TODO: check for preview image, once it is supported - if (m_param.getSrc().size() != 0) { - // check if we are downloading a .mov file - std::string ext = string2UPPER(getExtension(m_param.getSrc())); - if (ext == "MOV" || ext == "QTVR") { - FPV_S2S(m_statusMessage, "downloading " << m_param.getSrc()); - m_scene->setStatusText( m_statusMessage ); - redraw(); - changeState(STATE_DOWNLOADING_QTVR); - if (!m_platform->startDownloadURLToFile( m_param.getSrc() ) ) { - FPV_S2S(m_statusMessage, "download failed: " << m_param.getSrc()); - m_scene->setStatusText( m_statusMessage ); - redraw(); - changeState(STATE_ERROR); - } - } else { - FPV_S2S(m_statusMessage, "downloading " << m_param.getSrc()); - m_scene->setStatusText( m_statusMessage ); - redraw(); - changeState(STATE_DOWNLOADING_PANO); - if (!m_platform->startDownloadURL( m_param.getSrc() ) ) { - FPV_S2S(m_statusMessage, "download failed: " << m_param.getSrc()); - m_scene->setStatusText( m_statusMessage ); - redraw(); - changeState(STATE_ERROR); - } - } - } else { - // try to download the cube faces - if (m_param.getCubeSrc(0).size() > 0) { - // download singe pano file - FPV_S2S(m_statusMessage, "downloading: " << m_param.getCubeSrc(0)); - m_scene->setStatusText( m_statusMessage ); - redraw(); - changeState(STATE_DOWNLOADING_CUBEFACES); - m_currentCubeFaceDownload = 0; - if (!m_platform->startDownloadURL( m_param.getCubeSrc(0) ) ) { - FPV_S2S(m_statusMessage, "download failed: " << m_param.getCubeSrc(0)); - m_scene->setStatusText( m_statusMessage ); - redraw(); - changeState(STATE_ERROR); - } - return true; - } else { - m_statusMessage = "error: no panorama specified"; - m_scene->setStatusText( m_statusMessage ); - redraw(); - changeState(STATE_ERROR); - } - } -#endif + return true; } @@ -199,7 +150,6 @@ void PanoViewer::onTimer(double time) { - Camera * cam = m_scene->getCamera(); if (m_controller){ if (!m_controller->onTimer(time)) { // stop redrawing if no animation is needed @@ -264,61 +214,9 @@ */ void PanoViewer::onDownloadComplete(void * data, size_t sz) { - fprintf(stderr, "state %d: %d bytes downloaded\n",m_state, sz); + fprintf(stderr, "state %d: %d bytes downloaded\n",(int)m_state, (int)sz); // do some useful stuff here.. decode image etc. switch (m_state) { - /* - case STATE_DOWNLOADING_PREVIEW: - // TODO: setup preview rendering - changeState(STATE_DOWNLOADING_PANO); - m_platform->startDownloadURL( m_param.getSrc() ); - break; - */ - -#if 0 - case STATE_DOWNLOADING_PANO: - { - /* - if (sz != m_currentDownloadSize) { - m_errorMessage = "panorama could not be downloaded completely"; - changeState(STATE_ERROR); - } - */ - // TODO: create panorama object and set to renderer - - Image * img = new Image(); - if (!decodeJPEG((unsigned char *)data, sz, *img)) { - delete img; - free(data); - FPV_S2S(m_statusMessage, "JPEG decoding error: " << m_platform->currentDownloadURL()); - m_scene->setStatusText( m_statusMessage ); - redraw(); - changeState(STATE_ERROR); - return; - } - free(data); - - if (img->size().h * 2 == img->size().w) { - SphericalPano * pano = new SphericalPano(img->size(), (float) m_param.getPanoHFOV()); - pano->setImage(img); - m_scene->setSceneElement(pano); - m_statusMessage = "viewing"; - m_scene->setStatusText(m_statusMessage); - changeState(STATE_VIEWING); - redraw(); - } else { - // cylindrical panorama. - CylindricalPano * pano = new CylindricalPano(img->size(), (float) m_param.getPanoHFOV()); - pano->setImage(img); - m_scene->setSceneElement(pano); - m_statusMessage = "viewing"; - m_scene->setStatusText(m_statusMessage); - changeState(STATE_VIEWING); - redraw(); - } - break; - } -#endif case STATE_DOWNLOADING_CUBEFACES: if (m_currentCubeFaceDownload == 0) { // we have downloaded the first cube @@ -556,99 +454,4 @@ changeState(STATE_ERROR); } } - -#if 0 - // currently only called if the - fprintf(stderr, "state %d: file %s downloaded\n", m_state, filename.c_str()); - // do some useful stuff here.. decode image etc. - switch (m_state) { - case STATE_DOWNLOADING_QTVR: - { - FPV_S2S(m_statusMessage, "Received " << m_platform->currentDownloadURL() << ", decoding QTVR."); - DEBUG_TRACE(m_statusMessage); - m_scene->setStatusText( m_statusMessage ); - redraw(); - - QTVRDecoder decoder; - bool ok = false; - ok = decoder.parseHeaders(filename.c_str()); - if (! ok) { - FPV_S2S(m_statusMessage, "Error during QTVR parsing: " << decoder.getErrorDescr()); - m_scene->setStatusText( m_statusMessage ); - changeState(STATE_ERROR); - redraw(); - return; - } - - if (decoder.getType() == Parameters::PANO_CYLINDRICAL) { - DEBUG_TRACE("got a cylindrical pano"); - Image * img = 0; - if (!decoder.extractCylImage(img)) { - FPV_S2S(m_statusMessage, "Error during QTVR decoding: " << decoder.getErrorDescr()); - m_scene->setStatusText( m_statusMessage ); - changeState(STATE_ERROR); - redraw(); - } else { - m_statusMessage = "Preparing rendering"; - DEBUG_TRACE(m_statusMessage); - m_scene->setStatusText( m_statusMessage ); - redraw(); - CylindricalPano * pano = new CylindricalPano(img->size(), 360); - pano->setImage(img); - m_scene->setSceneElement(pano); - // notify renderer of new cube faces - m_renderer->initElement(*pano); - - //m_platform->startTimer(10); - m_statusMessage="viewing"; - m_scene->setStatusText("QTVR successfully loaded"); - changeState(STATE_VIEWING); - redraw(); - } - - } else if (decoder.getType() == Parameters::PANO_CUBIC) { - DEBUG_TRACE("got a cubic pano"); - Image *cubeFaces[6]; - for (int i=0; i < 6 ; i++) { - cubeFaces[i] = 0; - }; - - - std::string decoderError; - if (decoder.extractCubeImages(cubeFaces)) - { - m_statusMessage = "Preparing rendering"; - DEBUG_TRACE(m_statusMessage); - m_scene->setStatusText( m_statusMessage ); - redraw(); - m_currentCube = new CubicPano(cubeFaces[0]->size()); - m_currentCube->setCubeFaces(cubeFaces); - m_scene->setSceneElement(m_currentCube); - // notify renderer of new cube faces - m_renderer->initElement(*m_currentCube); - - //m_platform->startTimer(10); - m_statusMessage="viewing"; - m_scene->setStatusText("QTVR successfully loaded"); - changeState(STATE_VIEWING); - redraw(); - } else { - FPV_S2S(m_statusMessage, "Error during QTVR decoding: " << decoder.getErrorDescr()); - m_scene->setStatusText( m_statusMessage ); - changeState(STATE_ERROR); - redraw(); - } - } else { - FPV_S2S(m_statusMessage, "Error during QTVR parsing: No panorama found"); - m_scene->setStatusText( m_statusMessage ); - changeState(STATE_ERROR); - redraw(); - return; - }; - } - break; - default: - break; - } -#endif } Modified: freepv/trunk/src/libfreepv/PanoViewer.h =================================================================== --- freepv/trunk/src/libfreepv/PanoViewer.h 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/PanoViewer.h 2006-12-01 23:42:33 UTC (rev 101) @@ -40,7 +40,7 @@ { public: PanoViewer(); - ~PanoViewer(); + virtual ~PanoViewer(); /** Initialisation function * @@ -135,9 +135,8 @@ STATE_NOT_INTIALIZED, ///< the viewer has just been constructed, not initialized STATE_INIT, ///< setting up, arguments available STATE_DOWNLOADING_PREVIEW, ///< currently downloading the preview image - STATE_DOWNLOADING_SRC, ///< currently downloading the file from the source type + STATE_DOWNLOADING_SRC, ///< currently downloading the file from the src attribute STATE_DOWNLOADING_CUBEFACES,///< currently downloading cubefaces -// STATE_DOWNLOADING_QTVR, ///< currently downloading a QTVR STATE_VIEWING, ///< viewer is fully constructed, normal viewing STATE_ERROR ///< an error has occured, cannot continue }; Modified: freepv/trunk/src/libfreepv/Platform.h =================================================================== --- freepv/trunk/src/libfreepv/Platform.h 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/Platform.h 2006-12-01 23:42:33 UTC (rev 101) @@ -98,6 +98,8 @@ class PlatformEventListener { public: + virtual ~PlatformEventListener() {}; + /** Called whenever the window is resized */ virtual void onResize(Size2D size) {}; @@ -174,6 +176,8 @@ { public: + virtual ~Platform() {}; + /** set data supplied to the timer callback */ void setCBData(void * data); Modified: freepv/trunk/src/libfreepv/QTVRDecoder.cpp =================================================================== --- freepv/trunk/src/libfreepv/QTVRDecoder.cpp 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/QTVRDecoder.cpp 2006-12-01 23:42:33 UTC (rev 101) @@ -308,7 +308,7 @@ int32 atomSize, atomType, remainingSize; int16 childCount; size_t filePos; - char *c = (char *)&atomType; + //char *c = (char *)&atomType; //OSErr iErr; @@ -438,7 +438,7 @@ { int32 atomSize, atomType, remainingSize; size_t filePos; -char *c = (char *)&atomType; +//char *c = (char *)&atomType; //OSErr iErr; @@ -919,7 +919,7 @@ // we have reached a new chunk chunkId++; samplesInChunk = 0; - if (sampleTableId < m_sample2ChunkTable.size()-1) { + if (sampleTableId < ((int)m_sample2ChunkTable.size())-1) { // check if we have reached a sample to chunk table entry if (chunkId+1 == m_sample2ChunkTable[sampleTableId+1].startChunk) { // advance to next entry in sample table @@ -941,7 +941,7 @@ } } -bail: +//bail: free(atom); } @@ -1271,7 +1271,7 @@ Swizzle(&type); subsize -=sz; size -= sz; - int nRefs = (size)/4; + //int nRefs = (size)/4; // only store tracks of type imgt, since these provide the image tracks. int i=0; if (type == 'imgt') { @@ -1580,10 +1580,10 @@ int v = t / tileDimensions; int left = h * tileSize; - int right = left + tileSize; + //int right = left + tileSize; int top = v * tileSize; - int bottom = top + tileSize; + //int bottom = top + tileSize; unsigned char * srcPtr = img.getData(); unsigned char * destPtr = cubefaces[i]->getData() + 3*left + 3*faceSize*top; @@ -1668,7 +1668,7 @@ bool QTVRDecoder::SeekAndExtractImagesCyl_Tiled(Image * & image) { -int i=0; +//int i=0; //int tileDimensions; //, compSize; //int faceSize; Modified: freepv/trunk/src/libfreepv/Renderer.h =================================================================== --- freepv/trunk/src/libfreepv/Renderer.h 2006-12-01 22:45:40 UTC (rev 100) +++ freepv/trunk/src/libfreepv/Renderer.h 2006-12-01 23:42:33 UTC (rev 101) @@ -37,6 +37,9 @@ class Renderer { public: + + virtual ~Renderer() {}; + /** Prepare render for rendering * * This should be called if all resources required by This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |