@@ -151,8 +151,8 @@ int MeteorImage::getAcReal(uint16_t word) {
151151
152152MeteorImage::~MeteorImage () {}
153153
154- cv::Mat MeteorImage::getChannelImage (ChannelIDs APID , bool fillBlackLines) {
155- if (mFullImage .size () == 0 ) {
154+ cv::Mat MeteorImage::getChannelImage (APIDs channelID , bool fillBlackLines) {
155+ if (mChannels .size () == 0 ) {
156156 return cv::Mat ();
157157 }
158158
@@ -167,32 +167,9 @@ cv::Mat MeteorImage::getChannelImage(ChannelIDs APID, bool fillBlackLines) {
167167
168168 cv::Vec3b& color = image.at <cv::Vec3b>(y, x);
169169
170- image.at <cv::Vec3b>(cv::Point (x, y)) = color;
171-
172- switch (APID) {
173- case APID_68:
174- color[0 ] = mFullImage [off].r ;
175- color[1 ] = mFullImage [off].r ;
176- color[2 ] = mFullImage [off].r ;
177- break ;
178- case APID_66:
179- color[0 ] = mFullImage [off].r ;
180- color[1 ] = mFullImage [off].r ;
181- color[2 ] = mFullImage [off].r ;
182- break ;
183- case APID_65:
184- color[0 ] = mFullImage [off].g ;
185- color[1 ] = mFullImage [off].g ;
186- color[2 ] = mFullImage [off].g ;
187- break ;
188- case APID_64:
189- color[0 ] = mFullImage [off].b ;
190- color[1 ] = mFullImage [off].b ;
191- color[2 ] = mFullImage [off].b ;
192- break ;
193- }
194-
195- image.at <cv::Vec3b>(cv::Point (x, y)) = color;
170+ color[0 ] = mChannels [off][channelID - 64 ];
171+ color[1 ] = mChannels [off][channelID - 64 ];
172+ color[2 ] = mChannels [off][channelID - 64 ];
196173 }
197174 }
198175
@@ -204,24 +181,23 @@ cv::Mat MeteorImage::getChannelImage(ChannelIDs APID, bool fillBlackLines) {
204181 return image;
205182}
206183
207- cv::Mat MeteorImage::getRGBImage (ChannelIDs redAPID, ChannelIDs greenAPID, ChannelIDs blueAPID, bool fillBlackLines) {
208- if (mFullImage .size () == 0 ) {
184+ cv::Mat MeteorImage::getRGBImage (APIDs redAPID, APIDs greenAPID, APIDs blueAPID, bool fillBlackLines) {
185+ if (mChannels .size () == 0 ) {
209186 return cv::Mat ();
210187 }
211188
212189 int width = 8 * MCU_PER_LINE;
213190 int height = mCurY + 8 ;
214191 cv::Mat image = cv::Mat (height, width, CV_8UC3);
215- cv::Vec3b color;
216192
217193 for (int y = 0 ; y < image.rows ; y++) {
218194 for (int x = 0 ; x < image.cols ; x++) {
219195 uint off = x + y * MCU_PER_LINE * 8 ;
196+ cv::Vec3b& color = image.at <cv::Vec3b>(cv::Point (x, y));
220197
221- color[0 ] = (blueAPID == APID_66 || blueAPID == APID_68) ? mFullImage [off].r : (blueAPID == APID_65) ? mFullImage [off].g : mFullImage [off].b ;
222- color[1 ] = (greenAPID == APID_66 || greenAPID == APID_68) ? mFullImage [off].r : (greenAPID == APID_65) ? mFullImage [off].g : mFullImage [off].b ;
223- color[2 ] = (redAPID == APID_66 || redAPID == APID_68) ? mFullImage [off].r : (redAPID == APID_65) ? mFullImage [off].g : mFullImage [off].b ;
224- image.at <cv::Vec3b>(cv::Point (x, y)) = color;
198+ color[0 ] = mChannels [off][blueAPID - 64 ];
199+ color[1 ] = mChannels [off][greenAPID - 64 ];
200+ color[2 ] = mChannels [off][redAPID - 64 ];
225201 }
226202 }
227203
@@ -258,7 +234,7 @@ bool MeteorImage::progressImage(int apd, int mcu_id, int pck_cnt) {
258234
259235 mCurY = 8 * ((pck_cnt - mFirstPacket ) / (14 + 14 + 14 + 1 ));
260236 if (mCurY > mLastY ) {
261- mFullImage .resize (MCU_PER_LINE * 8 * (mCurY + 8 ));
237+ mChannels .resize (MCU_PER_LINE * 8 * (mCurY + 8 ));
262238 }
263239 mLastY = mCurY ;
264240
@@ -314,37 +290,57 @@ void MeteorImage::fillPix(std::array<float, 64>& img_dct, int apd, int mcu_id, i
314290 int y = mCurY + i / 8 ;
315291 uint off = x + y * MCU_PER_LINE * 8 ;
316292
317- if (apd == APID_68 || apd == APID_66) {
318- mFullImage [off].r = t;
319- }
320- if (apd == APID_65) {
321- mFullImage [off].g = t;
322- }
323- if (apd == APID_64) {
324- mFullImage [off].b = t;
293+ switch (apd) {
294+ case 64 :
295+ mChannels [off][APIDs::APID64 - 64 ] = t;
296+ break ;
297+ case 65 :
298+ mChannels [off][APIDs::APID65 - 64 ] = t;
299+ break ;
300+ case 66 :
301+ mChannels [off][APIDs::APID66 - 64 ] = t;
302+ break ;
303+ case 67 :
304+ mChannels [off][APIDs::APID67 - 64 ] = t;
305+ break ;
306+ case 68 :
307+ mChannels [off][APIDs::APID68 - 64 ] = t;
308+ break ;
309+ case 69 :
310+ mChannels [off][APIDs::APID69 - 64 ] = t;
311+ break ;
312+
313+ default :
314+ break ;
325315 }
326316 }
327317}
328318
329319void MeteorImage::decMCUs (const uint8_t * packet, int len, int apd, int pck_cnt, int mcu_id, uint8_t q) {
330320 BitIOConst b (packet);
331321
332- if (!progressImage (apd, mcu_id, pck_cnt))
322+ if (!progressImage (apd, mcu_id, pck_cnt)) {
333323 return ;
324+ }
334325
335- if (apd == APID_64 ) {
326+ if (apd == APIDs::APID64 ) {
336327 mIsChannel64Available = true ;
337328 }
338- if (apd == APID_65 ) {
329+ if (apd == APIDs::APID65 ) {
339330 mIsChannel65Available = true ;
340331 }
341-
342- if (apd == APID_66) {
332+ if (apd == APIDs::APID66) {
343333 mIsChannel66Available = true ;
344334 }
345- if (apd == APID_68) {
335+ if (apd == APIDs::APID67) {
336+ mIsChannel67Available = true ;
337+ }
338+ if (apd == APIDs::APID68) {
346339 mIsChannel68Available = true ;
347340 }
341+ if (apd == APIDs::APID69) {
342+ mIsChannel69Available = true ;
343+ }
348344
349345 std::array<int , 64 > dqt{};
350346 std::array<float , 64 > zdct{}, dct{}, img_dct{};
0 commit comments