fix(custom-playback-speed): implement own method instead of takeWhile

This commit is contained in:
oSumAtrIX 2022-09-22 08:38:49 +02:00
parent dc043d6fe1
commit 3504912eba

View File

@ -88,7 +88,7 @@ class CustomPlaybackSpeedPatch : BytecodePatch(
"sget-object v$originalArrayFetchDestination, $videoSpeedsArrayType" "sget-object v$originalArrayFetchDestination, $videoSpeedsArrayType"
) )
val limiterMethod = SpeedLimiterFingerprint.result?.mutableMethod!!; val limiterMethod = SpeedLimiterFingerprint.result?.mutableMethod!!
val limiterMethodImpl = limiterMethod.implementation!! val limiterMethodImpl = limiterMethod.implementation!!
val (limiterMinConstIndex, limiterMinConst) = limiterMethodImpl.instructions.withIndex() val (limiterMinConstIndex, limiterMinConst) = limiterMethodImpl.instructions.withIndex()
@ -123,11 +123,16 @@ class CustomPlaybackSpeedPatch : BytecodePatch(
.div(stepsGranularity)// round to nearest multiple of stepsGranularity .div(stepsGranularity)// round to nearest multiple of stepsGranularity
.coerceAtLeast(1 / stepsGranularity) // ensure steps are at least 1/8th of the step granularity .coerceAtLeast(1 / stepsGranularity) // ensure steps are at least 1/8th of the step granularity
val videoSpeedsArray = DoubleStream val videoSpeedsArray = buildList<Number> {
.iterate(speedLimitMin.toDouble()) { it + step } // create a stream of speeds DoubleStream
.takeWhile { it <= speedLimitMax } // limit the stream to the max speed .iterate(speedLimitMin.toDouble()) { it + step } // create a stream of speeds
.mapToObj { it.toFloat().toRawBits() } .let { speedStream ->
.toList() as List<Number> for (speed in speedStream) {
if (speed > speedLimitMax) break
add(speed.toFloat().toRawBits())
}
}
}
// adjust the new array of speeds size // adjust the new array of speeds size
constructor.replaceInstruction( constructor.replaceInstruction(