use crate::bindings;
use crate::display::Display;
+use crate::formats::{RTFormat, VAFourcc};
use crate::status::*;
-use crate::UsageHint;
+use crate::UsageHints;
/// An owned VA surface that is tied to the lifetime of a particular VADisplay
pub struct Surface {
/// [`Display::create_surfaces`].
pub(crate) fn new(
display: Rc<Display>,
- rt_format: u32,
- va_fourcc: Option<u32>,
+ rt_format: RTFormat,
+ va_fourcc: Option<VAFourcc>,
width: u32,
height: u32,
- usage_hint: Option<UsageHint>,
+ usage_hints: Option<UsageHints>,
num_surfaces: u32,
) -> VAResult<Vec<Self>> {
let mut attrs = vec![];
- if let Some(usage_hint) = usage_hint {
+ if let Some(usage_hints) = usage_hints {
let attr = bindings::VASurfaceAttrib {
type_: bindings::VASurfaceAttribType::VASurfaceAttribUsageHint,
flags: bindings::constants::VA_SURFACE_ATTRIB_SETTABLE,
value: bindings::VAGenericValue {
type_: bindings::VAGenericValueType::VAGenericValueTypeInteger,
value: bindings::_VAGenericValue__bindgen_ty_1 {
- i: usage_hint.bits() as i32,
+ i: usage_hints.bits() as i32,
},
},
};
(unsafe {
bindings::vaCreateSurfaces(
display.handle(),
- rt_format,
+ rt_format.into(),
width,
height,
surfaces.as_mut_ptr(),
}
/// Wrapper over `vaQuerySurfaceStatus` to find out any pending ops on the render target.
- pub fn query_status(&self) -> VAResult<bindings::VASurfaceStatus::Type> {
+ pub fn query_status(&self) -> VAResult<VASurfaceStatus> {
let mut status: bindings::VASurfaceStatus::Type = 0;
// Safe because `self` represents a valid VASurface.
(unsafe {
bindings::vaQuerySurfaceStatus(self.display.handle(), self.id, &mut status)
})
.check()?;
- Ok(status)
+ match status {
+ bindings::VASurfaceStatus::VASurfaceRendering => Ok(VASurfaceStatus::Rendering),
+ bindings::VASurfaceStatus::VASurfaceDisplaying => Ok(VASurfaceStatus::Displaying),
+ bindings::VASurfaceStatus::VASurfaceReady => Ok(VASurfaceStatus::Ready),
+ bindings::VASurfaceStatus::VASurfaceSkipped => Ok(VASurfaceStatus::Skipped),
+ _ => Err(VAError::Unknown),
+ }
}
/// Returns the ID of this surface.