use super::{arb_via_code, arb_via_named_variants};
arb_via_code!(crate::disposition::TrackDisposition);
super::arb_open_string_enum!(
crate::color::Matrix,
[
"bt709",
"bt601",
"bt470bg",
"smpte170m",
"bt2020nc",
"unspecified"
]
);
super::arb_open_string_enum!(
crate::color::Primaries,
[
"bt709",
"bt470bg",
"smpte170m",
"bt2020",
"smpte431",
"unspecified"
]
);
super::arb_open_string_enum!(
crate::color::Transfer,
[
"bt709",
"smpte170m",
"iec61966-2-1",
"smpte2084",
"arib-std-b67",
"unspecified"
]
);
super::arb_open_string_enum!(crate::color::DynamicRange, ["tv", "pc", "unspecified"]);
super::arb_open_string_enum!(
crate::color::ChromaLocation,
[
"left",
"center",
"topleft",
"top",
"bottomleft",
"unspecified"
]
);
super::arb_open_string_enum!(
crate::color::DcpTargetGamut,
["dci-p3", "rec709", "rec2020"]
);
super::arb_open_string_enum!(
crate::pixel_format::PixelFormat,
["yuv420p", "yuv422p10le", "nv12", "rgb24", "rgba", "p010le"]
);
super::arb_open_string_enum!(crate::frame::Rotation, ["0", "90", "180", "270"]);
super::arb_open_string_enum!(
crate::frame::FieldOrder,
["unknown", "progressive", "tt", "bb", "tb", "bt"]
);
super::arb_open_string_enum!(
crate::frame::StereoMode,
[
"mono",
"side-by-side",
"top-bottom",
"frame-sequence",
"checkerboard",
"lines"
]
);
arb_via_named_variants!(crate::audio::BitRateMode, [Cbr, Vbr, Abr]);
arb_via_named_variants!(
crate::audio::ChannelOrder,
[Unspecified, Native, Custom, Ambisonic]
);
impl<'a> ::arbitrary::Arbitrary<'a> for crate::color::Info {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
Ok(Self::new(
crate::color::Primaries::arbitrary(u)?,
crate::color::Transfer::arbitrary(u)?,
crate::color::Matrix::arbitrary(u)?,
crate::color::DynamicRange::arbitrary(u)?,
crate::color::ChromaLocation::arbitrary(u)?,
))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::color::ContentLightLevel {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
Ok(Self::new(u32::arbitrary(u)?, u32::arbitrary(u)?))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::color::ChromaCoord {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
Ok(Self::new(u32::arbitrary(u)?, u32::arbitrary(u)?))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::color::MasteringDisplay {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let primaries = [
crate::color::ChromaCoord::arbitrary(u)?,
crate::color::ChromaCoord::arbitrary(u)?,
crate::color::ChromaCoord::arbitrary(u)?,
];
let white_point = crate::color::ChromaCoord::arbitrary(u)?;
Ok(Self::new(
primaries,
white_point,
u32::arbitrary(u)?,
u32::arbitrary(u)?,
))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::color::HdrStaticMetadata {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
Ok(Self::new(
<Option<crate::color::MasteringDisplay> as ::arbitrary::Arbitrary>::arbitrary(u)?,
<Option<crate::color::ContentLightLevel> as ::arbitrary::Arbitrary>::arbitrary(u)?,
))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::color::DolbyVisionConfig {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
Ok(Self::new(
u8::arbitrary(u)?,
u8::arbitrary(u)?,
bool::arbitrary(u)?,
bool::arbitrary(u)?,
u8::arbitrary(u)?,
))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::frame::Dimensions {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
Ok(Self::new(u32::arbitrary(u)?, u32::arbitrary(u)?))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::frame::Rect {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
Ok(Self::new(
u32::arbitrary(u)?,
u32::arbitrary(u)?,
u32::arbitrary(u)?,
u32::arbitrary(u)?,
))
}
}
fn parts(
u: &mut ::arbitrary::Unstructured<'_>,
) -> ::arbitrary::Result<(i64, core::num::NonZeroI64)> {
#[allow(clippy::cast_possible_wrap)] let num = (<u64 as ::arbitrary::Arbitrary>::arbitrary(u)? >> 1) as i64;
#[allow(clippy::cast_possible_wrap)]
let den = ((<u64 as ::arbitrary::Arbitrary>::arbitrary(u)? >> 1) as i64).max(1);
let den = core::num::NonZeroI64::new(den).unwrap_or(crate::frame::DEN_ONE);
Ok((num, den))
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::frame::Rational {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let (num, den) = parts(u)?;
Ok(Self::new(num, den))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::frame::SampleAspectRatio {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let (num, den) = parts(u)?;
Ok(Self::new(num, den))
}
}
impl<'a> ::arbitrary::Arbitrary<'a> for crate::frame::FrameRate {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
Ok(Self::new(
crate::frame::Rational::arbitrary(u)?,
bool::arbitrary(u)?,
))
}
}
#[cfg(feature = "bayer")]
arb_via_named_variants!(crate::frame::BayerPattern, [Rggb, Bggr, Grbg, Gbrg]);
#[cfg(feature = "bayer")]
arb_via_named_variants!(crate::frame::BayerDemosaic, [Bilinear]);
#[cfg(feature = "bayer")]
arb_via_named_variants!(crate::frame::WbChannel, [R, G, B]);
#[cfg(feature = "bayer")]
impl<'a> ::arbitrary::Arbitrary<'a> for crate::frame::WhiteBalance {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let gain = |u: &mut ::arbitrary::Unstructured<'a>| -> ::arbitrary::Result<f32> {
Ok(u.int_in_range(0u32..=8_000)? as f32 / 1_000.0)
};
let (r, g, b) = (gain(u)?, gain(u)?, gain(u)?);
crate::frame::WhiteBalance::try_new(r, g, b).map_err(|_| ::arbitrary::Error::IncorrectFormat)
}
}
#[cfg(feature = "bayer")]
impl<'a> ::arbitrary::Arbitrary<'a> for crate::frame::ColorCorrectionMatrix {
fn arbitrary(u: &mut ::arbitrary::Unstructured<'a>) -> ::arbitrary::Result<Self> {
let mut m = [[0.0f32; 3]; 3];
for row in &mut m {
for cell in row {
*cell = u.int_in_range(-8_000i32..=8_000)? as f32 / 1_000.0;
}
}
crate::frame::ColorCorrectionMatrix::try_new(m).map_err(|_| ::arbitrary::Error::IncorrectFormat)
}
}