JpegEncoder.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
10 #include <opencv2/highgui/highgui.hpp>
11 #include <opencv2/imgproc/imgproc.hpp>
12 #include <opencv2/core/core.hpp>
13 #ifndef CV_VERSION_EPOCH
14 #define CV_VERSION_EPOCH CV_VERSION_MAJOR
15 #endif
16 #if CV_VERSION_EPOCH > 3
17 #include <opencv2/imgcodecs/legacy/constants_c.h>
18 #endif
19 #include "JpegEncoder.h"
20 
21 // Module specification
22 // <rtc-template block="module_spec">
23 static const char* jpegdecoder_spec[] =
24  {
25  "implementation_id", "JpegEncoder",
26  "type_name", "JpegEncoder",
27  "description", "null component",
28  "version", HRPSYS_PACKAGE_VERSION,
29  "vendor", "AIST",
30  "category", "example",
31  "activity_type", "DataFlowComponent",
32  "max_instance", "10",
33  "language", "C++",
34  "lang_type", "compile",
35  // Configuration variables
36  "conf.default.quality", "95",
37 
38  ""
39  };
40 // </rtc-template>
41 
43  : RTC::DataFlowComponentBase(manager),
44  // <rtc-template block="initializer">
45  m_decodedIn("decoded", m_decoded),
46  m_encodedOut("encoded", m_encoded),
47  // </rtc-template>
48  m_quality(95),
49  dummy(0)
50 {
51 }
52 
54 {
55 }
56 
57 
58 
59 RTC::ReturnCode_t JpegEncoder::onInitialize()
60 {
61  std::cout << m_profile.instance_name << ": onInitialize()" << std::endl;
62  // <rtc-template block="bind_config">
63  // Bind variables and configuration variable
64  bindParameter("quality", m_quality, "95");
65 
66  // </rtc-template>
67 
68  // Registration: InPort/OutPort/Service
69  // <rtc-template block="registration">
70  // Set InPort buffers
71  addInPort("decodedIn", m_decodedIn);
72 
73  // Set OutPort buffer
74  addOutPort("encodedOut", m_encodedOut);
75 
76  // Set service provider to Ports
77 
78  // Set service consumers to Ports
79 
80  // Set CORBA Service Ports
81 
82  // </rtc-template>
83 
84  //RTC::Properties& prop = getProperties();
85 
86  return RTC::RTC_OK;
87 }
88 
89 
90 
91 /*
92 RTC::ReturnCode_t JpegEncoder::onFinalize()
93 {
94  return RTC::RTC_OK;
95 }
96 */
97 
98 /*
99 RTC::ReturnCode_t JpegEncoder::onStartup(RTC::UniqueId ec_id)
100 {
101  return RTC::RTC_OK;
102 }
103 */
104 
105 /*
106 RTC::ReturnCode_t JpegEncoder::onShutdown(RTC::UniqueId ec_id)
107 {
108  return RTC::RTC_OK;
109 }
110 */
111 
112 RTC::ReturnCode_t JpegEncoder::onActivated(RTC::UniqueId ec_id)
113 {
114  std::cout << m_profile.instance_name<< ": onActivated(" << ec_id << ")" << std::endl;
115  return RTC::RTC_OK;
116 }
117 
119 {
120  std::cout << m_profile.instance_name<< ": onDeactivated(" << ec_id << ")" << std::endl;
121  return RTC::RTC_OK;
122 }
123 
124 RTC::ReturnCode_t JpegEncoder::onExecute(RTC::UniqueId ec_id)
125 {
126  //std::cout << m_profile.instance_name<< ": onExecute(" << ec_id << ")" << std::endl;
127  if (m_decodedIn.isNew()){
128  m_decodedIn.read();
129 
130  Img::ImageData& idat = m_decoded.data.image;
131  std::vector<uchar>buf;
132  std::vector<int> param = std::vector<int>(2);
133  param[0] = CV_IMWRITE_JPEG_QUALITY;
134  param[1] = m_quality;
135 
136  switch(idat.format){
137  case Img::CF_RGB:
138  {
139  // RGB -> BGR
140  uchar r,g,b, *raw=idat.raw_data.get_buffer();
141  for (unsigned int i=0; i<idat.raw_data.length(); i+=3, raw+=3){
142  r = raw[0]; g = raw[1]; b = raw[2];
143  raw[0] = b; raw[1] = g; raw[2] = r;
144  }
145 
146  cv::Mat src(idat.height, idat.width, CV_8UC3,
147  idat.raw_data.get_buffer());
148  cv::imencode(".jpg", src, buf, param);
149  m_encoded.data.image.format = Img::CF_RGB_JPEG;
150  }
151  break;
152  case Img::CF_GRAY:
153  {
154  cv::Mat src(idat.height, idat.width, CV_8U,
155  idat.raw_data.get_buffer());
156  cv::imencode(".jpg", src, buf, param);
157  m_encoded.data.image.format = Img::CF_GRAY_JPEG;
158  }
159  break;
160  }
161  m_encoded.data.image.raw_data.length(buf.size());
162  unsigned char *dst = m_encoded.data.image.raw_data.get_buffer();
163  memcpy(dst, &buf[0], buf.size());
164 
165 #if 0
166  std::cout << "JpegEncoder:" << idat.raw_data.length() << "->"
167  << m_encoded.data.image.raw_data.length() << std::endl;
168 #endif
170  }
171  return RTC::RTC_OK;
172 }
173 
174 /*
175 RTC::ReturnCode_t JpegEncoder::onAborting(RTC::UniqueId ec_id)
176 {
177  return RTC::RTC_OK;
178 }
179 */
180 
181 /*
182 RTC::ReturnCode_t JpegEncoder::onError(RTC::UniqueId ec_id)
183 {
184  return RTC::RTC_OK;
185 }
186 */
187 
188 /*
189 RTC::ReturnCode_t JpegEncoder::onReset(RTC::UniqueId ec_id)
190 {
191  return RTC::RTC_OK;
192 }
193 */
194 
195 /*
196 RTC::ReturnCode_t JpegEncoder::onStateUpdate(RTC::UniqueId ec_id)
197 {
198  return RTC::RTC_OK;
199 }
200 */
201 
202 /*
203 RTC::ReturnCode_t JpegEncoder::onRateChanged(RTC::UniqueId ec_id)
204 {
205  return RTC::RTC_OK;
206 }
207 */
208 
209 
210 
211 extern "C"
212 {
213 
215  {
217  manager->registerFactory(profile,
218  RTC::Create<JpegEncoder>,
219  RTC::Delete<JpegEncoder>);
220  }
221 
222 };
223 
224 
ComponentProfile m_profile
png_infop png_charpp int png_charpp profile
Img::TimedCameraImage m_decoded
Definition: JpegEncoder.h:106
virtual RTC::ReturnCode_t onInitialize()
Definition: JpegEncoder.cpp:59
jpeg encoder component
virtual RTC::ReturnCode_t onDeactivated(RTC::UniqueId ec_id)
png_uint_32 i
InPort< Img::TimedCameraImage > m_decodedIn
Definition: JpegEncoder.h:110
bool addOutPort(const char *name, OutPortBase &outport)
ExecutionContextHandle_t UniqueId
bool bindParameter(const char *param_name, VarType &var, const char *def_val, bool(*trans)(VarType &, const char *)=coil::stringTo)
OutPort< Img::TimedCameraImage > m_encodedOut
Definition: JpegEncoder.h:118
void JpegEncoderInit(RTC::Manager *manager)
Img::TimedCameraImage m_encoded
Definition: JpegEncoder.h:114
png_bytep buf
virtual bool isNew()
virtual bool write(DataType &value)
virtual ~JpegEncoder()
Destructor.
Definition: JpegEncoder.cpp:53
virtual RTC::ReturnCode_t onActivated(RTC::UniqueId ec_id)
bool addInPort(const char *name, InPortBase &inport)
virtual RTC::ReturnCode_t onExecute(RTC::UniqueId ec_id)
bool registerFactory(coil::Properties &profile, RtcNewFunc new_func, RtcDeleteFunc delete_func)
static const char * jpegdecoder_spec[]
Definition: JpegEncoder.cpp:23
JpegEncoder(RTC::Manager *manager)
Constructor.
Definition: JpegEncoder.cpp:42


hrpsys
Author(s): AIST, Fumio Kanehiro
autogenerated on Sat Dec 17 2022 03:52:20