Mp4WebvttDecoder.smali
.class public final Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;
.super Lcom/google/android/exoplayer2/text/SimpleSubtitleDecoder;
.source "Mp4WebvttDecoder.java"
# static fields
.field private static final BOX_HEADER_SIZE:I = 0x8
.field private static final TYPE_payl:I
.field private static final TYPE_sttg:I
.field private static final TYPE_vttc:I
# instance fields
.field private final builder:Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;
.field private final sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 34
const-string v0, "payl"
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->TYPE_payl:I
.line 35
const-string/jumbo v0, "sttg"
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->TYPE_sttg:I
.line 36
const-string/jumbo v0, "vttc"
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->TYPE_vttc:I
return-void
.end method
.method public constructor <init>()V
.registers 2
.line 42
const-string v0, "Mp4WebvttDecoder"
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/text/SimpleSubtitleDecoder;-><init>(Ljava/lang/String;)V
.line 43
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 44
new-instance v0, Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;
invoke-direct {v0}, Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->builder:Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;
.line 45
return-void
.end method
.method private static parseVttCueBox(Lcom/google/android/exoplayer2/util/ParsableByteArray;Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;I)Lcom/google/android/exoplayer2/text/Cue;
.registers 10
.param p0, "sampleData" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p1, "builder" # Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;
.param p2, "remainingCueBoxBytes" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/text/SubtitleDecoderException;
}
.end annotation
.line 72
invoke-virtual {p1}, Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;->reset()V
.line 73
:goto_3
if-lez p2, :cond_44
.line 74
const/16 v0, 0x8
if-lt p2, v0, :cond_3c
.line 77
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v0
.line 78
.local v0, "boxSize":I
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v1
.line 79
.local v1, "boxType":I
add-int/lit8 p2, p2, -0x8
.line 80
add-int/lit8 v2, v0, -0x8
.line 81
.local v2, "payloadLength":I
iget-object v3, p0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 82
invoke-virtual {p0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v4
invoke-static {v3, v4, v2}, Lcom/google/android/exoplayer2/util/Util;->fromUtf8Bytes([BII)Ljava/lang/String;
move-result-object v3
.line 83
.local v3, "boxPayload":Ljava/lang/String;
invoke-virtual {p0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 84
sub-int/2addr p2, v2
.line 85
sget v4, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->TYPE_sttg:I
if-ne v1, v4, :cond_2b
.line 86
invoke-static {v3, p1}, Lcom/google/android/exoplayer2/text/webvtt/WebvttCueParser;->parseCueSettingsList(Ljava/lang/String;Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;)V
goto :goto_3b
.line 87
:cond_2b
sget v4, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->TYPE_payl:I
if-ne v1, v4, :cond_3b
.line 88
const/4 v4, 0x0
invoke-virtual {v3}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v5
invoke-static {}, Ljava/util/Collections;->emptyList()Ljava/util/List;
move-result-object v6
invoke-static {v4, v5, p1, v6}, Lcom/google/android/exoplayer2/text/webvtt/WebvttCueParser;->parseCueText(Ljava/lang/String;Ljava/lang/String;Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;Ljava/util/List;)V
.line 92
.end local v0 # "boxSize":I
.end local v1 # "boxType":I
.end local v2 # "payloadLength":I
.end local v3 # "boxPayload":Ljava/lang/String;
:cond_3b
:goto_3b
goto :goto_3
.line 75
:cond_3c
new-instance v0, Lcom/google/android/exoplayer2/text/SubtitleDecoderException;
const-string v1, "Incomplete vtt cue box header found."
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/text/SubtitleDecoderException;-><init>(Ljava/lang/String;)V
throw v0
.line 93
:cond_44
invoke-virtual {p1}, Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;->build()Lcom/google/android/exoplayer2/text/webvtt/WebvttCue;
move-result-object v0
return-object v0
.end method
# virtual methods
.method protected bridge synthetic decode([BIZ)Lcom/google/android/exoplayer2/text/Subtitle;
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/text/SubtitleDecoderException;
}
.end annotation
.line 30
invoke-virtual {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->decode([BIZ)Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttSubtitle;
move-result-object p1
return-object p1
.end method
.method protected decode([BIZ)Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttSubtitle;
.registers 10
.param p1, "bytes" # [B
.param p2, "length" # I
.param p3, "reset" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/text/SubtitleDecoderException;
}
.end annotation
.line 52
iget-object v0, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset([BI)V
.line 53
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 54
.local v0, "resultingCueList":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/text/Cue;>;"
:goto_a
iget-object v1, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v1
if-lez v1, :cond_4a
.line 55
iget-object v1, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v1
const/16 v2, 0x8
if-lt v1, v2, :cond_42
.line 58
iget-object v1, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v1
.line 59
.local v1, "boxSize":I
iget-object v2, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v2
.line 60
.local v2, "boxType":I
sget v3, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->TYPE_vttc:I
if-ne v2, v3, :cond_3a
.line 61
iget-object v3, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v4, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->builder:Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;
add-int/lit8 v5, v1, -0x8
invoke-static {v3, v4, v5}, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->parseVttCueBox(Lcom/google/android/exoplayer2/util/ParsableByteArray;Lcom/google/android/exoplayer2/text/webvtt/WebvttCue$Builder;I)Lcom/google/android/exoplayer2/text/Cue;
move-result-object v3
invoke-interface {v0, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_41
.line 64
:cond_3a
iget-object v3, p0, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
add-int/lit8 v4, v1, -0x8
invoke-virtual {v3, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 66
.end local v1 # "boxSize":I
.end local v2 # "boxType":I
:goto_41
goto :goto_a
.line 56
:cond_42
new-instance v1, Lcom/google/android/exoplayer2/text/SubtitleDecoderException;
const-string v2, "Incomplete Mp4Webvtt Top Level box header found."
invoke-direct {v1, v2}, Lcom/google/android/exoplayer2/text/SubtitleDecoderException;-><init>(Ljava/lang/String;)V
throw v1
.line 67
:cond_4a
new-instance v1, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttSubtitle;
invoke-direct {v1, v0}, Lcom/google/android/exoplayer2/text/webvtt/Mp4WebvttSubtitle;-><init>(Ljava/util/List;)V
return-object v1
.end method