fev 0.2.3

High-level VA-API bindings
Documentation
//! Subpictures and surface blending.
//!
//! (TODO)

use std::vec;

use crate::image::ImageFormat;

bitflags! {
    #[derive(Debug, Clone, Copy, PartialEq, Eq)]
    pub struct SubpictureFlags: u32 {
        const CHROMA_KEYING = 0x0001;
        const GLOBAL_ALPHA  = 0x0002;
        const DESTINATION_IS_SCREEN_COORD = 0x0004;
    }
}

pub struct SubpictureFormat {
    format: ImageFormat,
    flags: SubpictureFlags,
}

impl SubpictureFormat {
    #[inline]
    pub fn image_format(&self) -> &ImageFormat {
        &self.format
    }

    #[inline]
    pub fn flags(&self) -> SubpictureFlags {
        self.flags
    }
}

pub struct SubpictureFormats {
    pub(crate) formats: Vec<ImageFormat>,
    pub(crate) flags: Vec<SubpictureFlags>,
}

impl SubpictureFormats {
    #[inline]
    pub fn len(&self) -> usize {
        self.formats.len()
    }

    #[inline]
    pub fn is_empty(&self) -> bool {
        self.formats.is_empty()
    }
}

impl IntoIterator for SubpictureFormats {
    type Item = SubpictureFormat;
    type IntoIter = SubpictureFormatIter;

    fn into_iter(self) -> Self::IntoIter {
        SubpictureFormatIter {
            formats: self.formats.into_iter(),
            flags: self.flags.into_iter(),
        }
    }
}

pub struct SubpictureFormatIter {
    formats: vec::IntoIter<ImageFormat>,
    flags: vec::IntoIter<SubpictureFlags>,
}

impl Iterator for SubpictureFormatIter {
    type Item = SubpictureFormat;

    fn next(&mut self) -> Option<Self::Item> {
        Some(SubpictureFormat {
            format: self.formats.next()?,
            flags: self.flags.next()?,
        })
    }
}