pwc-wrapper.cpp
上传用户:jeson_zeng
上传日期:2022-04-23
资源大小:1k
文件大小:5k
源码类别:

OpenCV

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <highgui.h>
  3. #include "pwc-wrapper.h"
  4. /*
  5.  * In the following listed are the extended functions you can use
  6.  * with your Philips Webcam (i.e. SPC 900 NC). Details can be found
  7.  * in the header file pwc-wrapper.h or at www.rainsoft.de.
  8.  */
  9. int PwcWrapper::GetFrameRate(){
  10.     video_window v_win;
  11.     ioctl(cam->deviceHandle, VIDIOCGWIN, &v_win);
  12. return (v_win.flags & PWC_FPS_FRMASK) >> PWC_FPS_SHIFT;
  13. }
  14. void PwcWrapper::SetFrameRate(int fps){
  15.     video_window v_win;
  16.     ioctl(cam->deviceHandle, VIDIOCGWIN, &v_win);
  17.     if (v_win.flags & PWC_FPS_FRMASK) printf("Framerate: %d fps => ", (v_win.flags & PWC_FPS_FRMASK) >> PWC_FPS_SHIFT);
  18.     v_win.flags &= ~PWC_FPS_FRMASK;
  19.     v_win.flags |= (fps << PWC_FPS_SHIFT);
  20.     ioctl(cam->deviceHandle, VIDIOCSWIN, &v_win);
  21.     ioctl(cam->deviceHandle, VIDIOCGWIN, &v_win);
  22.     if (v_win.flags & PWC_FPS_FRMASK) printf("%d fpsn", (v_win.flags & PWC_FPS_FRMASK) >> PWC_FPS_SHIFT);
  23. }
  24. void PwcWrapper::SaveUserSettingsToEEPROM(){
  25.     ioctl(cam->deviceHandle, VIDIOCPWCSUSER);
  26. }
  27. void PwcWrapper::RestoreUserSettingsFromEEPROM(){
  28.     ioctl(cam->deviceHandle, VIDIOCPWCRUSER);
  29. }
  30. void PwcWrapper::ResetEEPROM(){
  31.     ioctl(cam->deviceHandle, VIDIOCPWCFACTORY);
  32. }
  33. int PwcWrapper::GetCompressionMode(){
  34. int mode;
  35. ioctl(cam->deviceHandle, VIDIOCPWCGCQUAL, &mode);
  36. return mode;
  37. }
  38. void PwcWrapper::SetCompressionMode(int newmode){
  39. int oldmode;
  40. ioctl(cam->deviceHandle, VIDIOCPWCGCQUAL, &oldmode);
  41.     ioctl(cam->deviceHandle, VIDIOCPWCSCQUAL, &newmode);
  42.     ioctl(cam->deviceHandle, VIDIOCPWCGCQUAL, &newmode);
  43.     printf("Compression mode: %d => %dn", oldmode, newmode);
  44. }
  45. int PwcWrapper::GetAutomaticGainControl(){
  46. int agc;
  47. ioctl(cam->deviceHandle, VIDIOCPWCGAGC, &agc);
  48.     return agc;
  49. }
  50. void PwcWrapper::SetAutomaticGainControl(int newagc){
  51. int oldagc;
  52. ioctl(cam->deviceHandle, VIDIOCPWCGAGC, &oldagc);
  53.     ioctl(cam->deviceHandle, VIDIOCPWCSAGC, &newagc);
  54.     ioctl(cam->deviceHandle, VIDIOCPWCGAGC, &newagc);
  55.     printf("Automatic gain control: %d => %dn", oldagc, newagc);
  56. }
  57. void PwcWrapper::SetShutterSpeed(int speed){
  58.     ioctl(cam->deviceHandle,VIDIOCPWCSSHUTTER,&speed);
  59.     printf("Shutter speed: %dn", speed);
  60. }
  61. void PwcWrapper::SetWhitebalance(int mode, int red, int blue){
  62. struct pwc_whitebalance wb;
  63. ioctl(cam->deviceHandle, VIDIOCPWCGAWB, &wb);
  64. printf("Old whitebalance: Mode %d, ManRed %d, ManBlue %d, Red %d, Blue %dn",
  65.             wb.mode, wb.manual_red, wb.manual_blue, wb.read_red, wb.read_blue);
  66.     wb.mode = mode;
  67.     wb.manual_red = red;
  68.     wb.manual_blue = blue;
  69.     ioctl(cam->deviceHandle, VIDIOCPWCSAWB, &wb);
  70.     ioctl(cam->deviceHandle, VIDIOCPWCGAWB, &wb);
  71. printf("New whitebalance: Mode %d, ManRed %d, ManBlue %d, Red %d, Blue %dn",
  72.             wb.mode, wb.manual_red, wb.manual_blue, wb.read_red, wb.read_blue);    
  73. }
  74. void PwcWrapper::SetAutomaticWhiteBalanceSpeed(int speed, int delay){
  75. pwc_wb_speed wb;
  76. ioctl(cam->deviceHandle, VIDIOCPWCGAGC, &wb);
  77. printf("Old automatic white balance: Speed %d, Delay %dn", wb.control_speed, wb.control_delay);
  78. wb.control_speed = speed;
  79. wb.control_delay = delay;
  80.     ioctl(cam->deviceHandle, VIDIOCPWCSAGC, &wb);
  81.     ioctl(cam->deviceHandle, VIDIOCPWCGAGC, &wb);
  82.     printf("New automatic white balance: Speed %d, Delay %dn", wb.control_speed, wb.control_delay);
  83. }
  84. void PwcWrapper::SetCameraLED(int on_time, int off_time){
  85. struct pwc_leds led;
  86. led.led_on = on_time;
  87. led.led_off = off_time;
  88. ioctl(cam->deviceHandle, VIDIOCPWCSLED, &led);
  89. }
  90. void PwcWrapper::SetElectronicSharpness(int newvalue){
  91. int oldvalue;
  92. ioctl(cam->deviceHandle, VIDIOCPWCGCONTOUR, &oldvalue);
  93.     ioctl(cam->deviceHandle, VIDIOCPWCSCONTOUR, &newvalue);
  94.     ioctl(cam->deviceHandle, VIDIOCPWCGCONTOUR, &newvalue);
  95.     printf("Electronic Sharpness: %d => %dn", oldvalue, newvalue);
  96. }
  97. void PwcWrapper::SetBacklightCompensationMode(int newmode){
  98. int oldmode;
  99. ioctl(cam->deviceHandle, VIDIOCPWCGBACKLIGHT, &oldmode);
  100.     ioctl(cam->deviceHandle, VIDIOCPWCSBACKLIGHT, &newmode);
  101.     ioctl(cam->deviceHandle, VIDIOCPWCGBACKLIGHT, &newmode);
  102.     printf("Backlight Compensation: %d => %dn", oldmode, newmode);
  103. }
  104. void PwcWrapper::SetAntiFlickerMode(int newmode){
  105. int oldmode;
  106. ioctl(cam->deviceHandle, VIDIOCPWCGFLICKER, &oldmode);
  107.     ioctl(cam->deviceHandle, VIDIOCPWCSFLICKER, &newmode);
  108.     ioctl(cam->deviceHandle, VIDIOCPWCGFLICKER, &newmode);
  109.     printf("Anti Flicker Mode: %d => %dn", oldmode, newmode);
  110. }
  111. void PwcWrapper::SetDynamicNoiseReductionMode(int newmode){
  112. int oldmode;
  113. ioctl(cam->deviceHandle, VIDIOCPWCGDYNNOISE, &oldmode);
  114.     ioctl(cam->deviceHandle, VIDIOCPWCSDYNNOISE, &newmode);
  115.     ioctl(cam->deviceHandle, VIDIOCPWCGDYNNOISE, &newmode);
  116.     printf("Dynamic Noise Reduction Mode: %d => %dn", oldmode, newmode);
  117. }
  118. void PwcWrapper::PrintRealImageSize(){
  119. pwc_imagesize isize;
  120. ioctl(cam->deviceHandle, VIDIOCPWCGREALSIZE, &isize);
  121.     printf("Real image size: %d x %d [Px]n", isize.width, isize.height);
  122. }