parseSubtitle static method
Parses a subtitle from a VideoEvent.subtitlesInfo into a Captions object.
Implementation
static Captions? parseSubtitle(
Duration position, SubtitlesInfo subtitlesInfo) {
final Duration textDuration = subtitlesInfo.textDuration == 0
? Duration.zero
: Duration(milliseconds: subtitlesInfo.textDuration!);
if (subtitlesInfo.pictureInfo?.isNotEmpty ?? false) {
final PictureCaption pictureCaption = PictureCaption(
number: 0,
start: position,
end: position + textDuration,
picture: subtitlesInfo.pictureInfo!['picture'] as Uint8List?,
pictureWidth: subtitlesInfo.pictureInfo!['pictureWidth'] as double?,
pictureHeight: subtitlesInfo.pictureInfo!['pictureHeight'] as double?,
);
return Captions(
textCaptions: const <TextCaption>[TextCaption.none],
pictureCaption: pictureCaption);
} else {
final int textLines = (subtitlesInfo.textsInfo == null ||
subtitlesInfo.textsInfo![0] == null)
? 0
: subtitlesInfo.textsInfo!.length;
if (textLines > 0) {
final List<TextCaption> textCaptions = <TextCaption>[];
for (int i = 0; i < textLines; i++) {
final Map<Object?, Object?> textInfo =
subtitlesInfo.textsInfo![i] as Map<Object?, Object?>;
final String? text = textInfo['text'] as String?;
final List<dynamic>? subtitleAttrList =
textInfo['attributes'] as List<dynamic>?;
final List<SubtitleAttribute> subtitleAttributes =
SubtitleAttribute.fromEventSubtitleAttrList(subtitleAttrList);
final (
TextOriginAndExtent?,
TextStyle?,
AlignmentGeometry,
Color,
double,
Paint
) subtitleAttr =
TextCaption.processSubtitleAttributes(subtitleAttributes);
final TextOriginAndExtent? actualTextOriginAndExtent =
subtitleAttr.$1;
final TextStyle? actualTextStyle = subtitleAttr.$2;
final AlignmentGeometry actualTextAlign = subtitleAttr.$3;
final Color actualWindowBgColor = subtitleAttr.$4;
final double actualFontSize = subtitleAttr.$5;
final Paint actualForeground = subtitleAttr.$6;
final TextCaption textCaption = TextCaption(
number: 0,
start: position,
end: position + textDuration,
text: text ?? '',
subtitleAttributes: subtitleAttributes,
textStyle: actualTextStyle,
textOriginAndExtent: actualTextOriginAndExtent,
textAlign: actualTextAlign,
windowBgColor: actualWindowBgColor,
fontSize: actualFontSize,
fontForeground: actualForeground);
textCaptions.add(textCaption);
}
return Captions(
textCaptions: textCaptions, pictureCaption: PictureCaption.none);
}
}
return null;
}