From b0a4e2ea93fafc4d65d474f3ada616a0ad5e19d5 Mon Sep 17 00:00:00 2001
From: Ariver <ar@Arm1.local>
Date: Sun, 12 Jul 2026 11:39:35 +0800
Subject: [PATCH] feat: bind helper stream timing markers

---
 src/audio.rs |   34 ++++++++++++++++++++++++++++++----
 1 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/src/audio.rs b/src/audio.rs
index 34415a7..cec22f0 100644
--- a/src/audio.rs
+++ b/src/audio.rs
@@ -1012,10 +1012,7 @@
         assert_eq!(5, frames.len());
         assert_eq!(
             4_800,
-            frames
-                .iter()
-                .map(|frame| frame.samples.len())
-                .sum::<usize>()
+            frames.iter().map(|frame| frame.data.len()).sum::<usize>()
         );
         assert!(frames.iter().all(|frame| frame.sample_rate == 48_000));
         assert!(frames.iter().all(|frame| frame.num_channels == 1));
@@ -1040,4 +1037,33 @@
         assert_eq!(960, second.frames[0].samples_per_channel);
         assert_eq!(0, second.buffered_source_samples);
     }
+
+    #[test]
+    fn pcm_s16le_stream_decoder_can_keep_16k_native_audio_profile() {
+        let mut decoder = PcmS16leStreamDecoder::new(16_000, 1, 16_000, 1).expect("stream decoder");
+        let mut pcm = Vec::new();
+        for index in 0..1_600 {
+            let sample = if index % 2 == 0 { 768_i16 } else { -768_i16 };
+            pcm.extend_from_slice(&sample.to_le_bytes());
+        }
+
+        let mut frames = Vec::new();
+        let chunk_size = 250 * 2;
+        for (index, chunk) in pcm.chunks(chunk_size).enumerate() {
+            let last = (index + 1) * chunk_size >= pcm.len();
+            let result = decoder
+                .push_bytes(chunk, 16_000, 1, last)
+                .expect("push pcm chunk");
+            frames.extend(result.frames);
+        }
+
+        assert_eq!(5, frames.len());
+        assert!(frames.iter().all(|frame| frame.sample_rate == 16_000));
+        assert!(frames.iter().all(|frame| frame.num_channels == 1));
+        assert!(frames.iter().all(|frame| frame.samples_per_channel == 320));
+        assert_eq!(
+            1_600,
+            frames.iter().map(|frame| frame.data.len()).sum::<usize>()
+        );
+    }
 }

--
Gitblit v1.9.3