Capture API

Тема в разделе "WASM.BEGINNERS", создана пользователем moderhi, 3 ноя 2011.

  1. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    В какой инклюде MASM32 описаны прототипы функций Capture API и есть-ли они там?
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Чего захватывать решил? Если экран, то каждый месяц тут про это спрашивают. Искать не пробовал?
     
  3. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    нужно захватить видео с одной из камер в системе и сохранить. у меня возникла какаято путаница с либами. приложение упорно требует vfw32.dll. в system32 есть msvfw32, пробовал переименовать- без результатно
     
  4. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Всем привет! Подскажите кто знает, как быстро камеры переключать?
    В примере 2 кнопки, каждая должна включать свою камеру из двух установленных системе


    Код (Text):
    1.     .386
    2.     .model flat,stdcall
    3. option casemap:none
    4. include \masm32\include\windows.inc
    5. include \masm32\include\user32.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\user32.lib
    8. includelib \masm32\lib\kernel32.lib
    9. WinMain proto :DWORD,:DWORD,:DWORD,:DWORD    
    10.  
    11.     .data
    12. n1 db "C:\WINDOWS\system32\avicap32.dll",0
    13. n2 db "камера1",0
    14. n3 db "камера2",0
    15. n4 db "VIDEOSOURCE",0
    16. ButtonClassName db "button",0
    17. ClassName db "SimpleWinClass",0  
    18. AppName db "oko",0  
    19. funcap db "capCreateCaptureWindowA",0
    20.  
    21. .data?
    22. hdll dd ?
    23. afun dd ?
    24. hCapWindow dd ?
    25. hInstance HINSTANCE ?  
    26. CommandLine LPSTR ?  
    27. hBut2 HWND ?
    28. hBut1 HWND ?
    29. hBut3 HWND ?
    30.  
    31. .const
    32. ButID2 equ 2
    33. ButID1 equ 1
    34. ButID3 equ 3
    35.  
    36. .code
    37. start:
    38. invoke LoadLibrary, addr n1
    39. mov hdll, eax
    40. invoke GetProcAddress, hdll, addr funcap
    41. mov afun, eax
    42. invoke GetModuleHandle, NULL  
    43. mov hInstance,eax  
    44. invoke GetCommandLine    
    45. mov CommandLine,eax
    46. invoke WinMain, hInstance,NULL, CommandLine, SW_SHOWDEFAULT
    47. invoke ExitProcess,eax
    48. WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD        
    49. LOCAL wc:WNDCLASSEX  
    50. LOCAL msg:MSG
    51. LOCAL hwnd:HWND
    52. mov wc.cbSize,SIZEOF WNDCLASSEX
    53. mov wc.style, CS_HREDRAW or CS_VREDRAW
    54. mov wc.lpfnWndProc, OFFSET WndProc
    55. mov wc.cbClsExtra,NULL
    56. mov wc.cbWndExtra,NULL
    57. push hInstance
    58. pop wc.hInstance
    59. invoke LoadIcon, NULL, IDI_EXCLAMATION
    60. mov   wc.hIcon, eax
    61. invoke LoadCursor, NULL, IDC_ARROW
    62. mov   wc.hCursor, eax
    63. mov wc.hIconSm,NULL
    64. mov wc.hbrBackground,COLOR_BTNFACE+1  
    65. mov wc.lpszMenuName,NULL
    66. mov wc.lpszClassName,OFFSET ClassName
    67. invoke RegisterClassEx, addr wc
    68. invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,WS_MINIMIZEBOX or WS_SYSMENU,0,0, 700 , 500 ,NULL,NULL,hInst,NULL
    69. mov hwnd,eax
    70. invoke ShowWindow, hwnd,SW_SHOWNORMAL  
    71. invoke UpdateWindow, hwnd
    72.     .WHILE TRUE  
    73. invoke GetMessage, ADDR msg,NULL,0,0  
    74.     .BREAK .IF (!eax)
    75. invoke TranslateMessage, ADDR msg
    76. invoke DispatchMessage, ADDR msg
    77.     .ENDW  
    78. mov eax,msg.wParam
    79. ret
    80. WinMain endp
    81. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    82. .IF uMsg==WM_COMMAND
    83. mov eax, wParam
    84.  
    85. ;//////////////////////////////////////////////////////////////////////////////////////
    86. .IF   ax==ButID1
    87. shr eax,16
    88. .IF ax==BN_CLICKED
    89. invoke Beep, 1111, 111   ; Гц, мс
    90. xor eax,eax
    91. .ENDIF
    92. .ENDIF
    93. ;-------------------------------------------------------------------------------------------------------------
    94. .IF   ax==ButID2
    95. shr eax,16
    96. .IF ax==BN_CLICKED
    97. invoke Beep, 1144, 111
    98. xor eax,eax
    99. .ENDIF
    100. .ENDIF
    101. ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    102.  
    103. .IF   ax==ButID3
    104. shr eax,16
    105. .IF ax==BN_CLICKED
    106. invoke SendMessage, hCapWindow, WM_CAP_DLG_VIDEOSOURCE, 0, 0
    107. xor eax,eax
    108. .ENDIF
    109. .ENDIF
    110. .ENDIF
    111. .IF uMsg==WM_CREATE
    112. push 0
    113. push hWnd
    114. push 500
    115. push 500
    116. push 0
    117. push 0
    118. push WS_VISIBLE or WS_CHILD
    119. push 0
    120. call afun
    121. mov hCapWindow, eax
    122. invoke SendMessage, hCapWindow, WM_CAP_DRIVER_CONNECT, 0, 0
    123. invoke SendMessage, hCapWindow, WM_CAP_SET_SCALE , 1, 0
    124. invoke SendMessage, hCapWindow, WM_CAP_SET_PREVIEWRATE , 20, 0
    125. invoke SendMessage, hCapWindow, WM_CAP_SET_PREVIEW , 1, 0
    126. invoke ShowWindow, hCapWindow, SW_SHOW
    127. invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR n2,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,510, 22, 70, 25, hWnd, ButID1, hInstance, NULL
    128. mov  hBut1, eax
    129. invoke ShowWindow, hBut1, SW_SHOW
    130. invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR n3,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,510, 66, 70, 25, hWnd, ButID2, hInstance, NULL
    131. mov  hBut2, eax
    132. invoke ShowWindow, hBut2, SW_SHOW
    133. invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR n4,WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,510, 111, 111, 25, hWnd, ButID3, hInstance, NULL
    134. mov  hBut3, eax
    135. invoke ShowWindow, hBut3, SW_SHOW
    136. .ENDIF
    137. .IF uMsg==WM_DESTROY  
    138. invoke SendMessage, hCapWindow, WM_CAP_DRIVER_DISCONNECT, 0, 0
    139. invoke FreeLibrary, hdll
    140. call ExitProcess
    141. .ELSE
    142. invoke DefWindowProc,hWnd,uMsg,wParam,lParam  
    143. ret
    144. .ENDIF
    145. xor eax,eax
    146. ret
    147. WndProc endp
    148. end start
     
  5. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    в мсдн приводится следующий пример кода для перечисления устройств захвата видео:
    Код (Text):
    1. Visual Basic Example to List Web Cam Sources to Listbox
    2.     '---list all the various video sources---
    3.     Private Sub ListVideoSources()
    4.         'http://msdn.microsoft.com/en-us/library/dd756909%28VS.85%29.aspx
    5.         'The  function retrieves the version description of the capture driver.
    6.         Dim DriverName As String = Space(80)
    7.         Dim DriverVersion As String = Space(80)
    8.         For i As Integer = 0 To 9
    9.             If capGetDriverDescriptionA(i, DriverName, 80, _
    10.                DriverVersion, 80) Then
    11.                 lstVideoSources.Items.Add(DriverName.Trim)
    12.             End If
    13.         Next
    14.     End Sub
    аналогичным кодом на масме я вывел список своих камер, получилось только одно устройство!!! а у меня установлены две (рабочие) камеры.

    отправкой сообщения WM_CAP_DRIVER_CONNECT с wParam = 0 удается подключить
    только одну камеру, если посылать wParam > 0 ничего не происходит.

    Может ктонибудь подскажет в чем тут дело и где выход из моей проблемы.
     
  6. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    moderhi
    ну посмотрите что выводит этот код на VB
     
  7. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    да, вот буквально только что проверил, всё также , только одна камера.
     
  8. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    мистика
     
  9. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    набросал программу для записи видео в файл, но она отказывается работать в W7, подскажите как ее настроить для работы в W7.
    исходник с программой приложены.
     
  10. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    (Вряд ли я сейчас выневскую прогу посмотрю под осью BIRD.) Попробуйте для начала в свойствах режим совместимости настроить.
    PS: если кто знает как на BIRD(это китайская мобильная платформа) переключиться на вторую камеру не сочтите за труд написать лс
     
  11. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    paralvic
    проверял, неработает.
     
  12. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    Наконец-то разобрался, пришлось активно заюзывать directshow.
    Вобще невероятно сложная штука этот директ %)
    Для упрощения работы накатал скромняцкую библиотеку " vcapture32.dll " и решил поделится, может кому пригодится. Главный ее плюс, в отличии от VFW, это превосходная поддерживаемость в Win Vista и 7.
     
  13. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    moderhi
    vcapture32.dll сорцы есть же?
     
  14. moderhi

    moderhi New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2011
    Сообщения:
    189
    ziral2088
    есть.

    Данную дллку думаю немного доработать на выходных, до уровня функциональности vfw.
    Тогда и сорцы выложу