-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmanager.go
More file actions
98 lines (84 loc) · 2.87 KB
/
manager.go
File metadata and controls
98 lines (84 loc) · 2.87 KB
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
// Code generated by idiomgen. DO NOT EDIT.
package camera
import (
"unsafe"
capi "github.com/AndroidGoLab/ndk/capi/camera"
)
// Manager wraps the NDK ACameraManager handle.
type Manager struct {
ptr *capi.ACameraManager
}
// cptr returns the underlying C pointer, or nil if h is nil.
// This allows passing optional (nullable) handle parameters to capi functions.
func (h *Manager) cptr() *capi.ACameraManager {
if h == nil {
return nil
}
return h.ptr
}
// NewManager creates a new Manager.
func NewManager() *Manager {
return &Manager{ptr: capi.ACameraManager_create()}
}
// Close releases the underlying NDK handle.
func (h *Manager) Close() error {
if h.ptr == nil {
return nil
}
capi.ACameraManager_delete(h.ptr)
h.ptr = nil
return nil
}
// NewManagerFromPointer wraps a raw ACameraManager pointer.
func NewManagerFromPointer(ptr unsafe.Pointer) *Manager {
return &Manager{ptr: (*capi.ACameraManager)(ptr)}
}
// Pointer returns the underlying pointer as unsafe.Pointer.
func (h *Manager) Pointer() unsafe.Pointer {
return unsafe.Pointer(h.ptr)
}
// UintPtr returns the underlying pointer as a uintptr.
// This is useful for interop with gomobile bind, golang.org/x/mobile,
// gioui.org, and other packages that represent native handles as uintptr.
func (h *Manager) UintPtr() uintptr {
return uintptr(unsafe.Pointer(h.ptr))
}
// NewManagerFromUintPtr wraps a uintptr as a Manager.
// The caller must ensure ptr points to a valid ACameraManager.
func NewManagerFromUintPtr(ptr uintptr) *Manager {
return &Manager{ptr: (*capi.ACameraManager)(unsafe.Pointer(ptr))}
}
// GetCameraCharacteristics creates a new Metadata from this Manager.
func (h *Manager) GetCameraCharacteristics(cameraID string) (*Metadata, error) {
var ptr *capi.ACameraMetadata
if err := result(capi.ACameraManager_getCameraCharacteristics(h.ptr, cameraID, &ptr)); err != nil {
return nil, err
}
return &Metadata{ptr: ptr}, nil
}
// CameraIDList returns items from the underlying list.
func (h *Manager) CameraIDList() ([]string, error) {
var list *capi.ACameraIdList
if err := result(capi.ACameraManager_getCameraIdList(h.ptr, &list)); err != nil {
return nil, err
}
defer capi.ACameraManager_deleteCameraIdList(list)
count := capi.BridgeACameraIdListCount(list)
items := make([]string, count)
for i := range items {
items[i] = capi.BridgeACameraIdListItem(list, i)
}
return items, nil
}
// OpenCamera creates a new Device from this Manager.
func (h *Manager) OpenCamera(cameraID string, cbs DeviceStateCallbacks) (*Device, error) {
cbID := capi.BridgeRegisterDeviceStateCallbacks(cbs)
var cbsC capi.ACameraDevice_StateCallbacks
capi.BridgeInitDeviceStateCallbacks(&cbsC, cbID)
var ptr *capi.ACameraDevice
if err := result(capi.ACameraManager_openCamera(h.ptr, cameraID, &cbsC, &ptr)); err != nil {
capi.BridgeUnregisterDeviceStateCallbacks(cbID)
return nil, err
}
return &Device{ptr: ptr}, nil
}