Commit f4927d54e55c0782e76c8b6a5e902d488a7546c9

Authored by Charles Otto
1 parent e4df7143

Hacks to make stream work even when sending empty matrices

Showing 1 changed file with 60 additions and 5 deletions
openbr/plugins/stream.cpp
@@ -468,6 +468,7 @@ public: @@ -468,6 +468,7 @@ public:
468 current_matrix_idx = 0; 468 current_matrix_idx = 0;
469 469
470 data_ok = current_matrix_idx < basis.size(); 470 data_ok = current_matrix_idx < basis.size();
  471 + qDebug("concrete open res is %d %d %d", data_ok, current_matrix_idx, basis.size());
471 return data_ok; 472 return data_ok;
472 } 473 }
473 474
@@ -488,7 +489,9 @@ private: @@ -488,7 +489,9 @@ private:
488 if (!data_ok) 489 if (!data_ok)
489 return false; 490 return false;
490 491
  492 +
491 output.data.append(basis[current_matrix_idx]); 493 output.data.append(basis[current_matrix_idx]);
  494 + output.data.last().file = basis.file;
492 current_matrix_idx++; 495 current_matrix_idx++;
493 496
494 output.sequenceNumber = next_sequence_number; 497 output.sequenceNumber = next_sequence_number;
@@ -506,6 +509,52 @@ private: @@ -506,6 +509,52 @@ private:
506 bool data_ok; 509 bool data_ok;
507 }; 510 };
508 511
  512 +class SingleDataSource : public DataSource
  513 +{
  514 +public:
  515 + SingleDataSource(int maxFrames) : DataSource(maxFrames)
  516 + {
  517 + data_ok = false;
  518 + }
  519 +
  520 + // To "open" it we just set appropriate indices, we assume that if this
  521 + // is an image, it is already loaded into memory.
  522 + bool concreteOpen(Template &input)
  523 + {
  524 + basis = input;
  525 +// basis.file.name = (Globals->path.isEmpty() ? "" : Globals->path + "/") + basis.file.name;
  526 +
  527 + data_ok =true;
  528 + return data_ok;
  529 + }
  530 +
  531 + bool isOpen() {
  532 + return data_ok;
  533 + }
  534 +
  535 + void close()
  536 + {
  537 + data_ok = false;
  538 + basis.clear();
  539 + }
  540 +
  541 +private:
  542 + bool getNext(FrameData & output)
  543 + {
  544 + if (!data_ok)
  545 + return false;
  546 +
  547 + output.data.append(basis);
  548 + data_ok = false;
  549 + return true;
  550 + }
  551 +
  552 + Template basis;
  553 +
  554 + // Have we sent our template yet?
  555 + bool data_ok;
  556 +};
  557 +
509 558
510 class ProcessingStage; 559 class ProcessingStage;
511 560
@@ -1153,14 +1202,20 @@ public: @@ -1153,14 +1202,20 @@ public:
1153 1202
1154 bool open_res = false; 1203 bool open_res = false;
1155 1204
  1205 + if (mode == DirectStreamTransform::DistributeFrames)
  1206 + {
  1207 + actualSource = new SingleDataSource(0);
  1208 + open_res = actualSource->concreteOpen(input);
  1209 + }
1156 // Input has no matrices? Its probably a video that hasn't been loaded yet 1210 // Input has no matrices? Its probably a video that hasn't been loaded yet
1157 - if (mode == DirectStreamTransform::StreamVideo || mode ~= DirectStreamTransform::DistributeFrames && input.empty()) { 1211 + else if (mode == DirectStreamTransform::StreamVideo || (mode == DirectStreamTransform::Auto && input.empty()) ) {
1158 actualSource = new VideoDataSource(0); 1212 actualSource = new VideoDataSource(0);
1159 open_res = actualSource->concreteOpen(input); 1213 open_res = actualSource->concreteOpen(input);
1160 } 1214 }
1161 // If the input is not empty, we assume it is a set of frames already 1215 // If the input is not empty, we assume it is a set of frames already
1162 // in memory. 1216 // in memory.
1163 else { 1217 else {
  1218 + qDebug("in template open");
1164 actualSource = new TemplateDataSource(0); 1219 actualSource = new TemplateDataSource(0);
1165 open_res = actualSource->concreteOpen(input); 1220 open_res = actualSource->concreteOpen(input);
1166 } 1221 }
@@ -1194,8 +1249,8 @@ protected: @@ -1194,8 +1249,8 @@ protected:
1194 // Override the sequence number set by actualSource 1249 // Override the sequence number set by actualSource
1195 output.data.last().file.set("FrameNumber", output.sequenceNumber); 1250 output.data.last().file.set("FrameNumber", output.sequenceNumber);
1196 next_sequence_number++; 1251 next_sequence_number++;
1197 - if (output.data.last().last().empty())  
1198 - qDebug("broken matrix"); 1252 +// if (output.data.last().last().empty())
  1253 +// qDebug("broken matrix");
1199 return true; 1254 return true;
1200 } 1255 }
1201 1256
@@ -1223,8 +1278,8 @@ protected: @@ -1223,8 +1278,8 @@ protected:
1223 output.sequenceNumber = next_sequence_number++; 1278 output.sequenceNumber = next_sequence_number++;
1224 output.data.last().file.set("FrameNumber", output.sequenceNumber); 1279 output.data.last().file.set("FrameNumber", output.sequenceNumber);
1225 1280
1226 - if (output.data.last().last().empty())  
1227 - qDebug("broken matrix"); 1281 +// if (output.data.last().last().empty())
  1282 +// qDebug("broken matrix");
1228 1283
1229 return res; 1284 return res;
1230 } 1285 }