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(
      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 textCaptions = <TextCaption>[];
      for (var i = 0; i < textLines; i++) {
        final textInfo = subtitlesInfo.textsInfo![i] as Map<Object?, Object?>;
        final text = textInfo['text'] as String?;
        final 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(
            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;
}