piv-ufo-base.c 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "piv-ufo-base.h"
  2. #include "piv-nodes.h"
  3. void
  4. piv_ufo_base_init(struct piv_ufo_base *piv_base)
  5. {
  6. piv_base->error = NULL;
  7. piv_base->graph = UFO_TASK_GRAPH (ufo_task_graph_new ());
  8. piv_base->manager = ufo_plugin_manager_new ();
  9. piv_base->resources = ufo_resources_new (&piv_base->error);
  10. if (piv_base->error)
  11. g_print("Error %s\n", piv_base->error->message);
  12. ufo_resources_add_path (piv_base->resources, "src/kernel/denoise");
  13. ufo_resources_add_path (piv_base->resources, "src/kernel/ordfilt");
  14. ufo_resources_add_path (piv_base->resources, "src/kernel/fft");
  15. piv_base->scheduler = ufo_fixed_scheduler_new ();
  16. piv_base->arch = UFO_ARCH_GRAPH(ufo_arch_graph_new(piv_base->resources,
  17. NULL));
  18. piv_base->gpu_nodes = ufo_arch_graph_get_gpu_nodes(piv_base->arch);
  19. ufo_base_scheduler_set_gpu_nodes(piv_base->scheduler, piv_base->arch,
  20. piv_base->gpu_nodes);
  21. }
  22. void piv_ufo_base_unref(struct piv_ufo_base *piv_base)
  23. {
  24. g_object_unref (piv_base->graph);
  25. g_object_unref (piv_base->scheduler);
  26. g_object_unref (piv_base->manager);
  27. g_object_unref (piv_base->resources);
  28. g_object_unref (piv_base->arch);
  29. }
  30. void piv_ufo_base_connect(struct piv_ufo_base *piv_base, struct piv_nodes *piv,
  31. unsigned scale, unsigned dump_ring_to_image,
  32. UfoTaskNode* global_reader)
  33. {
  34. UfoTaskGraph *graph = piv_base->graph;
  35. ufo_task_graph_connect_nodes (graph, global_reader, piv->broadcast_reader);
  36. if (scale > 1) {
  37. ufo_task_graph_connect_nodes (graph, piv->broadcast_reader, piv->reduce);
  38. ufo_task_graph_connect_nodes (graph, piv->reduce, piv->denoise);
  39. }
  40. else
  41. ufo_task_graph_connect_nodes (graph, piv->broadcast_reader, piv->denoise);
  42. ufo_task_graph_connect_nodes (graph, piv->denoise, piv->contrast);
  43. ufo_task_graph_connect_nodes (graph, piv->contrast, piv->broadcast_contrast);
  44. ufo_task_graph_connect_nodes (graph, piv->broadcast_contrast, piv->fft);
  45. ufo_task_graph_connect_nodes (graph, piv->fft, piv->duplicater);
  46. ufo_task_graph_connect_nodes (graph, piv->ring_pattern, piv->ringfft);
  47. ufo_task_graph_connect_nodes (graph, piv->ringfft, piv->loop_ringfft);
  48. //expand_graph(manager, gpu_nodes, duplicater, loop_ringfft, ringifft,
  49. // ring_start, ring_end, ring_step, piv_base->error, graph);
  50. ufo_task_graph_connect_nodes_full (graph, piv->duplicater, piv->fftmult, 0);
  51. ufo_task_graph_connect_nodes_full (graph, piv->loop_ringfft, piv->fftmult, 1);
  52. //expand_graph2 (manager, gpu_nodes, piv->fftmult, piv->filter_particle, "ringifft",
  53. // &piv_base->error, graph);
  54. ufo_task_graph_connect_nodes (graph, piv->fftmult, piv->ringifft);
  55. ufo_task_graph_connect_nodes (graph, piv->ringifft, piv->filter_particle);
  56. ufo_task_graph_connect_nodes (graph, piv->filter_particle, piv->concatenate_result);
  57. ufo_task_graph_connect_nodes (graph, piv->broadcast_contrast, piv->replicater);
  58. ufo_task_graph_connect_nodes_full (graph, piv->replicater,
  59. piv->multi_search, 0);
  60. ufo_task_graph_connect_nodes_full (graph, piv->concatenate_result,
  61. piv->multi_search, 1);
  62. ufo_task_graph_connect_nodes (graph, piv->multi_search, piv->remove_circle);
  63. ufo_task_graph_connect_nodes (graph, piv->remove_circle, piv->get_dup_circ);
  64. if (dump_ring_to_image) {
  65. ufo_task_graph_connect_nodes (graph, piv->broadcast_reader,
  66. piv->replicate_reader);
  67. // Hack required to silence ERROR message for dead lock
  68. ufo_task_graph_connect_nodes (graph, piv->replicate_reader,
  69. piv->copy_replicater);
  70. ufo_task_graph_connect_nodes_full (graph, piv->copy_replicater,
  71. piv->dump_ring, 0);
  72. ufo_task_graph_connect_nodes_full (graph, piv->get_dup_circ,
  73. piv->dump_ring, 1);
  74. ufo_task_graph_connect_nodes (graph, piv->dump_ring, piv->writer);
  75. }
  76. else
  77. ufo_task_graph_connect_nodes (graph, piv->get_dup_circ, piv->ringwriter);
  78. if (piv_base->error)
  79. g_print("Error %s\n", piv_base->error->message);
  80. }