Commit f4927d54e55c0782e76c8b6a5e902d488a7546c9
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 | } |