DirectShow Video Capture Filter?

Just starting out? Need help? Post your questions and find answers here.
stmdbe2019
User
User
Posts: 89
Joined: Mon Aug 31, 2009 2:11 pm

DirectShow Video Capture Filter?

Post by stmdbe2019 »

I have a PC where 3 camera is connected. I need to use a tool to open the following dialog window (which i believe WDM camera capture filter depending on the drivers). How do i open it using PureBasic? (i cant find any references)

Image
Image

I managed to do that using following PureBasic code but it does not give me the camera control zoom in/out, pan,tilt from above second screenshot.
Following code also do not giving me the choice to select camera as i have 3 camera connected (1 is integrated camera, others are USB 2.0 camera's), following code always preselect the integrated camera.

Image

Code: Select all

IncludeFile "includes/cv_functions.pbi"

Global lpPrevWndFunc, *capture.CvCapture
Global DefBrightness.d, MaxBrightness.d, MinBrightness.d, DefContrast.d, MaxContrast.d, MinContrast.d
Global DefGamma.d, MaxGamma.d, MinGamma.d, DefSaturation.d, MaxSaturation.d, MinSaturation.d
Global DefHue.d, MaxHue.d, MinHue.d, DefSharpness.d, MaxSharpness.d, MinSharpness.d
Global DefExposure.d, MaxExposure.d, MinExposure.d

#CV_WINDOW_NAME = "PureBasic Interface to OpenCV"
#CV_DESCRIPTION = "Creates an interface to the webcam's parameters such as brightness, contrast, hue, etc." + #LF$ + #LF$ +
                  "A preference file is created if one cannot be found."

Procedure ReadCamData()
  If OpenPreferences("other/preferences.txt")
    DefBrightness = ReadPreferenceLong("DefBrightness", 1)
    DefContrast =  ReadPreferenceLong("DefContrast", 1)
    DefGamma = ReadPreferenceLong("DefGamma", 1)
    DefSaturation = ReadPreferenceLong("DefSaturation", 1)
    DefHue = ReadPreferenceLong("DefHue", 1)
    DefSharpness = ReadPreferenceLong("DefSharpness", 1)
    DefExposure = ReadPreferenceLong("DefExposure", 1)
    MaxBrightness = ReadPreferenceLong("MaxBrightness", 1)
    MaxContrast = ReadPreferenceLong("MaxContrast", 1)
    MaxGamma = ReadPreferenceLong("MaxGamma", 1)
    MaxSaturation = ReadPreferenceLong("MaxSaturation", 1)
    MaxHue = ReadPreferenceLong("MaxHue", 1)
    MaxSharpness = ReadPreferenceLong("MaxSharpness", 1)
    MaxExposure = ReadPreferenceLong("MaxExposure", 1)
    MinBrightness = ReadPreferenceLong("MinBrightness", 1)
    MinContrast =  ReadPreferenceLong("MinContrast", 1)
    MinGamma = ReadPreferenceLong("MinGamma", 1)
    MinSaturation = ReadPreferenceLong("MinSaturation", 1)
    MinHue = ReadPreferenceLong("MinHue", 1)
    MinSharpness = ReadPreferenceLong("MinSharpness", 1)
    MinExposure = ReadPreferenceLong("MinExposure", 1)
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, DefBrightness)
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, DefContrast)
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, DefGamma)
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, DefSaturation)
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, DefHue)
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, DefSharpness)
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, DefExposure)
  Else
    CreatePreferences("other/preferences.txt")
    defValue.d = 0
    value.d = 0
    retValue.d = 0
    OpenWindow(0, 0, 0, 300, 100, #CV_WINDOW_NAME, #PB_Window_ScreenCentered | #PB_Window_Tool)
    TextGadget(30, 10,  40, 280, 20, "Testing webcam parameters...", #PB_Text_Center)
    defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS)
    WritePreferenceLong("DefBrightness", defValue)
    DefBrightness = defValue

    For k = defValue To 1000 Step 1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS)

      If value > retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MaxBrightness", cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS))
    MaxBrightness = retValue

    For k = defValue To 0 Step -1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS)

      If value > retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MinBrightness", cvGetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS))
    MinBrightness = retValue
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, defValue)
    defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST)
    WritePreferenceLong("DefContrast", defValue)
    DefContrast = defValue

    For k = defValue To 1000 Step 1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST)

      If value > retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MaxContrast", cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST))
    MaxContrast = retValue

    For k = defValue To 0 Step -1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST)

      If value < retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MinContrast", cvGetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST))
    MinContrast = retValue
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, defValue)
    defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA)
    WritePreferenceLong("DefGamma", defValue)
    DefGamma = defValue

    For k = defValue To 1000 Step 5
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA)

      If value > retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MaxGamma", cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA))
    MaxGamma = retValue

    For k = defValue To 0 Step -5
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA)

      If value < retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MinGamma", cvGetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA))
    MinGamma = retValue
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, defValue)
    defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION)
    WritePreferenceLong("DefSaturation", defValue)
    DefSaturation = defValue

    For k = defValue To 1000 Step 1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, value) 
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION)

      If value > retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MaxSaturation", cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION))
    MaxSaturation = retValue

    For k = defValue To 0 Step -1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION)

      If value < retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MinSaturation", cvGetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION))
    MinSaturation = retValue
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, defValue)
    defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE)
    WritePreferenceLong("DefHue", defValue)
    DefHue = defValue

    For k = defValue To 1000 Step 1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE)

      If value > retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MaxHue", cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE))
    MaxHue = retValue

    For k = defValue To 0 Step -1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE)

      If value < retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MinHue", cvGetCaptureProperty(*capture, #CV_CAP_PROP_HUE))
    MinHue = retValue
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, defValue)
    defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS)
    WritePreferenceLong("DefSharpness", defValue)
    DefSharpness = defValue

    For k = defValue To 1000 Step 1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS)

      If value > retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MaxSharpness", cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS))
    MaxSharpness = retValue

    For k = defValue To 0 Step -1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS)

      If value < retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MinSharpness", cvGetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS))
    MinSharpness = retValue
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, defValue)
    defValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE)
    WritePreferenceLong("DefExposure", defValue)
    DefExposure = defValue

    For k = defValue To 1000 Step 1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE)

      If value > retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MaxExposure", cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE))
    MaxExposure = retValue

    For k = defValue To 0 Step -1
      value = k
      cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, value)
      retValue = cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE)

      If value < retValue : Break : EndIf

      FixWindowUnresponsive()
    Next
    WritePreferenceLong("MinExposure", cvGetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE))
    MinExposure = retValue
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, defValue)
    CloseWindow(0)
  EndIf
EndProcedure

Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_NOTIFY
      val.d = GetGadgetState(wParam)

      Select wParam
        Case 8
          cvSetCaptureProperty(*capture, #CV_CAP_PROP_BRIGHTNESS, val)
          WritePreferenceLong("DefBrightness", val)
        Case 9
          cvSetCaptureProperty(*capture, #CV_CAP_PROP_CONTRAST, val)
          WritePreferenceLong("DefContrast", val)
        Case 10
          cvSetCaptureProperty(*capture, #CV_CAP_PROP_GAMMA, val)
          WritePreferenceLong("DefGamma", val)
        Case 11
          cvSetCaptureProperty(*capture, #CV_CAP_PROP_SATURATION, val)
          WritePreferenceLong("DefSaturation", val)
        Case 12
          cvSetCaptureProperty(*capture, #CV_CAP_PROP_HUE, val)
          WritePreferenceLong("DefHue", val)
        Case 13
          cvSetCaptureProperty(*capture, #CV_CAP_PROP_SHARPNESS, val)
          WritePreferenceLong("DefSharpness", val)
        Case 14
          cvSetCaptureProperty(*capture, #CV_CAP_PROP_EXPOSURE, val)
          WritePreferenceLong("DefExposure", val)
      EndSelect
  EndSelect
  ProcedureReturn CallWindowProc_(lpPrevWndFunc, hWnd, uMsg, wParam, lParam)
EndProcedure

Repeat
  nCreate + 1
  *capture = cvCreateCameraCapture(#CV_CAP_ANY)
Until nCreate = 5 Or *capture

If *capture
  ReadCamData()
  FrameWidth = cvGetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_WIDTH)
  FrameHeight = cvGetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_HEIGHT)

  If FrameWidth > 640
    nRatio.d = 640 / FrameWidth
    FrameWidth * nRatio : FrameHeight * nRatio
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_WIDTH, FrameWidth)
    cvSetCaptureProperty(*capture, #CV_CAP_PROP_FRAME_HEIGHT, FrameHeight)
  EndIf
  *image.IplImage : pbImage = CreateImage(#PB_Any, FrameWidth, FrameHeight)

  If OpenWindow(0, 0, 0, FrameWidth + 140, FrameHeight, #CV_WINDOW_NAME, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    lpPrevWndFunc = SetWindowLongPtr_(WindowID(0), #GWL_WNDPROC, @WindowCallback())
    ImageGadget(0, 0, 0, FrameWidth, FrameHeight, ImageID(pbImage))
    TextGadget(1, 650, 25, 60, 20, "Brightness:", #PB_Text_Right)
    TextGadget(2, 650, 50, 60, 20, "Contrast:", #PB_Text_Right)
    TextGadget(3, 650, 75, 60, 20, "Gamma:", #PB_Text_Right)
    TextGadget(4, 650, 100, 60, 20, "Saturation:", #PB_Text_Right)
    TextGadget(5, 650, 125, 60, 20, "Hue:", #PB_Text_Right)
    TextGadget(6, 650, 150, 60, 20, "Sharpness:", #PB_Text_Right)
    TextGadget(7, 650, 175, 60, 20, "Exposure:", #PB_Text_Right)
    SpinGadget(8, 715, 20, 50, 20, MinBrightness, MaxBrightness, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
    SetGadgetState(8, DefBrightness) : SetGadgetColor(8, #PB_Gadget_BackColor, $F0F0F0)
    SpinGadget(9, 715, 45, 50, 20, MinContrast, MaxContrast, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
    SetGadgetState(9, DefContrast) : SetGadgetColor(9, #PB_Gadget_BackColor, $F0F0F0)
    SpinGadget(10, 715, 70, 50, 20, MinGamma, MaxGamma, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
    SetGadgetState(10, DefGamma) : SetGadgetColor(10, #PB_Gadget_BackColor, $F0F0F0)
    SpinGadget(11, 715, 95, 50, 20, MinSaturation, MaxSaturation, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
    SetGadgetState(11, DefSaturation) : SetGadgetColor(11, #PB_Gadget_BackColor, $F0F0F0)
    SpinGadget(12, 715, 120, 50, 20, MinHue, MaxHue, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
    SetGadgetState(12, DefHue) : SetGadgetColor(12, #PB_Gadget_BackColor, $F0F0F0)
    SpinGadget(13, 715, 145, 50, 20, MinSharpness, MaxSharpness, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
    SetGadgetState(13, DefSharpness) : SetGadgetColor(13, #PB_Gadget_BackColor, $F0F0F0)
    SpinGadget(14, 715, 170, 50, 20, MinExposure, MaxExposure, #PB_Spin_ReadOnly | #PB_Spin_Numeric)
    SetGadgetState(14, DefExposure) : SetGadgetColor(14, #PB_Gadget_BackColor, $F0F0F0)

    If CreatePopupImageMenu(0, #PB_Menu_ModernLook)
      MenuItem(10, "Exit")
    EndIf
    AddKeyboardShortcut(0, #PB_Shortcut_Escape, 10)
    ToolTip(GadgetID(0), #CV_DESCRIPTION)

    Repeat
      Event = WindowEvent()

      Select Event
        Case #PB_Event_Gadget
          Select EventGadget()
            Case 0
              Select EventType()
                Case #PB_EventType_RightClick : DisplayPopupMenu(0, WindowID(0))
              EndSelect
          EndSelect
        Case #PB_Event_Menu
          Select EventMenu()
            Case 10 : Break
          EndSelect
        Case #PB_Event_CloseWindow : Break
        Default
          *image = cvQueryFrame(*capture)

          If *image
            cvFlip(*image, #Null, 1)
            OpenCV2PBImage(*image, pbImage, FrameWidth, FrameHeight)
            SetGadgetState(0, ImageID(pbImage))
          EndIf
        EndSelect
    ForEver
  EndIf
  FreeImage(pbImage)
  ClosePreferences()
  cvReleaseCapture(@*capture)
Else
  MessageRequester(#CV_WINDOW_NAME, "Unable to connect webcam - operation cancelled.", #MB_ICONERROR)
EndIf
Can anyone please advise/help?
-----
Registered PureBasic Coder.