util/format/sample: improve ergonomics

This commit is contained in:
meh 2015-06-01 20:32:53 +02:00
parent d737ccdc37
commit b2c9dc3747
2 changed files with 40 additions and 36 deletions

View File

@ -11,17 +11,18 @@ use ffi::*;
#[derive(Eq, PartialEq, Copy, Clone, Debug)] #[derive(Eq, PartialEq, Copy, Clone, Debug)]
pub enum Sample { pub enum Sample {
None, None,
U8,
S16,
S32,
FLT,
DBL,
U8P, U8(Type),
S16P, I16(Type),
S32P, I32(Type),
FLTP, F32(Type),
DBLP, F64(Type),
}
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
pub enum Type {
Packed,
Planar,
} }
impl Sample { impl Sample {
@ -68,17 +69,18 @@ impl From<AVSampleFormat> for Sample {
fn from(value: AVSampleFormat) -> Self { fn from(value: AVSampleFormat) -> Self {
match value { match value {
AV_SAMPLE_FMT_NONE => Sample::None, 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_U8 => Sample::U8(Type::Packed),
AV_SAMPLE_FMT_S16P => Sample::S16P, AV_SAMPLE_FMT_S16 => Sample::I16(Type::Packed),
AV_SAMPLE_FMT_S32P => Sample::S32P, AV_SAMPLE_FMT_S32 => Sample::I32(Type::Packed),
AV_SAMPLE_FMT_FLTP => Sample::FLTP, AV_SAMPLE_FMT_FLT => Sample::F32(Type::Packed),
AV_SAMPLE_FMT_DBLP => Sample::DBLP, 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 AV_SAMPLE_FMT_NB => Sample::None
} }
@ -97,17 +99,18 @@ impl Into<AVSampleFormat> for Sample {
fn into(self) -> AVSampleFormat { fn into(self) -> AVSampleFormat {
match self { match self {
Sample::None => AV_SAMPLE_FMT_NONE, 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::U8(Type::Packed) => AV_SAMPLE_FMT_U8,
Sample::S16P => AV_SAMPLE_FMT_S16P, Sample::I16(Type::Packed) => AV_SAMPLE_FMT_S16,
Sample::S32P => AV_SAMPLE_FMT_S32P, Sample::I32(Type::Packed) => AV_SAMPLE_FMT_S32,
Sample::FLTP => AV_SAMPLE_FMT_FLTP, Sample::F32(Type::Packed) => AV_SAMPLE_FMT_FLT,
Sample::DBLP => AV_SAMPLE_FMT_DBLP, 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,
} }
} }
} }

View File

@ -122,21 +122,22 @@ pub fn valid<T: Reflect + 'static>(format: Sample) -> bool {
Sample::None => Sample::None =>
false, false,
Sample::U8 | Sample::U8P if TypeId::of::<T>() != TypeId::of::<u8>() => Sample::U8(..) if TypeId::of::<T>() != TypeId::of::<u8>() =>
false, false,
Sample::S16 | Sample::S16P if TypeId::of::<T>() != TypeId::of::<i16>() => Sample::I16(..) if TypeId::of::<T>() != TypeId::of::<i16>() =>
false, false,
Sample::S32 | Sample::S32P if TypeId::of::<T>() != TypeId::of::<i32>() => Sample::I32(..) if TypeId::of::<T>() != TypeId::of::<i32>() =>
false, false,
Sample::FLT | Sample::FLTP if TypeId::of::<T>() != TypeId::of::<f32>() => Sample::F32(..) if TypeId::of::<T>() != TypeId::of::<f32>() =>
false, false,
Sample::DBL | Sample::DBLP if TypeId::of::<T>() != TypeId::of::<f64>() => Sample::F64(..) if TypeId::of::<T>() != TypeId::of::<f64>() =>
false, false,
_ => true _ =>
true
} }
} }