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
.field private static final MAX_SECTION_LENGTH:I
.field private static final SECTION_HEADER_LENGTH:I
# 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 static constructor <clinit>()V
.registers 1
const v0, 0x154f
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->DEFAULT_SECTION_BUFFER_LENGTH:I
const v0, 0x56d
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->MAX_SECTION_LENGTH:I
const v0, 0x156c
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->SECTION_HEADER_LENGTH:I
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;)V
.registers 4
.param p1, "reader" # Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
.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 v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0x20
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 45
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.registers 16
.param p1, "data" # Lcom/google/android/exoplayer2/util/ParsableByteArray;
.param p2, "flags" # I
.line 61
and-int/lit8 v0, p2, 0x1
const/4 v1, 0x1
const/4 v2, 0x0
if-eqz v0, :cond_8
const/4 v0, 0x1
goto :goto_9
:cond_8
const/4 v0, 0x0
.line 62
.local v0, "payloadUnitStartIndicator":Z
:goto_9
const/4 v3, -0x1
.line 63
.local v3, "payloadStartPosition":I
if-eqz v0, :cond_16
.line 64
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
.line 65
.local v4, "payloadStartOffset":I
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v5
add-int v3, v5, v4
.line 68
.end local v4 # "payloadStartOffset":I
:cond_16
iget-boolean v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
if-eqz v4, :cond_24
.line 69
if-nez v0, :cond_1d
.line 70
return-void
.line 72
:cond_1d
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
.line 73
invoke-virtual {p1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 74
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
.line 77
:cond_24
:goto_24
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v4
if-lez v4, :cond_ff
.line 78
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
const/4 v5, 0x3
if-ge v4, v5, :cond_b2
.line 81
if-nez v4, :cond_44
.line 82
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
.line 83
.local v4, "tableId":I
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v6
sub-int/2addr v6, v1
invoke-virtual {p1, v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 84
const/16 v6, 0xff
if-ne v4, v6, :cond_44
.line 86
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
.line 87
return-void
.line 90
.end local v4 # "tableId":I
:cond_44
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v4
iget v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
rsub-int/lit8 v6, v6, 0x3
invoke-static {v4, v6}, Ljava/lang/Math;->min(II)I
move-result v4
.line 91
.local v4, "headerBytesToRead":I
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v6, v6, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v7, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
invoke-virtual {p1, v6, v7, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 92
iget v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
add-int/2addr v6, v4
iput v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
.line 93
if-ne v6, v5, :cond_b0
.line 94
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v6, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 95
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v6, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 96
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v6
.line 97
.local v6, "secondHeaderByte":I
iget-object v7, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v7}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v7
.line 98
.local v7, "thirdHeaderByte":I
and-int/lit16 v8, v6, 0x80
if-eqz v8, :cond_7c
const/4 v8, 0x1
goto :goto_7d
:cond_7c
const/4 v8, 0x0
:goto_7d
iput-boolean v8, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionSyntaxIndicator:Z
.line 99
and-int/lit8 v8, v6, 0xf
shl-int/lit8 v8, v8, 0x8
or-int/2addr v8, v7
add-int/2addr v8, v5
iput v8, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
.line 101
iget-object v8, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v8}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->capacity()I
move-result v8
iget v9, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
if-ge v8, v9, :cond_b0
.line 103
iget-object v8, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v8, v8, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 104
.local v8, "bytes":[B
iget-object v9, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v10, 0x1002
iget v11, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
array-length v12, v8
mul-int/lit8 v12, v12, 0x2
.line 105
invoke-static {v11, v12}, Ljava/lang/Math;->max(II)I
move-result v11
invoke-static {v10, v11}, Ljava/lang/Math;->min(II)I
move-result v10
.line 104
invoke-virtual {v9, v10}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 106
iget-object v9, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v9, v9, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v8, v2, v9, v2, v5}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 109
.end local v4 # "headerBytesToRead":I
.end local v6 # "secondHeaderByte":I
.end local v7 # "thirdHeaderByte":I
.end local v8 # "bytes":[B
:cond_b0
goto/16 :goto_24
.line 111
:cond_b2
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v4
iget v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
iget v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
sub-int/2addr v5, v6
invoke-static {v4, v5}, Ljava/lang/Math;->min(II)I
move-result v4
.line 112
.local v4, "bodyBytesToRead":I
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v5, v5, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
invoke-virtual {p1, v5, v6, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 113
iget v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
add-int/2addr v5, v4
iput v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
.line 114
iget v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
if-ne v5, v6, :cond_fd
.line 115
iget-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionSyntaxIndicator:Z
if-eqz v5, :cond_ef
.line 117
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v5, v5, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
const/4 v7, -0x1
invoke-static {v5, v2, v6, v7}, Lcom/google/android/exoplayer2/util/Util;->crc([BIII)I
move-result v5
if-eqz v5, :cond_e5
.line 119
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
.line 120
return-void
.line 122
:cond_e5
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
add-int/lit8 v6, v6, -0x4
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
goto :goto_f4
.line 125
:cond_ef
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 127
:goto_f4
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-interface {v5, v6}, Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 128
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
.line 130
.end local v4 # "bodyBytesToRead":I
:cond_fd
goto/16 :goto_24
.line 132
:cond_ff
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
.param p1, "timestampAdjuster" # Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.param p2, "extractorOutput" # Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.param p3, "idGenerator" # Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;
.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
.line 51
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
.line 52
return-void
.end method
.method public seek()V
.registers 2
.line 56
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
.line 57
return-void
.end method