56 lines
2.5 KiB
Dart
56 lines
2.5 KiB
Dart
import '../../core/encode_options.dart';
|
|
import '../../l10n/tr.dart';
|
|
|
|
/// 화면 크기 · 코덱 · 화질 · 보정 고르기 (모든 동영상에 적용).
|
|
/// 약속: 다시 인코딩해야 하는 것 (크기 · 보정) 을 "원본 유지" 에서 고르면 코덱을 H.264 로 저절로 바꾸고 [notice] 에 알릴 글을 둔다.
|
|
/// 크기 · 보정을 모두 원래대로 돌리면 저절로 바꾼 코덱도 되돌린다 (103). 사용자가 코덱을 직접 고르면 저절로 되돌리지 않는다.
|
|
class EncodeChoice {
|
|
EncodeSettings value = const EncodeSettings();
|
|
|
|
/// 코덱이 저절로 바뀌었을 때 화면에 짧게 알릴 글 (보여 주면 비움)
|
|
String? notice;
|
|
|
|
/// 103: 크기 · 보정 때문에 "원본 유지" 에서 H.264 로 저절로 바꿨는지
|
|
bool _auto = false;
|
|
|
|
EncodeSettings _maybeRestoreCodec(EncodeSettings e) {
|
|
if (_auto && e.resolution == ResolutionChoice.original && !e.adjusts && e.codec == VideoCodecChoice.h264) {
|
|
_auto = false;
|
|
notice = tr('크기 · 보정을 원래대로 돌려 코덱도 "원본 유지" 로 되돌렸습니다.');
|
|
return e.copyWith(codec: VideoCodecChoice.copy);
|
|
}
|
|
return e;
|
|
}
|
|
|
|
void setCodec(VideoCodecChoice c) {
|
|
_auto = false; // 사용자가 직접 고름
|
|
// 원본 유지(복사)는 크기 · 화면 비율 · 회전 · 색 보정을 할 수 없으므로 처음으로
|
|
value = c == VideoCodecChoice.copy
|
|
? value.resetAdjust().copyWith(codec: c, resolution: ResolutionChoice.original)
|
|
: value.copyWith(codec: c);
|
|
}
|
|
|
|
/// 화면 비율 · 회전 · 색 보정 바꾸기 (재인코딩이 필요하면 기본 H.264 로)
|
|
void setAdjust(EncodeSettings e) {
|
|
if (e.adjusts && e.codec == VideoCodecChoice.copy) {
|
|
_auto = true;
|
|
notice = tr('보정은 다시 인코딩해야 해서 코덱을 "원본 유지" 에서 H.264 로 바꿨습니다.');
|
|
value = e.copyWith(codec: VideoCodecChoice.h264);
|
|
} else {
|
|
value = _maybeRestoreCodec(e);
|
|
}
|
|
}
|
|
|
|
void setResolution(ResolutionChoice r) {
|
|
// 크기를 바꾸려면 재인코딩이 필요하므로 기본 H.264 로
|
|
final needCodec = r != ResolutionChoice.original && value.codec == VideoCodecChoice.copy;
|
|
if (needCodec) {
|
|
_auto = true;
|
|
notice = tr('크기를 바꾸면 다시 인코딩해야 해서 코덱을 "원본 유지" 에서 H.264 로 바꿨습니다.');
|
|
}
|
|
value = _maybeRestoreCodec(value.copyWith(resolution: r, codec: needCodec ? VideoCodecChoice.h264 : null));
|
|
}
|
|
|
|
void setQuality(QualityChoice q) => value = value.copyWith(quality: q);
|
|
}
|