-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmf_windows.go
63 lines (50 loc) · 1.3 KB
/
mf_windows.go
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
//+ build windows
package mediafoundation
import "syscall"
type (
HRESULT int32
)
type MFFlags byte
const (
MFSTARTUP_NOSOCKET MFFlags = 0x1
MFSTARTUP_LITE MFFlags = 0x1
MFSTARTUP_FULL MFFlags = 0
)
var (
pMFStartup,
pMECreateAttributes,
pMFEnumDeviceSources,
pMFShutdown uintptr
)
func MFStartup(Version uint32, flags MFFlags) HRESULT {
ret, _, _ := syscall.Syscall(pMFStartup, 2, uintptr(Version), uintptr(flags), 0)
return HRESULT(ret)
}
func MECreateAttributes(ppMFAttributes *uintptr, cInitialSize uint32) HRESULT {
return 0
}
func MFEnumDeviceSources(pMFAttributes uintptr, pppSourceActivate **uintptr, pcSourceActivate uint32) HRESULT {
return 0
}
func MFShutdown() HRESULT {
ret, _, _ := syscall.Syscall(pMFShutdown, 0, 0, 0, 0)
return HRESULT(ret)
}
func init() {
mf, err := syscall.LoadLibrary("Mfplat.dll")
if err != nil {
panic("LoadLibrary " + err.Error())
}
defer syscall.FreeLibrary(mf)
pMFStartup = getProcAddr(mf, "MFStartup")
pMECreateAttributes = getProcAddr(mf, "MECreateAttributes")
pMFEnumDeviceSources = getProcAddr(mf, "MFEnumDeviceSources")
pMFShutdown = getProcAddr(mf, "MFShutdown")
}
func getProcAddr(lib syscall.Handle, name string) uintptr {
addr, err := syscall.GetProcAddress(lib, name)
if err != nil {
panic(name + " " + err.Error())
}
return addr
}