]>
Commit | Line | Data |
---|---|---|
68362724 KS |
1 | // Copyright 2022 The ChromiumOS Authors |
2 | // Use of this source code is governed by a BSD-style license that can be | |
3 | // found in the LICENSE file. | |
4 | ||
69e6ce02 | 5 | use crate::bindings; |
68362724 | 6 | |
69e6ce02 KS |
7 | /// Return status. |
8 | pub type VAResult<T> = Result<T, VAError>; | |
68362724 | 9 | |
69e6ce02 KS |
10 | /// Non-successful return values of `VAStatus`. |
11 | #[derive(Clone, Copy, Debug, PartialEq)] | |
12 | #[repr(u32)] | |
13 | pub enum VAError { | |
14 | /// Current operation has failed. | |
15 | OperationFailed = bindings::constants::VA_STATUS_ERROR_OPERATION_FAILED, | |
16 | /// Allocation failed. | |
17 | AllocationFailed = bindings::constants::VA_STATUS_ERROR_ALLOCATION_FAILED, | |
18 | /// Invalid display ID. | |
19 | InvalidDisplay = bindings::constants::VA_STATUS_ERROR_INVALID_DISPLAY, | |
20 | /// Invalid configuration. | |
21 | InvalidConfig = bindings::constants::VA_STATUS_ERROR_INVALID_CONFIG, | |
22 | /// Invalid context. | |
23 | InvalidContext = bindings::constants::VA_STATUS_ERROR_INVALID_CONTEXT, | |
24 | /// Invalid surface ID. | |
25 | InvalidSurface = bindings::constants::VA_STATUS_ERROR_INVALID_SURFACE, | |
26 | /// Invalid buffer. | |
27 | InvalidBuffer = bindings::constants::VA_STATUS_ERROR_INVALID_BUFFER, | |
28 | /// Invalid image. | |
29 | InvalidImage = bindings::constants::VA_STATUS_ERROR_INVALID_IMAGE, | |
30 | /// Invalid subpicture. | |
31 | InvalidSubpicture = bindings::constants::VA_STATUS_ERROR_INVALID_SUBPICTURE, | |
32 | /// Requested attribute is not supported. | |
33 | AttrNotSupported = bindings::constants::VA_STATUS_ERROR_ATTR_NOT_SUPPORTED, | |
34 | /// Maximum number of allowed elements has been exceeded. | |
35 | MaxNumExceeded = bindings::constants::VA_STATUS_ERROR_MAX_NUM_EXCEEDED, | |
36 | /// Unsupported codec profile. | |
37 | UnsupportedProfile = bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_PROFILE, | |
38 | /// Unsupported entrypoint. | |
39 | UnsupportedEntrypoint = bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT, | |
40 | /// Unsupported RT format. | |
41 | UnsupportedRTFormat = bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT, | |
42 | /// Unsupported buffer type. | |
43 | UnsupportedBuffertype = bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE, | |
44 | /// Surface is still being worked on. | |
45 | SurfaceBusy = bindings::constants::VA_STATUS_ERROR_SURFACE_BUSY, | |
46 | /// Requested flag is not supported. | |
47 | FlagNotSupported = bindings::constants::VA_STATUS_ERROR_FLAG_NOT_SUPPORTED, | |
48 | /// Invalid parameter. | |
49 | InvalidParameter = bindings::constants::VA_STATUS_ERROR_INVALID_PARAMETER, | |
50 | /// Requested resolution is not supported. | |
51 | ResolutionNotSupported = bindings::constants::VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED, | |
52 | /// Unimplemented feature. | |
53 | Unimplemented = bindings::constants::VA_STATUS_ERROR_UNIMPLEMENTED, | |
54 | /// Surface is still being displayed. | |
55 | SurfaceInDisplaying = bindings::constants::VA_STATUS_ERROR_SURFACE_IN_DISPLAYING, | |
56 | /// Invalid image format. | |
57 | InvalidImageFormat = bindings::constants::VA_STATUS_ERROR_INVALID_IMAGE_FORMAT, | |
58 | /// Generic decoding error. | |
59 | DecodingError = bindings::constants::VA_STATUS_ERROR_DECODING_ERROR, | |
60 | /// Generic encoding error. | |
61 | EncodingError = bindings::constants::VA_STATUS_ERROR_ENCODING_ERROR, | |
62 | /** | |
63 | * An invalid/unsupported value was supplied. | |
64 | * | |
65 | * This is a catch-all error code for invalid or unsupported values. | |
66 | * e.g. value exceeding the valid range, invalid type in the context | |
67 | * of generic attribute values. | |
68 | */ | |
69 | InvalidValue = bindings::constants::VA_STATUS_ERROR_INVALID_VALUE, | |
70 | /// An unsupported filter was supplied. | |
71 | UnsupportedFilter = bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_FILTER, | |
72 | /// An invalid filter chain was supplied. | |
73 | InvalidFilterChain = bindings::constants::VA_STATUS_ERROR_INVALID_FILTER_CHAIN, | |
74 | /// Indicate HW busy (e.g. run multiple encoding simultaneously). | |
75 | HWBusy = bindings::constants::VA_STATUS_ERROR_HW_BUSY, | |
76 | /// An unsupported memory type was supplied. | |
77 | UnsupportedMemoryType = bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE, | |
78 | /// Indicate allocated buffer size is not enough for input or output | |
79 | NotEnoughBuffer = bindings::constants::VA_STATUS_ERROR_NOT_ENOUGH_BUFFER, | |
80 | /// Operation has timed out. | |
81 | Timedout = bindings::constants::VA_STATUS_ERROR_TIMEDOUT, | |
82 | /// Unknown error. | |
83 | Unknown = bindings::constants::VA_STATUS_ERROR_UNKNOWN, | |
84 | } | |
68362724 | 85 | |
69e6ce02 KS |
86 | impl std::fmt::Display for VAError { |
87 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | |
88 | write!(f, "{:?}", self) | |
89 | } | |
90 | } | |
91 | ||
92 | pub(crate) trait ConvertStatus { | |
93 | fn check(self) -> VAResult<()>; | |
94 | } | |
68362724 | 95 | |
69e6ce02 KS |
96 | impl ConvertStatus for bindings::VAStatus { |
97 | fn check(self) -> VAResult<()> { | |
98 | match self as u32 { | |
99 | bindings::constants::VA_STATUS_SUCCESS => Ok(()), | |
100 | bindings::constants::VA_STATUS_ERROR_OPERATION_FAILED => Err(VAError::OperationFailed), | |
101 | bindings::constants::VA_STATUS_ERROR_ALLOCATION_FAILED => Err(VAError::AllocationFailed), | |
102 | bindings::constants::VA_STATUS_ERROR_INVALID_DISPLAY => Err(VAError::InvalidDisplay), | |
103 | bindings::constants::VA_STATUS_ERROR_INVALID_CONFIG => Err(VAError::InvalidConfig), | |
104 | bindings::constants::VA_STATUS_ERROR_INVALID_CONTEXT => Err(VAError::InvalidContext), | |
105 | bindings::constants::VA_STATUS_ERROR_INVALID_SURFACE => Err(VAError::InvalidSurface), | |
106 | bindings::constants::VA_STATUS_ERROR_INVALID_BUFFER => Err(VAError::InvalidBuffer), | |
107 | bindings::constants::VA_STATUS_ERROR_INVALID_IMAGE => Err(VAError::InvalidImage), | |
108 | bindings::constants::VA_STATUS_ERROR_INVALID_SUBPICTURE => Err(VAError::InvalidSubpicture), | |
109 | bindings::constants::VA_STATUS_ERROR_ATTR_NOT_SUPPORTED => Err(VAError::AttrNotSupported), | |
110 | bindings::constants::VA_STATUS_ERROR_MAX_NUM_EXCEEDED => Err(VAError::MaxNumExceeded), | |
111 | bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_PROFILE => Err(VAError::UnsupportedProfile), | |
112 | bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT => Err(VAError::UnsupportedEntrypoint), | |
113 | bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT => Err(VAError::UnsupportedRTFormat), | |
114 | bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE => Err(VAError::UnsupportedBuffertype), | |
115 | bindings::constants::VA_STATUS_ERROR_SURFACE_BUSY => Err(VAError::SurfaceBusy), | |
116 | bindings::constants::VA_STATUS_ERROR_FLAG_NOT_SUPPORTED => Err(VAError::FlagNotSupported), | |
117 | bindings::constants::VA_STATUS_ERROR_INVALID_PARAMETER => Err(VAError::InvalidParameter), | |
118 | bindings::constants::VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED => Err(VAError::ResolutionNotSupported), | |
119 | bindings::constants::VA_STATUS_ERROR_UNIMPLEMENTED => Err(VAError::Unimplemented), | |
120 | bindings::constants::VA_STATUS_ERROR_SURFACE_IN_DISPLAYING => Err(VAError::SurfaceInDisplaying), | |
121 | bindings::constants::VA_STATUS_ERROR_INVALID_IMAGE_FORMAT => Err(VAError::InvalidImageFormat), | |
122 | bindings::constants::VA_STATUS_ERROR_DECODING_ERROR => Err(VAError::DecodingError), | |
123 | bindings::constants::VA_STATUS_ERROR_ENCODING_ERROR => Err(VAError::EncodingError), | |
124 | bindings::constants::VA_STATUS_ERROR_INVALID_VALUE => Err(VAError::InvalidValue), | |
125 | bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_FILTER => Err(VAError::UnsupportedFilter), | |
126 | bindings::constants::VA_STATUS_ERROR_INVALID_FILTER_CHAIN => Err(VAError::InvalidFilterChain), | |
127 | bindings::constants::VA_STATUS_ERROR_HW_BUSY => Err(VAError::HWBusy), | |
128 | bindings::constants::VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE => Err(VAError::UnsupportedMemoryType), | |
129 | bindings::constants::VA_STATUS_ERROR_NOT_ENOUGH_BUFFER => Err(VAError::NotEnoughBuffer), | |
130 | bindings::constants::VA_STATUS_ERROR_TIMEDOUT => Err(VAError::Timedout), | |
131 | _ => Err(VAError::Unknown), | |
68362724 KS |
132 | } |
133 | } | |
134 | } | |
36e9827e KS |
135 | |
136 | /// Surface status. | |
137 | #[repr(u32)] | |
138 | #[derive(Clone, Copy, Debug, PartialEq)] | |
139 | pub enum VASurfaceStatus { | |
140 | /// Rendering in progress. | |
141 | Rendering = 1, | |
142 | /// Displaying in progress (not safe to render into it). | |
143 | /// | |
144 | /// This status is useful if surface is used as the source of an overlay. | |
145 | Displaying = 2, | |
146 | /// Not being rendered or displayed. | |
147 | Ready = 3, | |
148 | /// Indicate a skipped frame during encode. | |
149 | Skipped = 8, | |
150 | } | |
151 | ||
152 | impl std::fmt::Display for VASurfaceStatus { | |
153 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | |
154 | write!(f, "{:?}", self) | |
155 | } | |
156 | } |