@@ -176,43 +176,31 @@ impl RecordingValidator {
176176
177177 let tolerance_frames =
178178 ( result. expected_frames as f64 * self . config . frame_count_tolerance ) as u64 ;
179- let frame_diff = if result. actual_frames > result. expected_frames {
180- result. actual_frames - result. expected_frames
181- } else {
182- result. expected_frames - result. actual_frames
183- } ;
179+ let frame_diff = result. actual_frames . abs_diff ( result. expected_frames ) ;
184180 result. frame_count_ok = frame_diff <= tolerance_frames. max ( 2 ) ;
185181
186182 if result. actual_frames < result. expected_frames {
187183 result. dropped_frames = result. expected_frames - result. actual_frames ;
188184 }
189185
190- let duration_diff = if result. actual_duration > self . expected_duration {
191- result. actual_duration - self . expected_duration
192- } else {
193- self . expected_duration - result. actual_duration
194- } ;
186+ let duration_diff = result. actual_duration . abs_diff ( self . expected_duration ) ;
195187 result. duration_ok = duration_diff <= self . config . duration_tolerance ;
196188
197- if let Some ( expected) = & self . expected_video_info {
198- if video_info. width != expected. width || video_info. height != expected. height {
199- result . errors . push ( format ! (
200- "Resolution mismatch: expected {}x{}, got {}x{}" ,
201- expected. width , expected . height , video_info . width , video_info . height
202- ) ) ;
203- }
189+ if let Some ( expected) = & self . expected_video_info
190+ && ( video_info. width != expected. width || video_info. height != expected. height )
191+ {
192+ result . errors . push ( format ! (
193+ "Resolution mismatch: expected {}x{}, got {}x{}" ,
194+ expected . width , expected . height , video_info . width , video_info . height
195+ ) ) ;
204196 }
205197 } else if self . expected_video_info . is_some ( ) {
206198 result. errors . push ( "No video stream found" . to_string ( ) ) ;
207199 } else {
208200 result. frame_count_ok = true ;
209201 result. actual_duration = probe. duration ;
210202
211- let duration_diff = if result. actual_duration > self . expected_duration {
212- result. actual_duration - self . expected_duration
213- } else {
214- self . expected_duration - result. actual_duration
215- } ;
203+ let duration_diff = result. actual_duration . abs_diff ( self . expected_duration ) ;
216204 result. duration_ok = duration_diff <= self . config . duration_tolerance ;
217205 }
218206
@@ -246,10 +234,10 @@ impl RecordingValidator {
246234 for entry in entries {
247235 let entry = entry?;
248236 let path = entry. path ( ) ;
249- if let Some ( ext) = path. extension ( ) {
250- if ext == "m4s" {
251- fragments . push ( path ) ;
252- }
237+ if let Some ( ext) = path. extension ( )
238+ && ext == "m4s"
239+ {
240+ fragments . push ( path ) ;
253241 }
254242 }
255243
@@ -258,10 +246,10 @@ impl RecordingValidator {
258246 result. fragments_checked = fragments. len ( ) ;
259247
260248 for fragment in & fragments {
261- if let Ok ( metadata) = std:: fs:: metadata ( fragment) {
262- if metadata. len ( ) > 0 {
263- result . fragments_valid += 1 ;
264- }
249+ if let Ok ( metadata) = std:: fs:: metadata ( fragment)
250+ && metadata. len ( ) > 0
251+ {
252+ result . fragments_valid += 1 ;
265253 }
266254 }
267255
@@ -284,11 +272,7 @@ impl RecordingValidator {
284272 result. dropped_frames = result. expected_frames - result. actual_frames ;
285273 }
286274
287- let duration_diff = if result. actual_duration > self . expected_duration {
288- result. actual_duration - self . expected_duration
289- } else {
290- self . expected_duration - result. actual_duration
291- } ;
275+ let duration_diff = result. actual_duration . abs_diff ( self . expected_duration ) ;
292276 result. duration_ok = duration_diff <= self . config . duration_tolerance ;
293277
294278 let _ = std:: fs:: remove_file ( & combined_path) ;
@@ -373,52 +357,50 @@ async fn probe_media_file(path: &Path) -> anyhow::Result<MediaProbeResult> {
373357
374358 match codec. medium ( ) {
375359 ffmpeg:: media:: Type :: Video => {
376- if let Ok ( decoder) = ffmpeg:: codec:: context:: Context :: from_parameters ( codec) {
377- if let Ok ( video) = decoder. decoder ( ) . video ( ) {
378- result . video_info = Some ( VideoInfo {
379- pixel_format : video . format ( ) ,
380- width : video. width ( ) ,
381- height : video. height ( ) ,
382- time_base : stream . time_base ( ) ,
383- frame_rate : stream. avg_frame_rate ( ) ,
384- } ) ;
385-
386- result . video_frame_count = stream . frames ( ) as u64 ;
387- video_stream_index = Some ( stream. index ( ) ) ;
388- video_time_base = stream. time_base ( ) ;
389- }
360+ if let Ok ( decoder) = ffmpeg:: codec:: context:: Context :: from_parameters ( codec)
361+ && let Ok ( video) = decoder. decoder ( ) . video ( )
362+ {
363+ result . video_info = Some ( VideoInfo {
364+ pixel_format : video. format ( ) ,
365+ width : video. width ( ) ,
366+ height : video . height ( ) ,
367+ time_base : stream. time_base ( ) ,
368+ frame_rate : stream . avg_frame_rate ( ) ,
369+ } ) ;
370+
371+ result . video_frame_count = stream. frames ( ) as u64 ;
372+ video_stream_index = Some ( stream. index ( ) ) ;
373+ video_time_base = stream . time_base ( ) ;
390374 }
391375 }
392376 ffmpeg:: media:: Type :: Audio => {
393- if let Ok ( decoder) = ffmpeg:: codec:: context:: Context :: from_parameters ( codec) {
394- if let Ok ( audio) = decoder. decoder ( ) . audio ( ) {
395- if let Ok ( info) = AudioInfo :: from_decoder ( & audio) {
396- result. audio_info = Some ( info) ;
397- }
398- }
377+ if let Ok ( decoder) = ffmpeg:: codec:: context:: Context :: from_parameters ( codec)
378+ && let Ok ( audio) = decoder. decoder ( ) . audio ( )
379+ && let Ok ( info) = AudioInfo :: from_decoder ( & audio)
380+ {
381+ result. audio_info = Some ( info) ;
399382 }
400383 }
401384 _ => { }
402385 }
403386 }
404387
405- if result. video_frame_count == 0 {
406- if let Some ( video_idx) = video_stream_index {
407- let mut last_pts : Option < i64 > = None ;
408- for ( stream , packet ) in input . packets ( ) {
409- if stream . index ( ) == video_idx {
410- result . video_frame_count += 1 ;
411- if let Some ( pts ) = packet . pts ( ) {
412- last_pts = Some ( pts) ;
413- }
388+ if result. video_frame_count == 0
389+ && let Some ( video_idx) = video_stream_index
390+ {
391+ let mut last_pts : Option < i64 > = None ;
392+ for ( stream , packet ) in input . packets ( ) {
393+ if stream . index ( ) == video_idx {
394+ result . video_frame_count += 1 ;
395+ if let Some ( pts ) = packet . pts ( ) {
396+ last_pts = Some ( pts ) ;
414397 }
415398 }
399+ }
416400
417- if let Some ( pts) = last_pts {
418- let duration_secs =
419- pts as f64 * video_time_base. 0 as f64 / video_time_base. 1 as f64 ;
420- result. duration = Duration :: from_secs_f64 ( duration_secs. max ( 0.0 ) ) ;
421- }
401+ if let Some ( pts) = last_pts {
402+ let duration_secs = pts as f64 * video_time_base. 0 as f64 / video_time_base. 1 as f64 ;
403+ result. duration = Duration :: from_secs_f64 ( duration_secs. max ( 0.0 ) ) ;
422404 }
423405 }
424406
0 commit comments