@@ -136,11 +136,6 @@ impl<T: Pixel> SceneChangeDetector<T> {
136
136
return false ;
137
137
}
138
138
139
- // Decrease deque offset if there is no more new frames
140
- if self . deque_offset > frame_set. len ( ) + 1 && self . lookahead_offset > 0 {
141
- self . deque_offset = self . deque_offset - 1 ;
142
- }
143
-
144
139
// Initially fill score deque with forward frames
145
140
// ititiallization is different depending on frame set length
146
141
if self . deque_offset > 0
@@ -164,13 +159,16 @@ impl<T: Pixel> SceneChangeDetector<T> {
164
159
self . deque_offset = frame_set. len ( ) - 2 ;
165
160
}
166
161
// Running single frame comparison and adding it to deque
162
+ // Decrease deque offset if there is no new frames
167
163
if frame_set. len ( ) > self . deque_offset + 1 {
168
164
self . run_comparison (
169
165
frame_set[ self . deque_offset ] . clone ( ) ,
170
166
frame_set[ self . deque_offset + 1 ] . clone ( ) ,
171
167
input_frameno,
172
168
previous_keyframe,
173
169
) ;
170
+ } else {
171
+ self . deque_offset -= 1 ;
174
172
}
175
173
176
174
// Adaptive scenecut check
@@ -237,12 +235,6 @@ impl<T: Pixel> SceneChangeDetector<T> {
237
235
let mut cloned_deque = self . score_deque . to_vec ( ) ;
238
236
cloned_deque. remove ( self . deque_offset ) ;
239
237
240
- let max_of_deque: f64 = cloned_deque
241
- . iter ( )
242
- . cloned ( )
243
- . map ( |( b, _) | b)
244
- . fold ( -1. / 0. /* -inf */ , f64:: max) ;
245
-
246
238
let scene_score = self . score_deque [ self . deque_offset ] . 0 ;
247
239
let scene_threshold = self . score_deque [ self . deque_offset ] . 1 ;
248
240
@@ -261,6 +253,7 @@ impl<T: Pixel> SceneChangeDetector<T> {
261
253
if !back_over_tr. is_empty ( )
262
254
&& forward_over_tr. is_empty ( )
263
255
&& back_deque. len ( ) > 1
256
+ && back_over_tr. len ( ) > 1
264
257
{
265
258
return true ;
266
259
}
@@ -274,14 +267,13 @@ impl<T: Pixel> SceneChangeDetector<T> {
274
267
{
275
268
return true ;
276
269
}
270
+
271
+ if !back_over_tr. is_empty ( ) || !forward_over_tr. is_empty ( ) {
272
+ return false ;
273
+ }
277
274
}
278
275
279
- let threshold = if self . fast_mode {
280
- self . threshold as f64 + max_of_deque
281
- } else {
282
- scene_threshold
283
- } ;
284
- scene_score >= threshold
276
+ scene_score >= scene_threshold
285
277
}
286
278
287
279
/// The fast algorithm detects fast cuts using a raw difference
0 commit comments