From b2c9dc374770415c96ba6590b4c8d57576709fb8 Mon Sep 17 00:00:00 2001 From: meh Date: Mon, 1 Jun 2015 20:32:53 +0200 Subject: [PATCH] util/format/sample: improve ergonomics --- src/util/format/sample.rs | 63 ++++++++++++++++++++------------------- src/util/samples.rs | 13 ++++---- 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/util/format/sample.rs b/src/util/format/sample.rs index cdc0c2f..8472ee7 100644 --- a/src/util/format/sample.rs +++ b/src/util/format/sample.rs @@ -11,17 +11,18 @@ use ffi::*; #[derive(Eq, PartialEq, Copy, Clone, Debug)] pub enum Sample { None, - U8, - S16, - S32, - FLT, - DBL, - U8P, - S16P, - S32P, - FLTP, - DBLP, + U8(Type), + I16(Type), + I32(Type), + F32(Type), + F64(Type), +} + +#[derive(Eq, PartialEq, Copy, Clone, Debug)] +pub enum Type { + Packed, + Planar, } impl Sample { @@ -68,17 +69,18 @@ impl From for Sample { fn from(value: AVSampleFormat) -> Self { match value { AV_SAMPLE_FMT_NONE => Sample::None, - AV_SAMPLE_FMT_U8 => Sample::U8, - AV_SAMPLE_FMT_S16 => Sample::S16, - AV_SAMPLE_FMT_S32 => Sample::S32, - AV_SAMPLE_FMT_FLT => Sample::FLT, - AV_SAMPLE_FMT_DBL => Sample::DBL, - AV_SAMPLE_FMT_U8P => Sample::U8P, - AV_SAMPLE_FMT_S16P => Sample::S16P, - AV_SAMPLE_FMT_S32P => Sample::S32P, - AV_SAMPLE_FMT_FLTP => Sample::FLTP, - AV_SAMPLE_FMT_DBLP => Sample::DBLP, + AV_SAMPLE_FMT_U8 => Sample::U8(Type::Packed), + AV_SAMPLE_FMT_S16 => Sample::I16(Type::Packed), + AV_SAMPLE_FMT_S32 => Sample::I32(Type::Packed), + AV_SAMPLE_FMT_FLT => Sample::F32(Type::Packed), + AV_SAMPLE_FMT_DBL => Sample::F64(Type::Packed), + + AV_SAMPLE_FMT_U8P => Sample::U8(Type::Planar), + AV_SAMPLE_FMT_S16P => Sample::I16(Type::Planar), + AV_SAMPLE_FMT_S32P => Sample::I32(Type::Planar), + AV_SAMPLE_FMT_FLTP => Sample::F32(Type::Planar), + AV_SAMPLE_FMT_DBLP => Sample::F64(Type::Planar), AV_SAMPLE_FMT_NB => Sample::None } @@ -97,17 +99,18 @@ impl Into for Sample { fn into(self) -> AVSampleFormat { match self { Sample::None => AV_SAMPLE_FMT_NONE, - Sample::U8 => AV_SAMPLE_FMT_U8, - Sample::S16 => AV_SAMPLE_FMT_S16, - Sample::S32 => AV_SAMPLE_FMT_S32, - Sample::FLT => AV_SAMPLE_FMT_FLT, - Sample::DBL => AV_SAMPLE_FMT_DBL, - Sample::U8P => AV_SAMPLE_FMT_U8P, - Sample::S16P => AV_SAMPLE_FMT_S16P, - Sample::S32P => AV_SAMPLE_FMT_S32P, - Sample::FLTP => AV_SAMPLE_FMT_FLTP, - Sample::DBLP => AV_SAMPLE_FMT_DBLP, + Sample::U8(Type::Packed) => AV_SAMPLE_FMT_U8, + Sample::I16(Type::Packed) => AV_SAMPLE_FMT_S16, + Sample::I32(Type::Packed) => AV_SAMPLE_FMT_S32, + Sample::F32(Type::Packed) => AV_SAMPLE_FMT_FLT, + Sample::F64(Type::Packed) => AV_SAMPLE_FMT_DBL, + + Sample::U8(Type::Planar) => AV_SAMPLE_FMT_U8P, + Sample::I16(Type::Planar) => AV_SAMPLE_FMT_S16P, + Sample::I32(Type::Planar) => AV_SAMPLE_FMT_S32P, + Sample::F32(Type::Planar) => AV_SAMPLE_FMT_FLTP, + Sample::F64(Type::Planar) => AV_SAMPLE_FMT_DBLP, } } } diff --git a/src/util/samples.rs b/src/util/samples.rs index 95e18c7..56590b3 100644 --- a/src/util/samples.rs +++ b/src/util/samples.rs @@ -122,21 +122,22 @@ pub fn valid(format: Sample) -> bool { Sample::None => false, - Sample::U8 | Sample::U8P if TypeId::of::() != TypeId::of::() => + Sample::U8(..) if TypeId::of::() != TypeId::of::() => false, - Sample::S16 | Sample::S16P if TypeId::of::() != TypeId::of::() => + Sample::I16(..) if TypeId::of::() != TypeId::of::() => false, - Sample::S32 | Sample::S32P if TypeId::of::() != TypeId::of::() => + Sample::I32(..) if TypeId::of::() != TypeId::of::() => false, - Sample::FLT | Sample::FLTP if TypeId::of::() != TypeId::of::() => + Sample::F32(..) if TypeId::of::() != TypeId::of::() => false, - Sample::DBL | Sample::DBLP if TypeId::of::() != TypeId::of::() => + Sample::F64(..) if TypeId::of::() != TypeId::of::() => false, - _ => true + _ => + true } }