]> git.nihav.org Git - nihav-player.git/blobdiff - nihed-cros-libva/src/surface.rs
use NAPacketiser::attach_stream() where appropriate
[nihav-player.git] / nihed-cros-libva / src / surface.rs
index d16fedc127f0589abe675acc0c05c36648b037be..2a77a39d7d61b4839a806b7677427595e7bc7f4f 100644 (file)
@@ -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<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,
                     },
                 },
             };
@@ -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<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.