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