-
Notifications
You must be signed in to change notification settings - Fork 0
/
webcam32.inc
282 lines (233 loc) · 11.6 KB
/
webcam32.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
; Author: 7ya
; Update date: 26.04.2017
; Contact: [email protected]
; Internet address: https://github.com/7ya/win_asm_webcam32.dll
; License: GPL-3.0
;------------------------------------------------------------------------------
comment *
Все функции которым передаётся недействительный идентификатор окна вернут -2.
Возвращаемый функцией CreateVideoWindow идентификатор можно
использовать некоторыми стандартными WinAPI функциями, такими как:
DestroyWindow, MoveWindow, ShowWindow...
Все принимаемые и выдаваемые строки только в формате юникод.
Библиотека поддерживает одновременную работу с несколькими камерами, их максимальное количество
зависит от аппаратного обеспечения ПК и настроек формата видеопотока. *
;*********************************************************************************************************************************************************
;Основные функции :
;*********************************************************************************************************************************************************
CreateVideoWindow proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
;Создаёт окно
;Параметры:
;[in]порядковый номер камеры (1,2,...)
;[in]RGB-код цвета фона окна
;[in]Стиль (WS_)
;[in]Расширенный стиль (WS_EX_)
;[in]X верхнего левого угла
;[in]Y тогоже
;[in]ширина
;[in]высота
;[in]идентификатор окна владельца
;[in]режим: младшее слово 2- с просмотром, 1- без просмотра
;старшее слово 1- сохранять пропорцию, 2- растянуть(если с просмотром)
;[in]адрес оконной процедуры
;[in]идентификатор экземпляра приложения (hInstance)
;Возвращает идентификатор окна если успешно выполнена.
;Окно не создаётся если возвращается:
;0 - камера уже задействована в текущем приложении или не найдена,
;1 - к выбранной камере подключиться не удалось.
StartVideo proto :DWORD, :DWORD, :DWORD, :DWORD
;Вывод\запись видео.
;Параметр:
;[in]идентификатор окна
;[in]порядковый номер микрофона (1,2,...)
;[in]комбинация SV_ флагов
;[in]указатель на строку "путь\имя" видеофайла
;Возвращает: 1- успешно выполнена, 0- ошибка
StopVideo proto :DWORD
;Останавливает вывод.
;Параметр:
;[in]идентификатор окна
PauseVideo proto :DWORD
;Пауза.
;Параметр:
;[in]идентификатор окна
dWebCam proto :DWORD
;Диалог управления камерой.
;Параметр:
;[in]идентификатор окна
dFormat proto :DWORD
;Диалог управления форматом.
;Параметр:
;[in]идентификатор окна
;Если ошибка eax=0
GetMicrophoneName proto :DWORD, :DWORD
;Получает имя микрофона.
;Параметры:
;[in]порядковый номер микрофона (1,2,...) для которого будет получено имя, или 0 для перечисления всех микрофонов
;[out]адрес буфера, который получит имя \2048 байт
;Если первый параметр 0, то функция работает в режиме перечисления всех присутствующих микрофонов.
;Для этого необходимо организовать циклический вызов пока не вернется 0.
;После каждого успешного вызова функция будет возвращать порядковый номер микрофона.
;Если первый параметр является номером микрофона, то возврат -1 говорит об успешности вызова а 0 об ошибке
GetWebCamName proto :DWORD, :DWORD, :DWORD, :DWORD
;Получает имя и хэш камер.
;Параметры:
;[in]порядковый номер камеры (1,2,...) для которой будет получено имя и хэш, или 0 для перечисления всех камер
;[out]адрес буфера, который получит имя \2048 байт
;[out]адрес буфера, который получит уникальное для каждой камеры хэш значение \16 байт.
;Данное значение не следует рассматривать как уникальный ID устройства. Используется для отличия камер с одинаковыми именами.
;Любая камера после переподключения к другому порту будет иметь другой хэш.
;[out]если камера задействована в приложении использующем webcam, здесь будет идентификатор окна, в противном случае 0
;Если первый параметр 0, то функция работает в режиме перечисления всех присутствующих камер.
;Для этого необходимо организовать циклический вызов пока не вернется 0.
;После каждого успешного вызова функция будет возвращать порядковый номер камеры.
;Если первый параметр является номером камеры, то возврат -1 говорит об успешности вызова а 0 об ошибке
PhotoSave proto :DWORD, :DWORD, :DWORD, :DWORD
;Сохраняет фотографию.
;Параметры:
;[in]идентификатор окна
;[in]указатель на строку "путь\имя" фотографии
;[in]формат: 0->BMP, 1->JPEG
;[in]качество JPEG, значение от 0(низкое) до 100(высокое)
;Возвращает указатель на строку "путь\имя" созданного изображения. Если ошибка eax=0
GetBuffer proto :DWORD, :DWORD
;Возвращает указатель на буфер с кадром.
;Параметры:
;[in]идентификатор окна
;[out]указатель на структуру BITMAPINFOHEADER
;Если ошибка eax=0
VWColorDialog proto :DWORD
;Диалог выбора цвета.
;Параметр:
;[in]идентификатор окна
;Возвращает RGB-код цвета.
SetVWColor proto :DWORD, :DWORD
;Устанавливает новый цвет фона.
;Параметры:
;[in]идентификатор окна
;[in]RGB-код цвета
GetVWInfo proto :DWORD
;Возвращает указатель на структуру содержащую информацию об окне.
;Параметр:
;[in]идентификатор окна
;Структура:
;(dd)состояние 1-Stop\2-Start\3-Pause ,
;(dd)номер камеры ,
;(dd)RGB-код цвета фона окна ,
;(dd)ширина и высота видеокадра в пикселях (младшее слово содержит ширину, старшее высоту) ,
;(dd)тут восьмой параметр функции CreateVideoWindow ,
;(dd)адрес оконной процедуры ,
;(dd)полноэкранный режим 1- включен 2- выключен
VWFullScreen proto :DWORD, :DWORD
;Полноэкранный режим.
;Параметры:
;[in]идентификатор окна
;[in]режим: 1- включить, 2-отключить
;Если ошибка eax=0
VWRatio proto :DWORD, :DWORD
;Включает-отключает пропорциональность сторон.
;Параметры:
;[in]идентификатор окна
;[in]1- включить, 2-отключить
;Возвращает ширину и высоту изображения
;Если ошибка eax=0
;*********************************************************************************************************************************************************
;Вспомогательные функции :
;*********************************************************************************************************************************************************
GetTime proto
;Возвращает указатель на строку, пример "10-4-2012_8h-43m-17s-894ms"
SetVWData proto :DWORD, :DWORD, :DWORD
;Сохраняет данные связанные с окном.
;Параметры:
;[in]идентификатор окна
;[in]порядковый номер данных
;[in]данные (dd)
GetVWData proto :DWORD, :DWORD
;Извлекает данные связанные с окном.
;Параметры:
;[in]идентификатор окна
;[in]порядковый номер данных
;Возвращает данные (dd)
GetDeviceName proto :DWORD, :DWORD
;Функция-обёртка над функциями GetMicrophoneName и GetWebCamName.
;Параметры:
;[in]Один из флагов- GDN_WEBCAM или GDN_MICROPHONE
;[in]Указатель на принимающую процедуру. Вид процедуры зависит от установленного флага в первом параметре (пример см.в демо-коде)
;*********************************************************************************************************************************************************
;Константы библиотеки
;*********************************************************************************************************************************************************
VWM_GRAPHNOTIFY equ WM_USER + 160 ;wParam содержит EC_ код события, lParam содержит указатель на структуру состоящую из двух параметров события- (dd)lParam1 и (dd)lParam2
GDN_WEBCAM equ 0h
GDN_MICROPHONE equ 01h
SV_PREVIEW_VIDEO equ 0h ;Просмотр видео. Стоит по-умолчанию
SV_PREVIEW_AUDIO equ 01h ;Воспроизвести звук с микрофона
SV_RECORDING_VIDEO equ 02h ;Запись видео в файл (avi)
SV_RECORDING_AUDIO equ 04h ;Добавляет звук к видеофайлу. Актуален только при установленном SV_RECORDING_VIDEO
;*********************************************************************************************************************************************************
;ActiveMovie event codes :
;*********************************************************************************************************************************************************
EC_SYSTEMBASE equ 00000h
EC_USER equ 08000h
EC_COMPLETE equ 00001h
EC_USERABORT equ 00002h
EC_ERRORABORT equ 00003h
EC_TIME equ 00004h
EC_REPAINT equ 00005h
EC_STREAM_ERROR_STOPPED equ 00006h
EC_STREAM_ERROR_STILLPLAYING equ 00007h
EC_ERROR_STILLPLAYING equ 00008h
EC_PALETTE_CHANGED equ 00009h
EC_VIDEO_SIZE_CHANGED equ 0000Ah
EC_QUALITY_CHANGE equ 0000Bh
EC_SHUTTING_DOWN equ 0000Ch
EC_CLOCK_CHANGED equ 0000Dh
EC_PAUSED equ 0000Eh
EC_OPENING_FILE equ 00010h
EC_BUFFERING_DATA equ 00011h
EC_FULLSCREEN_LOST equ 00012h
EC_ACTIVATE equ 00013h
EC_NEED_RESTART equ 00014h
EC_WINDOW_DESTROYED equ 00015h
EC_DISPLAY_CHANGED equ 00016h
EC_STARVATION equ 00017h
EC_OLE_EVENT equ 00018h
EC_NOTIFY_WINDOW equ 00019h
EC_STREAM_CONTROL_STOPPED equ 0001Ah
EC_STREAM_CONTROL_STARTED equ 0001Bh
EC_END_OF_SEGMENT equ 0001Ch
EC_SEGMENT_STARTED equ 0001Dh
EC_LENGTH_CHANGED equ 0001Eh
EC_DEVICE_LOST equ 0001Fh
EC_SAMPLE_NEEDED equ 00020h
EC_PROCESSING_LATENCY equ 00021h
EC_SAMPLE_LATENCY equ 00022h
EC_SCRUB_TIME equ 00023h
EC_STEP_COMPLETE equ 00024h
EC_TIMECODE_AVAILABLE equ 00030h
EC_EXTDEVICE_MODE_CHANGE equ 00031h
EC_STATE_CHANGE equ 00032h
EC_GRAPH_CHANGED equ 00050h
EC_CLOCK_UNSET equ 00051h
EC_VMR_RENDERDEVICE_SET equ 00053h
EC_VMR_SURFACE_FLIPPED equ 00054h
EC_VMR_RECONNECTION_FAILED equ 00055h
EC_PREPROCESS_COMPLETE equ 00056h
EC_CODECAPI_EVENT equ 00057h
EC_WMT_EVENT_BASE equ 00251h
EC_WMT_INDEX_EVENT equ EC_WMT_EVENT_BASE + 0
EC_WMT_EVENT equ EC_WMT_EVENT_BASE + 1
EC_BUILT equ 00300h
EC_UNBUILT equ 00311h
EC_SKIP_FRAMES equ 00025h
EC_PLEASE_REOPEN equ 00040h
EC_STATUS equ 00041h
EC_MARKER_HIT equ 00042h
EC_LOADSTATUS equ 00043h
EC_FILE_CLOSED equ 00044h
EC_ERRORABORTEX equ 00045h
EC_NEW_PIN equ 00020h
EC_RENDER_FINISHED equ 00021h
EC_EOS_SOON equ 00046h
EC_CONTENTPROPERTY_CHANGED equ 00047h
EC_BANDWIDTHCHANGE equ 00048h
EC_VIDEOFRAMEREADY equ 00049h