MCPcopy Create free account
hub / github.com/BabitMF/bmf / optimize

Function optimize

bmf/engine/c_engine/src/optimizer.cpp:440–518  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

438}
439
440void optimize(std::vector<NodeConfig> &nodes) {
441 // nodes_done is used to record ffmpeg_filter node that already optimized
442 std::vector<NodeConfig> nodes_done;
443
444 while (true) {
445 std::vector<NodeConfig> nodes_to_merge;
446
447 // put all ffmpeg_filter nodes into nodes_to_merge and try to combine it
448 // to one node
449 for (NodeConfig &node : nodes) {
450 if (node.get_module_info().get_module_name() == "c_ffmpeg_filter" &&
451 std::find(nodes_done.begin(), nodes_done.end(), node) ==
452 nodes_done.end()) {
453 nodes_to_merge.push_back(node);
454 }
455 }
456
457 for (NodeConfig node : nodes_to_merge) {
458 nodes.erase(std::remove(nodes.begin(), nodes.end(), node),
459 nodes.end());
460 }
461
462 if (nodes_to_merge.size() == 0) {
463 break;
464 }
465
466 // nodes to merge should have the same scheduler id
467 int scheduler_id = nodes_to_merge[0].get_scheduler();
468 for (int i = 1; i < nodes_to_merge.size(); i++) {
469 NodeConfig node = nodes_to_merge[i];
470 if (node.get_scheduler() != scheduler_id) {
471 // remove node from nodes_to_merge and add back to node list
472 nodes_to_merge.erase(std::remove(nodes_to_merge.begin(),
473 nodes_to_merge.end(), node),
474 nodes_to_merge.end());
475 nodes.push_back(node);
476 i--;
477 }
478 }
479
480 while (true) {
481 // do node merge
482 NodeConfig merged_node = merge_ffmpeg_filter_nodes(nodes_to_merge);
483 nodes.push_back(merged_node);
484
485 // check if has a circle
486 StreamConfig circle_stream =
487 find_first_circle_node(nodes, merged_node);
488
489 if (circle_stream.get_identifier().length() > 0) {
490 NodeConfig circle_node;
491 // find circle-end node according to stream
492 for (NodeConfig node : nodes_to_merge) {
493 std::vector<StreamConfig> input_streams =
494 node.get_input_streams();
495 if (std::find(input_streams.begin(), input_streams.end(),
496 circle_stream) != input_streams.end()) {
497 circle_node = node;

Callers 1

BMFGraphMethod · 0.85

Calls 11

find_first_circle_nodeFunction · 0.85
get_module_nameMethod · 0.80
endMethod · 0.80
lengthMethod · 0.80
get_module_infoMethod · 0.45
eraseMethod · 0.45
sizeMethod · 0.45
get_schedulerMethod · 0.45
get_identifierMethod · 0.45
get_input_streamsMethod · 0.45

Tested by

no test coverage detected