util/format/sample: improve ergonomics
This commit is contained in:
parent
d737ccdc37
commit
b2c9dc3747
@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user