package ai.clova.cic.clientlib.exoplayer2.text.ttml; import ai.clova.cic.clientlib.exoplayer2.C; import ai.clova.cic.clientlib.exoplayer2.text.SimpleSubtitleDecoder; import ai.clova.cic.clientlib.exoplayer2.text.Subtitle; import ai.clova.cic.clientlib.exoplayer2.text.SubtitleDecoderException; import ai.clova.cic.clientlib.exoplayer2.util.ColorParser; import ai.clova.cic.clientlib.exoplayer2.util.Log; import ai.clova.cic.clientlib.exoplayer2.util.Util; import ai.clova.cic.clientlib.exoplayer2.util.XmlPullParserUtil; import android.text.Layout; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.ArrayDeque; import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; public final class TtmlDecoder extends SimpleSubtitleDecoder { private static final String ATTR_BEGIN = "begin"; private static final String ATTR_DURATION = "dur"; private static final String ATTR_END = "end"; private static final String ATTR_IMAGE = "backgroundImage"; private static final String ATTR_REGION = "region"; private static final String ATTR_STYLE = "style"; private static final Pattern CELL_RESOLUTION = Pattern.compile("^(\\d+) (\\d+)$"); private static final Pattern CLOCK_TIME = Pattern.compile("^([0-9][0-9]+):([0-9][0-9]):([0-9][0-9])(?:(\\.[0-9]+)|:([0-9][0-9])(?:\\.([0-9]+))?)?$"); private static final CellResolution DEFAULT_CELL_RESOLUTION = new CellResolution(32, 15); private static final FrameAndTickRate DEFAULT_FRAME_AND_TICK_RATE = new FrameAndTickRate(30.0f, 1, 1); private static final int DEFAULT_FRAME_RATE = 30; private static final Pattern FONT_SIZE = Pattern.compile("^(([0-9]*.)?[0-9]+)(px|em|%)$"); private static final Pattern OFFSET_TIME = Pattern.compile("^([0-9]+(?:\\.[0-9]+)?)(h|m|s|ms|f|t)$"); private static final Pattern PERCENTAGE_COORDINATES = Pattern.compile("^(\\d+\\.?\\d*?)% (\\d+\\.?\\d*?)%$"); private static final Pattern PIXEL_COORDINATES = Pattern.compile("^(\\d+\\.?\\d*?)px (\\d+\\.?\\d*?)px$"); private static final String TAG = "TtmlDecoder"; private static final String TTP = "http://www.w3.org/ns/ttml#parameter"; private final XmlPullParserFactory xmlParserFactory; public static final class CellResolution { public final int columns; public final int rows; public CellResolution(int i14, int i15) { this.columns = i14; this.rows = i15; } } public static final class FrameAndTickRate { public final float effectiveFrameRate; public final int subFrameRate; public final int tickRate; public FrameAndTickRate(float f14, int i14, int i15) { this.effectiveFrameRate = f14; this.subFrameRate = i14; this.tickRate = i15; } } public static final class TtsExtent { public final int height; public final int width; public TtsExtent(int i14, int i15) { this.width = i14; this.height = i15; } } public TtmlDecoder() { super(TAG); try { XmlPullParserFactory newInstance = XmlPullParserFactory.newInstance(); this.xmlParserFactory = newInstance; newInstance.setNamespaceAware(true); } catch (XmlPullParserException e14) { throw new RuntimeException("Couldn't create XmlPullParserFactory instance", e14); } } private TtmlStyle createIfNull(TtmlStyle ttmlStyle) { return ttmlStyle == null ? new TtmlStyle() : ttmlStyle; } private static boolean isSupportedTag(String str) { return str.equals("tt") || str.equals("head") || str.equals("body") || str.equals("div") || str.equals("p") || str.equals("span") || str.equals("br") || str.equals("style") || str.equals("styling") || str.equals("layout") || str.equals("region") || str.equals("metadata") || str.equals(TtmlNode.TAG_IMAGE) || str.equals("data") || str.equals(TtmlNode.TAG_INFORMATION); } private CellResolution parseCellResolution(XmlPullParser xmlPullParser, CellResolution cellResolution) throws SubtitleDecoderException { StringBuilder sb4; String attributeValue = xmlPullParser.getAttributeValue(TTP, "cellResolution"); if (attributeValue == null) { return cellResolution; } Matcher matcher = CELL_RESOLUTION.matcher(attributeValue); if (!matcher.matches()) { sb4 = new StringBuilder(); } else { try { int parseInt = Integer.parseInt(matcher.group(1)); int parseInt2 = Integer.parseInt(matcher.group(2)); if (parseInt != 0 && parseInt2 != 0) { return new CellResolution(parseInt, parseInt2); } throw new SubtitleDecoderException("Invalid cell resolution " + parseInt + " " + parseInt2); } catch (NumberFormatException unused) { sb4 = new StringBuilder(); } } sb4.append("Ignoring malformed cell resolution: "); sb4.append(attributeValue); Log.w(TAG, sb4.toString()); return cellResolution; } private static void parseFontSize(String str, TtmlStyle ttmlStyle) throws SubtitleDecoderException { Matcher matcher; String[] split = Util.split(str, "\\s+"); if (split.length == 1) { matcher = FONT_SIZE.matcher(str); } else if (split.length == 2) { matcher = FONT_SIZE.matcher(split[1]); Log.w(TAG, "Multiple values in fontSize attribute. Picking the second value for vertical font size and ignoring the first."); } else { throw new SubtitleDecoderException("Invalid number of entries for fontSize: " + split.length + "."); } if (matcher.matches()) { String group = matcher.group(3); Objects.requireNonNull(group); char c14 = 65535; switch (group.hashCode()) { case 37: if (group.equals("%")) { c14 = 0; break; } break; case 3240: if (group.equals("em")) { c14 = 1; break; } break; case 3592: if (group.equals("px")) { c14 = 2; break; } break; } switch (c14) { case 0: ttmlStyle.setFontSizeUnit(3); break; case 1: ttmlStyle.setFontSizeUnit(2); break; case 2: ttmlStyle.setFontSizeUnit(1); break; default: throw new SubtitleDecoderException("Invalid unit for fontSize: '" + group + "'."); } ttmlStyle.setFontSize(Float.valueOf(matcher.group(1)).floatValue()); return; } throw new SubtitleDecoderException("Invalid expression for fontSize: '" + str + "'."); } private FrameAndTickRate parseFrameAndTickRates(XmlPullParser xmlPullParser) throws SubtitleDecoderException { String attributeValue = xmlPullParser.getAttributeValue(TTP, "frameRate"); int parseInt = attributeValue != null ? Integer.parseInt(attributeValue) : 30; float f14 = 1.0f; String attributeValue2 = xmlPullParser.getAttributeValue(TTP, "frameRateMultiplier"); if (attributeValue2 != null) { String[] split = Util.split(attributeValue2, " "); if (split.length == 2) { f14 = ((float) Integer.parseInt(split[0])) / ((float) Integer.parseInt(split[1])); } else { throw new SubtitleDecoderException("frameRateMultiplier doesn't have 2 parts"); } } FrameAndTickRate frameAndTickRate = DEFAULT_FRAME_AND_TICK_RATE; int i14 = frameAndTickRate.subFrameRate; String attributeValue3 = xmlPullParser.getAttributeValue(TTP, "subFrameRate"); if (attributeValue3 != null) { i14 = Integer.parseInt(attributeValue3); } int i15 = frameAndTickRate.tickRate; String attributeValue4 = xmlPullParser.getAttributeValue(TTP, "tickRate"); if (attributeValue4 != null) { i15 = Integer.parseInt(attributeValue4); } return new FrameAndTickRate(((float) parseInt) * f14, i14, i15); } private Map<String, TtmlStyle> parseHeader(XmlPullParser xmlPullParser, Map<String, TtmlStyle> map, CellResolution cellResolution, TtsExtent ttsExtent, Map<String, TtmlRegion> map2, Map<String, String> map3) throws IOException, XmlPullParserException { do { xmlPullParser.next(); if (XmlPullParserUtil.isStartTag(xmlPullParser, "style")) { String attributeValue = XmlPullParserUtil.getAttributeValue(xmlPullParser, "style"); TtmlStyle parseStyleAttributes = parseStyleAttributes(xmlPullParser, new TtmlStyle()); if (attributeValue != null) { for (String str : parseStyleIds(attributeValue)) { parseStyleAttributes.chain(map.get(str)); } } if (parseStyleAttributes.getId() != null) { map.put(parseStyleAttributes.getId(), parseStyleAttributes); } } else if (XmlPullParserUtil.isStartTag(xmlPullParser, "region")) { TtmlRegion parseRegionAttributes = parseRegionAttributes(xmlPullParser, cellResolution, ttsExtent); if (parseRegionAttributes != null) { map2.put(parseRegionAttributes.f4681id, parseRegionAttributes); } } else if (XmlPullParserUtil.isStartTag(xmlPullParser, "metadata")) { parseMetadata(xmlPullParser, map3); } } while (!XmlPullParserUtil.isEndTag(xmlPullParser, "head")); return map; } private void parseMetadata(XmlPullParser xmlPullParser, Map<String, String> map) throws IOException, XmlPullParserException { String attributeValue; do { xmlPullParser.next(); if (XmlPullParserUtil.isStartTag(xmlPullParser, TtmlNode.TAG_IMAGE) && (attributeValue = XmlPullParserUtil.getAttributeValue(xmlPullParser, TtmlNode.ATTR_ID)) != null) { map.put(attributeValue, xmlPullParser.nextText()); } } while (!XmlPullParserUtil.isEndTag(xmlPullParser, "metadata")); } /* JADX INFO: Can't fix incorrect switch cases order, some code will duplicate */ private TtmlNode parseNode(XmlPullParser xmlPullParser, TtmlNode ttmlNode, Map<String, TtmlRegion> map, FrameAndTickRate frameAndTickRate) throws SubtitleDecoderException { long j14; long j15; char c14; int attributeCount = xmlPullParser.getAttributeCount(); TtmlStyle parseStyleAttributes = parseStyleAttributes(xmlPullParser, null); String[] strArr = null; String str = null; String str2 = ""; long j16 = C.TIME_UNSET; long j17 = C.TIME_UNSET; long j18 = C.TIME_UNSET; for (int i14 = 0; i14 < attributeCount; i14++) { String attributeName = xmlPullParser.getAttributeName(i14); String attributeValue = xmlPullParser.getAttributeValue(i14); Objects.requireNonNull(attributeName); switch (attributeName.hashCode()) { case -934795532: if (attributeName.equals("region")) { c14 = 0; break; } c14 = 65535; break; case 99841: if (attributeName.equals(ATTR_DURATION)) { c14 = 1; break; } c14 = 65535; break; case 100571: if (attributeName.equals("end")) { c14 = 2; break; } c14 = 65535; break; case 93616297: if (attributeName.equals(ATTR_BEGIN)) { c14 = 3; break; } c14 = 65535; break; case 109780401: if (attributeName.equals("style")) { c14 = 4; break; } c14 = 65535; break; case 1292595405: if (attributeName.equals(ATTR_IMAGE)) { c14 = 5; break; } c14 = 65535; break; default: c14 = 65535; break; } switch (c14) { case 0: if (map.containsKey(attributeValue)) { str2 = attributeValue; continue; } case 1: j18 = parseTimeExpression(attributeValue, frameAndTickRate); break; case 2: j17 = parseTimeExpression(attributeValue, frameAndTickRate); break; case 3: j16 = parseTimeExpression(attributeValue, frameAndTickRate); break; case 4: String[] parseStyleIds = parseStyleIds(attributeValue); if (parseStyleIds.length > 0) { strArr = parseStyleIds; break; } break; case 5: if (attributeValue.startsWith("#")) { str = attributeValue.substring(1); break; } break; } } if (ttmlNode != null) { long j19 = ttmlNode.startTimeUs; j14 = C.TIME_UNSET; if (j19 != C.TIME_UNSET) { if (j16 != C.TIME_UNSET) { j16 += j19; } if (j17 != C.TIME_UNSET) { j17 += j19; } } } else { j14 = C.TIME_UNSET; } if (j17 == j14) { if (j18 != j14) { j15 = j16 + j18; } else if (ttmlNode != null) { long j24 = ttmlNode.endTimeUs; if (j24 != j14) { j15 = j24; } } return TtmlNode.buildNode(xmlPullParser.getName(), j16, j15, parseStyleAttributes, strArr, str2, str); } j15 = j17; return TtmlNode.buildNode(xmlPullParser.getName(), j16, j15, parseStyleAttributes, strArr, str2, str); } /* JADX WARNING: Removed duplicated region for block: B:26:0x0090 */ /* JADX WARNING: Removed duplicated region for block: B:55:0x013f */ private TtmlRegion parseRegionAttributes(XmlPullParser xmlPullParser, CellResolution cellResolution, TtsExtent ttsExtent) { String str; String str2; StringBuilder sb4; float f14; float f15; String attributeValue; float f16; float f17; int i14; float f18; CellResolution cellResolution2; String attributeValue2 = XmlPullParserUtil.getAttributeValue(xmlPullParser, TtmlNode.ATTR_ID); if (attributeValue2 == null) { return null; } String attributeValue3 = XmlPullParserUtil.getAttributeValue(xmlPullParser, TtmlNode.ATTR_TTS_ORIGIN); if (attributeValue3 != null) { Pattern pattern = PERCENTAGE_COORDINATES; Matcher matcher = pattern.matcher(attributeValue3); Pattern pattern2 = PIXEL_COORDINATES; Matcher matcher2 = pattern2.matcher(attributeValue3); String str3 = "Ignoring region with malformed origin: "; if (matcher.matches()) { try { float parseFloat = Float.parseFloat(matcher.group(1)) / 100.0f; f14 = Float.parseFloat(matcher.group(2)) / 100.0f; f15 = parseFloat; attributeValue = XmlPullParserUtil.getAttributeValue(xmlPullParser, TtmlNode.ATTR_TTS_EXTENT); if (attributeValue == null) { Matcher matcher3 = pattern.matcher(attributeValue); Matcher matcher4 = pattern2.matcher(attributeValue); str3 = "Ignoring region with malformed extent: "; if (matcher3.matches()) { try { f17 = Float.parseFloat(matcher3.group(1)) / 100.0f; f16 = Float.parseFloat(matcher3.group(2)) / 100.0f; } catch (NumberFormatException unused) { sb4 = new StringBuilder(); sb4.append(str3); sb4.append(attributeValue3); str = sb4.toString(); Log.w(TAG, str); return null; } } else if (!matcher4.matches()) { sb4 = new StringBuilder(); str2 = "Ignoring region with unsupported extent: "; sb4.append(str2); } else if (ttsExtent == null) { sb4 = new StringBuilder(); sb4.append("Ignoring region with missing tts:extent: "); } else { try { int parseInt = Integer.parseInt(matcher4.group(1)); int parseInt2 = Integer.parseInt(matcher4.group(2)); f17 = ((float) parseInt) / ((float) ttsExtent.width); f16 = ((float) parseInt2) / ((float) ttsExtent.height); } catch (NumberFormatException unused2) { sb4 = new StringBuilder(); sb4.append(str3); sb4.append(attributeValue3); str = sb4.toString(); Log.w(TAG, str); return null; } } String attributeValue4 = XmlPullParserUtil.getAttributeValue(xmlPullParser, TtmlNode.ATTR_TTS_DISPLAY_ALIGN); if (attributeValue4 != null) { String lowerInvariant = Util.toLowerInvariant(attributeValue4); Objects.requireNonNull(lowerInvariant); if (lowerInvariant.equals(TtmlNode.CENTER)) { cellResolution2 = cellResolution; f18 = f14 + (f16 / 2.0f); i14 = 1; } else if (lowerInvariant.equals("after")) { cellResolution2 = cellResolution; f18 = f14 + f16; i14 = 2; } return new TtmlRegion(attributeValue2, f15, f18, 0, i14, f17, f16, 1, 1.0f / ((float) cellResolution2.rows)); } cellResolution2 = cellResolution; i14 = 0; f18 = f14; return new TtmlRegion(attributeValue2, f15, f18, 0, i14, f17, f16, 1, 1.0f / ((float) cellResolution2.rows)); } str = "Ignoring region without an extent"; } catch (NumberFormatException unused3) { sb4 = new StringBuilder(); sb4.append(str3); sb4.append(attributeValue3); str = sb4.toString(); Log.w(TAG, str); return null; } } else if (!matcher2.matches()) { sb4 = new StringBuilder(); str2 = "Ignoring region with unsupported origin: "; sb4.append(str2); } else if (ttsExtent == null) { sb4 = new StringBuilder(); sb4.append("Ignoring region with missing tts:extent: "); } else { try { int parseInt3 = Integer.parseInt(matcher2.group(1)); int parseInt4 = Integer.parseInt(matcher2.group(2)); f15 = ((float) parseInt3) / ((float) ttsExtent.width); f14 = ((float) parseInt4) / ((float) ttsExtent.height); attributeValue = XmlPullParserUtil.getAttributeValue(xmlPullParser, TtmlNode.ATTR_TTS_EXTENT); if (attributeValue == null) { } } catch (NumberFormatException unused4) { sb4 = new StringBuilder(); sb4.append(str3); sb4.append(attributeValue3); str = sb4.toString(); Log.w(TAG, str); return null; } } sb4.append(attributeValue3); str = sb4.toString(); } else { str = "Ignoring region without an origin"; } Log.w(TAG, str); return null; } /* JADX INFO: Can't fix incorrect switch cases order, some code will duplicate */ /* JADX WARNING: Code restructure failed: missing block: B:57:0x0112, code lost: if (r3.equals(ai.clova.cic.clientlib.exoplayer2.text.ttml.TtmlNode.LINETHROUGH) == false) goto L_0x010a; */ /* JADX WARNING: Code restructure failed: missing block: B:76:0x0178, code lost: if (r3.equals(ai.clova.cic.clientlib.exoplayer2.text.ttml.TtmlNode.START) == false) goto L_0x0170; */ private TtmlStyle parseStyleAttributes(XmlPullParser xmlPullParser, TtmlStyle ttmlStyle) { char c14; TtmlStyle ttmlStyle2; Layout.Alignment alignment; StringBuilder sb4; String str; int attributeCount = xmlPullParser.getAttributeCount(); for (int i14 = 0; i14 < attributeCount; i14++) { String attributeValue = xmlPullParser.getAttributeValue(i14); String attributeName = xmlPullParser.getAttributeName(i14); Objects.requireNonNull(attributeName); char c15 = 4; char c16 = 3; switch (attributeName.hashCode()) { case -1550943582: if (attributeName.equals(TtmlNode.ATTR_TTS_FONT_STYLE)) { c14 = 0; break; } c14 = 65535; break; case -1224696685: if (attributeName.equals(TtmlNode.ATTR_TTS_FONT_FAMILY)) { c14 = 1; break; } c14 = 65535; break; case -1065511464: if (attributeName.equals(TtmlNode.ATTR_TTS_TEXT_ALIGN)) { c14 = 2; break; } c14 = 65535; break; case -879295043: if (attributeName.equals(TtmlNode.ATTR_TTS_TEXT_DECORATION)) { c14 = 3; break; } c14 = 65535; break; case -734428249: if (attributeName.equals(TtmlNode.ATTR_TTS_FONT_WEIGHT)) { c14 = 4; break; } c14 = 65535; break; case 3355: if (attributeName.equals(TtmlNode.ATTR_ID)) { c14 = 5; break; } c14 = 65535; break; case 94842723: if (attributeName.equals(TtmlNode.ATTR_TTS_COLOR)) { c14 = 6; break; } c14 = 65535; break; case 365601008: if (attributeName.equals(TtmlNode.ATTR_TTS_FONT_SIZE)) { c14 = 7; break; } c14 = 65535; break; case 1287124693: if (attributeName.equals(TtmlNode.ATTR_TTS_BACKGROUND_COLOR)) { c14 = '\b'; break; } c14 = 65535; break; default: c14 = 65535; break; } switch (c14) { case 0: ttmlStyle = createIfNull(ttmlStyle).setItalic(TtmlNode.ITALIC.equalsIgnoreCase(attributeValue)); continue; case 1: ttmlStyle = createIfNull(ttmlStyle).setFontFamily(attributeValue); continue; case 2: String lowerInvariant = Util.toLowerInvariant(attributeValue); Objects.requireNonNull(lowerInvariant); switch (lowerInvariant.hashCode()) { case -1364013995: if (lowerInvariant.equals(TtmlNode.CENTER)) { c15 = 0; break; } c15 = 65535; break; case 100571: if (lowerInvariant.equals("end")) { c15 = 1; break; } c15 = 65535; break; case 3317767: if (lowerInvariant.equals(TtmlNode.LEFT)) { c15 = 2; break; } c15 = 65535; break; case 108511772: if (lowerInvariant.equals(TtmlNode.RIGHT)) { c15 = 3; break; } c15 = 65535; break; case 109757538: break; default: c15 = 65535; break; } switch (c15) { case 0: ttmlStyle2 = createIfNull(ttmlStyle); alignment = Layout.Alignment.ALIGN_CENTER; ttmlStyle = ttmlStyle2.setTextAlign(alignment); continue; case 1: case 3: ttmlStyle2 = createIfNull(ttmlStyle); alignment = Layout.Alignment.ALIGN_OPPOSITE; ttmlStyle = ttmlStyle2.setTextAlign(alignment); continue; case 2: case 4: ttmlStyle2 = createIfNull(ttmlStyle); alignment = Layout.Alignment.ALIGN_NORMAL; ttmlStyle = ttmlStyle2.setTextAlign(alignment); continue; } break; case 3: String lowerInvariant2 = Util.toLowerInvariant(attributeValue); Objects.requireNonNull(lowerInvariant2); switch (lowerInvariant2.hashCode()) { case -1461280213: if (lowerInvariant2.equals(TtmlNode.NO_UNDERLINE)) { c16 = 0; break; } c16 = 65535; break; case -1026963764: if (lowerInvariant2.equals(TtmlNode.UNDERLINE)) { c16 = 1; break; } c16 = 65535; break; case 913457136: if (lowerInvariant2.equals(TtmlNode.NO_LINETHROUGH)) { c16 = 2; break; } c16 = 65535; break; case 1679736913: break; default: c16 = 65535; break; } switch (c16) { case 0: ttmlStyle = createIfNull(ttmlStyle).setUnderline(false); continue; case 1: ttmlStyle = createIfNull(ttmlStyle).setUnderline(true); continue; case 2: ttmlStyle = createIfNull(ttmlStyle).setLinethrough(false); continue; case 3: ttmlStyle = createIfNull(ttmlStyle).setLinethrough(true); continue; continue; } break; case 4: ttmlStyle = createIfNull(ttmlStyle).setBold(TtmlNode.BOLD.equalsIgnoreCase(attributeValue)); continue; case 5: if ("style".equals(xmlPullParser.getName())) { ttmlStyle = createIfNull(ttmlStyle).setId(attributeValue); } else { continue; } case 6: ttmlStyle = createIfNull(ttmlStyle); try { ttmlStyle.setFontColor(ColorParser.parseTtmlColor(attributeValue)); continue; } catch (IllegalArgumentException unused) { sb4 = new StringBuilder(); str = "Failed parsing color value: "; break; } case 7: try { ttmlStyle = createIfNull(ttmlStyle); parseFontSize(attributeValue, ttmlStyle); continue; } catch (SubtitleDecoderException unused2) { sb4 = new StringBuilder(); str = "Failed parsing fontSize value: "; break; } case '\b': ttmlStyle = createIfNull(ttmlStyle); try { ttmlStyle.setBackgroundColor(ColorParser.parseTtmlColor(attributeValue)); continue; } catch (IllegalArgumentException unused3) { sb4 = new StringBuilder(); str = "Failed parsing background value: "; break; } default: } sb4.append(str); sb4.append(attributeValue); Log.w(TAG, sb4.toString()); } return ttmlStyle; } private String[] parseStyleIds(String str) { String trim = str.trim(); return trim.isEmpty() ? new String[0] : Util.split(trim, "\\s+"); } /* JADX INFO: Can't fix incorrect switch cases order, some code will duplicate */ /* JADX WARNING: Code restructure failed: missing block: B:21:0x009e, code lost: if (r13.equals("ms") == false) goto L_0x0096; */ private static long parseTimeExpression(String str, FrameAndTickRate frameAndTickRate) throws SubtitleDecoderException { double d14; double d15; Matcher matcher = CLOCK_TIME.matcher(str); char c14 = 4; if (matcher.matches()) { double parseLong = ((double) (Long.parseLong(matcher.group(1)) * 3600)) + ((double) (Long.parseLong(matcher.group(2)) * 60)) + ((double) Long.parseLong(matcher.group(3))); String group = matcher.group(4); double d16 = 0.0d; double parseDouble = parseLong + (group != null ? Double.parseDouble(group) : 0.0d); String group2 = matcher.group(5); double parseLong2 = parseDouble + (group2 != null ? (double) (((float) Long.parseLong(group2)) / frameAndTickRate.effectiveFrameRate) : 0.0d); String group3 = matcher.group(6); if (group3 != null) { d16 = (((double) Long.parseLong(group3)) / ((double) frameAndTickRate.subFrameRate)) / ((double) frameAndTickRate.effectiveFrameRate); } return (long) ((parseLong2 + d16) * 1000000.0d); } Matcher matcher2 = OFFSET_TIME.matcher(str); if (matcher2.matches()) { double parseDouble2 = Double.parseDouble(matcher2.group(1)); String group4 = matcher2.group(2); Objects.requireNonNull(group4); switch (group4.hashCode()) { case 102: if (group4.equals("f")) { c14 = 0; break; } c14 = 65535; break; case 104: if (group4.equals("h")) { c14 = 1; break; } c14 = 65535; break; case 109: if (group4.equals("m")) { c14 = 2; break; } c14 = 65535; break; case 116: if (group4.equals("t")) { c14 = 3; break; } c14 = 65535; break; case 3494: break; default: c14 = 65535; break; } switch (c14) { case 0: d14 = (double) frameAndTickRate.effectiveFrameRate; parseDouble2 /= d14; return (long) (parseDouble2 * 1000000.0d); case 1: d15 = 3600.0d; parseDouble2 *= d15; return (long) (parseDouble2 * 1000000.0d); case 2: d15 = 60.0d; parseDouble2 *= d15; return (long) (parseDouble2 * 1000000.0d); case 3: d14 = (double) frameAndTickRate.tickRate; parseDouble2 /= d14; return (long) (parseDouble2 * 1000000.0d); case 4: d14 = 1000.0d; parseDouble2 /= d14; return (long) (parseDouble2 * 1000000.0d); default: return (long) (parseDouble2 * 1000000.0d); } } else { throw new SubtitleDecoderException("Malformed time expression: " + str); } } private TtsExtent parseTtsExtent(XmlPullParser xmlPullParser) { StringBuilder sb4; String str; String attributeValue = XmlPullParserUtil.getAttributeValue(xmlPullParser, TtmlNode.ATTR_TTS_EXTENT); if (attributeValue == null) { return null; } Matcher matcher = PIXEL_COORDINATES.matcher(attributeValue); if (!matcher.matches()) { sb4 = new StringBuilder(); str = "Ignoring non-pixel tts extent: "; } else { try { return new TtsExtent(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2))); } catch (NumberFormatException unused) { sb4 = new StringBuilder(); str = "Ignoring malformed tts extent: "; } } sb4.append(str); sb4.append(attributeValue); Log.w(TAG, sb4.toString()); return null; } @Override // ai.clova.cic.clientlib.exoplayer2.text.SimpleSubtitleDecoder public Subtitle decode(byte[] bArr, int i14, boolean z14) throws SubtitleDecoderException { TtmlSubtitle ttmlSubtitle; FrameAndTickRate frameAndTickRate; try { XmlPullParser newPullParser = this.xmlParserFactory.newPullParser(); Map<String, TtmlStyle> hashMap = new HashMap<>(); HashMap hashMap2 = new HashMap(); Map<String, String> hashMap3 = new HashMap<>(); TtsExtent ttsExtent = null; hashMap2.put("", new TtmlRegion(null)); newPullParser.setInput(new ByteArrayInputStream(bArr, 0, i14), null); ArrayDeque arrayDeque = new ArrayDeque(); FrameAndTickRate frameAndTickRate2 = DEFAULT_FRAME_AND_TICK_RATE; CellResolution cellResolution = DEFAULT_CELL_RESOLUTION; int i15 = 0; TtmlSubtitle ttmlSubtitle2 = null; for (int eventType = newPullParser.getEventType(); eventType != 1; eventType = newPullParser.getEventType()) { TtmlNode ttmlNode = (TtmlNode) arrayDeque.peek(); if (i15 == 0) { String name = newPullParser.getName(); if (eventType == 2) { if ("tt".equals(name)) { frameAndTickRate2 = parseFrameAndTickRates(newPullParser); cellResolution = parseCellResolution(newPullParser, DEFAULT_CELL_RESOLUTION); ttsExtent = parseTtsExtent(newPullParser); } if (!isSupportedTag(name)) { Log.i(TAG, "Ignoring unsupported tag: " + newPullParser.getName()); ttmlSubtitle = ttmlSubtitle2; frameAndTickRate = frameAndTickRate2; } else { if ("head".equals(name)) { ttmlSubtitle = ttmlSubtitle2; frameAndTickRate = frameAndTickRate2; parseHeader(newPullParser, hashMap, cellResolution, ttsExtent, hashMap2, hashMap3); } else { ttmlSubtitle = ttmlSubtitle2; frameAndTickRate = frameAndTickRate2; try { TtmlNode parseNode = parseNode(newPullParser, ttmlNode, hashMap2, frameAndTickRate); arrayDeque.push(parseNode); if (ttmlNode != null) { ttmlNode.addChild(parseNode); } } catch (SubtitleDecoderException e14) { Log.w(TAG, "Suppressing parser error", e14); } } frameAndTickRate2 = frameAndTickRate; ttsExtent = ttsExtent; cellResolution = cellResolution; } frameAndTickRate2 = frameAndTickRate; ttsExtent = ttsExtent; cellResolution = cellResolution; } else { ttmlSubtitle = ttmlSubtitle2; if (eventType == 4) { ttmlNode.addChild(TtmlNode.buildTextNode(newPullParser.getText())); } else if (eventType == 3) { ttmlSubtitle2 = newPullParser.getName().equals("tt") ? new TtmlSubtitle((TtmlNode) arrayDeque.peek(), hashMap, hashMap2, hashMap3) : ttmlSubtitle; arrayDeque.pop(); newPullParser.next(); } } ttmlSubtitle2 = ttmlSubtitle; newPullParser.next(); } else { ttmlSubtitle = ttmlSubtitle2; if (eventType != 2) { if (eventType == 3) { i15--; } ttmlSubtitle2 = ttmlSubtitle; newPullParser.next(); } } i15++; ttmlSubtitle2 = ttmlSubtitle; newPullParser.next(); } return ttmlSubtitle2; } catch (XmlPullParserException e15) { throw new SubtitleDecoderException("Unable to decode source", e15); } catch (IOException e16) { throw new IllegalStateException("Unexpected error when reading input.", e16); } } }