parseSubtitle static method

Captions? parseSubtitle(
  1. Duration position,
  2. SubtitlesInfo subtitlesInfo
)

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;
}