1 // This is brl/bpro/core/vil_pro/processes/bil_create_raw_image_istream_process.cxx
2 #include <iostream>
3 #include <string>
4 #include <sstream>
5 #include <bprb/bprb_func_process.h>
6 //:
7 // \file
8
9 #include <bprb/bprb_parameters.h>
10 #ifdef _MSC_VER
11 # include "vcl_msvc_warnings.h"
12 #endif
13 #include "vil/vil_image_view_base.h"
14 #include <bil/bil_raw_image_istream.h>
15
16 //: Constructor
bil_create_raw_image_istream_process_cons(bprb_func_process & pro)17 bool bil_create_raw_image_istream_process_cons(bprb_func_process& pro)
18 {
19 //process takes 1 input
20 std::vector<std::string> input_types_(4);
21 input_types_[0] = "vcl_string"; //raw file
22 input_types_[1] = "int"; //raw file
23 input_types_[2] = "int"; //raw file
24 input_types_[3] = "int"; //raw file
25
26 // process has 2 outputs
27 std::vector<std::string> output_types_(2);
28 output_types_[0] = "bil_raw_image_istream_sptr"; //an initialized istream_sptr
29 output_types_[1] = "int";
30 return pro.set_input_types(input_types_)
31 && pro.set_output_types(output_types_);
32 }
33
34
35 //: Execute the process
bil_create_raw_image_istream_process(bprb_func_process & pro)36 bool bil_create_raw_image_istream_process(bprb_func_process& pro)
37 {
38 // Sanity check
39 if (pro.n_inputs()<1) {
40 std::cout << "bil_create_raw_image_istream_process: The number of inputs should be 1" << std::endl;
41 return false;
42 }
43 //Retrieve filename from input
44 std::string raw_file = pro.get_input<std::string>(0);
45 int ni = pro.get_input<int>(1);
46 int nj = pro.get_input<int>(2);
47 int pixelsize = pro.get_input<int>(3);
48
49 //: Constructor - from a file glob string
50 bil_raw_image_istream_sptr stream;
51 if(ni > 0 && nj >0 && pixelsize > 0)
52 {
53 stream = new bil_raw_image_istream();
54 stream->open(raw_file);//,ni,nj,pixelsize);
55 }
56 else
57 stream = new bil_raw_image_istream(raw_file);
58
59 pro.set_output_val<bil_raw_image_istream_sptr>(0, stream);
60 pro.set_output_val<int> (1, stream->num_frames());
61 return true;
62 }
63
64
65 //---------------------------------------------------------------
66 // get next image from stream process
67 //---------------------------------------------------------------
68 //: Constructor
bil_read_frame_process_cons(bprb_func_process & pro)69 bool bil_read_frame_process_cons(bprb_func_process& pro)
70 {
71 //process takes 1 input
72 std::vector<std::string> input_types_(1);
73 input_types_[0] = "bil_raw_image_istream_sptr"; //raw file
74
75 // process has 1 output:
76 std::vector<std::string> output_types_(1);
77 output_types_[0] = "vil_image_view_base_sptr"; //an initialized istream_sptr
78 //output_types_[1] = "unsigned"; //time stamp
79 return pro.set_input_types(input_types_) && pro.set_output_types(output_types_);
80 }
81
82 //: Execute the process
bil_read_frame_process(bprb_func_process & pro)83 bool bil_read_frame_process(bprb_func_process& pro)
84 {
85 // Sanity check
86 if (pro.n_inputs()<1) {
87 std::cout << "bil_create_raw_image_istream_process: The number of inputs should be 1" << std::endl;
88 return false;
89 }
90 //Retrieve filename from input
91 bil_raw_image_istream_sptr stream = pro.get_input<bil_raw_image_istream_sptr>(0);
92 vil_image_view_base_sptr img = stream->read_frame();
93 //unsigned time = stream->time_stamp();
94
95 //out
96 pro.set_output_val<vil_image_view_base_sptr>(0, img);
97 //pro.set_output_val<unsigned>(1, time);
98 return true;
99 }
100
101
102 //---------------------------------------------------------------
103 // seek stream to a certain image
104 //---------------------------------------------------------------
105 //: Constructor
bil_seek_frame_process_cons(bprb_func_process & pro)106 bool bil_seek_frame_process_cons(bprb_func_process& pro)
107 {
108 //process takes 2 inputs
109 std::vector<std::string> input_types_(2);
110 input_types_[0] = "bil_raw_image_istream_sptr"; //raw file
111 input_types_[1] = "unsigned"; //frame to seek to
112
113 // process has 2 outputs
114 std::vector<std::string> output_types_(1);
115 output_types_[0] = "vil_image_view_base_sptr"; //an initialized istream_sptr
116 return pro.set_input_types(input_types_) && pro.set_output_types(output_types_);
117 }
118
119 //: Execute the process
bil_seek_frame_process(bprb_func_process & pro)120 bool bil_seek_frame_process(bprb_func_process& pro)
121 {
122 // Sanity check
123 if (pro.n_inputs()<2) {
124 std::cout << "bil_create_raw_image_istream_process: The number of inputs should be 2" << std::endl;
125 return false;
126 }
127
128 //Retrieve filename from input
129 bil_raw_image_istream_sptr stream = pro.get_input<bil_raw_image_istream_sptr>(0);
130 auto frame = pro.get_input<unsigned>(1);
131
132 //seek, retrieve image, and output
133 stream->seek_frame(frame);
134
135 vil_image_view_base_sptr img = stream->current_frame();
136 //out
137 pro.set_output_val<vil_image_view_base_sptr>(0, img);
138 return true;
139 }
140