mirror of
https://github.com/cberner/raptorq.git
synced 2024-06-29 18:21:43 +00:00
Implement repair symbols
This commit is contained in:
parent
912330cd45
commit
7355a6e8b2
@ -9,11 +9,13 @@ use systematic_constants::num_intermediate_symbols;
|
||||
use systematic_constants::num_ldpc_symbols;
|
||||
use systematic_constants::num_hdpc_symbols;
|
||||
use constraint_matrix::generate_constraint_matrix;
|
||||
use base::intermediate_tuple;
|
||||
|
||||
pub struct SourceBlockEncoder {
|
||||
source_block_id: u8,
|
||||
symbol_size: u16,
|
||||
source_symbols: Vec<Symbol>
|
||||
source_symbols: Vec<Symbol>,
|
||||
intermediate_symbols: Vec<Symbol>
|
||||
}
|
||||
|
||||
impl SourceBlockEncoder {
|
||||
@ -22,10 +24,12 @@ impl SourceBlockEncoder {
|
||||
let source_symbols: Vec<Symbol> = data.chunks(symbol_size as usize)
|
||||
.map(|x| Symbol::new(Vec::from(x)))
|
||||
.collect();
|
||||
let intermediate_symbols = gen_intermediate_symbols(extend_source_block(source_symbols.clone()));
|
||||
SourceBlockEncoder {
|
||||
source_block_id,
|
||||
symbol_size,
|
||||
source_symbols
|
||||
source_symbols,
|
||||
intermediate_symbols
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,8 +44,18 @@ impl SourceBlockEncoder {
|
||||
}).collect()
|
||||
}
|
||||
|
||||
// See section 5.3.4
|
||||
pub fn repair_packets(&self, start_encoding_symbol_id: u32, packets: u32) -> Vec<EncodingPacket> {
|
||||
vec![]
|
||||
assert!(start_encoding_symbol_id >= extended_source_block_symbols(self.source_symbols.len() as u32));
|
||||
let mut result = vec![];
|
||||
for i in 0..packets {
|
||||
let tuple = intermediate_tuple(self.source_symbols.len() as u32, start_encoding_symbol_id + i);
|
||||
result.push(EncodingPacket {
|
||||
payload_id: PayloadId::new(self.source_block_id, start_encoding_symbol_id + i).unwrap(),
|
||||
symbol: enc(self.source_symbols.len() as u32, self.intermediate_symbols.clone(), tuple)
|
||||
});
|
||||
}
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ mod codec_tests {
|
||||
|
||||
#[test]
|
||||
fn round_trip() {
|
||||
let elements = 1024*1024;
|
||||
let elements = 1024;
|
||||
let mut data: Vec<u8> = vec![0; elements];
|
||||
for i in 0..elements {
|
||||
data[i] = rand::thread_rng().gen();
|
||||
|
Loading…
Reference in New Issue
Block a user