11use std:: {
2- fs:: File ,
32 io:: Cursor ,
43 time:: Duration ,
54} ;
@@ -10,9 +9,6 @@ use ffmpeg_audio::{
109 SeekMode ,
1110} ;
1211
13- const AAC_SEEK_PATH : & str = "tests/assets/seek_test.aac" ;
14- const MUTATION_AAC_PATH : & str = "tests/assets/format_mutation.aac" ;
15-
1612fn generate_sine_wav ( duration_secs : f32 ) -> Vec < u8 > {
1713 let sample_rate: u32 = 44100 ;
1814 let freq: f32 = 440.0 ;
@@ -398,72 +394,80 @@ fn test_planar_format_mismatch_rejection_planar_to_packed() {
398394 ) ;
399395}
400396
401- #[ test]
402397#[ cfg( not( target_arch = "wasm32" ) ) ]
403- fn test_seek_accuracy ( ) {
404- let file = File :: open ( AAC_SEEK_PATH ) . expect ( "Failed to open AAC test asset" ) ;
405- let mut reader = AudioReader :: new ( file) . unwrap ( ) ;
398+ mod file_tests {
399+ use std:: fs:: File ;
406400
407- let target = Duration :: from_millis ( 501 ) ;
401+ use super :: * ;
408402
409- reader. seek ( target, SeekMode :: Coarse ) . unwrap ( ) ;
410- let ( coarse_pts, coarse_samples) = {
411- let frame = reader. receive_frame ( ) . unwrap ( ) . unwrap ( ) ;
412- ( frame. pts ( ) . unwrap ( ) , frame. samples ( ) )
413- } ;
403+ const AAC_SEEK_PATH : & str = "tests/assets/seek_test.aac" ;
404+ const MUTATION_AAC_PATH : & str = "tests/assets/format_mutation.aac" ;
414405
415- assert ! ( coarse_pts < target, "Coarse seek PTS should be < target" ) ;
406+ #[ test]
407+ fn test_seek_accuracy ( ) {
408+ let file = File :: open ( AAC_SEEK_PATH ) . expect ( "Failed to open AAC test asset" ) ;
409+ let mut reader = AudioReader :: new ( file) . unwrap ( ) ;
416410
417- reader. seek ( target, SeekMode :: Accurate ) . unwrap ( ) ;
418- let ( accurate_pts, accurate_samples) = {
419- let frame = reader. receive_frame ( ) . unwrap ( ) . unwrap ( ) ;
420- ( frame. pts ( ) . unwrap ( ) , frame. samples ( ) )
421- } ;
411+ let target = Duration :: from_millis ( 501 ) ;
422412
423- assert_eq ! (
424- accurate_pts . as_millis ( ) ,
425- target . as_millis ( ) ,
426- "Accurate seek PTS must exactly match the target"
427- ) ;
413+ reader . seek ( target , SeekMode :: Coarse ) . unwrap ( ) ;
414+ let ( coarse_pts , coarse_samples ) = {
415+ let frame = reader . receive_frame ( ) . unwrap ( ) . unwrap ( ) ;
416+ ( frame . pts ( ) . unwrap ( ) , frame . samples ( ) )
417+ } ;
428418
429- assert ! (
430- accurate_samples < coarse_samples,
431- "Accurate frame should be trimmed ({accurate_samples} < {coarse_samples})"
432- ) ;
433- }
434-
435- #[ test]
436- #[ cfg( not( target_arch = "wasm32" ) ) ]
437- fn test_hot_reload_on_format_mutation ( ) {
438- let file = File :: open ( MUTATION_AAC_PATH ) . unwrap ( ) ;
439- let reader = AudioReader :: new ( file) . unwrap ( ) ;
419+ assert ! ( coarse_pts < target, "Coarse seek PTS should be < target" ) ;
440420
441- let options = ResampleOptions :: new ( )
442- . format :: < f32 > ( )
443- . channels ( 2 )
444- . sample_rate ( 48000 ) ;
421+ reader. seek ( target, SeekMode :: Accurate ) . unwrap ( ) ;
422+ let ( accurate_pts, accurate_samples) = {
423+ let frame = reader. receive_frame ( ) . unwrap ( ) . unwrap ( ) ;
424+ ( frame. pts ( ) . unwrap ( ) , frame. samples ( ) )
425+ } ;
445426
446- let mut resampled_reader = reader. into_resampled ( options) . unwrap ( ) ;
427+ assert_eq ! (
428+ accurate_pts. as_millis( ) ,
429+ target. as_millis( ) ,
430+ "Accurate seek PTS must exactly match the target"
431+ ) ;
447432
448- let mut total_samples = 0 ;
433+ assert ! (
434+ accurate_samples < coarse_samples,
435+ "Accurate frame should be trimmed ({accurate_samples} < {coarse_samples})"
436+ ) ;
437+ }
449438
450- loop {
451- match resampled_reader. receive_frame_as :: < f32 > ( ) {
452- Ok ( Some ( samples) ) => {
453- assert_eq ! (
454- samples. len( ) % 2 ,
455- 0 ,
456- "Output slice must be interleaved stereo"
457- ) ;
458- total_samples += samples. len ( ) / 2 ;
439+ #[ test]
440+ fn test_hot_reload_on_format_mutation ( ) {
441+ let file = File :: open ( MUTATION_AAC_PATH ) . unwrap ( ) ;
442+ let reader = AudioReader :: new ( file) . unwrap ( ) ;
443+
444+ let options = ResampleOptions :: new ( )
445+ . format :: < f32 > ( )
446+ . channels ( 2 )
447+ . sample_rate ( 48000 ) ;
448+
449+ let mut resampled_reader = reader. into_resampled ( options) . unwrap ( ) ;
450+
451+ let mut total_samples = 0 ;
452+
453+ loop {
454+ match resampled_reader. receive_frame_as :: < f32 > ( ) {
455+ Ok ( Some ( samples) ) => {
456+ assert_eq ! (
457+ samples. len( ) % 2 ,
458+ 0 ,
459+ "Output slice must be interleaved stereo"
460+ ) ;
461+ total_samples += samples. len ( ) / 2 ;
462+ }
463+ Ok ( None ) => break ,
464+ Err ( e) => panic ! ( "Failed to receive frame: {e:?}" ) ,
459465 }
460- Ok ( None ) => break ,
461- Err ( e) => panic ! ( "Failed to receive frame: {e:?}" ) ,
462466 }
463- }
464467
465- assert ! (
466- total_samples > 0 ,
467- "Should have successfully decoded mutated stream"
468- ) ;
468+ assert ! (
469+ total_samples > 0 ,
470+ "Should have successfully decoded mutated stream"
471+ ) ;
472+ }
469473}
0 commit comments