X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-mpeg%2Fsrc%2Fcodecs%2Faac%2Fmod.rs;h=65148534a0d929ca517c71cf4650cf9346ad6dcb;hb=0399d1ff36852b260e4a170475963a623bf63abd;hp=2d37fa7fa897258ccc2cd703808143a041142d3e;hpb=0e18270ddb438c765a4597404f9053a15ce84704;p=nihav.git diff --git a/nihav-mpeg/src/codecs/aac/mod.rs b/nihav-mpeg/src/codecs/aac/mod.rs index 2d37fa7..6514853 100644 --- a/nihav-mpeg/src/codecs/aac/mod.rs +++ b/nihav-mpeg/src/codecs/aac/mod.rs @@ -64,7 +64,7 @@ impl ICSInfo { let ics_reserved_bit = br.read(1)?; validate!(ics_reserved_bit == 0); self.window_sequence = br.read(2)? as u8; - match self.prev_window_sequence { + /*match self.prev_window_sequence { ONLY_LONG_SEQUENCE | LONG_STOP_SEQUENCE => { if (self.window_sequence != ONLY_LONG_SEQUENCE) && (self.window_sequence != LONG_START_SEQUENCE) { @@ -78,7 +78,7 @@ impl ICSInfo { } }, _ => {}, - }; + };*/ self.window_shape = br.read_bool()?; self.window_groups = 1; if self.window_sequence == EIGHT_SHORT_SEQUENCE { @@ -183,6 +183,9 @@ impl ICS { fn get_intensity_dir(&self, g: usize, sfb: usize) -> bool { self.sfb_cb[g][sfb] == INTENSITY_HCB } + fn is_noise(&self, g: usize, sfb: usize) -> bool { + self.sfb_cb[g][sfb] == NOISE_HCB + } fn decode_scale_factor_data(&mut self, br: &mut BitReader, codebooks: &Codebooks) -> DecoderResult<()> { decode_scale_factor_data(br, &mut self.scales, self.global_gain, &self.info, &self.sfb_cb, codebooks) } @@ -341,10 +344,10 @@ impl ChannelPair { for sfb in 0..self.ics[0].info.max_sfb { let start = w * 128 + self.ics[0].get_band_start(sfb); let end = w * 128 + self.ics[0].get_band_start(sfb + 1); - if self.ics[0].is_intensity(g, sfb) { + if self.ics[1].is_intensity(g, sfb) { let invert = (self.ms_mask_present == 1) && self.ms_used[g][sfb]; - let dir = self.ics[0].get_intensity_dir(g, sfb) ^ invert; - let scale = 0.5f32.powf(0.25 * (f32::from(self.ics[0].scales[g][sfb]) + f32::from(INTENSITY_SCALE_MIN))); + let dir = self.ics[1].get_intensity_dir(g, sfb) ^ invert; + let scale = 0.5f32.powf(0.25 * (f32::from(self.ics[1].scales[g][sfb]) + f32::from(INTENSITY_SCALE_MIN))); if !dir { for i in start..end { self.ics[1].coeffs[i] = scale * self.ics[0].coeffs[i]; @@ -354,7 +357,7 @@ impl ChannelPair { self.ics[1].coeffs[i] = -scale * self.ics[0].coeffs[i]; } } - } else if (self.ms_mask_present == 2) || self.ms_used[g][sfb] { + } else if ((self.ms_mask_present == 2) || self.ms_used[g][sfb]) && !self.ics[0].is_noise(g, sfb) { for i in start..end { let tmp = self.ics[0].coeffs[i] - self.ics[1].coeffs[i]; self.ics[0].coeffs[i] += self.ics[1].coeffs[i]; @@ -683,7 +686,6 @@ impl NADecoder for AACDecoder { let edata = info.get_extradata().unwrap(); validate!(edata.len() >= 2); -//print!("edata:"); for s in edata.iter() { print!(" {:02X}", *s);}println!(""); if (edata.len() > 12) && (&edata[4..8] == b"esds") { let mut mr = MemoryReader::new_read(edata.as_slice()); let mut br = ByteReader::new(&mut mr);