X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihed-cros-libva%2Fsrc%2Fsurface.rs;h=2a77a39d7d61b4839a806b7677427595e7bc7f4f;hb=49bf1d79384ecf1b28822101233719fb1c1b29b1;hp=d16fedc127f0589abe675acc0c05c36648b037be;hpb=69e6ce021284f1ebaf148b38b236068d08249e0f;p=nihav-player.git diff --git a/nihed-cros-libva/src/surface.rs b/nihed-cros-libva/src/surface.rs index d16fedc..2a77a39 100644 --- a/nihed-cros-libva/src/surface.rs +++ b/nihed-cros-libva/src/surface.rs @@ -6,8 +6,9 @@ use std::rc::Rc; 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 { @@ -22,23 +23,23 @@ impl Surface { /// [`Display::create_surfaces`]. pub(crate) fn new( display: Rc, - rt_format: u32, - va_fourcc: Option, + rt_format: RTFormat, + va_fourcc: Option, width: u32, height: u32, - usage_hint: Option, + usage_hints: Option, num_surfaces: u32, ) -> VAResult> { 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, }, }, }; @@ -67,7 +68,7 @@ impl Surface { (unsafe { bindings::vaCreateSurfaces( display.handle(), - rt_format, + rt_format.into(), width, height, surfaces.as_mut_ptr(), @@ -111,14 +112,20 @@ impl Surface { } /// Wrapper over `vaQuerySurfaceStatus` to find out any pending ops on the render target. - pub fn query_status(&self) -> VAResult { + pub fn query_status(&self) -> VAResult { 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.