SectionReader.smali
.class public final Lcom/google/android/exoplayer2/extractor/ts/SectionReader;
.super Ljava/lang/Object;
.source "SectionReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
# static fields
.field private static final DEFAULT_SECTION_BUFFER_LENGTH:I = 0x20
.field private static final MAX_SECTION_LENGTH:I = 0x1002
.field private static final SECTION_HEADER_LENGTH:I = 0x3
# instance fields
.field private bytesRead:I
.field private final reader:Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
.field private final sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private sectionSyntaxIndicator:Z
.field private totalSectionLength:I
.field private waitingForPayloadStart:Z
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;)V
.registers 3
.line 42
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 43
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
.line 44
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v0, 0x20
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;Z)V
.registers 10
const/4 v0, -0x1
if-eqz p2, :cond_d
.line 63
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
.line 64
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v2
add-int/2addr v2, v1
goto :goto_e
:cond_d
const/4 v2, -0x1
.line 67
:goto_e
iget-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
const/4 v3, 0x0
if-eqz v1, :cond_1d
if-nez p2, :cond_16
return-void
.line 71
:cond_16
iput-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
.line 72
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 73
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
.line 76
:cond_1d
:goto_1d
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
if-lez p2, :cond_f7
.line 77
iget p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
const/4 v1, 0x1
const/4 v2, 0x3
if-ge p2, v2, :cond_ab
if-nez p2, :cond_3e
.line 81
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p2
.line 82
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v4
sub-int/2addr v4, v1
invoke-virtual {p1, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
const/16 v4, 0xff
if-ne p2, v4, :cond_3e
.line 85
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
return-void
.line 89
:cond_3e
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
rsub-int/lit8 v4, v4, 0x3
invoke-static {p2, v4}, Ljava/lang/Math;->min(II)I
move-result p2
.line 90
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v4, v4, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
invoke-virtual {p1, v4, v5, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 91
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
add-int/2addr v4, p2
iput v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
if-ne v4, v2, :cond_1d
.line 93
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 94
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 95
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p2
.line 96
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
and-int/lit16 v5, p2, 0x80
if-eqz v5, :cond_75
goto :goto_76
:cond_75
const/4 v1, 0x0
.line 97
:goto_76
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionSyntaxIndicator:Z
and-int/lit8 p2, p2, 0xf
shl-int/lit8 p2, p2, 0x8
or-int/2addr p2, v4
add-int/2addr p2, v2
.line 98
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
.line 100
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->capacity()I
move-result p2
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
if-ge p2, v1, :cond_1d
.line 102
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 103
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v4, 0x1002
iget v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
array-length v6, p2
mul-int/lit8 v6, v6, 0x2
.line 104
invoke-static {v5, v6}, Ljava/lang/Math;->max(II)I
move-result v5
invoke-static {v4, v5}, Ljava/lang/Math;->min(II)I
move-result v4
.line 103
invoke-virtual {v1, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 105
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v1, v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {p2, v3, v1, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
goto/16 :goto_1d
.line 110
:cond_ab
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
sub-int/2addr v2, v4
invoke-static {p2, v2}, Ljava/lang/Math;->min(II)I
move-result p2
.line 111
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v2, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
invoke-virtual {p1, v2, v4, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 112
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
add-int/2addr v2, p2
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
.line 113
iget p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
if-ne v2, p2, :cond_1d
.line 114
iget-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionSyntaxIndicator:Z
if-eqz v2, :cond_e7
.line 116
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
invoke-static {p2, v3, v2, v0}, Lcom/google/android/exoplayer2/util/Util;->crc([BIII)I
move-result p2
if-eqz p2, :cond_dd
.line 118
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
return-void
.line 121
:cond_dd
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
add-int/lit8 v1, v1, -0x4
invoke-virtual {p2, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
goto :goto_ec
.line 124
:cond_e7
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 126
:goto_ec
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-interface {p2, v1}, Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 127
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
goto/16 :goto_1d
:cond_f7
return-void
.end method
.method public init(Lcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.registers 5
.line 50
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
invoke-interface {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;->init(Lcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
const/4 p1, 0x1
.line 51
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
return-void
.end method
.method public seek()V
.registers 2
const/4 v0, 0x1
.line 56
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
return-void
.end method