From: <yx...@us...> - 2010-12-14 17:08:18
|
Revision: 228 http://simspark.svn.sourceforge.net/simspark/?rev=228&view=rev Author: yxu Date: 2010-12-14 17:08:12 +0000 (Tue, 14 Dec 2010) Log Message: ----------- use base64 in image perceptor Modified Paths: -------------- trunk/rcssserver3d/data/rsg/agent/nao/naoneckhead.rsg trunk/spark/plugin/imageperceptor/CMakeLists.txt trunk/spark/plugin/imageperceptor/imageperceptor.cpp trunk/spark/plugin/imageperceptor/imageperceptor.h trunk/spark/spark/spark.rb trunk/spark/utility/libb64/cencode.h trunk/spark/utility/libb64/decode.h trunk/spark/utility/libb64/encode.h Modified: trunk/rcssserver3d/data/rsg/agent/nao/naoneckhead.rsg =================================================================== --- trunk/rcssserver3d/data/rsg/agent/nao/naoneckhead.rsg 2010-12-14 17:07:37 UTC (rev 227) +++ trunk/rcssserver3d/data/rsg/agent/nao/naoneckhead.rsg 2010-12-14 17:08:12 UTC (rev 228) @@ -85,8 +85,6 @@ 0 0 -0.005 1 0 0 $he2_min $he2_max) - - ;(nd Camera) (nd RestrictedVisionPerceptor (setViewCones 120 120) @@ -96,6 +94,18 @@ (setInterval 3) ) + ;; (nd Transform + ;; (setLocalPos 0 $Head_Radius 0) + ;; (setLocalRotation 0 0 0) + ;; (nd ImagePerceptor + ;; (setInterval 3) + ;; (setViewport 0 0 320 240) + ;; (setFOV 58) + ;; (setZNear 0.003) + ;; (setZFar 50) + ;; ) + ;; ) + (nd ObjectState (setID head) ) Modified: trunk/spark/plugin/imageperceptor/CMakeLists.txt =================================================================== --- trunk/spark/plugin/imageperceptor/CMakeLists.txt 2010-12-14 17:07:37 UTC (rev 227) +++ trunk/spark/plugin/imageperceptor/CMakeLists.txt 2010-12-14 17:08:12 UTC (rev 228) @@ -10,7 +10,7 @@ add_library(imageperceptor MODULE ${imageperceptor_LIB_SRCS}) -target_link_libraries(imageperceptor ${spark_libs} ${Boost_LIBRARIES}) +target_link_libraries(imageperceptor ${spark_libs} ${Boost_LIBRARIES} b64) if (NOT APPLE) set_target_properties(imageperceptor PROPERTIES VERSION 0.0.0 SOVERSION 0) Modified: trunk/spark/plugin/imageperceptor/imageperceptor.cpp =================================================================== --- trunk/spark/plugin/imageperceptor/imageperceptor.cpp 2010-12-14 17:07:37 UTC (rev 227) +++ trunk/spark/plugin/imageperceptor/imageperceptor.cpp 2010-12-14 17:08:12 UTC (rev 228) @@ -35,6 +35,7 @@ #include "imageperceptor.h" #include <zeitgeist/logserver/logserver.h> +#include <boost/smart_ptr/shared_array.hpp> #define USE_FBO @@ -45,7 +46,8 @@ using namespace salt; using namespace std; -ImagePerceptor::ImagePerceptor() : oxygen::Perceptor() +ImagePerceptor::ImagePerceptor() : oxygen::Perceptor(), + mDataSize(0) { mFramesRendered = 0; } @@ -113,16 +115,19 @@ return false; Predicate &predicate = predList->AddPredicate(); - predicate.name = "Image"; + predicate.name = "IMG"; predicate.parameter.Clear(); - // ParameterList &sizeElement = predicate.parameter.AddList(); - // sizeElement.AddValue(std::string("s")); - // sizeElement.AddValue(mCamera->GetViewportWidth()); - // sizeElement.AddValue(mCamera->GetViewportHeight()); + ParameterList &sizeElement = predicate.parameter.AddList(); + sizeElement.AddValue(std::string("s")); + sizeElement.AddValue(mCamera->GetViewportWidth()); + sizeElement.AddValue(mCamera->GetViewportHeight()); - predicate.parameter.AddValue(mData); - return true; + ParameterList &dataElement = predicate.parameter.AddList(); + dataElement.AddValue(std::string("d")); + string datacode = mB64Encoder.encode(mData.get(), mDataSize); + dataElement.AddValue(datacode); + return true; } bool ImagePerceptor::Render() @@ -173,14 +178,12 @@ #else glReadBuffer(GL_BACK); #endif - int size = 3*w*h; - if ( mData.size() != size ) - mData.resize(size); + glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, - const_cast<char*>(mData.data())); + mData.get()); ++mFramesRendered; #ifdef USE_FBO @@ -196,6 +199,8 @@ { if ( 0!= mCamera ){ mCamera->SetViewport(x,y,w,h); + mDataSize = 3*w*h; + mData = boost::shared_array<char>(new char[mDataSize]); } } Modified: trunk/spark/plugin/imageperceptor/imageperceptor.h =================================================================== --- trunk/spark/plugin/imageperceptor/imageperceptor.h 2010-12-14 17:07:37 UTC (rev 227) +++ trunk/spark/plugin/imageperceptor/imageperceptor.h 2010-12-14 17:08:12 UTC (rev 228) @@ -26,6 +26,8 @@ #include <oxygen/sceneserver/sceneserver.h> #include <kerosin/renderserver/baserenderserver.h> #include <kerosin/openglserver/openglserver.h> +#include <boost/shared_array.hpp> +#include <libb64/encode.h> class ImagePerceptor : public oxygen::Perceptor { @@ -61,11 +63,14 @@ /** total frames rendered */ int mFramesRendered; - std::string mData; + boost::shared_array<char> mData; + unsigned int mDataSize; unsigned int mFBOId; unsigned int mRBOId; unsigned int mDepthBuffer; + + base64::Encoder mB64Encoder; }; DECLARE_CLASS(ImagePerceptor); Modified: trunk/spark/spark/spark.rb =================================================================== --- trunk/spark/spark/spark.rb 2010-12-14 17:07:37 UTC (rev 227) +++ trunk/spark/spark/spark.rb 2010-12-14 17:08:12 UTC (rev 228) @@ -283,7 +283,7 @@ simulationServer = sparkGetSimulationServer() if (simulationServer != nil) - simulationServer.setMultiThreads(true); + simulationServer.setMultiThreads(false); simulationServer.initControlNode('oxygen/AgentControl','AgentControl') # set auto speed adjust mode. @@ -635,3 +635,6 @@ # importBundle "agentsynceffector" + +# +importBundle "imageperceptor" Modified: trunk/spark/utility/libb64/cencode.h =================================================================== --- trunk/spark/utility/libb64/cencode.h 2010-12-14 17:07:37 UTC (rev 227) +++ trunk/spark/utility/libb64/cencode.h 2010-12-14 17:08:12 UTC (rev 228) @@ -8,8 +8,6 @@ #ifndef BASE64_CENCODE_H #define BASE64_CENCODE_H -#define BUFFERSIZE 64 - typedef enum { step_A, step_B, step_C Modified: trunk/spark/utility/libb64/decode.h =================================================================== --- trunk/spark/utility/libb64/decode.h 2010-12-14 17:07:37 UTC (rev 227) +++ trunk/spark/utility/libb64/decode.h 2010-12-14 17:08:12 UTC (rev 228) @@ -59,7 +59,7 @@ codelength = len; } - plainlength = decode(code, codelength, out+totalLen); + plainlength = base64_decode_block(code, codelength, out+totalLen, &_state); code += codelength; len -= codelength; @@ -71,17 +71,18 @@ return totalLen; } + int decode(const char* code_in, const int length_in, char* plaintext_out) + { + base64_init_decodestate(&_state); + return base64_decode_block(code_in, length_in, plaintext_out, &_state); + } + protected: int decode(char value_in) { return base64_decode_value(value_in); } - int decode(const char* code_in, const int length_in, char* plaintext_out) - { - return base64_decode_block(code_in, length_in, plaintext_out, &_state); - } - private: base64_decodestate _state; int _buffersize; Modified: trunk/spark/utility/libb64/encode.h =================================================================== --- trunk/spark/utility/libb64/encode.h 2010-12-14 17:07:37 UTC (rev 227) +++ trunk/spark/utility/libb64/encode.h 2010-12-14 17:08:12 UTC (rev 228) @@ -22,7 +22,7 @@ { public: - Encoder(int buffersize_in = BUFFERSIZE) + Encoder(int buffersize_in = 128) : _buffersize(buffersize_in) { _code = new char[2 * _buffersize]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |