add flush() to decoder interface
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 9 Nov 2019 17:57:34 +0000 (18:57 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 9 Nov 2019 17:57:34 +0000 (18:57 +0100)
44 files changed:
nihav-commonfmt/src/codecs/aac.rs
nihav-commonfmt/src/codecs/atrac3.rs
nihav-commonfmt/src/codecs/clearvideo.rs
nihav-commonfmt/src/codecs/pcm.rs
nihav-commonfmt/src/codecs/sipro.rs
nihav-commonfmt/src/codecs/ts102366.rs
nihav-core/src/codecs/mod.rs
nihav-duck/src/codecs/dkadpcm.rs
nihav-duck/src/codecs/on2avc.rs
nihav-duck/src/codecs/truemotion1.rs
nihav-duck/src/codecs/truemotion2.rs
nihav-duck/src/codecs/truemotion2x.rs
nihav-duck/src/codecs/truemotionrt.rs
nihav-duck/src/codecs/vp3.rs
nihav-duck/src/codecs/vp5.rs
nihav-duck/src/codecs/vp56.rs
nihav-duck/src/codecs/vp6.rs
nihav-duck/src/codecs/vp7.rs
nihav-game/src/codecs/bmv.rs
nihav-game/src/codecs/bmv3.rs
nihav-game/src/codecs/gremlinvideo.rs
nihav-game/src/codecs/midivid.rs
nihav-game/src/codecs/vmd.rs
nihav-indeo/src/codecs/imc.rs
nihav-indeo/src/codecs/indeo2.rs
nihav-indeo/src/codecs/indeo3.rs
nihav-indeo/src/codecs/indeo4.rs
nihav-indeo/src/codecs/indeo5.rs
nihav-indeo/src/codecs/intel263.rs
nihav-indeo/src/codecs/ivibr.rs
nihav-rad/src/codecs/bink2.rs
nihav-rad/src/codecs/binkaud.rs
nihav-rad/src/codecs/binkvid.rs
nihav-rad/src/codecs/smacker.rs
nihav-realmedia/src/codecs/cook.rs
nihav-realmedia/src/codecs/ra144.rs
nihav-realmedia/src/codecs/ra288.rs
nihav-realmedia/src/codecs/ralf.rs
nihav-realmedia/src/codecs/rv10.rs
nihav-realmedia/src/codecs/rv20.rs
nihav-realmedia/src/codecs/rv30.rs
nihav-realmedia/src/codecs/rv3040.rs
nihav-realmedia/src/codecs/rv40.rs
nihav-realmedia/src/codecs/rv60.rs

index 04fff33ec212058c872718bb992de914449d8c25..aeb2d060ff60694619e19d6103fe74383d4c7614 100644 (file)
@@ -1250,6 +1250,12 @@ impl NADecoder for AACDecoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        for pair in self.pairs.iter_mut() {
+            pair.ics[0].delay = [0.0; 1024];
+            pair.ics[1].delay = [0.0; 1024];
+        }
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index c80bd360ff676ac8c7067025c717914cbced9658..441da8923a9d3695d9e5808bc22bd8ad2a4f516d 100644 (file)
@@ -687,6 +687,12 @@ impl NADecoder for Atrac3Decoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        for ch_data in self.ch_data.iter_mut() {
+            ch_data.delay = [0.0; 1024];
+            ch_data.qmf_delay = [0.0; 64 * 3];
+        }
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 3e913a9dcc0a769d0adfab8b215809c87de12b11..790ea3e00b369d91a2e5b4fc3a1b6faccc983ba6 100644 (file)
@@ -698,6 +698,9 @@ impl NADecoder for ClearVideoDecoder {
         }
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.frmmgr.clear();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 49e9dadcb760d548bde7d229edc63b9c4dd1c929..32c8de0a0682891aae32ec0c02333c0e3ecbbe19 100644 (file)
@@ -56,6 +56,8 @@ impl NADecoder for PCMDecoder {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index fd035c624ecb8b7125e9f2cf1c8bb86a8381c062..745feaf82af09885190668e2e283fc1a0c858acd 100644 (file)
@@ -732,6 +732,8 @@ impl NADecoder for SiproDecoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 65b1b9e28eec85640721db607e68421dd1c6a3f1..62acaebd95278d5ebc1ea4df184410cc36c0bb9a 100644 (file)
@@ -1235,6 +1235,9 @@ impl NADecoder for AudioDecoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.delay = [[0.0; BLOCK_LEN]; MAX_CHANNELS + 1];
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index ee6f5cdc2bae6d5432a540abac063ed7e1ad0206..7ce056db4143aa455420d6d39dd010a176b91897 100644 (file)
@@ -255,6 +255,7 @@ impl Default for NADecoderSupport {
 pub trait NADecoder {
     fn init(&mut self, supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()>;
     fn decode(&mut self, supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef>;
+    fn flush(&mut self);
 }
 
 #[derive(Clone,Copy)]
index d339556d56fe089da0b1143540af66610723269c..24f5b5b8d95cb48575c40cbcc08431a0753521c9 100644 (file)
@@ -163,6 +163,8 @@ impl NADecoder for DuckADPCMDecoder {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_dk3() -> Box<dyn NADecoder> {
index 46880fac414b92a2a7adb240a8117dc11169dd11..8273437320f7e61502e5c1e2ede792f445471644 100644 (file)
@@ -1044,6 +1044,8 @@ impl NADecoder for AVCDecoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_500() -> Box<dyn NADecoder> {
index 44ff668f6ba1d02370d56c07826eab8f4ffb75ba..c313b137677407dd1fa8cbff619f16404e365a18 100644 (file)
@@ -654,6 +654,9 @@ impl NADecoder for TM1Decoder {
         frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.lastframe.reset();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index ecfce30837ba16088d4d71106ace65b62af61e93..c222c44c5aed1b27ae01c0e40f0461a89a5d6339 100644 (file)
@@ -577,6 +577,8 @@ impl NADecoder for TM2Decoder {
         frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 16d1125f71d44bb1f93d722209faba5703c2b6fc..584ee43218ebbc04729d0b08434d4ee89a789700 100644 (file)
@@ -688,6 +688,8 @@ impl NADecoder for TM2XDecoder {
         frm.set_frame_type(if self.is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index ba2ff17f8154090e86c476af4569015f0e20b94a..97ad981aa61127d8d6fbe1eba9af827e0d083d42 100644 (file)
@@ -80,6 +80,8 @@ impl NADecoder for TMRTDecoder {
         frm.set_frame_type(FrameType::I);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index d25d27f9480d2e2d626e1620ab7c2410167140c2..dd71c8b9cb1e1271672efbce65a0475da0087283 100644 (file)
@@ -1839,6 +1839,9 @@ impl NADecoder for VP34Decoder {
         frm.set_frame_type(if self.is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.shuf.clear();
+    }
 }
 
 pub fn get_decoder_vp3() -> Box<NADecoder> {
index abfd4d0af88b73a1c77c2361e55c6d000fd3f9c2..d13ffabfbd1376af8db95b38a1fa472a28cf511d 100644 (file)
@@ -267,6 +267,9 @@ impl NADecoder for VP5Decoder {
         frm.set_frame_type(ftype);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 pub fn get_decoder() -> Box<NADecoder> {
index d0a991f32869c6d0175c6966dc0316bace200a58..28b1f0695b82d78cde10a9d1b4475a2910ea268d 100644 (file)
@@ -428,6 +428,9 @@ impl VP56Decoder {
         self.set_dimensions(vinfo.get_width(), vinfo.get_height());
         Ok(())
     }
+    pub fn flush(&mut self) {
+        self.shuf.clear();
+    }
     pub fn decode_frame(&mut self, supp: &mut NADecoderSupport, src: &[u8], br: &mut dyn VP56Parser) -> DecoderResult<(NABufferType, FrameType)> {
         let aoffset;
         let mut bc;
index 1cf6a78745a9bac1573911bc41d8295f54bcdfe4..803ce5ee417ead96dfddfb7253187c03eba9ac34 100644 (file)
@@ -701,6 +701,9 @@ impl NADecoder for VP6Decoder {
         frm.set_frame_type(ftype);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 pub fn get_decoder_vp6() -> Box<NADecoder> {
index ccdb5dd22c519721ae5e337af7c7fe23f5977d8b..b96da83bfe40832c16cfe5b074403c42085208e7 100644 (file)
@@ -1392,6 +1392,9 @@ impl NADecoder for VP7Decoder {
         frm.set_frame_type(if self.dstate.is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.shuf.clear();
+    }
 }
 
 pub fn get_decoder() -> Box<NADecoder> {
index f2458af2acafe42979b57d88504e2b0159213663..902ae513bee4fc5d312bcf840bd0151cb460f29d 100644 (file)
@@ -216,6 +216,8 @@ impl NADecoder for BMVVideoDecoder {
         frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 
@@ -293,6 +295,8 @@ impl NADecoder for BMVAudioDecoder {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_audio() -> Box<dyn NADecoder> {
index efc3c7edde037f0ba83008cb6e60d11fcaf33724..47378af1459ea64fb2a556ab239b999aff9fee17 100644 (file)
@@ -499,6 +499,8 @@ impl NADecoder for BMV3VideoDecoder {
         frm.set_frame_type(if self.is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 
@@ -589,6 +591,8 @@ impl NADecoder for BMV3AudioDecoder {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_audio() -> Box<dyn NADecoder> {
index 621e23c90d741cdfeb2a2a78cddad3c73872c047..67be656be3596fdab79aeb0d7cfabbe00668241c 100644 (file)
@@ -456,6 +456,8 @@ impl NADecoder for GremlinVideoDecoder {
         frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_video() -> Box<dyn NADecoder> {
@@ -548,6 +550,8 @@ impl NADecoder for GremlinAudioDecoder {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_audio() -> Box<dyn NADecoder> {
index 299e5ac800128a779097c9275c376c20d441ad10..037248fc8c11630e0fd96d157cc824bdad247cfe 100644 (file)
@@ -169,6 +169,9 @@ impl NADecoder for MidividDecoder {
         frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.hams.clear();
+    }
 }
 
 
index 428471683f272964ab283763490ec310684f5421..e7f724f2577bd163c891e78fb1bd3dd5740438e0 100644 (file)
@@ -264,6 +264,9 @@ impl NADecoder for VMDVideoDecoder {
         frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.hams.clear();
+    }
 }
 
 
@@ -436,6 +439,8 @@ impl NADecoder for VMDAudioDecoder {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_audio() -> Box<dyn NADecoder> {
index c89552273a750b70849a48e44eacc1217932ff18..4b7c9908e511bbc37e163b12ed3313def9ef2103 100644 (file)
@@ -922,6 +922,8 @@ impl NADecoder for IMCDecoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_imc() -> Box<dyn NADecoder> {
index a022ec4af1a62d7781c72fbdf5d6819c99643219..56ec122594ce2f2e060a0d1c54d33329b6c8f1e9 100644 (file)
@@ -357,6 +357,9 @@ impl NADecoder for Indeo2Decoder {
             Ok(frm.into_ref())
         }
     }
+    fn flush(&mut self) {
+        self.frmmgr.clear();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 9687f94a0fa217695b07200aa47c8f755a5168a3..6e03cb3b308da41ed49dc8b065d9c521fc696df0 100644 (file)
@@ -783,6 +783,9 @@ impl NADecoder for Indeo3Decoder {
         frm.set_frame_type(if intraframe { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.bufs.reset();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 15cae6d2ad2eb80bfd33849979b627eb592d80f5..03918bed238c544604e0f43f346c1a12a07f1a3c 100644 (file)
@@ -455,6 +455,9 @@ impl NADecoder for Indeo4Decoder {
         frm.set_frame_type(self.dec.get_frame_type());
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 const INDEO4_PICTURE_SIZE_TAB: [[usize; 2]; 7] = [
index eec603a08bde181e8ac39775ffa644f03bd3990c..81111647d7d64d175cdc124f9bb9b62a29c54d8f 100644 (file)
@@ -530,6 +530,9 @@ impl NADecoder for Indeo5Decoder {
         frm.set_frame_type(self.dec.get_frame_type());
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 const INDEO5_PICTURE_SIZE_TAB: [[usize; 2]; 15] = [
index fb23bfce77894b091e3eff3dbd2d6b5a437b54f3..d7302ce444aeac643fa46508eb89e679b5fa9407 100644 (file)
@@ -404,6 +404,9 @@ impl NADecoder for Intel263Decoder {
         frm.set_frame_type(if self.dec.is_intra() { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 
index 029b81592f11d4415d4a269a509f3c8c9ad06ebc..cfb073f8baad7fe3231e68ab742bb31dc8b6bb99 100644 (file)
@@ -945,6 +945,14 @@ br.skip(skip_part as u32)?;
         res
     }
 
+    pub fn flush(&mut self) {
+        self.prev_frame = MISSING_REF;
+        self.next_frame = MISSING_REF;
+        self.iref_0     = MISSING_REF;
+        self.iref_1     = MISSING_REF;
+        self.scal_ref   = MISSING_REF;
+    }
+
     pub fn is_intra(&self) -> bool {
         self.ftype.is_intra()
     }
index 8c094789b460b3549c041883b6f68ccb71173712..e56bff7fc192bc6137e82eab93074c98221b37ea 100644 (file)
@@ -1937,6 +1937,9 @@ impl NADecoder for Bink2Decoder {
         frm.set_frame_type(if self.key_frame { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.ips.clear();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index b0c4fc2305101b07702dc27898820cf065e6dfee..86f4fb0c55b1c38440515bedcaddb05da9d61bbe 100644 (file)
@@ -273,6 +273,9 @@ impl NADecoder for BinkAudioDecoder {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+        self.delay = [[0.0; 256]; 2];
+    }
 }
 
 pub fn get_decoder_dct() -> Box<dyn NADecoder> {
index 69e30fe2a65d9abbb9664a91aa822648e03901cc..6d6c14acd78fbba82d31790187fc7bdbea6dc9b9 100644 (file)
@@ -1258,6 +1258,9 @@ println!("decode frame {} b={} i={}", pkt.get_pts().unwrap(), self.is_ver_b, sel
         frm.set_frame_type(FrameType::P);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.ips.clear();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 99d40d68b4bd5dc9fac5936bf5e4b121ca740616..cb7d0ba921bc7f2a1aafcb6dfa2dca8638ecdbac 100644 (file)
@@ -465,6 +465,8 @@ impl NADecoder for SmackerVideoDecoder {
         frm.set_frame_type(ftype);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_video() -> Box<dyn NADecoder> {
@@ -589,6 +591,8 @@ impl NADecoder for SmackerAudioDecoder {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder_audio() -> Box<dyn NADecoder> {
index 62a28112bfe496f1647cc5920f6bbb23909564cc..a1a32e48788592214f4c39475c095c1868e37a51 100644 (file)
@@ -669,6 +669,11 @@ impl NADecoder for CookDecoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        for pair in self.pairs.iter_mut() {
+            pair.delay = [[0.0; MAX_SAMPLES]; 2];
+        }
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 87edae96844994999a9ad8ef818e5f2c07d44674..4e8a6a549625214a11bc1bdf92c324261ef9bf74 100644 (file)
@@ -307,6 +307,8 @@ impl NADecoder for RA144Decoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index 9a30ab467967958ef4ff7510a5209f1f06a77f0b..ef8faaea8e531c82e97fc63258cd99e50ebeecd5 100644 (file)
@@ -197,6 +197,8 @@ impl NADecoder for RA288Decoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index c4728620098bdd328ff1ea2b69b4a94f3b655d33..7bcab6bdbfce8fc85571382e9da4e6635a2f92b5 100644 (file)
@@ -467,6 +467,8 @@ impl NADecoder for RALFDecoder {
         frm.set_keyframe(true);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index d6d4dc6c957e64581ddae72a1bdcffadf86968d5..9184b5718b5c735a73d42c0c96f1f0512264fe8c 100644 (file)
@@ -449,6 +449,9 @@ println!("???");
         frm.set_frame_type(if self.dec.is_intra() { FrameType::I } else { FrameType::P });
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 
index 81556d88d9c00afddbd3c5c00627a0095480de2c..b312a128c8c4e5e4d0e60562fcb127e1185b4248 100644 (file)
@@ -503,6 +503,9 @@ impl NADecoder for RealVideo20Decoder {
         frm.set_frame_type(self.dec.get_frame_type());
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 struct MBB { blocks: usize, bits: u8 }
index d42317642d45d9da38fe731968a86f57849d11cf..8c1141311a4265e2a361bc809f80c30ad0b88e5e 100644 (file)
@@ -159,6 +159,9 @@ println!("???");
         frm.set_frame_type(ftype);//if ftype == FrameType::B { FrameType::Skip } else { ftype } );
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index dde0b04774ae413c54ae6b0949228e2b5a60e405..640de417ebeb572a8ad0a5b145feb96a54dadb4a 100644 (file)
@@ -1250,4 +1250,7 @@ impl RV34Decoder {
 
         Ok((NABufferType::Video(buf), hdr0.ftype, ts))
     }
+    pub fn flush(&mut self) {
+        self.ipbs.clear();
+    }
 }
index 7586aae78c3b8a000ace07942faaa9f71cedcb2b..bd1f75bc45482a0875e757a33c304365f253ed48 100644 (file)
@@ -352,6 +352,9 @@ println!("???");
         frm.set_pts(Some(ts));
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.dec.flush();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {
index a4cf919cb8337841acb5f58ace5a06ccb131e060..bf89a5151361423cddb78f8b979c18417a7aec14 100644 (file)
@@ -1475,6 +1475,9 @@ println!("???");
         frm.set_frame_type(hdr.ftype);
         Ok(frm.into_ref())
     }
+    fn flush(&mut self) {
+        self.ipbs.clear();
+    }
 }
 
 pub fn get_decoder() -> Box<dyn NADecoder> {