Тоесть если использовать callback на функцию MyFrameCallback:
- Код: Выделить всё
Function MyFrameCallback(ByVal lwnd As Long, ByVal lpVHdr As Long) As Long
Dim VideoHeader As VIDEOHDR
Dim VideoData() As Byte
'//Fill VideoHeader with data at lpVHdr
RtlMoveMemory VarPtr(VideoHeader), lpVHdr, Len(VideoHeader)
'// Make room for data
ReDim VideoData(VideoHeader.dwBytesUsed)
'//Copy data into the array
RtlMoveMemory VarPtr(VideoData(0)), VideoHeader.lpData, VideoHeader.dwBytesUsed
Debug.Print "Frame " & Now, "dwBufferLength:" & VideoHeader.dwBufferLength, "dwBytesUsed:" & VideoHeader.dwBytesUsed, "dwFlags: 0x" & Hex(VideoHeader.dwFlags)
End Function
..то все замечательно, все обрабатывается, получается такой лог:
- Код: Выделить всё
Frame 17.09.2010 19:39:18 dwBufferLength:1216512 dwBytesUsed:1216512 dwFlags: 0x8
Frame 17.09.2010 19:39:19 dwBufferLength:1216512 dwBytesUsed:1216512 dwFlags: 0x8
Frame 17.09.2010 19:39:19 dwBufferLength:1216512 dwBytesUsed:1216512 dwFlags: 0x8
Frame 17.09.2010 19:39:19 dwBufferLength:1216512 dwBytesUsed:1216512 dwFlags: 0x8
Frame 17.09.2010 19:39:19 dwBufferLength:1216512 dwBytesUsed:1216512 dwFlags: 0x8
Frame 17.09.2010 19:39:19 dwBufferLength:1216512 dwBytesUsed:1216512 dwFlags: 0x8
Frame 17.09.2010 19:39:20 dwBufferLength:1216512 dwBytesUsed:1216512 dwFlags: 0x8
А если те же преобразования проделать с видеозаголовком из функции MyVideoStreamCallback, то получается абра-кадабра.. Туда что, вместо указателя на видеозаголовок lpVHdr приходит указатель на что-то другое? по докам вроде все то же самое должно быть...
- Код: Выделить всё
VideoStream 17.09.2010 19:39:22 dwBufferLength:0 dwBytesUsed:0 dwFlags: 0x10000
VideoStream 17.09.2010 19:39:23 dwBufferLength:512 dwBytesUsed:33554434 dwFlags: 0x2000202
VideoStream 17.09.2010 19:39:23 dwBufferLength:0 dwBytesUsed:0 dwFlags: 0x200
VideoStream 17.09.2010 19:39:23 dwBufferLength:131584 dwBytesUsed:33554946 dwFlags: 0x2000202
VideoStream 17.09.2010 19:39:23 dwBufferLength:262144 dwBytesUsed:66048 dwFlags: 0x10200
VideoStream 17.09.2010 19:39:23 dwBufferLength:131584 dwBytesUsed:2 dwFlags: 0x0
VideoStream 17.09.2010 19:39:23 dwBufferLength:131072 dwBytesUsed:512 dwFlags: 0x0
VideoStream 17.09.2010 19:39:23 dwBufferLength:512 dwBytesUsed:33554434 dwFlags: 0x2000002
VideoStream 17.09.2010 19:39:23 dwBufferLength:131072 dwBytesUsed:512 dwFlags: 0x0
VideoStream 17.09.2010 19:39:23 dwBufferLength:512 dwBytesUsed:33554434 dwFlags: 0x2000202
VideoStream 17.09.2010 19:39:23 dwBufferLength:16908289 dwBytesUsed:66048 dwFlags: 0x400
VideoStream 17.09.2010 19:39:23 dwBufferLength:131584 dwBytesUsed:33554946 dwFlags: 0x2000002
VideoStream 17.09.2010 19:39:23 dwBufferLength:1 dwBytesUsed:0 dwFlags: 0x2000002
VideoStream 17.09.2010 19:39:23 dwBufferLength:16777217 dwBytesUsed:65536 dwFlags: 0x10000
VideoStream 17.09.2010 19:39:23 dwBufferLength:0 dwBytesUsed:0 dwFlags: 0x2
VideoStream 17.09.2010 19:39:23 dwBufferLength:131072 dwBytesUsed:66048 dwFlags: 0x10000
VideoStream 17.09.2010 19:39:23 dwBufferLength:131584 dwBytesUsed:33554946 dwFlags: 0x2000002
VideoStream 17.09.2010 19:39:23 dwBufferLength:262144 dwBytesUsed:1024 dwFlags: 0x10200
VideoStream 17.09.2010 19:39:23 dwBufferLength:0 dwBytesUsed:33554434 dwFlags: 0x2000002
VideoStream 17.09.2010 19:39:23 dwBufferLength:33554434 dwBytesUsed:131072 dwFlags: 0x10000
VideoStream 17.09.2010 19:39:23 dwBufferLength:512 dwBytesUsed:33554434 dwFlags: 0x2000002
VideoStream 17.09.2010 19:39:24 dwBufferLength:0 dwBytesUsed:0 dwFlags: 0x2000002
В результате хотелось бы получить массив пикселов из функции MyVideoStreamCallback, т.к. она позволяет это делать с существенно большим FPS, чем MyFrameCallback. Прошу помощи.
-
Полный код в архиве, чтобы начала работать функция MyVideoStreamCallback, вверху программы надо выбрать Control -> Start
------- UPD готовый файл проекта с решенной проблемой в архиве vbmemcap_fin.zip