4 # pragma warning(disable: 4005)
8 #include <Gui/StringConv.hh>
10 #include "VideoSource_Controller.hh"
11 #include <Base/Common/getopt_W32.h>
13 #if defined(WIN32) && defined(HAVE_TRIGGER_CLASSES)
14 # include "TriggerIOControl.h"
18 # include <VideoSource/VideoSource_DCAM.hh>
22 #include <Base/Image/ImageIO.hh>
23 #include <Image/Camera.hh>
49 double minShutter,
double maxShutter,
50 double minGain,
double maxGain,
51 double minContrast,
double maxContrast,
52 double minBrightness,
double maxBrightness)
54 wxDefaultPosition, wxSize(400,500), wxSTAY_ON_TOP|wxCAPTION | wxRESIZE_BORDER)
59 minShutter_=minShutter;
60 maxShutter_=maxShutter;
63 minContrast_= minContrast;
64 maxContrast_= maxContrast;
65 minBrightness_= minBrightness;
66 maxBrightness_= maxBrightness;
74 VideoSource_Controller::
75 ~VideoSource_Controller()
78 void VideoSource_Controller::
81 if(minShutter_ == -1 && maxShutter_ == -1)
82 Cam_->GetShutterRange(minShutter_, maxShutter_);
84 if(minGain_ == -1 && maxGain_ == -1)
85 Cam_->GetGainRange(minGain_, maxGain_);
87 if(minContrast_ == -1 && maxContrast_ == -1)
88 Cam_->GetContrastRange(minContrast_, maxContrast_);
90 if(minBrightness_ == -1 && maxBrightness_ == -1)
91 Cam_->GetBrightnessRange(minBrightness_, maxBrightness_);
98 SliderBrightness= NULL;
101 whiteBalanceButton = NULL;
102 auto_sh_Button = NULL;
103 auto_ga_Button = NULL;
104 auto_br_Button = NULL;
105 auto_co_Button = NULL;
106 update_Button = NULL;
107 sliderBox_ShGa = NULL;
109 LetterAscii_ = WXK_F4;
115 auto_shutter =
false;
116 auto_brightness =
false;
117 sliderBox_ShGa_Visible =
true;
120 SetShutterRange((
unsigned)minShutter_,(
unsigned)maxShutter_);
121 SetGainRange((
unsigned)minGain_,(
unsigned)maxGain_);
123 wxSize SlSize(200,35);
124 wxSize BtSize(60,30);
127 wxFlexGridSizer* itemFlexGridSizer =
new wxFlexGridSizer(11, 3, 0, 0);
128 this->SetSizer(itemFlexGridSizer);
130 if (Cam_->HasControlWhiteBalance()){
132 whiteBalanceButton =
new wxButton(
this, ID_BUTTON_WHITEBALANCE,
133 wxT(
"Auto Software\nWhite Balance"),wxDefaultPosition,wxSize(120,60));
135 wxStaticText *textWbr =
new wxStaticText(
this,ID_TEXT, wxT(
"red gain"));
136 SliderWbRed =
new wxSlider(
this, ID_WBMANUAL, 50, 0, 100,
137 wxDefaultPosition,SlSize,
138 wxSL_HORIZONTAL | wxSL_LABELS | wxSL_TOP |wxSL_SELRANGE,
139 wxDefaultValidator, wxT(
"RedGain"));
141 SliderWbRed->Enable(
true);
143 wxBoxSizer *slWbr =
new wxBoxSizer(wxVERTICAL);
144 slWbr->Add(textWbr,0,wxALL,2);
145 slWbr->Add(SliderWbRed,0,wxALL, 2);
148 wxStaticText *textWbb =
new wxStaticText(
this,ID_TEXT, wxT(
"blue gain"));
149 SliderWbBlue =
new wxSlider(
this, ID_WBMANUAL, 50, 0, 100,
150 wxDefaultPosition,SlSize,
151 wxSL_HORIZONTAL | wxSL_LABELS | wxSL_TOP |wxSL_SELRANGE,
152 wxDefaultValidator, wxT(
"BlueGain"));
154 SliderWbBlue->Enable(
true);
156 wxBoxSizer *slWbb =
new wxBoxSizer(wxVERTICAL);
157 slWbb->Add(textWbb,0,wxALL,2);
158 slWbb->Add(SliderWbBlue,0,wxALL, 2);
161 itemFlexGridSizer->Add(whiteBalanceButton,0,
162 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
163 itemFlexGridSizer->Add(slWbr,0,
164 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
165 itemFlexGridSizer->Add(slWbb,0,
166 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
169 if (Cam_->HasControlBrightness()){
170 wxStaticText *textBr =
new wxStaticText(
this,ID_TEXT, wxT(
"Brightness"));
171 SliderBrightness =
new wxSlider(
this, ID_BRIGHTNESS, 157, 0, 255,
172 wxDefaultPosition,SlSize,
173 wxSL_HORIZONTAL | wxSL_LABELS | wxSL_TOP |wxSL_SELRANGE,
174 wxDefaultValidator, wxT(
"Brightness"));
176 auto_br_Button =
new wxButton(
this, ID_BUTTON_AUTO_BRIGHTNESS,
177 wxT(
"Manual"),wxDefaultPosition,BtSize);
179 SliderBrightness->Enable(
true);
181 itemFlexGridSizer->Add(textBr,0,
182 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
183 itemFlexGridSizer->Add(SliderBrightness,0,
184 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
185 itemFlexGridSizer->Add(auto_br_Button,0,
186 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
189 if (Cam_->HasControlGain()){
190 wxStaticText *textGa =
new wxStaticText(
this,ID_TEXT, wxT(
"Gain [dB]"));
191 SliderGain =
new wxSlider(
this, ID_GAIN,
int((maxGain_-minGain_)/2.0), (
int)minGain_, (
int)maxGain_,
192 wxDefaultPosition,SlSize,
193 wxSL_HORIZONTAL | wxSL_LABELS | wxSL_TOP |wxSL_SELRANGE,
194 wxDefaultValidator, wxT(
"Gain"));
196 auto_ga_Button =
new wxButton(
this, ID_BUTTON_AUTO_GAIN,
197 wxT(
"Manual"),wxDefaultPosition,BtSize);
199 SliderGain->Enable(
true);
201 itemFlexGridSizer->Add(textGa,0,
202 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
203 itemFlexGridSizer->Add(SliderGain,0,
204 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
205 itemFlexGridSizer->Add(auto_ga_Button,0,
206 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
210 if (Cam_->HasControlContrast()){
211 wxStaticText *textContrast =
new wxStaticText(
this,ID_TEXT, wxT(
"Contrast"));
212 SliderContrast =
new wxSlider(
this, ID_CONTRAST,
int((maxContrast_ - minContrast_)/2.0),
213 (
int)minContrast_, (
int)maxContrast_,
214 wxDefaultPosition,SlSize,
215 wxSL_HORIZONTAL | wxSL_LABELS | wxSL_TOP |wxSL_SELRANGE,
216 wxDefaultValidator, wxT(
"Gain"));
218 auto_co_Button =
new wxButton(
this, ID_BUTTON_AUTO_CONTRAST,
219 wxT(
"Manual"),wxDefaultPosition,BtSize);
221 SliderContrast->Enable(
true);
223 itemFlexGridSizer->Add(textContrast,0,
224 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
225 itemFlexGridSizer->Add(SliderContrast,0,
226 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
227 itemFlexGridSizer->Add(auto_co_Button,0,
228 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
232 if (Cam_->HasControlShutter()){
233 wxStaticText *textShutter =
new wxStaticText(
this,ID_TEXT, wxT(
"Shutter [ms]"));
234 SliderShutter =
new wxSlider(
this, ID_SHUTTER,
int((maxShutter_-minShutter_)/2.0),
235 (
int)minShutter_, (
int)maxShutter_,
236 wxDefaultPosition,SlSize,
237 wxSL_HORIZONTAL | wxSL_LABELS | wxSL_TOP |wxSL_SELRANGE,
238 wxDefaultValidator, wxT(
"Shutter"));
240 auto_sh_Button =
new wxButton(
this, ID_BUTTON_AUTO_SHUTTER,
241 wxT(
"Manual"),wxDefaultPosition,BtSize);
243 SliderShutter->Enable(
true);
244 itemFlexGridSizer->Add(textShutter,0,
245 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
246 itemFlexGridSizer->Add(SliderShutter,0,
247 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
248 itemFlexGridSizer->Add(auto_sh_Button,0,
249 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
254 showButton =
new wxButton(
this, ID_HIDE, wxT(
"Hide"),
255 wxDefaultPosition,BtSize);
256 update_Button =
new wxButton(
this, ID_BUTTON_UPDATE,
257 wxT(
"Update"),wxDefaultPosition,BtSize);
259 vBox =
new wxBoxSizer(wxHORIZONTAL);
260 vBox->Add(showButton,0,wxALIGN_LEFT | wxBOTTOM);
261 vBox->Add(update_Button, 0, wxALIGN_RIGHT | wxBOTTOM);
263 itemFlexGridSizer->Add(vBox,0,
264 wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
269 wxCommandEvent fakeEvent;
274 bool VideoSource_Controller::
277 bool res = wxWindow::Show(show);
288 void VideoSource_Controller::
289 SetCloseShortcut(
const int &asciiCode,
290 bool ctrl,
bool shift,
bool alt)
292 LetterAscii_ = asciiCode;
298 bool VideoSource_Controller::
299 AreModifiersCorrect_(
const wxKeyEvent &event)
301 return ( (event.ShiftDown() == Shift_)
302 && (event.ControlDown() == Ctrl_)
303 && (event.AltDown() == Alt_) );
306 void VideoSource_Controller::
312 void VideoSource_Controller::
313 OnKeyUp(wxKeyEvent& event)
315 int keyCode =
event.GetKeyCode();
318 if ( AreModifiersCorrect_(event) ) {
319 if ( keyCode == LetterAscii_ ) {
328 void VideoSource_Controller::
329 OnHide(wxCommandEvent& event)
334 void VideoSource_Controller::
335 OnClose(wxCloseEvent& event)
339 if ( parent != NULL ) parent->Refresh();
342 void VideoSource_Controller::
343 OnGain(wxScrollEvent& event)
345 float value = (float)SliderGain->GetValue();
349 Cam_->SetGain(value);
354 void VideoSource_Controller::
355 OnShutter(wxScrollEvent& event)
359 float value = (float)SliderShutter->GetValue();
367 cout<<
"Set Shutter:"<<value<<endl;
368 int ret = Cam_->SetShutter(value);
369 if(ret <0) BIASERR(
"Setting Shutter failed!");
370 cout<<
"Get Shutter:"<<Cam_->GetShutter()<<endl;
374 void VideoSource_Controller::
375 OnWhiteBalanceManual(wxScrollEvent& event)
377 float vred = (float)(SliderWbRed->GetValue() / 100.0 - 0.5);
378 float vblue = (float)(SliderWbBlue->GetValue() / 100.0 - 0.5);
380 Cam_->SetWhiteBalance(vred,vblue);
382 std::cout << vred << std::endl;
386 void VideoSource_Controller::
387 OnWhiteBalance(wxCommandEvent& event)
390 Cam_->SoftwareWhiteBalance();
393 void VideoSource_Controller::
394 OnAuto_Shutter(wxCommandEvent& event)
404 void VideoSource_Controller::
405 OnAuto_Gain(wxCommandEvent& event)
415 void VideoSource_Controller::
416 OnAuto_Brightness(wxCommandEvent& event)
418 if(!auto_brightness) {
427 void VideoSource_Controller::
428 OnBrightness(wxScrollEvent& event)
432 float value = (float)SliderBrightness->GetValue();
434 Cam_->SetBrightness(value);
438 void VideoSource_Controller::
439 OnContrast(wxScrollEvent& event)
443 cout<<
"SetContrast:"<<SliderContrast->GetValue()<<endl;
444 Cam_->SetContrast((
float)SliderContrast->GetValue());
445 cout<<
"GetContrast:"<<Cam_->GetContrast()<<endl;
449 void VideoSource_Controller::
454 if (Cam_->HasControlShutter()){
455 current= (float)(Cam_->GetShutter()*1000.0);
457 SliderShutter->SetValue(
int(current));
458 bool autoon = Cam_->GetAutoShutter();
459 if (autoon) auto_sh_Button->SetLabel(wxT(
"Auto"));
460 else auto_sh_Button->SetLabel(wxT(
"Manual"));
462 if (Cam_->HasControlGain()){
463 current = Cam_->GetGain();
466 SliderGain->SetValue(
int(current));
467 bool autoon = Cam_->GetAutoGain();
468 if (autoon) auto_ga_Button->SetLabel(wxT(
"Auto"));
469 else auto_ga_Button->SetLabel(wxT(
"Manual"));
471 if (Cam_->HasControlContrast()){
472 current = Cam_->GetContrast();
474 SliderContrast->SetValue(
int(current));
476 if (Cam_->HasControlBrightness()){
477 current = Cam_->GetBrightness();
479 SliderBrightness->SetValue(
int(current));
480 bool autoon = Cam_->GetAutoBrightness();
481 if (autoon) auto_br_Button->SetLabel(wxT(
"Auto"));
482 else auto_br_Button->SetLabel(wxT(
"Manual"));
487 void VideoSource_Controller::
488 OnUpdate(wxCommandEvent& event)
493 void VideoSource_Controller::
499 Cam_->SetAutoShutter(
true);
500 auto_sh_Button->SetLabel(wxT(
"Auto"));
505 Cam_->SetAutoGain(
true);
506 auto_ga_Button->SetLabel(wxT(
"Auto"));
510 auto_brightness =
true;
511 Cam_->SetAutoBrightness(
true);
512 auto_br_Button->SetLabel(wxT(
"Auto"));
516 void VideoSource_Controller::
521 auto_shutter =
false;
522 Cam_->SetAutoShutter(
false);
523 auto_sh_Button->SetLabel(wxT(
"Manual"));
528 Cam_->SetAutoGain(
false);
529 auto_ga_Button->SetLabel(wxT(
"Manual"));
533 auto_brightness =
false;
534 Cam_->SetAutoBrightness(
false);
535 auto_br_Button->SetLabel(wxT(
"Manual"));
539 void VideoSource_Controller::
540 SetShutterRange(
unsigned int min,
unsigned int max)
542 if (Cam_->HasControlShutter() && SliderShutter != NULL)
543 SliderShutter->SetRange(min,max);
546 void VideoSource_Controller::
547 SetGainRange(
unsigned int min,
unsigned int max)
549 if (Cam_->HasControlGain() && SliderGain != NULL)
550 SliderGain->SetRange(min,max);
553 void VideoSource_Controller::
554 SetBrightnessRange(
unsigned int min,
unsigned int max)
556 if (Cam_->HasControlBrightness()&& SliderShutter != NULL)
557 SliderBrightness->SetRange(min,max);
560 void VideoSource_Controller::
561 SetContrastRange(
unsigned int min,
unsigned int max)
563 if (Cam_->HasControlContrast() && SliderContrast!= NULL)
564 SliderContrast->SetRange(min,max);
Defines a common interface to different devices.