// generated by Fast Light User Interface Designer (fluid) version 1.0300 #include "stdafx.h" #include "OBPM_UI.h" OBPMViewUI::OBPMViewUI() { int wCam,hCam; wCam=4; // 1280; hCam=3; //960; //layout of widgets of interface { int wWin,hWin; mainWindow = new Fl_Double_Window(1600, 844, "Video Player"); mainWindow->fullscreen(); mainWindow->user_data((void*)(this)); wWin=mainWindow->decorated_w(); hWin=mainWindow->decorated_h();
int wZoomSlider,hZoomSlider; hZoomSlider=30; int wYPanSlider,hYPanSlider; wYPanSlider=30; int wXPanSlider,hXPanSlider; hXPanSlider=30; int wView,hView; hView=hWin; int wBox,hBox; hBox=hView-hZoomSlider-hXPanSlider; wBox=1.0*wCam/hCam*hBox; wView=wBox+wYPanSlider; wZoomSlider=wBox; hYPanSlider=hBox; wXPanSlider=wBox; { VideoView = new Fl_Group(0, 0, wView, hView); VideoView->align(Fl_Align(FL_ALIGN_CENTER)); { zoom_fit=new Fl_Button(0,0,wYPanSlider,hZoomSlider,"@<->"); } // Fl_Button* zoom_fit { origin_fit=new Fl_Button(0,hZoomSlider+hYPanSlider, wYPanSlider,hXPanSlider,"@+"); }// Fl_Button* origin_fit { zoom = new Fl_Value_Slider(wYPanSlider, 0, wZoomSlider, hZoomSlider, "Zoom"); zoom->type(5); zoom->selection_color((Fl_Color)1); zoom->labeltype(FL_NO_LABEL); zoom->labelfont(1); zoom->labelsize(12); zoom->minimum(0.01); zoom->maximum(10); zoom->step(0.01); zoom->value(1.0); zoom->align(Fl_Align(FL_ALIGN_LEFT)); } // Fl_Slider* zoom { ypan = new Fl_Value_Slider(0, hZoomSlider, wYPanSlider, hYPanSlider, "Y Pan"); ypan->type(4); ypan->selection_color((Fl_Color)4); ypan->labeltype(FL_NO_LABEL); ypan->labelsize(12); ypan->minimum(-1.0); ypan->maximum(1.0); ypan->step(0.01); ypan->value(0.0); ypan->align(Fl_Align(FL_ALIGN_LEFT)); } // Fl_Slider* ypan { xpan = new Fl_Value_Slider(wYPanSlider, hView-hXPanSlider, wXPanSlider, hXPanSlider, "X pan"); xpan->type(5); xpan->selection_color((Fl_Color)4); xpan->labeltype(FL_NO_LABEL); xpan->labelfont(1); xpan->labelsize(12); xpan->minimum(-1.0); xpan->maximum(1.0); xpan->step(0.01); xpan->value(0.0); xpan->align(Fl_Align(FL_ALIGN_LEFT)); } // Fl_Slider* xpan { glView = new VideoGlWin(wYPanSlider,hZoomSlider,wBox,hBox); glView->selection_color((Fl_Color)10); } VideoView->end(); } // Fl_Group* VideoView int wBtnPannel,hBtnPannel; wBtnPannel=wWin-wView; hBtnPannel=wBtnPannel*0.3; int mBtn=3,nBtn=2; int wBtn,hBtn; wBtn=wBtnPannel/mBtn*0.8; hBtn=hBtnPannel/nBtn*0.8; int dwBtn,dhBtn; dwBtn=(wBtnPannel-wBtn*mBtn)/(mBtn+1.0); dhBtn=(hBtnPannel-hBtn*nBtn)/(nBtn+1.0); { grpCommandBtn = new Fl_Group(wWin-wBtnPannel, hWin-hBtnPannel, wBtnPannel, hBtnPannel); grpCommandBtn->box(FL_FLAT_BOX); grpCommandBtn->color((Fl_Color)33); grpCommandBtn->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT)); { btnFileSrc = new Fl_Light_Button(wWin-wBtnPannel+1.0*wBtn+2.0*dwBtn, hWin-hBtnPannel+1.0*dhBtn, wBtn, hBtn, "Open File..."); btnFileSrc->labelfont(1); btnFileSrc->labelsize(20); btnFileSrc->selection_color((Fl_Color)2); } // Fl_Button* btnFileSrc grpCommandBtn->end(); } // Fl_Group* grpCommandBtn //set the callback functions btnFileSrc->callback((Fl_Callback*)cb_FileSrc); zoom->callback((Fl_Callback*)cb_zoom); xpan->callback((Fl_Callback*)cb_xpan); ypan->callback((Fl_Callback*)cb_ypan); zoom_fit->callback( (Fl_Callback*)cb_zoom_fit); origin_fit->callback( (Fl_Callback*)cb_origin_fit); mainWindow->end(); } // Fl_Double_Window* mainWindow SRC_ID=0; m_pVideoFileCapture=NULL; m_continueCaptureThread=false; m_rawVideoframe=NULL; m_heventCaptureThreadDone = CreateEvent( NULL, FALSE, FALSE, NULL ); } void OBPMViewUI::start(int argc,char**argv) { mainWindow->show(argc,argv); } void OBPMViewUI::cb_zoom_i(Fl_Value_Slider * o, void * v) { this->glView->zoom_ratio=o->value(); this->glView->redraw(); } void OBPMViewUI::cb_zoom(Fl_Value_Slider * o, void * v) { ((OBPMViewUI*)(o->parent()->parent()->user_data()))->cb_zoom_i(o,v); } void OBPMViewUI::cb_xpan_i(Fl_Value_Slider* o, void*) { this->glView->xpan_ratio=o->value(); this->glView->redraw(); } void OBPMViewUI::cb_xpan(Fl_Value_Slider* o, void* v) { ((OBPMViewUI*)(o->parent()->parent()->user_data()))->cb_xpan_i(o,v); } void OBPMViewUI::cb_ypan_i(Fl_Value_Slider* o, void*) { this->glView->ypan_ratio=o->value(); this->glView->redraw(); } void OBPMViewUI::cb_ypan(Fl_Value_Slider* o, void* v) { ((OBPMViewUI*)(o->parent()->parent()->user_data()))->cb_ypan_i(o,v); } void OBPMViewUI::cb_zoom_fit_i(Fl_Button* o, void* v) { this->glView->zoom_ratio=1.0; this->zoom->value(1.0); this->glView->redraw(); } void OBPMViewUI::cb_zoom_fit(Fl_Button* o, void* v) { ((OBPMViewUI*)(o->parent()->parent()->user_data()))->cb_zoom_fit_i(o,v); } void OBPMViewUI::cb_origin_fit_i(Fl_Button* o, void* v) { this->glView->xpan_ratio=0.0; this->glView->ypan_ratio=0.0; this->xpan->value(0.0); this->ypan->value(0.0); this->glView->redraw(); } void OBPMViewUI::cb_origin_fit(Fl_Button* o, void* v) { ((OBPMViewUI*)(o->parent()->parent()->user_data()))->cb_origin_fit_i(o,v); } void OBPMViewUI::cb_FileSrc_i(Fl_Light_Button* o, void* v) { OBPMViewUI* pUI=((OBPMViewUI*)(o->parent()->parent()->user_data())); if(pUI->SRC_ID==0) { bool bSuccess; bSuccess=true; //file choose dialog// Fl_Native_File_Chooser fnfc; const char szFilter[1024]= "Video files(*.mpg,*.mpeg,*.mov,*.avi)\t*.{mpg,mpeg,mov,avi}\n"; fnfc.title("Choose a video file"); fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE); fnfc.filter(szFilter); switch(fnfc.show()) { case -1: case 1: o->clear(); return; break; default: break; } CvCapture *pCapture; pCapture=cvCreateFileCapture(fnfc.filename()); if(!pCapture) bSuccess=false; else pUI->VideoFileConnect(pCapture); if(bSuccess) { ((Fl_Light_Button*) o)->set(); pUI->SRC_ID=1; } else { ((Fl_Light_Button*) o)->clear(); fl_alert("Can not open specified file! \n Please check again."); } } else if(pUI->SRC_ID==1) { pUI->m_continueCaptureThread=false; DWORD dwRet = WaitForSingleObject( m_heventCaptureThreadDone, 5000 ); if(dwRet==WAIT_TIMEOUT) fl_alert("Can not get grab finish signal within 5s"); if(pUI->glView->m_processedImage) { cvReleaseImage(&pUI->glView->m_processedImage); pUI->glView->m_processedImage=NULL; } ((Fl_Light_Button*) o)->clear(); pUI->glView->redraw(); SRC_ID=0; } } void OBPMViewUI::cb_FileSrc(Fl_Light_Button* o, void* v) { ((OBPMViewUI*)(o->parent()->parent()->user_data()))->cb_FileSrc_i(o,v); } void OBPMViewUI::VideoFileConnect(CvCapture *pVideo) { m_pVideoFileCapture=pVideo; m_continueCaptureThread=true; fl_create_thread(thread_capture_video_file,&ThreadCaptureVideoFile,this); } void* OBPMViewUI::ThreadCaptureVideoFile(void* pparam) { OBPMViewUI* pUI =( (OBPMViewUI*) pparam); unsigned int uiRet; uiRet=pUI->DoCaptureLoop(); if(uiRet!=0) { fl_alert("The grab thread has encountered a problem and had to terminate."); //Signal that the thread has died. SetEvent(pUI->m_heventCaptureThreadDone); } return 0; } // // The image Capture thread. unsigned int OBPMViewUI::DoCaptureLoop(void) { OBPMViewUI* pUI =this; //start of main capture loop while(pUI->m_continueCaptureThread) { m_rawVideoframe=cvQueryFrame(m_pVideoFileCapture); if(!m_rawVideoframe) break; if(!m_continueCaptureThread) break; CvSize sz; sz.width=m_rawVideoframe->width; sz.height=m_rawVideoframe->height; CSingleLock dataLock( &m_csData ); dataLock.Lock(); if(!pUI->glView->m_processedImage) pUI->glView->m_processedImage=cvCreateImage(sz,IPL_DEPTH_8U,1); switch(m_rawVideoframe->nChannels) { case 3: { cvCvtColor(m_rawVideoframe, pUI->glView->m_processedImage, CV_BGR2GRAY); break; } case 1: { cvCopyImage(m_rawVideoframe,pUI->glView->m_processedImage); break; } default: break; } dataLock.Unlock(); //redraw the window pUI->glView->redraw(); } pUI->m_continueCaptureThread=false; SetEvent(pUI->m_heventCaptureThreadDone); return 0; } _______________________________________________ fltk-opengl mailing list fltk-opengl@easysw.com http://lists.easysw.com/mailman/listinfo/fltk-opengl