mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
fix: loudnorm out of range (#1371)
This commit is contained in:
committed by
GitHub
parent
2817c8f5b1
commit
05636b33c0
@@ -1,3 +1,5 @@
|
||||
import 'dart:math' show max, min;
|
||||
|
||||
import 'package:PiliPlus/models/common/video/audio_quality.dart';
|
||||
import 'package:PiliPlus/models/common/video/video_quality.dart';
|
||||
import 'package:PiliPlus/utils/extension.dart';
|
||||
@@ -341,9 +343,18 @@ class Volume {
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() =>
|
||||
'measured_I=$measuredI:measured_LRA=$measuredLra:measured_TP=$measuredTp:measured_thresh=$measuredThreshold';
|
||||
String format(Map<String, num> config) {
|
||||
final lra = max(config['lra'] ?? 11, measuredLra);
|
||||
num i = config['i'] ?? targetI;
|
||||
final tp = min(config['tp'] ?? targetTp, measuredTp);
|
||||
final offset = config['offset'] ?? targetOffset;
|
||||
num measuredI = this.measuredI;
|
||||
if (measuredI > 0) {
|
||||
i -= measuredI;
|
||||
measuredI = 0;
|
||||
}
|
||||
return 'LRA=$lra:I=$i:TP=$tp:offset=$offset:linear=true:measured_I=$measuredI:measured_LRA=$measuredLra:measured_TP=$measuredTp:measured_thresh=$measuredThreshold';
|
||||
}
|
||||
|
||||
bool get isNotEmpty =>
|
||||
measuredI != 0 ||
|
||||
|
||||
@@ -747,7 +747,7 @@ class PlPlayerController {
|
||||
}
|
||||
}
|
||||
|
||||
static final loudnormRegExp = RegExp('loudnorm=[^,]+');
|
||||
static final loudnormRegExp = RegExp('loudnorm=([^,]+)');
|
||||
|
||||
// 配置播放器
|
||||
Future<Player> _createVideoController(
|
||||
@@ -845,7 +845,15 @@ class PlPlayerController {
|
||||
if (volume != null && volume.isNotEmpty) {
|
||||
audioNormalization = audioNormalization.replaceFirstMapped(
|
||||
loudnormRegExp,
|
||||
(i) => '${i[0]}:$volume',
|
||||
(i) =>
|
||||
'loudnorm=${volume.format(
|
||||
Map.fromEntries(
|
||||
i.group(1)!.split(':').map((item) {
|
||||
final parts = item.split('=');
|
||||
return MapEntry(parts[0].toLowerCase(), num.parse(parts[1]));
|
||||
}),
|
||||
),
|
||||
)}',
|
||||
);
|
||||
} else {
|
||||
audioNormalization = audioNormalization.replaceFirst(
|
||||
|
||||
Reference in New Issue
Block a user