piv-ufo-base.c 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. piv_base->scheduler = ufo_fixed_scheduler_new ();
  13. piv_base->arch = UFO_ARCH_GRAPH (ufo_arch_graph_new (piv_base->resources, NULL));
  14. piv_base->gpu_nodes = ufo_arch_graph_get_gpu_nodes (piv_base->arch);
  15. ufo_base_scheduler_set_gpu_nodes (piv_base->scheduler, piv_base->arch, piv_base->gpu_nodes);
  16. }
  17. void piv_ufo_base_unref(struct piv_ufo_base *piv_base)
  18. {
  19. g_object_unref (piv_base->graph);
  20. g_object_unref (piv_base->scheduler);
  21. g_object_unref (piv_base->manager);
  22. g_object_unref (piv_base->resources);
  23. g_object_unref (piv_base->arch);
  24. }
  25. void piv_ufo_base_connect(struct piv_ufo_base *piv_base, struct piv_nodes *piv,
  26. unsigned scale, unsigned dump_ring_to_image,
  27. UfoTaskNode* global_reader)
  28. {
  29. UfoTaskGraph *graph = piv_base->graph;
  30. ufo_task_graph_connect_nodes (graph, global_reader, piv->broadcast_reader);
  31. if (scale > 1) {
  32. ufo_task_graph_connect_nodes (graph, piv->broadcast_reader, piv->reduce);
  33. ufo_task_graph_connect_nodes (graph, piv->reduce, piv->denoise);
  34. }
  35. else {
  36. ufo_task_graph_connect_nodes (graph, piv->broadcast_reader, piv->denoise);
  37. }
  38. ufo_task_graph_connect_nodes (graph, piv->denoise, piv->contrast);
  39. ufo_task_graph_connect_nodes (graph, piv->contrast, piv->broadcast_contrast);
  40. ufo_task_graph_connect_nodes (graph, piv->broadcast_contrast, piv->fft);
  41. ufo_task_graph_connect_nodes (graph, piv->fft, piv->duplicater);
  42. ufo_task_graph_connect_nodes (graph, piv->ring_pattern, piv->ringfft);
  43. ufo_task_graph_connect_nodes (graph, piv->ringfft, piv->loop_ringfft);
  44. ufo_task_graph_connect_nodes_full (graph, piv->duplicater, piv->fftmult, 0);
  45. ufo_task_graph_connect_nodes_full (graph, piv->loop_ringfft, piv->fftmult, 1);
  46. ufo_task_graph_connect_nodes (graph, piv->fftmult, piv->ringifft);
  47. ufo_task_graph_connect_nodes (graph, piv->ringifft, piv->filter_particle);
  48. ufo_task_graph_connect_nodes (graph, piv->filter_particle, piv->concatenate_result);
  49. ufo_task_graph_connect_nodes (graph, piv->broadcast_contrast, piv->replicater);
  50. ufo_task_graph_connect_nodes_full (graph, piv->replicater, piv->multi_search, 0);
  51. ufo_task_graph_connect_nodes_full (graph, piv->concatenate_result, piv->multi_search, 1);
  52. ufo_task_graph_connect_nodes (graph, piv->multi_search, piv->remove_circle);
  53. ufo_task_graph_connect_nodes (graph, piv->remove_circle, piv->get_dup_circ);
  54. if (dump_ring_to_image) {
  55. ufo_task_graph_connect_nodes (graph, piv->broadcast_reader, piv->replicate_reader);
  56. // Hack required to silence ERROR message for dead lock
  57. ufo_task_graph_connect_nodes (graph, piv->replicate_reader, piv->copy_replicater);
  58. ufo_task_graph_connect_nodes_full (graph, piv->copy_replicater, piv->dump_ring, 0);
  59. ufo_task_graph_connect_nodes_full (graph, piv->get_dup_circ, piv->dump_ring, 1);
  60. ufo_task_graph_connect_nodes (graph, piv->dump_ring, piv->writer);
  61. }
  62. else {
  63. ufo_task_graph_connect_nodes (graph, piv->get_dup_circ, piv->ringwriter);
  64. }
  65. if (piv_base->error)
  66. g_print("Error %s\n", piv_base->error->message);
  67. }