Fixed warnings
ci/woodpecker/push/woodpecker Pipeline was successful Details

This commit is contained in:
Sebastian 2022-02-20 20:44:49 +01:00
parent 96a89f3091
commit 6417820c9c
6 changed files with 65 additions and 64 deletions

View File

@ -1,9 +1,12 @@
pub struct SquaringAMDemodulator<'a> { pub struct SquaringAMDemodulator<'a> {
iterator: Box<Iterator<Item=f32> + 'a>, iterator: Box<dyn Iterator<Item = f32> + 'a>,
} }
impl<'a> SquaringAMDemodulator<'a> { impl<'a> SquaringAMDemodulator<'a> {
pub fn from<I>(iterator1: I) -> SquaringAMDemodulator<'a> where I: Iterator<Item=f32> + 'a { pub fn from<I>(iterator1: I) -> SquaringAMDemodulator<'a>
where
I: Iterator<Item = f32> + 'a,
{
SquaringAMDemodulator { SquaringAMDemodulator {
iterator: Box::new(iterator1), iterator: Box::new(iterator1),
} }
@ -16,7 +19,7 @@ impl<'a> Iterator for SquaringAMDemodulator<'a> {
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
match self.iterator.next() { match self.iterator.next() {
Some(x) => Some((x * x).sqrt()), Some(x) => Some((x * x).sqrt()),
None => None None => None,
} }
} }
} }

View File

@ -1,51 +1,49 @@
const SYNC_LENGHT : usize = 40; const SYNC_LENGHT: usize = 40;
const SYNCA_SEQ : [bool; 40] = [false, false, false, false, const SYNCA_SEQ: [bool; 40] = [
true, true, false, false, // Pulse 1 false, false, false, false, true, true, false, false, // Pulse 1
true, true, false, false, // Pulse 2 true, true, false, false, // Pulse 2
true, true, false, false, // Pulse 3 true, true, false, false, // Pulse 3
true, true, false, false, // Pulse 4 true, true, false, false, // Pulse 4
true, true, false, false, // Pulse 5 true, true, false, false, // Pulse 5
true, true, false, false, // Pulse 6 true, true, false, false, // Pulse 6
true, true, false, false, // Pulse 7 true, true, false, false, // Pulse 7
false, false, false, false, false, false, false, false, false, false, false, false,
false, false, false, false,]; ];
const SYNCB_SEQ : [bool; 40] = [false, false, false, false,
true, true, true, false, false,
true, true, true, false, false,
true, true, true, false, false,
true, true, true, false, false,
true, true, true, false, false,
true, true, true, false, false,
true, true, true, false, false,
false];
const SYNCB_SEQ: [bool; 40] = [
false, false, false, false, true, true, true, false, false, true, true, true, false, false,
true, true, true, false, false, true, true, true, false, false, true, true, true, false, false,
true, true, true, false, false, true, true, true, false, false, false,
];
pub enum SyncedSample { pub enum SyncedSample {
Sample(f32), Sample(f32),
SyncA(f32), SyncA(f32),
SyncB(f32) SyncB(f32),
} }
pub struct APTSyncer<'a> { pub struct APTSyncer<'a> {
state: [f32; SYNC_LENGHT], state: [f32; SYNC_LENGHT],
pos : usize, pos: usize,
nones_read: usize, nones_read: usize,
avg_level : f32, avg_level: f32,
iterator: Box<Iterator<Item=f32> + 'a> iterator: Box<dyn Iterator<Item = f32> + 'a>,
} }
impl<'a> APTSyncer<'a> { impl<'a> APTSyncer<'a> {
pub fn from<I>(mut iterator: I) -> APTSyncer<'a> where I: Iterator<Item=f32> + 'a { pub fn from<I>(mut iterator: I) -> APTSyncer<'a>
where
I: Iterator<Item = f32> + 'a,
{
let mut state = [0.0; SYNC_LENGHT]; let mut state = [0.0; SYNC_LENGHT];
let mut avg_level = 0.5; let mut avg_level = 0.5;
for i in 0..SYNC_LENGHT { for i in 0..SYNC_LENGHT {
match iterator.next() { match iterator.next() {
Some(x) => { Some(x) => {
state[i] = x; state[i] = x;
avg_level = 0.25 * x + avg_level * 0.75; avg_level = 0.25 * x + avg_level * 0.75;
}, }
None => panic!("Could not retrieve enough samples to prime syncer") None => panic!("Could not retrieve enough samples to prime syncer"),
} }
} }
@ -54,7 +52,7 @@ impl<'a> APTSyncer<'a> {
pos: 0, pos: 0,
nones_read: 0, nones_read: 0,
avg_level: avg_level, avg_level: avg_level,
iterator: Box::new(iterator) iterator: Box::new(iterator),
} }
} }
@ -87,16 +85,15 @@ impl<'a> Iterator for APTSyncer<'a> {
type Item = SyncedSample; type Item = SyncedSample;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
let (is_a, is_b) = self.is_marker(); let (is_a, is_b) = self.is_marker();
let sample = self.state[self.pos]; let sample = self.state[self.pos];
match self.iterator.next() { match self.iterator.next() {
Some(x) => { Some(x) => {
self.state[self.pos] = x; self.state[self.pos] = x;
self.avg_level = 0.25 * x + self.avg_level * 0.75; self.avg_level = 0.25 * x + self.avg_level * 0.75;
}, }
None => self.nones_read += 1 None => self.nones_read += 1,
}; };
if self.nones_read >= SYNC_LENGHT { if self.nones_read >= SYNC_LENGHT {
@ -107,11 +104,9 @@ impl<'a> Iterator for APTSyncer<'a> {
if is_a { if is_a {
return Some(SyncedSample::SyncA(sample)); return Some(SyncedSample::SyncA(sample));
} } else if is_b {
else if is_b {
return Some(SyncedSample::SyncB(sample)); return Some(SyncedSample::SyncB(sample));
} } else {
else {
return Some(SyncedSample::Sample(sample)); return Some(SyncedSample::Sample(sample));
} }
} }

View File

@ -12,7 +12,4 @@ pub enum DecoderError {
#[error("Unable to write output file: {0}")] #[error("Unable to write output file: {0}")]
OutputFileError(#[from] image::ImageError), OutputFileError(#[from] image::ImageError),
#[error("FIXME: Unknown decoder error")]
Unknown,
} }

View File

@ -2,11 +2,14 @@ pub struct FIRFilter<'a> {
coeffs: &'a [f32], coeffs: &'a [f32],
state: Vec<f32>, state: Vec<f32>,
pos: usize, pos: usize,
iterator: Box<Iterator<Item=f32> + 'a> iterator: Box<dyn Iterator<Item = f32> + 'a>,
} }
impl<'a> FIRFilter<'a> { impl<'a> FIRFilter<'a> {
pub fn from<I>(iterator: I, coeffs: &'a [f32]) -> FIRFilter<'a> where I: Iterator<Item=f32> + 'a { pub fn from<I>(iterator: I, coeffs: &'a [f32]) -> FIRFilter<'a>
where
I: Iterator<Item = f32> + 'a,
{
let mut state = Vec::new(); let mut state = Vec::new();
for _ in 0..coeffs.len() { for _ in 0..coeffs.len() {
state.push(0.0); state.push(0.0);
@ -16,7 +19,7 @@ impl<'a> FIRFilter<'a> {
coeffs: coeffs, coeffs: coeffs,
state: state, state: state,
pos: 0, pos: 0,
iterator: Box::new(iterator) iterator: Box::new(iterator),
} }
} }
} }
@ -27,7 +30,7 @@ impl<'a> Iterator for FIRFilter<'a> {
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
let cur = match self.iterator.next() { let cur = match self.iterator.next() {
Some(x) => x, Some(x) => x,
None => return None None => return None,
}; };
self.pos = (self.pos + 1) % self.coeffs.len(); self.pos = (self.pos + 1) % self.coeffs.len();
@ -37,7 +40,7 @@ impl<'a> Iterator for FIRFilter<'a> {
for i in 0..self.coeffs.len() { for i in 0..self.coeffs.len() {
let pos = (self.pos + self.coeffs.len() - i) % self.coeffs.len(); let pos = (self.pos + self.coeffs.len() - i) % self.coeffs.len();
result += self.state[pos] * self.coeffs[i]; result += self.state[pos] * self.coeffs[i];
}; }
Some(result) Some(result)
} }

View File

@ -1,15 +1,18 @@
pub struct Upsampler<'a> { pub struct Upsampler<'a> {
factor: u16, factor: u16,
state: u16, state: u16,
iterator: Box<Iterator<Item=f32> + 'a> iterator: Box<dyn Iterator<Item = f32> + 'a>,
} }
impl<'a> Upsampler<'a> { impl<'a> Upsampler<'a> {
pub fn from<I>(iterator: I, factor: u16) -> Upsampler<'a> where I: Iterator<Item=f32> + 'a { pub fn from<I>(iterator: I, factor: u16) -> Upsampler<'a>
where
I: Iterator<Item = f32> + 'a,
{
Upsampler { Upsampler {
factor: factor, factor: factor,
state: 0, state: 0,
iterator: Box::new(iterator) iterator: Box::new(iterator),
} }
} }
} }
@ -20,8 +23,7 @@ impl<'a> Iterator for Upsampler<'a> {
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
let result = if self.state == 0 { let result = if self.state == 0 {
self.iterator.next() self.iterator.next()
} } else {
else {
Some(0.0) Some(0.0)
}; };
self.state = (self.state + 1) % self.factor; self.state = (self.state + 1) % self.factor;
@ -30,18 +32,19 @@ impl<'a> Iterator for Upsampler<'a> {
} }
} }
pub struct Downsampler<'a> { pub struct Downsampler<'a> {
factor: u16, factor: u16,
iterator: Box<Iterator<Item=f32> + 'a> iterator: Box<dyn Iterator<Item = f32> + 'a>,
} }
impl<'a> Downsampler<'a> { impl<'a> Downsampler<'a> {
pub fn from<I>(iterator: I, factor: u16) -> Downsampler<'a> where I: Iterator<Item=f32> + 'a { pub fn from<I>(iterator: I, factor: u16) -> Downsampler<'a>
where
I: Iterator<Item = f32> + 'a,
{
Downsampler { Downsampler {
factor: factor, factor: factor,
iterator: Box::new(iterator) iterator: Box::new(iterator),
} }
} }
} }
@ -54,7 +57,7 @@ impl<'a> Iterator for Downsampler<'a> {
for _ in 0..self.factor { for _ in 0..self.factor {
match self.iterator.next() { match self.iterator.next() {
Some(x) => result += x, Some(x) => result += x,
None => return None None => return None,
} }
} }
result /= self.factor as f32; result /= self.factor as f32;

View File

@ -6,7 +6,7 @@ type FileReader = std::io::BufReader<std::fs::File>;
pub fn float_sample_iterator<'a>( pub fn float_sample_iterator<'a>(
reader: &'a mut hound::WavReader<FileReader>, reader: &'a mut hound::WavReader<FileReader>,
) -> Box<Iterator<Item = f32> + 'a> { ) -> Box<dyn Iterator<Item = f32> + 'a> {
match reader.spec().sample_format { match reader.spec().sample_format {
hound::SampleFormat::Float => Box::new(reader.samples::<f32>().map(|x| x.unwrap())), hound::SampleFormat::Float => Box::new(reader.samples::<f32>().map(|x| x.unwrap())),
hound::SampleFormat::Int => match reader.spec().bits_per_sample { hound::SampleFormat::Int => match reader.spec().bits_per_sample {