]> git.nihav.org Git - nihav.git/blobdiff - nihav-duck/src/codecs/truemotion2x.rs
avimux: do not record palette change chunks in OpenDML index
[nihav.git] / nihav-duck / src / codecs / truemotion2x.rs
index 76ca244352d82cf0f538661aedcced6623526ba1..3e57b55c1883bc953cb200c4ca0ced620b11bd85 100644 (file)
@@ -275,9 +275,8 @@ impl TM2XDecoder {
         Ok(())
     }
 
-    #[allow(clippy::int_plus_one)]
-    #[allow(clippy::manual_memcpy)]
-    #[allow(clippy::cyclomatic_complexity)]
+    #[allow(clippy::cognitive_complexity)]
+    #[allow(clippy::identity_op)]
     fn decode_frame(&mut self, src: &[u8]) -> DecoderResult<()> {
         let mut mr = MemoryReader::new_read(src);
         let mut br = ByteReader::new(&mut mr);
@@ -531,17 +530,16 @@ impl TM2XDecoder {
                                 upred = 0;
                                 vpred = 0;
                             },
+                            #[allow(clippy::int_plus_one)]
                             CPARAM_MV => {
                                 let src_x = (bx as i16) * 8 + self.blk_info[x].mv_x;
                                 let src_y = ((by * 8 + line) as i16) + self.blk_info[x].mv_y;
                                 validate!(src_x >= 0 && (src_x as usize) + 8 <= self.width);
                                 validate!(src_y >= 0 && (src_y as usize) + 1 <= self.height);
                                 let ref_off = (src_x as usize) + ((src_y + 1) as usize) * stride;
-                                for i in 0..8 {
-                                    ydata[cur_off + i] = self.ref_frame.ydata[ref_off + i];
-                                    udata[cur_off + i] = self.ref_frame.udata[ref_off + i];
-                                    vdata[cur_off + i] = self.ref_frame.vdata[ref_off + i];
-                                }
+                                ydata[cur_off..][..8].copy_from_slice(&self.ref_frame.ydata[ref_off..][..8]);
+                                udata[cur_off..][..8].copy_from_slice(&self.ref_frame.udata[ref_off..][..8]);
+                                vdata[cur_off..][..8].copy_from_slice(&self.ref_frame.vdata[ref_off..][..8]);
                                 ypred = ydata[cur_off + 7] - ydata[cur_off + 7 - stride];
                                 upred = udata[cur_off + 7] - udata[cur_off + 7 - stride];
                                 vpred = vdata[cur_off + 7] - vdata[cur_off + 7 - stride];
@@ -710,15 +708,16 @@ mod test {
     use nihav_core::codecs::RegisteredDecoders;
     use nihav_core::demuxers::RegisteredDemuxers;
     use nihav_codec_support::test::dec_video::*;
-    use crate::duck_register_all_codecs;
+    use crate::duck_register_all_decoders;
     use nihav_commonfmt::generic_register_all_demuxers;
     #[test]
     fn test_tm2x() {
         let mut dmx_reg = RegisteredDemuxers::new();
         generic_register_all_demuxers(&mut dmx_reg);
         let mut dec_reg = RegisteredDecoders::new();
-        duck_register_all_codecs(&mut dec_reg);
+        duck_register_all_decoders(&mut dec_reg);
 
+        // sample: https://samples.mplayerhq.hu/V-codecs/TM2x.avi
         test_decoding("avi", "truemotion2x", "assets/Duck/TM2x.avi", None,
                         &dmx_reg, &dec_reg, ExpectedTestResult::MD5Frames(vec![
                             [0x2854e7f3, 0x41e54fd3, 0xd9a16302, 0x580321b2],