-
Notifications
You must be signed in to change notification settings - Fork 2
/
CVError.swift
94 lines (86 loc) · 4.87 KB
/
CVError.swift
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
/// Represents CoreVideo specific error codes.
public enum CVError: Error, Equatable {
/// An otherwise undefined error occurred.
case error
/// At least one of the arguments passed in is not valid. Either out of range or the wrong type.
case invalidArgument
/// The allocation for a buffer or buffer pool failed. Most likely because of lack of resources.
case allocationFailed
/// The operation or feature is not supported.
case unsupported
// DisplayLink related errors
/// A CVDisplayLink cannot be created for the given DisplayRef.
case invalidDisplay
/// The CVDisplayLink is already started and running.
case displayLinkAlreadyRunning
/// The CVDisplayLink has not been started.
case displayLinkNotRunning
/// The output callback is not set.
case displayLinkCallbacksNotSet
// Buffer related errors
/// The requested pixel format is not supported for the CVBuffer type.
case invalidPixelFormat
/// The requested size (most likely too big) is not supported for the CVBuffer type.
case invalidSize
/// A CVBuffer cannot be created with the given attributes.
case invalidPixelBufferAttributes
/// The Buffer cannot be used with OpenGL as either its size, pixel format or attributes are not supported by OpenGL.
case pixelBufferNotOpenGLCompatible
/// The Buffer cannot be used with Metal as either its size, pixel format or attributes are not supported by Metal.
case pixelBufferNotMetalCompatible
// Buffer Pool related errors
/// The allocation request failed because it would have exceeded a specified allocation threshold (see kCVPixelBufferPoolAllocationThresholdKey).
case wouldExceedAllocationThreshold
/// The allocation for the buffer pool failed. Most likely because of lack of resources. Check if your parameters are in range.
case poolAllocationFailed
/// A CVBufferPool cannot be created with the given attributes.
case invalidPoolAttributes
/// A scan hasn't completely traversed the CVBufferPool due to a concurrent operation. The client can retry the scan.
case retry
/// Initializes a `CVError` value from a raw `CVReturn` value.
/// - Parameter rawValue: The vanilla `CVReturn` value.
/// - Returns: The corresponding `CVError` instance.
public init(rawValue: CVReturn) {
switch rawValue {
case kCVReturnInvalidArgument: self = .invalidArgument
case kCVReturnAllocationFailed: self = .allocationFailed
case kCVReturnUnsupported: self = .unsupported
case kCVReturnInvalidDisplay: self = .invalidDisplay
case kCVReturnDisplayLinkAlreadyRunning: self = .displayLinkAlreadyRunning
case kCVReturnDisplayLinkNotRunning: self = .displayLinkNotRunning
case kCVReturnDisplayLinkCallbacksNotSet: self = .displayLinkCallbacksNotSet
case kCVReturnInvalidPixelFormat: self = .invalidPixelFormat
case kCVReturnInvalidSize: self = .invalidSize
case kCVReturnInvalidPixelBufferAttributes: self = .invalidPixelBufferAttributes
case kCVReturnPixelBufferNotOpenGLCompatible: self = .pixelBufferNotOpenGLCompatible
case kCVReturnPixelBufferNotMetalCompatible: self = .pixelBufferNotMetalCompatible
case kCVReturnWouldExceedAllocationThreshold: self = .wouldExceedAllocationThreshold
case kCVReturnPoolAllocationFailed: self = .poolAllocationFailed
case kCVReturnInvalidPoolAttributes: self = .invalidPoolAttributes
case kCVReturnRetry: self = .retry
default: self = .error
}
}
/// The raw `CVReturn` value corresponding to this `CVError`.
public var rawValue: CVReturn {
switch self {
case .error: return kCVReturnError
case .invalidArgument: return kCVReturnInvalidArgument
case .allocationFailed: return kCVReturnAllocationFailed
case .unsupported: return kCVReturnUnsupported
case .invalidDisplay: return kCVReturnInvalidDisplay
case .displayLinkAlreadyRunning: return kCVReturnDisplayLinkAlreadyRunning
case .displayLinkNotRunning: return kCVReturnDisplayLinkNotRunning
case .displayLinkCallbacksNotSet: return kCVReturnDisplayLinkCallbacksNotSet
case .invalidPixelFormat: return kCVReturnInvalidPixelFormat
case .invalidSize: return kCVReturnInvalidSize
case .invalidPixelBufferAttributes: return kCVReturnInvalidPixelBufferAttributes
case .pixelBufferNotOpenGLCompatible: return kCVReturnPixelBufferNotOpenGLCompatible
case .pixelBufferNotMetalCompatible: return kCVReturnPixelBufferNotMetalCompatible
case .wouldExceedAllocationThreshold: return kCVReturnWouldExceedAllocationThreshold
case .poolAllocationFailed: return kCVReturnPoolAllocationFailed
case .invalidPoolAttributes: return kCVReturnInvalidPoolAttributes
case .retry: return kCVReturnRetry
}
}
}