module VfW32 !DIR$OBJCOMMENT LIB:"VfW32.lib" use ifwinty use user32, only:SendMessage implicit none integer(UINT), parameter :: WM_CAP_START = WM_USER integer(UINT), parameter :: WM_CAP_GET_CAPSTREAMPTR = (WM_CAP_START + 1) integer(UINT), parameter :: WM_CAP_SET_CALLBACK_ERROR = (WM_CAP_START + 2) integer(UINT), parameter :: WM_CAP_SET_CALLBACK_STATUS = (WM_CAP_START + 3) integer(UINT), parameter :: WM_CAP_SET_CALLBACK_YIELD = (WM_CAP_START + 4) integer(UINT), parameter :: WM_CAP_SET_CALLBACK_FRAME = (WM_CAP_START + 5) integer(UINT), parameter :: WM_CAP_SET_CALLBACK_VIDEOSTREAM = (WM_CAP_START + 6) integer(UINT), parameter :: WM_CAP_SET_CALLBACK_WAVESTREAM = (WM_CAP_START + 7) integer(UINT), parameter :: WM_CAP_GET_USER_DATA = (WM_CAP_START + 8) integer(UINT), parameter :: WM_CAP_SET_USER_DATA = (WM_CAP_START + 9) integer(UINT), parameter :: WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10) integer(UINT), parameter :: WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11) integer(UINT), parameter :: WM_CAP_DRIVER_GET_NAME = (WM_CAP_START + 12) integer(UINT), parameter :: WM_CAP_DRIVER_GET_VERSION = (WM_CAP_START + 13) integer(UINT), parameter :: WM_CAP_DRIVER_GET_CAPS = (WM_CAP_START + 14) integer(UINT), parameter :: WM_CAP_FILE_SET_CAPTURE_FILE = (WM_CAP_START + 20) integer(UINT), parameter :: WM_CAP_FILE_GET_CAPTURE_FILE = (WM_CAP_START + 21) integer(UINT), parameter :: WM_CAP_FILE_ALLOCATE = (WM_CAP_START + 22) integer(UINT), parameter :: WM_CAP_FILE_SAVEAS = (WM_CAP_START + 23) integer(UINT), parameter :: WM_CAP_FILE_SET_INFOCHUNK = (WM_CAP_START + 24) integer(UINT), parameter :: WM_CAP_FILE_SAVEDIB = (WM_CAP_START + 25) integer(UINT), parameter :: WM_CAP_EDIT_COPY = (WM_CAP_START + 30) integer(UINT), parameter :: WM_CAP_SET_AUDIOFORMAT = (WM_CAP_START + 35) integer(UINT), parameter :: WM_CAP_GET_AUDIOFORMAT = (WM_CAP_START + 36) integer(UINT), parameter :: WM_CAP_DLG_VIDEOFORMAT = (WM_CAP_START + 41) integer(UINT), parameter :: WM_CAP_DLG_VIDEOSOURCE = (WM_CAP_START + 42) integer(UINT), parameter :: WM_CAP_DLG_VIDEODISPLAY = (WM_CAP_START + 43) integer(UINT), parameter :: WM_CAP_GET_VIDEOFORMAT = (WM_CAP_START + 44) integer(UINT), parameter :: WM_CAP_SET_VIDEOFORMAT = (WM_CAP_START + 45) integer(UINT), parameter :: WM_CAP_DLG_VIDEOCOMPRESSION = (WM_CAP_START + 46) integer(UINT), parameter :: WM_CAP_SET_PREVIEW = (WM_CAP_START + 50) integer(UINT), parameter :: WM_CAP_SET_OVERLAY = (WM_CAP_START + 51) integer(UINT), parameter :: WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52) integer(UINT), parameter :: WM_CAP_SET_SCALE = (WM_CAP_START + 53) integer(UINT), parameter :: WM_CAP_GET_STATUS = (WM_CAP_START + 54) integer(UINT), parameter :: WM_CAP_SET_SCROLL = (WM_CAP_START + 55) integer(UINT), parameter :: WM_CAP_GRAB_FRAME = (WM_CAP_START + 60) integer(UINT), parameter :: WM_CAP_GRAB_FRAME_NOSTOP = (WM_CAP_START + 61) integer(UINT), parameter :: WM_CAP_SEQUENCE = (WM_CAP_START + 62) integer(UINT), parameter :: WM_CAP_SEQUENCE_NOFILE = (WM_CAP_START + 63) integer(UINT), parameter :: WM_CAP_SET_SEQUENCE_SETUP = (WM_CAP_START + 64) integer(UINT), parameter :: WM_CAP_GET_SEQUENCE_SETUP = (WM_CAP_START + 65) integer(UINT), parameter :: WM_CAP_SET_MCI_DEVICE = (WM_CAP_START + 66) integer(UINT), parameter :: WM_CAP_GET_MCI_DEVICE = (WM_CAP_START + 67) integer(UINT), parameter :: WM_CAP_STOP = (WM_CAP_START + 68) integer(UINT), parameter :: WM_CAP_ABORT = (WM_CAP_START + 69) integer(UINT), parameter :: WM_CAP_SINGLE_FRAME_OPEN = (WM_CAP_START + 70) integer(UINT), parameter :: WM_CAP_SINGLE_FRAME_CLOSE = (WM_CAP_START + 71) integer(UINT), parameter :: WM_CAP_SINGLE_FRAME = (WM_CAP_START + 72) integer(UINT), parameter :: WM_CAP_PAL_OPEN = (WM_CAP_START + 80) integer(UINT), parameter :: WM_CAP_PAL_SAVE = (WM_CAP_START + 81) integer(UINT), parameter :: WM_CAP_PAL_PASTE = (WM_CAP_START + 82) integer(UINT), parameter :: WM_CAP_PAL_AUTOCREATE = (WM_CAP_START + 83) integer(UINT), parameter :: WM_CAP_PAL_MANUALCREATE = (WM_CAP_START + 84) integer(UINT), parameter :: WM_CAP_SET_CALLBACK_CAPCONTROL = (WM_CAP_START + 85) type T_CAPDRIVERCAPS sequence integer(UINT) wDeviceIndex integer(BOOL) fHasOverlay integer(BOOL) fHasDlgVideoSource integer(BOOL) fHasDlgVideoFormat integer(BOOL) fHasDlgVideoDisplay integer(BOOL) fCaptureInitialized integer(BOOL) fDriverSuppliesPalettes integer(HANDLE) hVideoIn integer(HANDLE) hVideoOut integer(HANDLE) hVideoExtIn integer(HANDLE ) hVideoExtOut end type T_CAPDRIVERCAPS type T_CAPSTATUS sequence integer (UINT) uiImageWidth integer (UINT) uiImageHeight integer (BOOL) fLiveWindow integer (BOOL) fOverlayWindow integer (BOOL) fScale type (T_POINT) ptScroll integer (BOOL) fUsingDefaultPalette integer (BOOL) fAudioHardware integer (BOOL) fCapFileExists integer (DWORD) dwCurrentVideoFrame integer (DWORD) dwCurrentVideoFramesDropped integer (DWORD) dwCurrentWaveSamples integer (DWORD) dwCurrentTimeElapsedMS integer (HANDLE) hPalCurrent integer (BOOL) fCapturingNow integer (DWORD) dwReturn integer (UINT) wNumVideoAllocated integer (UINT) wNumAudioAllocated end type T_CAPSTATUS type T_CAPTUREPARMS integer(DWORD) dwRequestMicroSecPerFrame integer(BOOL) fMakeUserHitOKToCapture integer(UINT) wPercentDropForError integer(BOOL) fYield integer(DWORD) dwIndexSize integer(UINT) wChunkGranularity integer(BOOL) fUsingDOSMemory integer(UINT) wNumVideoRequested integer(BOOL) fCaptureAudio integer(UINT) wNumAudioRequested integer(UINT) vKeyAbort integer(BOOL) fAbortLeftMouse integer(BOOL) fAbortRightMouse integer(BOOL) fLimitEnabled integer(UINT) wTimeLimit integer(BOOL) fMCIControl integer(BOOL) fStepMCIDevice integer(DWORD) dwMCIStartTime integer(DWORD) dwMCIStopTime integer(BOOL) fStepCaptureAt2x integer(UINT) wStepCaptureAverageFrames integer(DWORD) dwAudioBufferSize integer(BOOL) fDisableWriteCache integer(UINT) AVStreamMaster end type T_CAPTUREPARMS interface function capGetDriverDescription(wDriverIndex,lpszName,cbName,lpszVer,cbVer) use ifwinty integer(BOOL) :: capGetDriverDescription !DEC$ ATTRIBUTES DEFAULT, STDCALL, DECORATE, ALIAS:'capGetDriverDescriptionA' :: capGetDriverDescription integer(WORD) wDriverIndex ! WORD wDriverIndex !DEC$ ATTRIBUTES REFERENCE, IGNORE_LOC :: lpszName character*(*) lpszName ! LPTSTR lpszName integer(SINT) cbName ! INT cbName !DEC$ ATTRIBUTES REFERENCE, IGNORE_LOC :: lpszVer character*(*) lpszVer ! LPTSTR lpszVer integer(SINT) cbVer ! INT cbVer end function capGetDriverDescription end interface interface function capCreateCaptureWindow(lpszWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,nID) use ifwinty !DEC$ ATTRIBUTES DEFAULT, STDCALL, DECORATE, ALIAS:'capCreateCaptureWindowA' :: capCreateCaptureWindow integer(HANDLE) :: capCreateCaptureWindow ! HWND hWndC !DEC$ ATTRIBUTES REFERENCE, ALLOW_NULL :: lpszWindowName character*(*) lpszWindowName ! LPCTSTR lpszWindowName integer(DWORD) dwStyle ! DWORD dwStyle integer(SINT) X ! int X integer(SINT) Y ! int Y integer(SINT) nWidth ! int nWidth integer(SINT) nHeight ! int nHeight integer(HANDLE) hWndParent ! HWND hWndParent integer(SINT) nID ! int nID end function end interface contains ! Macros integer(BOOL) function capDlgVideoDisplay(hwnd) integer(HANDLE), intent(in) :: hwnd capDlgVideoDisplay = SendMessage(hwnd,WM_CAP_DLG_VIDEODISPLAY,0,0) end function capDlgVideoDisplay integer(BOOL) function capDlgVideoFormat(hwnd) integer(HANDLE), intent(in) :: hwnd capDlgVideoFormat = SendMessage(hwnd,WM_CAP_DLG_VIDEOFORMAT,0,0) end function capDlgVideoFormat integer(BOOL) function capDlgVideoSource(hwnd) integer(HANDLE), intent(in) :: hwnd capDlgVideoSource = SendMessage(hwnd,WM_CAP_DLG_VIDEOSOURCE,0,0) end function capDlgVideoSource integer(BOOL) function capDriverConnect(hwnd,iIndex) integer(HANDLE), intent(in) :: hwnd integer(WORD), intent(in) :: iIndex capDriverConnect = SendMessage(hwnd,WM_CAP_DRIVER_CONNECT,iIndex,0) end function capDriverConnect integer(BOOL) function capDriverDisconnect(hwnd) integer(HANDLE), intent(in) :: hwnd capDriverDisconnect = SendMessage(hwnd,WM_CAP_DRIVER_DISCONNECT,0,0) end function capDriverDisconnect integer(BOOL) function capDriverGetCaps(hwnd,cap_driver_caps) integer(HANDLE), intent(in) :: hwnd type (T_CAPDRIVERCAPS), intent(inout) :: cap_driver_caps capDriverGetCaps = SendMessage(hwnd,WM_CAP_DRIVER_GET_CAPS,SizeOf(cap_driver_caps),Loc(cap_driver_caps)) end function capDriverGetCaps integer(BOOL) function capFileSaveDIB(hwnd,file_descriptor) integer(HANDLE), intent(in) :: hwnd character(*), intent(in) :: file_descriptor capFileSaveDIB = SendMessage(hwnd,WM_CAP_FILE_SAVEDIB,0,Loc(Trim(file_descriptor)//''C)) end function capFileSaveDIB integer(BOOL) function capFileSetCaptureFile(hwnd,file_descriptor) integer(HANDLE), intent(in) :: hwnd character(*), intent(in) :: file_descriptor capFileSetCaptureFile = SendMessage(hwnd,WM_CAP_FILE_SET_CAPTURE_FILE,0,Loc(Trim(file_descriptor)//''C)) end function capFileSetCaptureFile integer(BOOL) function capGrabFrameNoStop(hwnd) integer(HANDLE), intent(in) :: hwnd capGrabFrameNoStop = SendMessage(hwnd,WM_CAP_GRAB_FRAME_NOSTOP,0,0) end function capGrabFrameNoStop integer(BOOL) function capGetStatus(hwnd,cap_status) integer(HANDLE), intent(in) :: hwnd type (T_CAPSTATUS), intent(inout) :: cap_status capGetStatus = SendMessage(hwnd,WM_CAP_GET_STATUS,SizeOf(cap_status),Loc(cap_status)) end function capGetStatus integer(BOOL) function capOverlay(hwnd,f) integer(HANDLE), intent(in) :: hwnd integer(BOOL), intent(in) :: f capOverlay = SendMessage(hwnd,WM_CAP_SET_OVERLAY,f,0) end function capOverlay integer(BOOL) function capPreview(hwnd,f) integer(HANDLE), intent(in) :: hwnd integer(BOOL), intent(in) :: f capPreview = SendMessage(hwnd,WM_CAP_SET_PREVIEW,f,0) end function capPreview integer(BOOL) function capPreviewRate(hwnd,wMS) integer(HANDLE), intent(in) :: hwnd integer(BOOL), intent(in) :: wMS capPreviewRate = SendMessage(hwnd,WM_CAP_SET_PREVIEWRATE,wMS,0) end function capPreviewRate integer(BOOL) function capPreviewScale(hwnd,f) integer(HANDLE), intent(in) :: hwnd integer(BOOL), intent(in) :: f capPreviewScale = SendMessage(hwnd,WM_CAP_SET_SCALE,f,0) end function capPreviewScale integer(BOOL) function capSetScrollPos(hwnd,x,y) integer(HANDLE), intent(in) :: hwnd integer(LONG), intent(in) :: x,y capSetScrollPos = SendMessage(hwnd,WM_CAP_SET_SCROLL,0,Loc(T_POINT(x,y))) end function capSetScrollPos end module VfW32