00001
00010 #include "SimViewCam.h"
00011
00012
00013
00014 static const char* SimViewCam_spec[] =
00015 {
00016 "implementation_id", "SimViewCam",
00017 "type_name", "SimViewCam",
00018 "description", "DataConversionRTC",
00019 "version", "1.0.0",
00020 "vendor", "AIST",
00021 "category", "tool",
00022 "activity_type", "PERIODIC",
00023 "kind", "DataFlowComponent",
00024 "max_instance", "5",
00025 "language", "C++",
00026 "lang_type", "compile",
00027
00028 ""
00029 };
00030
00031
00036 SimViewCam::SimViewCam(RTC::Manager* manager)
00037
00038 : RTC::DataFlowComponentBase(manager),
00039 m_inIn("in", m_in),
00040 m_outOut("out", m_out)
00041
00042
00043 {
00044 }
00045
00049 SimViewCam::~SimViewCam()
00050 {
00051 }
00052
00053
00054
00055 RTC::ReturnCode_t SimViewCam::onInitialize()
00056 {
00057
00058
00059
00060 registerInPort("in", m_inIn);
00061
00062
00063 registerOutPort("out", m_outOut);
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 img_rcv = cvCreateImage(cvSize(320,240), IPL_DEPTH_8U, 3);
00074 img_tmp = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 3);
00075 img_snd = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 3);
00076
00077 windowOn = 0;
00078 if(windowOn==1)
00079 cvNamedWindow("SimView", CV_WINDOW_AUTOSIZE);
00080
00081 return RTC::RTC_OK;
00082 }
00083
00084
00085 RTC::ReturnCode_t SimViewCam::onFinalize()
00086 {
00087 cvReleaseImage(&img_rcv);
00088 cvReleaseImage(&img_tmp);
00089 cvReleaseImage(&img_snd);
00090 if(windowOn==1)
00091 cvDestroyWindow("SimView");
00092
00093 return RTC::RTC_OK;
00094 }
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126 RTC::ReturnCode_t SimViewCam::onExecute(RTC::UniqueId ec_id)
00127 {
00128 int simdata,r,g,b;
00129 int maskR = 0xff0000;
00130 int maskG = 0xff00;
00131 int maskB = 0xff;
00132
00133
00134 if(m_inIn.isNew()){
00135 m_inIn.read();
00136
00137
00138 for(int i=0; i<(int)m_in.data.length(); i++){
00139 simdata = m_in.data[i];
00140 r = (simdata & maskR) >> 16;
00141 g = (simdata & maskG) >> 8;
00142 b = (simdata & maskB);
00143
00144
00145
00146
00147 img_rcv->imageData[i*3] = (uchar) b;
00148 img_rcv->imageData[i*3+1] = (uchar) g;
00149 img_rcv->imageData[i*3+2] = (uchar) r;
00150
00151 }
00152 if(windowOn==1){
00153 cvShowImage("SimView",img_rcv);
00154 cvWaitKey(5);
00155 }
00156
00157
00158
00159 cvResize(img_rcv, img_tmp);
00160 cvFlip(img_tmp, img_snd, -1);
00161 m_out.data.length(sizeof(IplImage) + img_snd->imageSize);
00162 memcpy(&(m_out.data[0]), (unsigned char*)img_snd, sizeof(IplImage));
00163 memcpy(&(m_out.data[sizeof(IplImage)]), img_snd->imageData, img_snd->imageSize);
00164 m_outOut.write();
00165 }
00166
00167 return RTC::RTC_OK;
00168 }
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 extern "C"
00208 {
00209
00210 void SimViewCamInit(RTC::Manager* manager)
00211 {
00212 coil::Properties profile(SimViewCam_spec);
00213 manager->registerFactory(profile,
00214 RTC::Create<SimViewCam>,
00215 RTC::Delete<SimViewCam>);
00216 }
00217
00218 };
00219
00220