|
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.
|