This commit is contained in:
2022-06-10 21:38:30 +09:00
commit 27f5152838
51323 changed files with 12934539 additions and 0 deletions
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor$1;
.super Ljava/lang/Object;
.source "Ac3Extractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,354 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;
.super Ljava/lang/Object;
.source "Ac3Extractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/Extractor;
# static fields
.field private static final AC3_SYNC_WORD:I = 0xb77
.field public static final FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.field private static final ID3_TAG:I
.field private static final MAX_SNIFF_BYTES:I = 0x2000
.field private static final MAX_SYNC_FRAME_SIZE:I = 0xae2
# instance fields
.field private final firstSampleTimestampUs:J
.field private reader:Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
.field private final sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private startedPacket:Z
# direct methods
.method public static constructor <clinit>()V
.locals 1
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor$1;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor$1;-><init>()V
sput-object v0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
const-string v0, "ID3"
.line 2
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->ID3_TAG:I
return-void
.end method
.method public constructor <init>()V
.locals 2
const-wide/16 v0, 0x0
.line 1
invoke-direct {p0, v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;-><init>(J)V
return-void
.end method
.method public constructor <init>(J)V
.locals 0
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->firstSampleTimestampUs:J
.line 4
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 p2, 0xae2
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
# virtual methods
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.locals 4
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->reader:Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
.line 2
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;
const/4 v2, 0x0
const/4 v3, 0x1
invoke-direct {v1, v2, v3}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;-><init>(II)V
invoke-virtual {v0, p1, v1}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.line 3
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 4
new-instance v0, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;
const-wide v1, -0x7fffffffffffffffL # -4.9E-324
invoke-direct {v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;-><init>(J)V
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
return-void
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.locals 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v0, 0x0
const/16 v1, 0xae2
invoke-interface {p1, p2, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->read([BII)I
move-result p1
const/4 p2, -0x1
if-ne p1, p2, :cond_0
return p2
.line 2
:cond_0
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 3
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 4
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->startedPacket:Z
if-nez p1, :cond_1
.line 5
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->reader:Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->firstSampleTimestampUs:J
const/4 p2, 0x1
invoke-virtual {p1, v1, v2, p2}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->packetStarted(JZ)V
.line 6
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->startedPacket:Z
.line 7
:cond_1
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->reader:Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->sampleData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
return v0
.end method
.method public release()V
.locals 0
return-void
.end method
.method public seek(JJ)V
.locals 0
const/4 p1, 0x0
.line 1
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->startedPacket:Z
.line 2
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->reader:Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->seek()V
return-void
.end method
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 7
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0xa
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
const/4 v2, 0x0
move v3, v2
.line 2
:goto_0
iget-object v4, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v4, v2, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 3
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 4
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v4
sget v5, Lcom/google/android/exoplayer2/extractor/ts/Ac3Extractor;->ID3_TAG:I
if-eq v4, v5, :cond_4
.line 5
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
.line 6
invoke-interface {p1, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
move v1, v2
move v4, v3
.line 7
:goto_1
iget-object v5, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v6, 0x5
invoke-interface {p1, v5, v2, v6}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 8
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 9
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v5
const/16 v6, 0xb77
if-eq v5, v6, :cond_1
.line 10
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
add-int/lit8 v4, v4, 0x1
sub-int v1, v4, v3
const/16 v5, 0x2000
if-lt v1, v5, :cond_0
return v2
.line 11
:cond_0
invoke-interface {p1, v4}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
move v1, v2
goto :goto_1
:cond_1
const/4 v5, 0x1
add-int/2addr v1, v5
const/4 v6, 0x4
if-lt v1, v6, :cond_2
return v5
.line 12
:cond_2
iget-object v5, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-static {v5}, Lcom/google/android/exoplayer2/audio/Ac3Util;->parseAc3SyncframeSize([B)I
move-result v5
const/4 v6, -0x1
if-ne v5, v6, :cond_3
return v2
:cond_3
add-int/lit8 v5, v5, -0x5
.line 13
invoke-interface {p1, v5}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
goto :goto_1
:cond_4
const/4 v4, 0x3
.line 14
invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 15
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readSynchSafeInt()I
move-result v4
add-int/lit8 v5, v4, 0xa
add-int/2addr v3, v5
.line 16
invoke-interface {p1, v4}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
goto :goto_0
.end method
@@ -0,0 +1,522 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
.super Ljava/lang/Object;
.source "Ac3Reader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# static fields
.field private static final HEADER_SIZE:I = 0x8
.field private static final STATE_FINDING_SYNC:I = 0x0
.field private static final STATE_READING_HEADER:I = 0x1
.field private static final STATE_READING_SAMPLE:I = 0x2
# instance fields
.field private bytesRead:I
.field private format:Lcom/google/android/exoplayer2/Format;
.field private final headerScratchBits:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.field private final headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final language:Ljava/lang/String;
.field private lastByteWas0B:Z
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private sampleDurationUs:J
.field private sampleSize:I
.field private state:I
.field private timeUs:J
.field private trackFormatId:Ljava/lang/String;
# direct methods
.method public constructor <init>()V
.locals 1
const/4 v0, 0x0
.line 1
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;-><init>(Ljava/lang/String;)V
return-void
.end method
.method public constructor <init>(Ljava/lang/String;)V
.locals 2
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v1, 0x8
new-array v1, v1, [B
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;-><init>([B)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->headerScratchBits:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.line 4
new-instance v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableBitArray;->data:[B
invoke-direct {v1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v0, 0x0
.line 5
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->state:I
.line 6
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->language:Ljava/lang/String;
return-void
.end method
.method private continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
.locals 2
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
sub-int v1, p3, v1
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
.line 2
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
invoke-virtual {p1, p2, v1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 3
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
add-int/2addr p1, v0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
if-ne p1, p3, :cond_0
const/4 p1, 0x1
goto :goto_0
:cond_0
const/4 p1, 0x0
:goto_0
return p1
.end method
.method private parseHeader()V
.locals 14
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->headerScratchBits:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->setPosition(I)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->headerScratchBits:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-static {v0}, Lcom/google/android/exoplayer2/audio/Ac3Util;->parseAc3SyncframeInfo(Lcom/google/android/exoplayer2/util/ParsableBitArray;)Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;
move-result-object v0
.line 3
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->format:Lcom/google/android/exoplayer2/Format;
if-eqz v1, :cond_0
iget v2, v0, Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;->channelCount:I
iget v3, v1, Lcom/google/android/exoplayer2/Format;->channelCount:I
if-ne v2, v3, :cond_0
iget v2, v0, Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;->sampleRate:I
iget v3, v1, Lcom/google/android/exoplayer2/Format;->sampleRate:I
if-ne v2, v3, :cond_0
iget-object v2, v0, Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;->mimeType:Ljava/lang/String;
iget-object v1, v1, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
if-eq v2, v1, :cond_1
.line 4
:cond_0
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->trackFormatId:Ljava/lang/String;
iget-object v4, v0, Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;->mimeType:Ljava/lang/String;
const/4 v5, 0x0
const/4 v6, -0x1
const/4 v7, -0x1
iget v8, v0, Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;->channelCount:I
iget v9, v0, Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;->sampleRate:I
const/4 v10, 0x0
const/4 v11, 0x0
const/4 v12, 0x0
iget-object v13, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->language:Ljava/lang/String;
invoke-static/range {v3 .. v13}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object v1
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->format:Lcom/google/android/exoplayer2/Format;
.line 5
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v2, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 6
:cond_1
iget v1, v0, Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;->frameSize:I
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->sampleSize:I
const-wide/32 v1, 0xf4240
.line 7
iget v0, v0, Lcom/google/android/exoplayer2/audio/Ac3Util$Ac3SyncFrameInfo;->sampleCount:I
int-to-long v3, v0
mul-long/2addr v3, v1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->format:Lcom/google/android/exoplayer2/Format;
iget v0, v0, Lcom/google/android/exoplayer2/Format;->sampleRate:I
int-to-long v0, v0
div-long/2addr v3, v0
iput-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->sampleDurationUs:J
return-void
.end method
.method private skipToNextSync(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.locals 5
.line 1
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
const/4 v1, 0x0
if-lez v0, :cond_4
.line 2
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->lastByteWas0B:Z
const/16 v2, 0xb
const/4 v3, 0x1
if-nez v0, :cond_1
.line 3
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
if-ne v0, v2, :cond_0
move v1, v3
:cond_0
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->lastByteWas0B:Z
goto :goto_0
.line 4
:cond_1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
const/16 v4, 0x77
if-ne v0, v4, :cond_2
.line 5
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->lastByteWas0B:Z
return v3
:cond_2
if-ne v0, v2, :cond_3
move v1, v3
.line 6
:cond_3
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->lastByteWas0B:Z
goto :goto_0
:cond_4
return v1
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 10
.line 1
:cond_0
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
if-lez v0, :cond_4
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->state:I
const/4 v1, 0x0
const/4 v2, 0x2
const/4 v3, 0x1
if-eqz v0, :cond_3
if-eq v0, v3, :cond_2
if-eq v0, v2, :cond_1
goto :goto_0
.line 3
:cond_1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->sampleSize:I
iget v3, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
sub-int/2addr v2, v3
invoke-static {v0, v2}, Ljava/lang/Math;->min(II)I
move-result v0
.line 4
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v2, p1, v0}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 5
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
add-int/2addr v2, v0
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
.line 6
iget v7, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->sampleSize:I
if-ne v2, v7, :cond_0
.line 7
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->timeUs:J
const/4 v6, 0x1
const/4 v8, 0x0
const/4 v9, 0x0
invoke-interface/range {v3 .. v9}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
.line 8
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->timeUs:J
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->sampleDurationUs:J
add-long/2addr v2, v4
iput-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->timeUs:J
.line 9
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->state:I
goto :goto_0
.line 10
:cond_2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v3, 0x8
invoke-direct {p0, p1, v0, v3}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
move-result v0
if-eqz v0, :cond_0
.line 11
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->parseHeader()V
.line 12
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 13
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-interface {v0, v1, v3}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 14
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->state:I
goto :goto_0
.line 15
:cond_3
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->skipToNextSync(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
move-result v0
if-eqz v0, :cond_0
.line 16
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->state:I
.line 17
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v4, 0xb
aput-byte v4, v0, v1
const/16 v1, 0x77
.line 18
aput-byte v1, v0, v3
.line 19
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
goto :goto_0
:cond_4
return-void
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 1
.line 1
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->trackFormatId:Ljava/lang/String;
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result p2
const/4 v0, 0x1
invoke-interface {p1, p2, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
.method public packetFinished()V
.locals 0
return-void
.end method
.method public packetStarted(JZ)V
.locals 0
.line 1
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->timeUs:J
return-void
.end method
.method public seek()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->state:I
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->bytesRead:I
.line 3
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;->lastByteWas0B:Z
return-void
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor$1;
.super Ljava/lang/Object;
.source "AdtsExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,383 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;
.super Ljava/lang/Object;
.source "AdtsExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/Extractor;
# static fields
.field public static final FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.field private static final ID3_TAG:I
.field private static final MAX_PACKET_SIZE:I = 0xc8
.field private static final MAX_SNIFF_BYTES:I = 0x2000
# instance fields
.field private final firstSampleTimestampUs:J
.field private final packetBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private reader:Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;
.field private startedPacket:Z
# direct methods
.method public static constructor <clinit>()V
.locals 1
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor$1;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor$1;-><init>()V
sput-object v0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
const-string v0, "ID3"
.line 2
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->ID3_TAG:I
return-void
.end method
.method public constructor <init>()V
.locals 2
const-wide/16 v0, 0x0
.line 1
invoke-direct {p0, v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;-><init>(J)V
return-void
.end method
.method public constructor <init>(J)V
.locals 0
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->firstSampleTimestampUs:J
.line 4
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 p2, 0xc8
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->packetBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
# virtual methods
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.locals 4
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;
const/4 v1, 0x1
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;-><init>(Z)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->reader:Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;
.line 2
new-instance v2, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;
const/4 v3, 0x0
invoke-direct {v2, v3, v1}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;-><init>(II)V
invoke-virtual {v0, p1, v2}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.line 3
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 4
new-instance v0, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;
const-wide v1, -0x7fffffffffffffffL # -4.9E-324
invoke-direct {v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;-><init>(J)V
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
return-void
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.locals 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->packetBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v0, 0x0
const/16 v1, 0xc8
invoke-interface {p1, p2, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->read([BII)I
move-result p1
const/4 p2, -0x1
if-ne p1, p2, :cond_0
return p2
.line 2
:cond_0
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->packetBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 3
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->packetBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 4
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->startedPacket:Z
if-nez p1, :cond_1
.line 5
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->reader:Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->firstSampleTimestampUs:J
const/4 p2, 0x1
invoke-virtual {p1, v1, v2, p2}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->packetStarted(JZ)V
.line 6
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->startedPacket:Z
.line 7
:cond_1
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->reader:Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->packetBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
return v0
.end method
.method public release()V
.locals 0
return-void
.end method
.method public seek(JJ)V
.locals 0
const/4 p1, 0x0
.line 1
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->startedPacket:Z
.line 2
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->reader:Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->seek()V
return-void
.end method
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 10
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0xa
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
.line 2
new-instance v2, Lcom/google/android/exoplayer2/util/ParsableBitArray;
iget-object v3, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-direct {v2, v3}, Lcom/google/android/exoplayer2/util/ParsableBitArray;-><init>([B)V
const/4 v3, 0x0
move v4, v3
.line 3
:goto_0
iget-object v5, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v5, v3, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 4
invoke-virtual {v0, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 5
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt24()I
move-result v5
sget v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsExtractor;->ID3_TAG:I
if-eq v5, v6, :cond_4
.line 6
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
.line 7
invoke-interface {p1, v4}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
move v1, v3
move v6, v1
move v5, v4
.line 8
:goto_1
iget-object v7, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v8, 0x2
invoke-interface {p1, v7, v3, v8}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 9
invoke-virtual {v0, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 10
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v7
const v8, 0xfff6
and-int/2addr v7, v8
const v8, 0xfff0
if-eq v7, v8, :cond_1
.line 11
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->resetPeekPosition()V
add-int/lit8 v5, v5, 0x1
sub-int v1, v5, v4
const/16 v6, 0x2000
if-lt v1, v6, :cond_0
return v3
.line 12
:cond_0
invoke-interface {p1, v5}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
move v1, v3
move v6, v1
goto :goto_1
:cond_1
const/4 v7, 0x1
add-int/2addr v1, v7
const/4 v8, 0x4
if-lt v1, v8, :cond_2
const/16 v9, 0xbc
if-le v6, v9, :cond_2
return v7
.line 13
:cond_2
iget-object v7, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v7, v3, v8}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
const/16 v7, 0xe
.line 14
invoke-virtual {v2, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->setPosition(I)V
const/16 v7, 0xd
.line 15
invoke-virtual {v2, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v7
const/4 v8, 0x6
if-gt v7, v8, :cond_3
return v3
:cond_3
add-int/lit8 v8, v7, -0x6
.line 16
invoke-interface {p1, v8}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
add-int/2addr v6, v7
goto :goto_1
:cond_4
const/4 v5, 0x3
.line 17
invoke-virtual {v0, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 18
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readSynchSafeInt()I
move-result v5
add-int/lit8 v6, v5, 0xa
add-int/2addr v4, v6
.line 19
invoke-interface {p1, v5}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
goto :goto_0
.end method
@@ -0,0 +1,934 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;
.super Ljava/lang/Object;
.source "AdtsReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# static fields
.field private static final CRC_SIZE:I = 0x2
.field private static final HEADER_SIZE:I = 0x5
.field private static final ID3_HEADER_SIZE:I = 0xa
.field private static final ID3_IDENTIFIER:[B
.field private static final ID3_SIZE_OFFSET:I = 0x6
.field private static final MATCH_STATE_FF:I = 0x200
.field private static final MATCH_STATE_I:I = 0x300
.field private static final MATCH_STATE_ID:I = 0x400
.field private static final MATCH_STATE_START:I = 0x100
.field private static final MATCH_STATE_VALUE_SHIFT:I = 0x8
.field private static final STATE_FINDING_SAMPLE:I = 0x0
.field private static final STATE_READING_ADTS_HEADER:I = 0x2
.field private static final STATE_READING_ID3_HEADER:I = 0x1
.field private static final STATE_READING_SAMPLE:I = 0x3
.field private static final TAG:Ljava/lang/String; = "AdtsReader"
# instance fields
.field private final adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.field private bytesRead:I
.field private currentOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private currentSampleDuration:J
.field private final exposeId3:Z
.field private formatId:Ljava/lang/String;
.field private hasCrc:Z
.field private hasOutputFormat:Z
.field private final id3HeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private id3Output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private final language:Ljava/lang/String;
.field private matchState:I
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private sampleDurationUs:J
.field private sampleSize:I
.field private state:I
.field private timeUs:J
# direct methods
.method public static constructor <clinit>()V
.locals 1
const/4 v0, 0x3
new-array v0, v0, [B
.line 1
fill-array-data v0, :array_0
sput-object v0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->ID3_IDENTIFIER:[B
return-void
nop
:array_0
.array-data 1
0x49t
0x44t
0x33t
.end array-data
.end method
.method public constructor <init>(Z)V
.locals 1
const/4 v0, 0x0
.line 1
invoke-direct {p0, p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;-><init>(ZLjava/lang/String;)V
return-void
.end method
.method public constructor <init>(ZLjava/lang/String;)V
.locals 3
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v1, 0x7
new-array v1, v1, [B
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;-><init>([B)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.line 4
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
sget-object v1, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->ID3_IDENTIFIER:[B
const/16 v2, 0xa
invoke-static {v1, v2}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v1
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3HeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 5
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->setFindingSampleState()V
.line 6
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->exposeId3:Z
.line 7
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->language:Ljava/lang/String;
return-void
.end method
.method private continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
.locals 2
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
sub-int v1, p3, v1
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
.line 2
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
invoke-virtual {p1, p2, v1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 3
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
add-int/2addr p1, v0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
if-ne p1, p3, :cond_0
const/4 p1, 0x1
goto :goto_0
:cond_0
const/4 p1, 0x0
:goto_0
return p1
.end method
.method private findNextSample(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 8
.line 1
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 2
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v1
.line 3
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v2
:goto_0
if-ge v1, v2, :cond_7
add-int/lit8 v3, v1, 0x1
.line 4
aget-byte v1, v0, v1
const/16 v4, 0xff
and-int/2addr v1, v4
.line 5
iget v5, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->matchState:I
const/16 v6, 0x200
if-ne v5, v6, :cond_1
const/16 v7, 0xf0
if-lt v1, v7, :cond_1
if-eq v1, v4, :cond_1
const/4 v0, 0x1
and-int/2addr v1, v0
if-nez v1, :cond_0
goto :goto_1
:cond_0
const/4 v0, 0x0
.line 6
:goto_1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->hasCrc:Z
.line 7
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->setReadingAdtsHeaderState()V
.line 8
invoke-virtual {p1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return-void
:cond_1
or-int/2addr v1, v5
const/16 v4, 0x149
if-eq v1, v4, :cond_5
const/16 v4, 0x1ff
if-eq v1, v4, :cond_4
const/16 v4, 0x344
if-eq v1, v4, :cond_3
const/16 v4, 0x433
if-eq v1, v4, :cond_2
const/16 v1, 0x100
if-eq v5, v1, :cond_6
.line 9
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->matchState:I
add-int/lit8 v3, v3, -0x1
goto :goto_2
.line 10
:cond_2
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->setReadingId3HeaderState()V
.line 11
invoke-virtual {p1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return-void
:cond_3
const/16 v1, 0x400
.line 12
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->matchState:I
goto :goto_2
.line 13
:cond_4
iput v6, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->matchState:I
goto :goto_2
:cond_5
const/16 v1, 0x300
.line 14
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->matchState:I
:cond_6
:goto_2
move v1, v3
goto :goto_0
.line 15
:cond_7
invoke-virtual {p1, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return-void
.end method
.method private parseAdtsHeader()V
.locals 18
move-object/from16 v6, p0
.line 1
iget-object v0, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->setPosition(I)V
.line 2
iget-boolean v0, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->hasOutputFormat:Z
const/4 v1, 0x4
const/4 v2, 0x2
if-nez v0, :cond_1
.line 3
iget-object v0, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v0
const/4 v3, 0x1
add-int/2addr v0, v3
if-eq v0, v2, :cond_0
.line 4
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "Detected audio object type: "
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v0, ", but assuming AAC LC."
invoke-virtual {v4, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v4, "AdtsReader"
invoke-static {v4, v0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
move v0, v2
.line 5
:cond_0
iget-object v4, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v4, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v4
.line 6
iget-object v5, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v3}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 7
iget-object v5, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v7, 0x3
invoke-virtual {v5, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v5
.line 8
invoke-static {v0, v4, v5}, Lcom/google/android/exoplayer2/util/CodecSpecificDataUtil;->buildAacAudioSpecificConfig(III)[B
move-result-object v0
.line 9
invoke-static {v0}, Lcom/google/android/exoplayer2/util/CodecSpecificDataUtil;->parseAacAudioSpecificConfig([B)Landroid/util/Pair;
move-result-object v4
.line 10
iget-object v7, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->formatId:Ljava/lang/String;
const/4 v9, 0x0
const/4 v10, -0x1
const/4 v11, -0x1
iget-object v5, v4, Landroid/util/Pair;->second:Ljava/lang/Object;
check-cast v5, Ljava/lang/Integer;
.line 11
invoke-virtual {v5}, Ljava/lang/Integer;->intValue()I
move-result v12
iget-object v4, v4, Landroid/util/Pair;->first:Ljava/lang/Object;
check-cast v4, Ljava/lang/Integer;
invoke-virtual {v4}, Ljava/lang/Integer;->intValue()I
move-result v13
.line 12
invoke-static {v0}, Ljava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
move-result-object v14
const/4 v15, 0x0
const/16 v16, 0x0
iget-object v0, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->language:Ljava/lang/String;
const-string v8, "audio/mp4a-latm"
move-object/from16 v17, v0
.line 13
invoke-static/range {v7 .. v17}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object v0
const-wide/32 v4, 0x3d090000
.line 14
iget v7, v0, Lcom/google/android/exoplayer2/Format;->sampleRate:I
int-to-long v7, v7
div-long/2addr v4, v7
iput-wide v4, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->sampleDurationUs:J
.line 15
iget-object v4, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v4, v0}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 16
iput-boolean v3, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->hasOutputFormat:Z
goto :goto_0
.line 17
:cond_1
iget-object v0, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v3, 0xa
invoke-virtual {v0, v3}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 18
:goto_0
iget-object v0, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 19
iget-object v0, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v1, 0xd
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v0
sub-int/2addr v0, v2
add-int/lit8 v0, v0, -0x5
.line 20
iget-boolean v1, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->hasCrc:Z
if-eqz v1, :cond_2
add-int/lit8 v0, v0, -0x2
:cond_2
move v5, v0
.line 21
iget-object v1, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v2, v6, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->sampleDurationUs:J
const/4 v4, 0x0
move-object/from16 v0, p0
invoke-direct/range {v0 .. v5}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->setReadingSampleState(Lcom/google/android/exoplayer2/extractor/TrackOutput;JII)V
return-void
.end method
.method private parseId3Header()V
.locals 9
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3Output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3HeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v2, 0xa
invoke-interface {v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3HeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v1, 0x6
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 3
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3Output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3HeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 4
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readSynchSafeInt()I
move-result v0
add-int/lit8 v8, v0, 0xa
const-wide/16 v5, 0x0
const/16 v7, 0xa
move-object v3, p0
.line 5
invoke-direct/range {v3 .. v8}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->setReadingSampleState(Lcom/google/android/exoplayer2/extractor/TrackOutput;JII)V
return-void
.end method
.method private readSample(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 7
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->sampleSize:I
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
sub-int/2addr v1, v2
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
.line 2
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->currentOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v1, p1, v0}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 3
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
add-int/2addr p1, v0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
.line 4
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->sampleSize:I
if-ne p1, v4, :cond_0
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->currentOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->timeUs:J
const/4 v3, 0x1
const/4 v5, 0x0
const/4 v6, 0x0
invoke-interface/range {v0 .. v6}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
.line 6
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->timeUs:J
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->currentSampleDuration:J
add-long/2addr v0, v2
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->timeUs:J
.line 7
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->setFindingSampleState()V
:cond_0
return-void
.end method
.method private setFindingSampleState()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->state:I
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
const/16 v0, 0x100
.line 3
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->matchState:I
return-void
.end method
.method private setReadingAdtsHeaderState()V
.locals 1
const/4 v0, 0x2
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->state:I
const/4 v0, 0x0
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
return-void
.end method
.method private setReadingId3HeaderState()V
.locals 2
const/4 v0, 0x1
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->state:I
.line 2
sget-object v0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->ID3_IDENTIFIER:[B
array-length v0, v0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
const/4 v0, 0x0
.line 3
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->sampleSize:I
.line 4
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3HeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return-void
.end method
.method private setReadingSampleState(Lcom/google/android/exoplayer2/extractor/TrackOutput;JII)V
.locals 1
const/4 v0, 0x3
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->state:I
.line 2
iput p4, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->bytesRead:I
.line 3
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->currentOutput:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 4
iput-wide p2, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->currentSampleDuration:J
.line 5
iput p5, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->sampleSize:I
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 2
.line 1
:cond_0
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
if-lez v0, :cond_6
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->state:I
if-eqz v0, :cond_5
const/4 v1, 0x1
if-eq v0, v1, :cond_4
const/4 v1, 0x2
if-eq v0, v1, :cond_2
const/4 v1, 0x3
if-eq v0, v1, :cond_1
goto :goto_0
.line 3
:cond_1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->readSample(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
goto :goto_0
.line 4
:cond_2
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->hasCrc:Z
if-eqz v0, :cond_3
const/4 v0, 0x7
goto :goto_1
:cond_3
const/4 v0, 0x5
.line 5
:goto_1
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->adtsScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
iget-object v1, v1, Lcom/google/android/exoplayer2/util/ParsableBitArray;->data:[B
invoke-direct {p0, p1, v1, v0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
move-result v0
if-eqz v0, :cond_0
.line 6
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->parseAdtsHeader()V
goto :goto_0
.line 7
:cond_4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3HeaderBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v1, 0xa
invoke-direct {p0, p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
move-result v0
if-eqz v0, :cond_0
.line 8
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->parseId3Header()V
goto :goto_0
.line 9
:cond_5
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->findNextSample(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
goto :goto_0
:cond_6
return-void
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 3
.line 1
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->formatId:Ljava/lang/String;
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result v0
const/4 v1, 0x1
invoke-interface {p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 4
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->exposeId3:Z
if-eqz v0, :cond_0
.line 5
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 6
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result v0
const/4 v1, 0x4
invoke-interface {p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3Output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 7
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object p2
const/4 v0, -0x1
const-string v1, "application/id3"
const/4 v2, 0x0
invoke-static {p2, v1, v2, v0, v2}, Lcom/google/android/exoplayer2/Format;->createSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object p2
invoke-interface {p1, p2}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
goto :goto_0
.line 8
:cond_0
new-instance p1, Lcom/google/android/exoplayer2/extractor/DummyTrackOutput;
invoke-direct {p1}, Lcom/google/android/exoplayer2/extractor/DummyTrackOutput;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->id3Output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
:goto_0
return-void
.end method
.method public packetFinished()V
.locals 0
return-void
.end method
.method public packetStarted(JZ)V
.locals 0
.line 1
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->timeUs:J
return-void
.end method
.method public seek()V
.locals 0
.line 1
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;->setFindingSampleState()V
return-void
.end method
@@ -0,0 +1,21 @@
.class public interface abstract annotation Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory$Flags;
.super Ljava/lang/Object;
.source "DefaultTsPayloadReaderFactory.java"
# interfaces
.implements Ljava/lang/annotation/Annotation;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x2609
name = "Flags"
.end annotation
.annotation runtime Ljava/lang/annotation/Retention;
value = .enum Ljava/lang/annotation/RetentionPolicy;->SOURCE:Ljava/lang/annotation/RetentionPolicy;
.end annotation
@@ -0,0 +1,587 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;
.super Ljava/lang/Object;
.source "DefaultTsPayloadReaderFactory.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory$Flags;
}
.end annotation
# static fields
.field private static final DESCRIPTOR_TAG_CAPTION_SERVICE:I = 0x86
.field public static final FLAG_ALLOW_NON_IDR_KEYFRAMES:I = 0x1
.field public static final FLAG_DETECT_ACCESS_UNITS:I = 0x8
.field public static final FLAG_IGNORE_AAC_STREAM:I = 0x2
.field public static final FLAG_IGNORE_H264_STREAM:I = 0x4
.field public static final FLAG_IGNORE_SPLICE_INFO_STREAM:I = 0x10
.field public static final FLAG_OVERRIDE_CAPTION_DESCRIPTORS:I = 0x20
# instance fields
.field private final closedCaptionFormats:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/Format;",
">;"
}
.end annotation
.end field
.field private final flags:I
# direct methods
.method public constructor <init>()V
.locals 1
const/4 v0, 0x0
.line 1
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;-><init>(I)V
return-void
.end method
.method public constructor <init>(I)V
.locals 1
.line 2
invoke-static {}, Ljava/util/Collections;->emptyList()Ljava/util/List;
move-result-object v0
invoke-direct {p0, p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;-><init>(ILjava/util/List;)V
return-void
.end method
.method public constructor <init>(ILjava/util/List;)V
.locals 7
.annotation system Ldalvik/annotation/Signature;
value = {
"(I",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/Format;",
">;)V"
}
.end annotation
.line 3
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 4
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->flags:I
const/16 p1, 0x20
.line 5
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->isSet(I)Z
move-result p1
if-nez p1, :cond_0
invoke-interface {p2}, Ljava/util/List;->isEmpty()Z
move-result p1
if-eqz p1, :cond_0
const/4 v0, 0x0
const/4 v2, 0x0
const/4 v3, -0x1
const/4 v4, 0x0
const/4 v5, 0x0
const/4 v6, 0x0
const-string v1, "application/cea-608"
.line 6
invoke-static/range {v0 .. v6}, Lcom/google/android/exoplayer2/Format;->createTextSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;Lcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object p1
invoke-static {p1}, Ljava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
move-result-object p2
.line 7
:cond_0
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->closedCaptionFormats:Ljava/util/List;
return-void
.end method
.method private buildSeiReader(Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;)Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
.locals 14
const/16 v0, 0x20
.line 1
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->isSet(I)Z
move-result v0
if-eqz v0, :cond_0
.line 2
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->closedCaptionFormats:Ljava/util/List;
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;-><init>(Ljava/util/List;)V
return-object p1
.line 3
:cond_0
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p1, p1, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->descriptorBytes:[B
invoke-direct {v0, p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
.line 4
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->closedCaptionFormats:Ljava/util/List;
.line 5
:goto_0
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v1
if-lez v1, :cond_4
.line 6
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
.line 7
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v2
.line 8
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v3
add-int/2addr v3, v2
const/16 v2, 0x86
if-ne v1, v2, :cond_3
.line 9
new-instance p1, Ljava/util/ArrayList;
invoke-direct {p1}, Ljava/util/ArrayList;-><init>()V
.line 10
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
and-int/lit8 v1, v1, 0x1f
const/4 v2, 0x0
move v4, v2
:goto_1
if-ge v4, v1, :cond_3
const/4 v5, 0x3
.line 11
invoke-virtual {v0, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readString(I)Ljava/lang/String;
move-result-object v11
.line 12
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v5
and-int/lit16 v6, v5, 0x80
const/4 v7, 0x1
if-eqz v6, :cond_1
move v6, v7
goto :goto_2
:cond_1
move v6, v2
:goto_2
if-eqz v6, :cond_2
and-int/lit8 v5, v5, 0x3f
const-string v6, "application/cea-708"
move v12, v5
move-object v7, v6
goto :goto_3
:cond_2
const-string v5, "application/cea-608"
move v12, v7
move-object v7, v5
:goto_3
const/4 v6, 0x0
const/4 v8, 0x0
const/4 v9, -0x1
const/4 v10, 0x0
const/4 v13, 0x0
.line 13
invoke-static/range {v6 .. v13}, Lcom/google/android/exoplayer2/Format;->createTextSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object v5
invoke-virtual {p1, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
const/4 v5, 0x2
.line 14
invoke-virtual {v0, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
add-int/lit8 v4, v4, 0x1
goto :goto_1
.line 15
:cond_3
invoke-virtual {v0, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
goto :goto_0
.line 16
:cond_4
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
invoke-direct {v0, p1}, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;-><init>(Ljava/util/List;)V
return-object v0
.end method
.method private isSet(I)Z
.locals 1
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->flags:I
and-int/2addr p1, v0
if-eqz p1, :cond_0
const/4 p1, 0x1
goto :goto_0
:cond_0
const/4 p1, 0x0
:goto_0
return p1
.end method
# virtual methods
.method public createInitialPayloadReaders()Landroid/util/SparseArray;
.locals 1
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;",
">;"
}
.end annotation
.line 1
new-instance v0, Landroid/util/SparseArray;
invoke-direct {v0}, Landroid/util/SparseArray;-><init>()V
return-object v0
.end method
.method public createPayloadReader(ILcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.locals 4
const/4 v0, 0x2
if-eq p1, v0, :cond_c
const/4 v1, 0x3
if-eq p1, v1, :cond_b
const/4 v1, 0x4
if-eq p1, v1, :cond_b
const/16 v2, 0xf
const/4 v3, 0x0
if-eq p1, v2, :cond_9
const/16 v0, 0x15
if-eq p1, v0, :cond_8
const/16 v0, 0x1b
if-eq p1, v0, :cond_6
const/16 v0, 0x24
if-eq p1, v0, :cond_5
const/16 v0, 0x59
if-eq p1, v0, :cond_4
const/16 v0, 0x8a
if-eq p1, v0, :cond_3
const/16 v0, 0x81
if-eq p1, v0, :cond_2
const/16 v0, 0x82
if-eq p1, v0, :cond_3
const/16 v0, 0x86
if-eq p1, v0, :cond_0
const/16 v0, 0x87
if-eq p1, v0, :cond_2
return-object v3
:cond_0
const/16 p1, 0x10
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->isSet(I)Z
move-result p1
if-eqz p1, :cond_1
goto :goto_0
:cond_1
new-instance v3, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;
invoke-direct {p1}, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;-><init>()V
invoke-direct {v3, p1}, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;)V
:goto_0
return-object v3
.line 2
:cond_2
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
iget-object p2, p2, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->language:Ljava/lang/String;
invoke-direct {v0, p2}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;-><init>(Ljava/lang/String;)V
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
return-object p1
.line 3
:cond_3
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;
iget-object p2, p2, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->language:Ljava/lang/String;
invoke-direct {v0, p2}, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;-><init>(Ljava/lang/String;)V
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
return-object p1
.line 4
:cond_4
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;
iget-object p2, p2, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->dvbSubtitleInfos:Ljava/util/List;
invoke-direct {v0, p2}, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;-><init>(Ljava/util/List;)V
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
return-object p1
.line 5
:cond_5
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader;
invoke-direct {p0, p2}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->buildSeiReader(Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;)Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
move-result-object p2
invoke-direct {v0, p2}, Lcom/google/android/exoplayer2/extractor/ts/H265Reader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/SeiReader;)V
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
return-object p1
.line 6
:cond_6
invoke-direct {p0, v1}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->isSet(I)Z
move-result p1
if-eqz p1, :cond_7
goto :goto_1
:cond_7
new-instance v3, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;
.line 7
invoke-direct {p0, p2}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->buildSeiReader(Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;)Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
move-result-object p2
const/4 v0, 0x1
.line 8
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->isSet(I)Z
move-result v0
const/16 v1, 0x8
invoke-direct {p0, v1}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->isSet(I)Z
move-result v1
invoke-direct {p1, p2, v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/SeiReader;ZZ)V
invoke-direct {v3, p1}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
:goto_1
return-object v3
.line 9
:cond_8
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance p2, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;
invoke-direct {p2}, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;-><init>()V
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
return-object p1
.line 10
:cond_9
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;->isSet(I)Z
move-result p1
if-eqz p1, :cond_a
goto :goto_2
:cond_a
new-instance v3, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;
const/4 v0, 0x0
iget-object p2, p2, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->language:Ljava/lang/String;
invoke-direct {p1, v0, p2}, Lcom/google/android/exoplayer2/extractor/ts/AdtsReader;-><init>(ZLjava/lang/String;)V
invoke-direct {v3, p1}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
:goto_2
return-object v3
.line 11
:cond_b
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;
iget-object p2, p2, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->language:Ljava/lang/String;
invoke-direct {v0, p2}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;-><init>(Ljava/lang/String;)V
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
return-object p1
.line 12
:cond_c
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/PesReader;
new-instance p2, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;
invoke-direct {p2}, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;-><init>()V
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
return-object p1
.end method
@@ -0,0 +1,460 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/DtsReader;
.super Ljava/lang/Object;
.source "DtsReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# static fields
.field private static final HEADER_SIZE:I = 0xf
.field private static final STATE_FINDING_SYNC:I = 0x0
.field private static final STATE_READING_HEADER:I = 0x1
.field private static final STATE_READING_SAMPLE:I = 0x2
.field private static final SYNC_VALUE:I = 0x7ffe8001
.field private static final SYNC_VALUE_SIZE:I = 0x4
# instance fields
.field private bytesRead:I
.field private format:Lcom/google/android/exoplayer2/Format;
.field private formatId:Ljava/lang/String;
.field private final headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final language:Ljava/lang/String;
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private sampleDurationUs:J
.field private sampleSize:I
.field private state:I
.field private syncBytes:I
.field private timeUs:J
# direct methods
.method public constructor <init>(Ljava/lang/String;)V
.locals 5
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0xf
new-array v1, v1, [B
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 3
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v1, 0x7f
const/4 v2, 0x0
aput-byte v1, v0, v2
const/4 v1, -0x2
const/4 v3, 0x1
.line 4
aput-byte v1, v0, v3
const/4 v1, 0x2
const/16 v4, -0x80
.line 5
aput-byte v4, v0, v1
const/4 v1, 0x3
.line 6
aput-byte v3, v0, v1
.line 7
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->state:I
.line 8
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->language:Ljava/lang/String;
return-void
.end method
.method private continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
.locals 2
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
sub-int v1, p3, v1
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
.line 2
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
invoke-virtual {p1, p2, v1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 3
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
add-int/2addr p1, v0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
if-ne p1, p3, :cond_0
const/4 p1, 0x1
goto :goto_0
:cond_0
const/4 p1, 0x0
:goto_0
return p1
.end method
.method private parseHeader()V
.locals 5
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 2
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->format:Lcom/google/android/exoplayer2/Format;
if-nez v1, :cond_0
.line 3
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->formatId:Ljava/lang/String;
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->language:Ljava/lang/String;
const/4 v3, 0x0
invoke-static {v0, v1, v2, v3}, Lcom/google/android/exoplayer2/audio/DtsUtil;->parseDtsFormat([BLjava/lang/String;Ljava/lang/String;Lcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object v1
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->format:Lcom/google/android/exoplayer2/Format;
.line 4
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v2, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 5
:cond_0
invoke-static {v0}, Lcom/google/android/exoplayer2/audio/DtsUtil;->getDtsFrameSize([B)I
move-result v1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->sampleSize:I
const-wide/32 v1, 0xf4240
.line 6
invoke-static {v0}, Lcom/google/android/exoplayer2/audio/DtsUtil;->parseDtsAudioSampleCount([B)I
move-result v0
int-to-long v3, v0
mul-long/2addr v3, v1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->format:Lcom/google/android/exoplayer2/Format;
iget v0, v0, Lcom/google/android/exoplayer2/Format;->sampleRate:I
int-to-long v0, v0
div-long/2addr v3, v0
long-to-int v0, v3
int-to-long v0, v0
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->sampleDurationUs:J
return-void
.end method
.method private skipToNextSync(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
.locals 3
.line 1
:cond_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
const/4 v1, 0x0
if-lez v0, :cond_1
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->syncBytes:I
shl-int/lit8 v0, v0, 0x8
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->syncBytes:I
.line 3
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v2
or-int/2addr v0, v2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->syncBytes:I
const v2, 0x7ffe8001
if-ne v0, v2, :cond_0
.line 4
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->syncBytes:I
const/4 p1, 0x1
return p1
:cond_1
return v1
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 10
.line 1
:cond_0
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
if-lez v0, :cond_4
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->state:I
const/4 v1, 0x1
if-eqz v0, :cond_3
const/4 v2, 0x0
const/4 v3, 0x2
if-eq v0, v1, :cond_2
if-eq v0, v3, :cond_1
goto :goto_0
.line 3
:cond_1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->sampleSize:I
iget v3, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
sub-int/2addr v1, v3
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
.line 4
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v1, p1, v0}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 5
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
add-int/2addr v1, v0
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
.line 6
iget v7, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->sampleSize:I
if-ne v1, v7, :cond_0
.line 7
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->timeUs:J
const/4 v6, 0x1
const/4 v8, 0x0
const/4 v9, 0x0
invoke-interface/range {v3 .. v9}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
.line 8
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->timeUs:J
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->sampleDurationUs:J
add-long/2addr v0, v3
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->timeUs:J
.line 9
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->state:I
goto :goto_0
.line 10
:cond_2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v1, 0xf
invoke-direct {p0, p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
move-result v0
if-eqz v0, :cond_0
.line 11
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->parseHeader()V
.line 12
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 13
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->headerScratchBytes:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-interface {v0, v2, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 14
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->state:I
goto :goto_0
.line 15
:cond_3
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->skipToNextSync(Lcom/google/android/exoplayer2/util/ParsableByteArray;)Z
move-result v0
if-eqz v0, :cond_0
const/4 v0, 0x4
.line 16
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
.line 17
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->state:I
goto :goto_0
:cond_4
return-void
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 1
.line 1
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->formatId:Ljava/lang/String;
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result p2
const/4 v0, 0x1
invoke-interface {p1, p2, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
.method public packetFinished()V
.locals 0
return-void
.end method
.method public packetStarted(JZ)V
.locals 0
.line 1
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->timeUs:J
return-void
.end method
.method public seek()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->state:I
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->bytesRead:I
.line 3
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DtsReader;->syncBytes:I
return-void
.end method
@@ -0,0 +1,351 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;
.super Ljava/lang/Object;
.source "DvbSubtitleReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# instance fields
.field private bytesToCheck:I
.field private final outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private sampleBytesWritten:I
.field private sampleTimeUs:J
.field private final subtitleInfos:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;",
">;"
}
.end annotation
.end field
.field private writingSample:Z
# direct methods
.method public constructor <init>(Ljava/util/List;)V
.locals 0
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;",
">;)V"
}
.end annotation
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->subtitleInfos:Ljava/util/List;
.line 3
invoke-interface {p1}, Ljava/util/List;->size()I
move-result p1
new-array p1, p1, [Lcom/google/android/exoplayer2/extractor/TrackOutput;
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
.method private checkNextByte(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Z
.locals 2
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
const/4 v1, 0x0
if-nez v0, :cond_0
return v1
.line 2
:cond_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p1
if-eq p1, p2, :cond_1
.line 3
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->writingSample:Z
.line 4
:cond_1
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->bytesToCheck:I
add-int/lit8 p1, p1, -0x1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->bytesToCheck:I
.line 5
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->writingSample:Z
return p1
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 6
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->writingSample:Z
if-eqz v0, :cond_3
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->bytesToCheck:I
const/4 v1, 0x2
if-ne v0, v1, :cond_0
const/16 v0, 0x20
invoke-direct {p0, p1, v0}, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->checkNextByte(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Z
move-result v0
if-nez v0, :cond_0
return-void
.line 3
:cond_0
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->bytesToCheck:I
const/4 v1, 0x0
const/4 v2, 0x1
if-ne v0, v2, :cond_1
invoke-direct {p0, p1, v1}, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->checkNextByte(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Z
move-result v0
if-nez v0, :cond_1
return-void
.line 4
:cond_1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v0
.line 5
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v2
.line 6
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
array-length v4, v3
:goto_0
if-ge v1, v4, :cond_2
aget-object v5, v3, v1
.line 7
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 8
invoke-interface {v5, p1, v2}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
add-int/lit8 v1, v1, 0x1
goto :goto_0
.line 9
:cond_2
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->sampleBytesWritten:I
add-int/2addr p1, v2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->sampleBytesWritten:I
:cond_3
return-void
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 10
const/4 v0, 0x0
.line 1
:goto_0
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
array-length v1, v1
if-ge v0, v1, :cond_0
.line 2
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->subtitleInfos:Ljava/util/List;
invoke-interface {v1, v0}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 4
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result v2
const/4 v3, 0x3
invoke-interface {p1, v2, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v2
.line 5
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v3
const/4 v5, 0x0
const/4 v6, -0x1
iget-object v4, v1, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;->initializationData:[B
.line 6
invoke-static {v4}, Ljava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
move-result-object v7
iget-object v8, v1, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;->language:Ljava/lang/String;
const/4 v9, 0x0
const-string v4, "application/dvbsubs"
.line 7
invoke-static/range {v3 .. v9}, Lcom/google/android/exoplayer2/Format;->createImageSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/List;Ljava/lang/String;Lcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object v1
invoke-interface {v2, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 8
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
aput-object v2, v1, v0
add-int/lit8 v0, v0, 0x1
goto :goto_0
:cond_0
return-void
.end method
.method public packetFinished()V
.locals 11
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->writingSample:Z
if-eqz v0, :cond_1
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
array-length v1, v0
const/4 v2, 0x0
move v3, v2
:goto_0
if-ge v3, v1, :cond_0
aget-object v4, v0, v3
.line 3
iget-wide v5, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->sampleTimeUs:J
const/4 v7, 0x1
iget v8, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->sampleBytesWritten:I
const/4 v9, 0x0
const/4 v10, 0x0
invoke-interface/range {v4 .. v10}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
add-int/lit8 v3, v3, 0x1
goto :goto_0
.line 4
:cond_0
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->writingSample:Z
:cond_1
return-void
.end method
.method public packetStarted(JZ)V
.locals 0
if-nez p3, :cond_0
return-void
:cond_0
const/4 p3, 0x1
.line 1
iput-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->writingSample:Z
.line 2
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->sampleTimeUs:J
const/4 p1, 0x0
.line 3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->sampleBytesWritten:I
const/4 p1, 0x2
.line 4
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->bytesToCheck:I
return-void
.end method
.method public seek()V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/DvbSubtitleReader;->writingSample:Z
return-void
.end method
@@ -0,0 +1,20 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
.super Ljava/lang/Object;
.source "ElementaryStreamReader.java"
# virtual methods
.method public abstract consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.end method
.method public abstract createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.end method
.method public abstract packetFinished()V
.end method
.method public abstract packetStarted(JZ)V
.end method
.method public abstract seek()V
.end method
@@ -0,0 +1,166 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
.super Ljava/lang/Object;
.source "H262Reader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/H262Reader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "CsdBuffer"
.end annotation
# instance fields
.field public data:[B
.field private isFilling:Z
.field public length:I
.field public sequenceExtensionPosition:I
# direct methods
.method public constructor <init>(I)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-array p1, p1, [B
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->data:[B
return-void
.end method
# virtual methods
.method public onData([BII)V
.locals 4
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->isFilling:Z
if-nez v0, :cond_0
return-void
:cond_0
sub-int/2addr p3, p2
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->data:[B
array-length v1, v0
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
add-int v3, v2, p3
if-ge v1, v3, :cond_1
add-int/2addr v2, p3
mul-int/lit8 v2, v2, 0x2
.line 3
invoke-static {v0, v2}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->data:[B
.line 4
:cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->data:[B
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
invoke-static {p1, p2, v0, v1, p3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 5
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
add-int/2addr p1, p3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
return-void
.end method
.method public onStartCode(II)Z
.locals 3
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->isFilling:Z
const/4 v1, 0x1
const/4 v2, 0x0
if-eqz v0, :cond_1
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->sequenceExtensionPosition:I
if-nez v0, :cond_0
const/16 v0, 0xb5
if-ne p1, v0, :cond_0
.line 3
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->sequenceExtensionPosition:I
goto :goto_0
.line 4
:cond_0
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
sub-int/2addr p1, p2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
.line 5
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->isFilling:Z
return v1
:cond_1
const/16 p2, 0xb3
if-ne p1, p2, :cond_2
.line 6
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->isFilling:Z
:cond_2
:goto_0
return v2
.end method
.method public reset()V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->isFilling:Z
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
.line 3
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->sequenceExtensionPosition:I
return-void
.end method
@@ -0,0 +1,686 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/H262Reader;
.super Ljava/lang/Object;
.source "H262Reader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
}
.end annotation
# static fields
.field private static final FRAME_RATE_VALUES:[D
.field private static final START_EXTENSION:I = 0xb5
.field private static final START_GROUP:I = 0xb8
.field private static final START_PICTURE:I = 0x0
.field private static final START_SEQUENCE_HEADER:I = 0xb3
# instance fields
.field private final csdBuffer:Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
.field private formatId:Ljava/lang/String;
.field private foundFirstFrameInGroup:Z
.field private frameDurationUs:J
.field private framePosition:J
.field private frameTimeUs:J
.field private hasOutputFormat:Z
.field private isKeyframe:Z
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private pesPtsUsAvailable:Z
.field private pesTimeUs:J
.field private final prefixFlags:[Z
.field private totalBytesWritten:J
# direct methods
.method public static constructor <clinit>()V
.locals 1
const/16 v0, 0x8
new-array v0, v0, [D
.line 1
fill-array-data v0, :array_0
sput-object v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->FRAME_RATE_VALUES:[D
return-void
:array_0
.array-data 8
0x4037f9dcb5112287L # 23.976023976023978
0x4038000000000000L # 24.0
0x4039000000000000L # 25.0
0x403df853e2556b28L # 29.97002997002997
0x403e000000000000L # 30.0
0x4049000000000000L # 50.0
0x404df853e2556b28L # 59.94005994005994
0x404e000000000000L # 60.0
.end array-data
.end method
.method public constructor <init>()V
.locals 2
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, 0x4
new-array v0, v0, [Z
.line 2
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->prefixFlags:[Z
.line 3
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
const/16 v1, 0x80
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->csdBuffer:Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
return-void
.end method
.method private static parseCsdBuffer(Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;Ljava/lang/String;)Landroid/util/Pair;
.locals 20
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;",
"Ljava/lang/String;",
")",
"Landroid/util/Pair<",
"Lcom/google/android/exoplayer2/Format;",
"Ljava/lang/Long;",
">;"
}
.end annotation
move-object/from16 v0, p0
.line 1
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->data:[B
iget v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->length:I
invoke-static {v1, v2}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v1
const/4 v2, 0x4
.line 2
aget-byte v3, v1, v2
and-int/lit16 v3, v3, 0xff
const/4 v4, 0x5
.line 3
aget-byte v5, v1, v4
and-int/lit16 v5, v5, 0xff
const/4 v6, 0x6
.line 4
aget-byte v6, v1, v6
and-int/lit16 v6, v6, 0xff
shl-int/2addr v3, v2
shr-int/lit8 v7, v5, 0x4
or-int v13, v3, v7
and-int/lit8 v3, v5, 0xf
shl-int/lit8 v3, v3, 0x8
or-int v14, v3, v6
const/4 v3, 0x7
.line 5
aget-byte v5, v1, v3
and-int/lit16 v5, v5, 0xf0
shr-int/2addr v5, v2
const/4 v6, 0x2
if-eq v5, v6, :cond_2
const/4 v6, 0x3
if-eq v5, v6, :cond_1
if-eq v5, v2, :cond_0
const/high16 v2, 0x3f800000 # 1.0f
:goto_0
move/from16 v18, v2
goto :goto_2
:cond_0
mul-int/lit8 v2, v14, 0x79
int-to-float v2, v2
mul-int/lit8 v5, v13, 0x64
goto :goto_1
:cond_1
mul-int/lit8 v2, v14, 0x10
int-to-float v2, v2
mul-int/lit8 v5, v13, 0x9
goto :goto_1
:cond_2
mul-int/lit8 v2, v14, 0x4
int-to-float v2, v2
mul-int/lit8 v5, v13, 0x3
:goto_1
int-to-float v5, v5
div-float/2addr v2, v5
goto :goto_0
:goto_2
const/4 v10, 0x0
const/4 v11, -0x1
const/4 v12, -0x1
const/high16 v15, -0x40800000 # -1.0f
.line 6
invoke-static {v1}, Ljava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
move-result-object v16
const/16 v17, -0x1
const/16 v19, 0x0
const-string v9, "video/mpeg2"
move-object/from16 v8, p1
.line 7
invoke-static/range {v8 .. v19}, Lcom/google/android/exoplayer2/Format;->createVideoSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIFLjava/util/List;IFLcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object v2
const-wide/16 v5, 0x0
.line 8
aget-byte v3, v1, v3
and-int/lit8 v3, v3, 0xf
add-int/lit8 v3, v3, -0x1
if-ltz v3, :cond_4
.line 9
sget-object v7, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->FRAME_RATE_VALUES:[D
array-length v8, v7
if-ge v3, v8, :cond_4
.line 10
aget-wide v5, v7, v3
.line 11
iget v0, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->sequenceExtensionPosition:I
add-int/lit8 v0, v0, 0x9
.line 12
aget-byte v3, v1, v0
and-int/lit8 v3, v3, 0x60
shr-int/2addr v3, v4
.line 13
aget-byte v0, v1, v0
and-int/lit8 v0, v0, 0x1f
if-eq v3, v0, :cond_3
int-to-double v3, v3
const-wide/high16 v7, 0x3ff0000000000000L # 1.0
add-double/2addr v3, v7
add-int/lit8 v0, v0, 0x1
int-to-double v0, v0
div-double/2addr v3, v0
mul-double/2addr v5, v3
:cond_3
const-wide v0, 0x412e848000000000L # 1000000.0
div-double/2addr v0, v5
double-to-long v5, v0
.line 14
:cond_4
invoke-static {v5, v6}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v0
invoke-static {v2, v0}, Landroid/util/Pair;->create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;
move-result-object v0
return-object v0
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 20
move-object/from16 v0, p0
move-object/from16 v1, p1
.line 1
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v2
.line 2
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v3
.line 3
iget-object v4, v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 4
iget-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->totalBytesWritten:J
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v7
int-to-long v7, v7
add-long/2addr v5, v7
iput-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->totalBytesWritten:J
.line 5
iget-object v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v6
invoke-interface {v5, v1, v6}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
move v5, v2
.line 6
:goto_0
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->prefixFlags:[Z
invoke-static {v4, v2, v3, v6}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->findNalUnit([BII[Z)I
move-result v2
if-ne v2, v3, :cond_1
.line 7
iget-boolean v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->hasOutputFormat:Z
if-nez v1, :cond_0
.line 8
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->csdBuffer:Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
invoke-virtual {v1, v4, v5, v3}, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->onData([BII)V
:cond_0
return-void
.line 9
:cond_1
iget-object v6, v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
add-int/lit8 v7, v2, 0x3
aget-byte v6, v6, v7
and-int/lit16 v6, v6, 0xff
.line 10
iget-boolean v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->hasOutputFormat:Z
const/4 v9, 0x1
const/4 v10, 0x0
if-nez v8, :cond_4
sub-int v8, v2, v5
if-lez v8, :cond_2
.line 11
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->csdBuffer:Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
invoke-virtual {v11, v4, v5, v2}, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->onData([BII)V
:cond_2
if-gez v8, :cond_3
neg-int v5, v8
goto :goto_1
:cond_3
move v5, v10
.line 12
:goto_1
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->csdBuffer:Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
invoke-virtual {v8, v6, v5}, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->onStartCode(II)Z
move-result v5
if-eqz v5, :cond_4
.line 13
iget-object v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->csdBuffer:Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->formatId:Ljava/lang/String;
invoke-static {v5, v8}, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->parseCsdBuffer(Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;Ljava/lang/String;)Landroid/util/Pair;
move-result-object v5
.line 14
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v11, v5, Landroid/util/Pair;->first:Ljava/lang/Object;
check-cast v11, Lcom/google/android/exoplayer2/Format;
invoke-interface {v8, v11}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 15
iget-object v5, v5, Landroid/util/Pair;->second:Ljava/lang/Object;
check-cast v5, Ljava/lang/Long;
invoke-virtual {v5}, Ljava/lang/Long;->longValue()J
move-result-wide v11
iput-wide v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->frameDurationUs:J
.line 16
iput-boolean v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->hasOutputFormat:Z
.line 17
:cond_4
iget-boolean v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->hasOutputFormat:Z
if-eqz v5, :cond_9
const/16 v5, 0xb8
if-eq v6, v5, :cond_5
if-nez v6, :cond_9
:cond_5
sub-int v8, v3, v2
.line 18
iget-boolean v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->foundFirstFrameInGroup:Z
if-eqz v11, :cond_6
.line 19
iget-boolean v14, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->isKeyframe:Z
.line 20
iget-wide v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->totalBytesWritten:J
move/from16 v18, v6
iget-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->framePosition:J
sub-long/2addr v11, v5
long-to-int v5, v11
sub-int v15, v5, v8
.line 21
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v12, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->frameTimeUs:J
const/16 v17, 0x0
move/from16 v16, v8
invoke-interface/range {v11 .. v17}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
.line 22
iput-boolean v10, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->isKeyframe:Z
move/from16 v5, v18
const/16 v6, 0xb8
goto :goto_2
:cond_6
move/from16 v19, v6
move v6, v5
move/from16 v5, v19
:goto_2
if-ne v5, v6, :cond_7
.line 23
iput-boolean v10, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->foundFirstFrameInGroup:Z
.line 24
iput-boolean v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->isKeyframe:Z
goto :goto_4
.line 25
:cond_7
iget-boolean v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->pesPtsUsAvailable:Z
if-eqz v5, :cond_8
iget-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->pesTimeUs:J
goto :goto_3
:cond_8
iget-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->frameTimeUs:J
iget-wide v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->frameDurationUs:J
add-long/2addr v5, v11
:goto_3
iput-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->frameTimeUs:J
.line 26
iget-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->totalBytesWritten:J
int-to-long v11, v8
sub-long/2addr v5, v11
iput-wide v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->framePosition:J
.line 27
iput-boolean v10, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->pesPtsUsAvailable:Z
.line 28
iput-boolean v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->foundFirstFrameInGroup:Z
:cond_9
:goto_4
move v5, v2
move v2, v7
goto/16 :goto_0
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 1
.line 1
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->formatId:Ljava/lang/String;
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result p2
const/4 v0, 0x2
invoke-interface {p1, p2, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
.method public packetFinished()V
.locals 0
return-void
.end method
.method public packetStarted(JZ)V
.locals 2
const-wide v0, -0x7fffffffffffffffL # -4.9E-324
cmp-long p3, p1, v0
if-eqz p3, :cond_0
const/4 p3, 0x1
goto :goto_0
:cond_0
const/4 p3, 0x0
.line 1
:goto_0
iput-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->pesPtsUsAvailable:Z
if-eqz p3, :cond_1
.line 2
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->pesTimeUs:J
:cond_1
return-void
.end method
.method public seek()V
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->prefixFlags:[Z
invoke-static {v0}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->clearPrefixFlags([Z)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->csdBuffer:Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/H262Reader$CsdBuffer;->reset()V
const/4 v0, 0x0
.line 3
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->pesPtsUsAvailable:Z
.line 4
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->foundFirstFrameInGroup:Z
const-wide/16 v0, 0x0
.line 5
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;->totalBytesWritten:J
return-void
.end method
@@ -0,0 +1,14 @@
.class synthetic Lcom/google/android/exoplayer2/extractor/ts/H264Reader$1;
.super Ljava/lang/Object;
.source "H264Reader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/H264Reader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1009
name = null
.end annotation
@@ -0,0 +1,331 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.super Ljava/lang/Object;
.source "H264Reader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "SliceHeaderData"
.end annotation
# static fields
.field private static final SLICE_TYPE_ALL_I:I = 0x7
.field private static final SLICE_TYPE_I:I = 0x2
# instance fields
.field private bottomFieldFlag:Z
.field private bottomFieldFlagPresent:Z
.field private deltaPicOrderCnt0:I
.field private deltaPicOrderCnt1:I
.field private deltaPicOrderCntBottom:I
.field private fieldPicFlag:Z
.field private frameNum:I
.field private hasSliceType:Z
.field private idrPicFlag:Z
.field private idrPicId:I
.field private isComplete:Z
.field private nalRefIdc:I
.field private picOrderCntLsb:I
.field private picParameterSetId:I
.field private sliceType:I
.field private spsData:Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
# direct methods
.method private constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public synthetic constructor <init>(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$1;)V
.locals 0
.line 2
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;-><init>()V
return-void
.end method
.method public static synthetic access$100(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;)Z
.locals 0
.line 1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->isFirstVclNalUnitOfPicture(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;)Z
move-result p0
return p0
.end method
.method private isFirstVclNalUnitOfPicture(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;)Z
.locals 4
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->isComplete:Z
const/4 v1, 0x1
if-eqz v0, :cond_4
iget-boolean v0, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->isComplete:Z
if-eqz v0, :cond_5
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->frameNum:I
iget v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->frameNum:I
if-ne v0, v2, :cond_5
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->picParameterSetId:I
iget v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->picParameterSetId:I
if-ne v0, v2, :cond_5
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->fieldPicFlag:Z
iget-boolean v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->fieldPicFlag:Z
if-ne v0, v2, :cond_5
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->bottomFieldFlagPresent:Z
if-eqz v0, :cond_0
iget-boolean v0, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->bottomFieldFlagPresent:Z
if-eqz v0, :cond_0
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->bottomFieldFlag:Z
iget-boolean v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->bottomFieldFlag:Z
if-ne v0, v2, :cond_5
:cond_0
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->nalRefIdc:I
iget v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->nalRefIdc:I
if-eq v0, v2, :cond_1
if-eqz v0, :cond_5
if-eqz v2, :cond_5
:cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->spsData:Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
iget v0, v0, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCountType:I
if-nez v0, :cond_2
iget-object v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->spsData:Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
iget v2, v2, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCountType:I
if-nez v2, :cond_2
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->picOrderCntLsb:I
iget v3, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->picOrderCntLsb:I
if-ne v2, v3, :cond_5
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCntBottom:I
iget v3, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCntBottom:I
if-ne v2, v3, :cond_5
:cond_2
if-ne v0, v1, :cond_3
iget-object v0, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->spsData:Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
iget v0, v0, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCountType:I
if-ne v0, v1, :cond_3
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCnt0:I
iget v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCnt0:I
if-ne v0, v2, :cond_5
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCnt1:I
iget v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCnt1:I
if-ne v0, v2, :cond_5
:cond_3
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->idrPicFlag:Z
iget-boolean v2, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->idrPicFlag:Z
if-ne v0, v2, :cond_5
if-eqz v0, :cond_4
if-eqz v2, :cond_4
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->idrPicId:I
iget p1, p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->idrPicId:I
if-eq v0, p1, :cond_4
goto :goto_0
:cond_4
const/4 v1, 0x0
:cond_5
:goto_0
return v1
.end method
# virtual methods
.method public clear()V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->hasSliceType:Z
.line 2
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->isComplete:Z
return-void
.end method
.method public isISlice()Z
.locals 2
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->hasSliceType:Z
if-eqz v0, :cond_1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->sliceType:I
const/4 v1, 0x7
if-eq v0, v1, :cond_0
const/4 v1, 0x2
if-ne v0, v1, :cond_1
:cond_0
const/4 v0, 0x1
goto :goto_0
:cond_1
const/4 v0, 0x0
:goto_0
return v0
.end method
.method public setAll(Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;IIIIZZZZIIIII)V
.locals 0
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->spsData:Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
.line 2
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->nalRefIdc:I
.line 3
iput p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->sliceType:I
.line 4
iput p4, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->frameNum:I
.line 5
iput p5, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->picParameterSetId:I
.line 6
iput-boolean p6, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->fieldPicFlag:Z
.line 7
iput-boolean p7, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->bottomFieldFlagPresent:Z
.line 8
iput-boolean p8, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->bottomFieldFlag:Z
.line 9
iput-boolean p9, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->idrPicFlag:Z
.line 10
iput p10, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->idrPicId:I
.line 11
iput p11, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->picOrderCntLsb:I
.line 12
iput p12, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCntBottom:I
.line 13
iput p13, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCnt0:I
.line 14
iput p14, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->deltaPicOrderCnt1:I
const/4 p1, 0x1
.line 15
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->isComplete:Z
.line 16
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->hasSliceType:Z
return-void
.end method
.method public setSliceType(I)V
.locals 0
.line 1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->sliceType:I
const/4 p1, 0x1
.line 2
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->hasSliceType:Z
return-void
.end method
@@ -0,0 +1,936 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
.super Ljava/lang/Object;
.source "H264Reader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/H264Reader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "SampleReader"
.end annotation
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
}
.end annotation
# static fields
.field private static final DEFAULT_BUFFER_SIZE:I = 0x80
.field private static final NAL_UNIT_TYPE_AUD:I = 0x9
.field private static final NAL_UNIT_TYPE_IDR:I = 0x5
.field private static final NAL_UNIT_TYPE_NON_IDR:I = 0x1
.field private static final NAL_UNIT_TYPE_PARTITION_A:I = 0x2
# instance fields
.field private final allowNonIdrKeyframes:Z
.field private final bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
.field private buffer:[B
.field private bufferLength:I
.field private final detectAccessUnits:Z
.field private isFilling:Z
.field private nalUnitStartPosition:J
.field private nalUnitTimeUs:J
.field private nalUnitType:I
.field private final output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private final pps:Landroid/util/SparseArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;",
">;"
}
.end annotation
.end field
.field private previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.field private readingSample:Z
.field private sampleIsKeyframe:Z
.field private samplePosition:J
.field private sampleTimeUs:J
.field private sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.field private final sps:Landroid/util/SparseArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;",
">;"
}
.end annotation
.end field
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;ZZ)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 3
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->allowNonIdrKeyframes:Z
.line 4
iput-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
.line 5
new-instance p1, Landroid/util/SparseArray;
invoke-direct {p1}, Landroid/util/SparseArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sps:Landroid/util/SparseArray;
.line 6
new-instance p1, Landroid/util/SparseArray;
invoke-direct {p1}, Landroid/util/SparseArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->pps:Landroid/util/SparseArray;
.line 7
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
const/4 p2, 0x0
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;-><init>(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$1;)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 8
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;-><init>(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$1;)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
const/16 p1, 0x80
new-array p1, p1, [B
.line 9
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
.line 10
new-instance p2, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
const/4 p3, 0x0
invoke-direct {p2, p1, p3, p3}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;-><init>([BII)V
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
.line 11
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->reset()V
return-void
.end method
.method private outputSample(I)V
.locals 7
.line 1
iget-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleIsKeyframe:Z
.line 2
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitStartPosition:J
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->samplePosition:J
sub-long/2addr v0, v4
long-to-int v4, v0
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleTimeUs:J
const/4 v6, 0x0
move v5, p1
invoke-interface/range {v0 .. v6}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
return-void
.end method
# virtual methods
.method public appendToNalUnit([BII)V
.locals 23
move-object/from16 v0, p0
move/from16 v1, p2
.line 1
iget-boolean v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
if-nez v2, :cond_0
return-void
:cond_0
sub-int v2, p3, v1
.line 2
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
array-length v4, v3
iget v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
add-int v6, v5, v2
const/4 v7, 0x2
if-ge v4, v6, :cond_1
add-int/2addr v5, v2
mul-int/2addr v5, v7
.line 3
invoke-static {v3, v5}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v3
iput-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
.line 4
:cond_1
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
iget v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
move-object/from16 v5, p1
invoke-static {v5, v1, v3, v4, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 5
iget v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
add-int/2addr v1, v2
iput v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
.line 6
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
const/4 v4, 0x0
invoke-virtual {v2, v3, v4, v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->reset([BII)V
.line 7
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
const/16 v2, 0x8
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v1
if-nez v1, :cond_2
return-void
.line 8
:cond_2
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->skipBit()V
.line 9
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1, v7}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBits(I)I
move-result v10
.line 10
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
const/4 v2, 0x5
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->skipBits(I)V
.line 11
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v1
if-nez v1, :cond_3
return-void
.line 12
:cond_3
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readUnsignedExpGolombCodedInt()I
.line 13
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v1
if-nez v1, :cond_4
return-void
.line 14
:cond_4
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readUnsignedExpGolombCodedInt()I
move-result v11
.line 15
iget-boolean v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
if-nez v1, :cond_5
.line 16
iput-boolean v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
.line 17
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
invoke-virtual {v1, v11}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->setSliceType(I)V
return-void
.line 18
:cond_5
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v1
if-nez v1, :cond_6
return-void
.line 19
:cond_6
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readUnsignedExpGolombCodedInt()I
move-result v13
.line 20
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->pps:Landroid/util/SparseArray;
invoke-virtual {v1, v13}, Landroid/util/SparseArray;->indexOfKey(I)I
move-result v1
if-gez v1, :cond_7
.line 21
iput-boolean v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
return-void
.line 22
:cond_7
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->pps:Landroid/util/SparseArray;
invoke-virtual {v1, v13}, Landroid/util/SparseArray;->get(I)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;
.line 23
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sps:Landroid/util/SparseArray;
iget v5, v1, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;->seqParameterSetId:I
invoke-virtual {v3, v5}, Landroid/util/SparseArray;->get(I)Ljava/lang/Object;
move-result-object v3
move-object v9, v3
check-cast v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
.line 24
iget-boolean v3, v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->separateColorPlaneFlag:Z
if-eqz v3, :cond_9
.line 25
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v3, v7}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v3
if-nez v3, :cond_8
return-void
.line 26
:cond_8
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v3, v7}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->skipBits(I)V
.line 27
:cond_9
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget v5, v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->frameNumLength:I
invoke-virtual {v3, v5}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v3
if-nez v3, :cond_a
return-void
.line 28
:cond_a
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget v5, v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->frameNumLength:I
invoke-virtual {v3, v5}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBits(I)I
move-result v12
.line 29
iget-boolean v3, v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->frameMbsOnlyFlag:Z
const/4 v5, 0x1
if-nez v3, :cond_e
.line 30
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v3, v5}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v3
if-nez v3, :cond_b
return-void
.line 31
:cond_b
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBit()Z
move-result v3
if-eqz v3, :cond_d
.line 32
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v6, v5}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v6
if-nez v6, :cond_c
return-void
.line 33
:cond_c
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v6}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBit()Z
move-result v6
move v14, v3
move v15, v5
move/from16 v16, v6
goto :goto_1
:cond_d
move v14, v3
move v15, v4
goto :goto_0
:cond_e
move v14, v4
move v15, v14
:goto_0
move/from16 v16, v15
.line 34
:goto_1
iget v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
if-ne v3, v2, :cond_f
move/from16 v17, v5
goto :goto_2
:cond_f
move/from16 v17, v4
:goto_2
if-eqz v17, :cond_11
.line 35
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v2
if-nez v2, :cond_10
return-void
.line 36
:cond_10
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readUnsignedExpGolombCodedInt()I
move-result v2
move/from16 v18, v2
goto :goto_3
:cond_11
move/from16 v18, v4
.line 37
:goto_3
iget v2, v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCountType:I
if-nez v2, :cond_15
.line 38
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget v3, v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCntLsbLength:I
invoke-virtual {v2, v3}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v2
if-nez v2, :cond_12
return-void
.line 39
:cond_12
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget v3, v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCntLsbLength:I
invoke-virtual {v2, v3}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBits(I)I
move-result v2
.line 40
iget-boolean v1, v1, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;->bottomFieldPicOrderInFramePresentFlag:Z
if-eqz v1, :cond_14
if-nez v14, :cond_14
.line 41
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v1
if-nez v1, :cond_13
return-void
.line 42
:cond_13
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readSignedExpGolombCodedInt()I
move-result v1
move/from16 v20, v1
move/from16 v19, v2
move/from16 v21, v4
goto :goto_5
:cond_14
move/from16 v19, v2
move/from16 v20, v4
goto :goto_4
:cond_15
if-ne v2, v5, :cond_19
.line 43
iget-boolean v2, v9, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->deltaPicOrderAlwaysZeroFlag:Z
if-nez v2, :cond_19
.line 44
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v2
if-nez v2, :cond_16
return-void
.line 45
:cond_16
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readSignedExpGolombCodedInt()I
move-result v2
.line 46
iget-boolean v1, v1, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;->bottomFieldPicOrderInFramePresentFlag:Z
if-eqz v1, :cond_18
if-nez v14, :cond_18
.line 47
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v1
if-nez v1, :cond_17
return-void
.line 48
:cond_17
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readSignedExpGolombCodedInt()I
move-result v1
move/from16 v22, v1
move/from16 v21, v2
move/from16 v19, v4
move/from16 v20, v19
goto :goto_6
:cond_18
move/from16 v21, v2
move/from16 v19, v4
move/from16 v20, v19
move/from16 v22, v20
goto :goto_6
:cond_19
move/from16 v19, v4
move/from16 v20, v19
:goto_4
move/from16 v21, v20
:goto_5
move/from16 v22, v21
.line 49
:goto_6
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
invoke-virtual/range {v8 .. v22}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->setAll(Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;IIIIZZZZIIIII)V
.line 50
iput-boolean v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
return-void
.end method
.method public endNalUnit(JI)V
.locals 5
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
const/4 v1, 0x0
const/4 v2, 0x1
const/16 v3, 0x9
if-eq v0, v3, :cond_0
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
if-eqz v0, :cond_2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 2
invoke-static {v0, v3}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->access$100(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;)Z
move-result v0
if-eqz v0, :cond_2
.line 3
:cond_0
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->readingSample:Z
if-eqz v0, :cond_1
.line 4
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitStartPosition:J
sub-long/2addr p1, v3
long-to-int p1, p1
add-int/2addr p3, p1
.line 5
invoke-direct {p0, p3}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->outputSample(I)V
.line 6
:cond_1
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitStartPosition:J
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->samplePosition:J
.line 7
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitTimeUs:J
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleTimeUs:J
.line 8
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleIsKeyframe:Z
.line 9
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->readingSample:Z
.line 10
:cond_2
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleIsKeyframe:Z
iget p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
const/4 p3, 0x5
if-eq p2, p3, :cond_3
iget-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->allowNonIdrKeyframes:Z
if-eqz p3, :cond_4
if-ne p2, v2, :cond_4
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 11
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->isISlice()Z
move-result p2
if-eqz p2, :cond_4
:cond_3
move v1, v2
:cond_4
or-int/2addr p1, v1
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleIsKeyframe:Z
return-void
.end method
.method public needsSpsPps()Z
.locals 1
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
return v0
.end method
.method public putPps(Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;)V
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->pps:Landroid/util/SparseArray;
iget v1, p1, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;->picParameterSetId:I
invoke-virtual {v0, v1, p1}, Landroid/util/SparseArray;->append(ILjava/lang/Object;)V
return-void
.end method
.method public putSps(Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;)V
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sps:Landroid/util/SparseArray;
iget v1, p1, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->seqParameterSetId:I
invoke-virtual {v0, v1, p1}, Landroid/util/SparseArray;->append(ILjava/lang/Object;)V
return-void
.end method
.method public reset()V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
.line 2
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->readingSample:Z
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->clear()V
return-void
.end method
.method public startNalUnit(JIJ)V
.locals 0
.line 1
iput p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
.line 2
iput-wide p4, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitTimeUs:J
.line 3
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitStartPosition:J
.line 4
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->allowNonIdrKeyframes:Z
const/4 p2, 0x1
if-eqz p1, :cond_0
if-eq p3, p2, :cond_1
:cond_0
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
if-eqz p1, :cond_2
const/4 p1, 0x5
if-eq p3, p1, :cond_1
if-eq p3, p2, :cond_1
const/4 p1, 0x2
if-ne p3, p1, :cond_2
.line 5
:cond_1
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 6
iget-object p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
iput-object p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 7
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 8
invoke-virtual {p1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->clear()V
const/4 p1, 0x0
.line 9
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
.line 10
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
:cond_2
return-void
.end method
@@ -0,0 +1,706 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/H264Reader;
.super Ljava/lang/Object;
.source "H264Reader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
}
.end annotation
# static fields
.field private static final NAL_UNIT_TYPE_PPS:I = 0x8
.field private static final NAL_UNIT_TYPE_SEI:I = 0x6
.field private static final NAL_UNIT_TYPE_SPS:I = 0x7
# instance fields
.field private final allowNonIdrKeyframes:Z
.field private final detectAccessUnits:Z
.field private formatId:Ljava/lang/String;
.field private hasOutputFormat:Z
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private pesTimeUs:J
.field private final pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
.field private final prefixFlags:[Z
.field private sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
.field private final sei:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
.field private final seiReader:Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
.field private final seiWrapper:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
.field private totalBytesWritten:J
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ts/SeiReader;ZZ)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->seiReader:Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
.line 3
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->allowNonIdrKeyframes:Z
.line 4
iput-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->detectAccessUnits:Z
const/4 p1, 0x3
new-array p1, p1, [Z
.line 5
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->prefixFlags:[Z
.line 6
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
const/4 p2, 0x7
const/16 p3, 0x80
invoke-direct {p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;-><init>(II)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
.line 7
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
const/16 p2, 0x8
invoke-direct {p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;-><init>(II)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
.line 8
new-instance p1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
const/4 p2, 0x6
invoke-direct {p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;-><init>(II)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sei:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
.line 9
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-direct {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->seiWrapper:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
.method private endNalUnit(JIIJ)V
.locals 17
move-object/from16 v0, p0
move/from16 v1, p4
.line 1
iget-boolean v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->hasOutputFormat:Z
if-eqz v2, :cond_0
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->needsSpsPps()Z
move-result v2
if-eqz v2, :cond_3
.line 2
:cond_0
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v2, v1}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->endNalUnit(I)Z
.line 3
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v2, v1}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->endNalUnit(I)Z
.line 4
iget-boolean v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->hasOutputFormat:Z
const/4 v3, 0x3
if-nez v2, :cond_1
.line 5
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isCompleted()Z
move-result v2
if-eqz v2, :cond_3
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v2}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isCompleted()Z
move-result v2
if-eqz v2, :cond_3
.line 6
new-instance v12, Ljava/util/ArrayList;
invoke-direct {v12}, Ljava/util/ArrayList;-><init>()V
.line 7
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
iget-object v4, v2, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
iget v2, v2, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
invoke-static {v4, v2}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v2
invoke-virtual {v12, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 8
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
iget-object v4, v2, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
iget v2, v2, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
invoke-static {v4, v2}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v2
invoke-virtual {v12, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 9
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
iget-object v4, v2, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
iget v2, v2, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
invoke-static {v4, v3, v2}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->parseSpsNalUnit([BII)Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
move-result-object v2
.line 10
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
iget-object v5, v4, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
iget v4, v4, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
invoke-static {v5, v3, v4}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->parsePpsNalUnit([BII)Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;
move-result-object v3
.line 11
iget-object v15, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->formatId:Ljava/lang/String;
const/4 v6, 0x0
const/4 v7, -0x1
const/4 v8, -0x1
iget v9, v2, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->width:I
iget v10, v2, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->height:I
const/high16 v11, -0x40800000 # -1.0f
const/4 v13, -0x1
iget v14, v2, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->pixelWidthAspectRatio:F
const/16 v16, 0x0
const-string v5, "video/avc"
move-object v1, v15
move-object/from16 v15, v16
invoke-static/range {v4 .. v15}, Lcom/google/android/exoplayer2/Format;->createVideoSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIFLjava/util/List;IFLcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object v4
invoke-interface {v1, v4}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
const/4 v1, 0x1
.line 12
iput-boolean v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->hasOutputFormat:Z
.line 13
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->putSps(Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;)V
.line 14
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->putPps(Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;)V
.line 15
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->reset()V
.line 16
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->reset()V
goto :goto_0
.line 17
:cond_1
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isCompleted()Z
move-result v1
if-eqz v1, :cond_2
.line 18
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
iget-object v2, v1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
iget v1, v1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
invoke-static {v2, v3, v1}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->parseSpsNalUnit([BII)Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
move-result-object v1
.line 19
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v2, v1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->putSps(Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;)V
.line 20
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->reset()V
goto :goto_0
.line 21
:cond_2
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isCompleted()Z
move-result v1
if-eqz v1, :cond_3
.line 22
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
iget-object v2, v1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
iget v1, v1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
invoke-static {v2, v3, v1}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->parsePpsNalUnit([BII)Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;
move-result-object v1
.line 23
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v2, v1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->putPps(Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;)V
.line 24
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->reset()V
.line 25
:cond_3
:goto_0
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sei:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
move/from16 v2, p4
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->endNalUnit(I)Z
move-result v1
if-eqz v1, :cond_4
.line 26
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sei:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
iget-object v2, v1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
iget v1, v1, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
invoke-static {v2, v1}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->unescapeStream([BI)I
move-result v1
.line 27
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->seiWrapper:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sei:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
iget-object v3, v3, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
invoke-virtual {v2, v3, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset([BI)V
.line 28
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->seiWrapper:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v2, 0x4
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 29
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->seiReader:Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->seiWrapper:Lcom/google/android/exoplayer2/util/ParsableByteArray;
move-wide/from16 v3, p5
invoke-virtual {v1, v3, v4, v2}, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;->consume(JLcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 30
:cond_4
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
move-wide/from16 v2, p1
move/from16 v4, p3
invoke-virtual {v1, v2, v3, v4}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->endNalUnit(JI)V
return-void
.end method
.method private nalUnitData([BII)V
.locals 1
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->hasOutputFormat:Z
if-eqz v0, :cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->needsSpsPps()Z
move-result v0
if-eqz v0, :cond_1
.line 2
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->appendToNalUnit([BII)V
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->appendToNalUnit([BII)V
.line 4
:cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sei:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->appendToNalUnit([BII)V
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->appendToNalUnit([BII)V
return-void
.end method
.method private startNalUnit(JIJ)V
.locals 7
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->hasOutputFormat:Z
if-eqz v0, :cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->needsSpsPps()Z
move-result v0
if-eqz v0, :cond_1
.line 2
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->startNalUnit(I)V
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->startNalUnit(I)V
.line 4
:cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sei:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0, p3}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->startNalUnit(I)V
.line 5
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
move-wide v2, p1
move v4, p3
move-wide v5, p4
invoke-virtual/range {v1 .. v6}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->startNalUnit(JIJ)V
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 14
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v0
.line 2
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v1
.line 3
iget-object v2, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 4
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->totalBytesWritten:J
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v5
int-to-long v5, v5
add-long/2addr v3, v5
iput-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->totalBytesWritten:J
.line 5
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v4
invoke-interface {v3, p1, v4}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 6
:goto_0
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->prefixFlags:[Z
invoke-static {v2, v0, v1, p1}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->findNalUnit([BII[Z)I
move-result p1
if-ne p1, v1, :cond_0
.line 7
invoke-direct {p0, v2, v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->nalUnitData([BII)V
return-void
.line 8
:cond_0
invoke-static {v2, p1}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->getNalUnitType([BI)I
move-result v6
sub-int v3, p1, v0
if-lez v3, :cond_1
.line 9
invoke-direct {p0, v2, v0, p1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->nalUnitData([BII)V
:cond_1
sub-int v10, v1, p1
.line 10
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->totalBytesWritten:J
int-to-long v7, v10
sub-long/2addr v4, v7
if-gez v3, :cond_2
neg-int v0, v3
goto :goto_1
:cond_2
const/4 v0, 0x0
:goto_1
move v11, v0
.line 11
iget-wide v12, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pesTimeUs:J
move-object v7, p0
move-wide v8, v4
invoke-direct/range {v7 .. v13}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->endNalUnit(JIIJ)V
.line 12
iget-wide v7, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pesTimeUs:J
move-object v3, p0
invoke-direct/range {v3 .. v8}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->startNalUnit(JIJ)V
add-int/lit8 v0, p1, 0x3
goto :goto_0
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 4
.line 1
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->formatId:Ljava/lang/String;
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result v0
const/4 v1, 0x2
invoke-interface {p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 4
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
iget-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->allowNonIdrKeyframes:Z
iget-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->detectAccessUnits:Z
invoke-direct {v1, v0, v2, v3}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;-><init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;ZZ)V
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->seiReader:Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;->createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
return-void
.end method
.method public packetFinished()V
.locals 0
return-void
.end method
.method public packetStarted(JZ)V
.locals 0
.line 1
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pesTimeUs:J
return-void
.end method
.method public seek()V
.locals 2
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->prefixFlags:[Z
invoke-static {v0}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->clearPrefixFlags([Z)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->reset()V
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->pps:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->reset()V
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sei:Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->reset()V
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->sampleReader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->reset()V
const-wide/16 v0, 0x0
.line 6
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader;->totalBytesWritten:J
return-void
.end method
@@ -0,0 +1,338 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;
.super Ljava/lang/Object;
.source "H265Reader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/H265Reader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "SampleReader"
.end annotation
# static fields
.field private static final FIRST_SLICE_FLAG_OFFSET:I = 0x2
# instance fields
.field private isFirstParameterSet:Z
.field private isFirstSlice:Z
.field private lookingForFirstSliceFlag:Z
.field private nalUnitBytesRead:I
.field private nalUnitHasKeyframeData:Z
.field private nalUnitStartPosition:J
.field private nalUnitTimeUs:J
.field private final output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private readingSample:Z
.field private sampleIsKeyframe:Z
.field private samplePosition:J
.field private sampleTimeUs:J
.field private writingParameterSets:Z
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
.method private outputSample(I)V
.locals 7
.line 1
iget-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->sampleIsKeyframe:Z
.line 2
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitStartPosition:J
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->samplePosition:J
sub-long/2addr v0, v4
long-to-int v4, v0
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->sampleTimeUs:J
const/4 v6, 0x0
move v5, p1
invoke-interface/range {v0 .. v6}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
return-void
.end method
# virtual methods
.method public endNalUnit(JI)V
.locals 2
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->writingParameterSets:Z
if-eqz v0, :cond_0
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstSlice:Z
if-eqz v0, :cond_0
.line 2
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitHasKeyframeData:Z
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->sampleIsKeyframe:Z
const/4 p1, 0x0
.line 3
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->writingParameterSets:Z
goto :goto_0
.line 4
:cond_0
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstParameterSet:Z
if-nez v0, :cond_1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstSlice:Z
if-eqz v0, :cond_3
.line 5
:cond_1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->readingSample:Z
if-eqz v0, :cond_2
.line 6
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitStartPosition:J
sub-long/2addr p1, v0
long-to-int p1, p1
add-int/2addr p3, p1
.line 7
invoke-direct {p0, p3}, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->outputSample(I)V
.line 8
:cond_2
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitStartPosition:J
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->samplePosition:J
.line 9
iget-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitTimeUs:J
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->sampleTimeUs:J
const/4 p1, 0x1
.line 10
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->readingSample:Z
.line 11
iget-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitHasKeyframeData:Z
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->sampleIsKeyframe:Z
:cond_3
:goto_0
return-void
.end method
.method public readNalUnitData([BII)V
.locals 2
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->lookingForFirstSliceFlag:Z
if-eqz v0, :cond_2
add-int/lit8 v0, p2, 0x2
.line 2
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitBytesRead:I
sub-int/2addr v0, v1
if-ge v0, p3, :cond_1
.line 3
aget-byte p1, p1, v0
and-int/lit16 p1, p1, 0x80
const/4 p2, 0x0
if-eqz p1, :cond_0
const/4 p1, 0x1
goto :goto_0
:cond_0
move p1, p2
:goto_0
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstSlice:Z
.line 4
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->lookingForFirstSliceFlag:Z
goto :goto_1
:cond_1
sub-int/2addr p3, p2
add-int/2addr p3, v1
.line 5
iput p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitBytesRead:I
:cond_2
:goto_1
return-void
.end method
.method public reset()V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->lookingForFirstSliceFlag:Z
.line 2
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstSlice:Z
.line 3
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstParameterSet:Z
.line 4
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->readingSample:Z
.line 5
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->writingParameterSets:Z
return-void
.end method
.method public startNalUnit(JIIJ)V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstSlice:Z
.line 2
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstParameterSet:Z
.line 3
iput-wide p5, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitTimeUs:J
.line 4
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitBytesRead:I
.line 5
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitStartPosition:J
const/4 p1, 0x1
const/16 p2, 0x20
if-lt p4, p2, :cond_1
.line 6
iget-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->writingParameterSets:Z
if-nez p2, :cond_0
iget-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->readingSample:Z
if-eqz p2, :cond_0
.line 7
invoke-direct {p0, p3}, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->outputSample(I)V
.line 8
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->readingSample:Z
:cond_0
const/16 p2, 0x22
if-gt p4, p2, :cond_1
.line 9
iget-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->writingParameterSets:Z
xor-int/2addr p2, p1
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->isFirstParameterSet:Z
.line 10
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->writingParameterSets:Z
:cond_1
const/16 p2, 0x10
if-lt p4, p2, :cond_2
const/16 p2, 0x15
if-gt p4, p2, :cond_2
move p2, p1
goto :goto_0
:cond_2
move p2, v0
.line 11
:goto_0
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->nalUnitHasKeyframeData:Z
if-nez p2, :cond_3
const/16 p2, 0x9
if-gt p4, p2, :cond_4
:cond_3
move v0, p1
.line 12
:cond_4
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H265Reader$SampleReader;->lookingForFirstSliceFlag:Z
return-void
.end method
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,323 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;
.super Ljava/lang/Object;
.source "Id3Reader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# static fields
.field private static final ID3_HEADER_SIZE:I = 0xa
.field private static final TAG:Ljava/lang/String; = "Id3Reader"
# instance fields
.field private final id3Header:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private sampleBytesRead:I
.field private sampleSize:I
.field private sampleTimeUs:J
.field private writingSample:Z
# direct methods
.method public constructor <init>()V
.locals 2
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0xa
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->id3Header:Lcom/google/android/exoplayer2/util/ParsableByteArray;
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 7
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->writingSample:Z
if-nez v0, :cond_0
return-void
.line 2
:cond_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
.line 3
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleBytesRead:I
const/16 v2, 0xa
if-ge v1, v2, :cond_3
rsub-int/lit8 v1, v1, 0xa
.line 4
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v1
.line 5
iget-object v3, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v4
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->id3Header: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/Id3Reader;->sampleBytesRead:I
invoke-static {v3, v4, v5, v6, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 6
iget v3, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleBytesRead:I
add-int/2addr v3, v1
if-ne v3, v2, :cond_3
.line 7
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->id3Header:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v3, 0x0
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
const/16 v1, 0x49
.line 8
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->id3Header:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
if-ne v1, v4, :cond_2
const/16 v1, 0x44
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->id3Header:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
if-ne v1, v4, :cond_2
const/16 v1, 0x33
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->id3Header:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 9
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
if-eq v1, v4, :cond_1
goto :goto_0
.line 10
:cond_1
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->id3Header:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v3, 0x3
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 11
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->id3Header:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readSynchSafeInt()I
move-result v1
add-int/2addr v1, v2
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleSize:I
goto :goto_1
:cond_2
:goto_0
const-string p1, "Id3Reader"
const-string v0, "Discarding invalid ID3 tag"
.line 12
invoke-static {p1, v0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
.line 13
iput-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->writingSample:Z
return-void
.line 14
:cond_3
:goto_1
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleSize:I
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleBytesRead:I
sub-int/2addr v1, v2
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
.line 15
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v1, p1, v0}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 16
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleBytesRead:I
add-int/2addr p1, v0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleBytesRead:I
return-void
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 3
.line 1
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result v0
const/4 v1, 0x4
invoke-interface {p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object p2
const-string v0, "application/id3"
const/4 v1, 0x0
const/4 v2, -0x1
invoke-static {p2, v0, v1, v2, v1}, Lcom/google/android/exoplayer2/Format;->createSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object p2
invoke-interface {p1, p2}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
return-void
.end method
.method public packetFinished()V
.locals 8
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->writingSample:Z
if-eqz v0, :cond_1
iget v5, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleSize:I
if-eqz v5, :cond_1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleBytesRead:I
if-eq v0, v5, :cond_0
goto :goto_0
.line 2
:cond_0
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleTimeUs:J
const/4 v4, 0x1
const/4 v6, 0x0
const/4 v7, 0x0
invoke-interface/range {v1 .. v7}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
const/4 v0, 0x0
.line 3
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->writingSample:Z
:cond_1
:goto_0
return-void
.end method
.method public packetStarted(JZ)V
.locals 0
if-nez p3, :cond_0
return-void
:cond_0
const/4 p3, 0x1
.line 1
iput-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->writingSample:Z
.line 2
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleTimeUs:J
const/4 p1, 0x0
.line 3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleSize:I
.line 4
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->sampleBytesRead:I
return-void
.end method
.method public seek()V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/Id3Reader;->writingSample:Z
return-void
.end method
@@ -0,0 +1,543 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;
.super Ljava/lang/Object;
.source "MpegAudioReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
# static fields
.field private static final HEADER_SIZE:I = 0x4
.field private static final STATE_FINDING_HEADER:I = 0x0
.field private static final STATE_READING_FRAME:I = 0x2
.field private static final STATE_READING_HEADER:I = 0x1
# instance fields
.field private formatId:Ljava/lang/String;
.field private frameBytesRead:I
.field private frameDurationUs:J
.field private frameSize:I
.field private hasOutputFormat:Z
.field private final header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
.field private final headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final language:Ljava/lang/String;
.field private lastByteWasFF:Z
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private state:I
.field private timeUs:J
# direct methods
.method public constructor <init>()V
.locals 1
const/4 v0, 0x0
.line 1
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;-><init>(Ljava/lang/String;)V
return-void
.end method
.method public constructor <init>(Ljava/lang/String;)V
.locals 3
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, 0x0
.line 3
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
.line 4
new-instance v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v2, 0x4
invoke-direct {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 5
iget-object v1, v1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v2, -0x1
aput-byte v2, v1, v0
.line 6
new-instance v0, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
.line 7
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->language:Ljava/lang/String;
return-void
.end method
.method private findHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 8
.line 1
iget-object v0, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 2
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v1
.line 3
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result v2
:goto_0
if-ge v1, v2, :cond_3
.line 4
aget-byte v3, v0, v1
const/16 v4, 0xff
and-int/2addr v3, v4
const/4 v5, 0x0
const/4 v6, 0x1
if-ne v3, v4, :cond_0
move v3, v6
goto :goto_1
:cond_0
move v3, v5
.line 5
:goto_1
iget-boolean v4, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->lastByteWasFF:Z
if-eqz v4, :cond_1
aget-byte v4, v0, v1
const/16 v7, 0xe0
and-int/2addr v4, v7
if-ne v4, v7, :cond_1
move v4, v6
goto :goto_2
:cond_1
move v4, v5
.line 6
:goto_2
iput-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->lastByteWasFF:Z
if-eqz v4, :cond_2
add-int/lit8 v2, v1, 0x1
.line 7
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 8
iput-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->lastByteWasFF:Z
.line 9
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p1, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
aget-byte v0, v0, v1
aput-byte v0, p1, v6
const/4 p1, 0x2
.line 10
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 11
iput v6, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
return-void
:cond_2
add-int/lit8 v1, v1, 0x1
goto :goto_0
.line 12
:cond_3
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return-void
.end method
.method private readFrameRemainder(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 7
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameSize:I
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
sub-int/2addr v1, v2
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
.line 2
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v1, p1, v0}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 3
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
add-int/2addr p1, v0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 4
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameSize:I
if-ge p1, v4, :cond_0
return-void
.line 5
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->timeUs:J
const/4 v3, 0x1
const/4 v5, 0x0
const/4 v6, 0x0
invoke-interface/range {v0 .. v6}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
.line 6
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->timeUs:J
iget-wide v2, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameDurationUs:J
add-long/2addr v0, v2
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->timeUs:J
const/4 p1, 0x0
.line 7
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 8
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
return-void
.end method
.method private readHeaderRemainder(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 20
move-object/from16 v0, p0
.line 1
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v1
iget v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
const/4 v3, 0x4
rsub-int/lit8 v2, v2, 0x4
invoke-static {v1, v2}, Ljava/lang/Math;->min(II)I
move-result v1
.line 2
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v2, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
iget v4, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
move-object/from16 v5, p1
invoke-virtual {v5, v2, v4, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 3
iget v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
add-int/2addr v2, v1
iput v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
if-ge v2, v3, :cond_0
return-void
.line 4
:cond_0
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/4 v2, 0x0
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 5
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v1
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
invoke-static {v1, v4}, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->populateHeader(ILcom/google/android/exoplayer2/extractor/MpegAudioHeader;)Z
move-result v1
const/4 v4, 0x1
if-nez v1, :cond_1
.line 6
iput v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 7
iput v4, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
return-void
.line 8
:cond_1
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->header:Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;
iget v5, v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->frameSize:I
iput v5, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameSize:I
.line 9
iget-boolean v5, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->hasOutputFormat:Z
if-nez v5, :cond_2
const-wide/32 v5, 0xf4240
.line 10
iget v7, v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->samplesPerFrame:I
int-to-long v7, v7
mul-long/2addr v7, v5
iget v15, v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->sampleRate:I
int-to-long v5, v15
div-long/2addr v7, v5
iput-wide v7, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameDurationUs:J
.line 11
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->formatId:Ljava/lang/String;
iget-object v10, v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->mimeType:Ljava/lang/String;
const/4 v11, 0x0
const/4 v12, -0x1
const/16 v13, 0x1000
iget v14, v1, Lcom/google/android/exoplayer2/extractor/MpegAudioHeader;->channels:I
const/16 v16, 0x0
const/16 v17, 0x0
const/16 v18, 0x0
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->language:Ljava/lang/String;
move-object/from16 v19, v1
invoke-static/range {v9 .. v19}, Lcom/google/android/exoplayer2/Format;->createAudioSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIILjava/util/List;Lcom/google/android/exoplayer2/drm/DrmInitData;ILjava/lang/String;)Lcom/google/android/exoplayer2/Format;
move-result-object v1
.line 12
iget-object v5, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v5, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 13
iput-boolean v4, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->hasOutputFormat:Z
.line 14
:cond_2
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 15
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->headerScratch:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-interface {v1, v2, v3}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
const/4 v1, 0x2
.line 16
iput v1, v0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 2
.line 1
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
if-lez v0, :cond_3
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
if-eqz v0, :cond_2
const/4 v1, 0x1
if-eq v0, v1, :cond_1
const/4 v1, 0x2
if-eq v0, v1, :cond_0
goto :goto_0
.line 3
:cond_0
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->readFrameRemainder(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
goto :goto_0
.line 4
:cond_1
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->readHeaderRemainder(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
goto :goto_0
.line 5
:cond_2
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->findHeader(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
goto :goto_0
:cond_3
return-void
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 1
.line 1
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->formatId:Ljava/lang/String;
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result p2
const/4 v0, 0x1
invoke-interface {p1, p2, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
.method public packetFinished()V
.locals 0
return-void
.end method
.method public packetStarted(JZ)V
.locals 0
.line 1
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->timeUs:J
return-void
.end method
.method public seek()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->state:I
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->frameBytesRead:I
.line 3
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;->lastByteWasFF:Z
return-void
.end method
@@ -0,0 +1,193 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;
.super Ljava/lang/Object;
.source "NalUnitTargetBuffer.java"
# instance fields
.field private isCompleted:Z
.field private isFilling:Z
.field public nalData:[B
.field public nalLength:I
.field private final targetType:I
# direct methods
.method public constructor <init>(II)V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->targetType:I
add-int/lit8 p2, p2, 0x3
.line 3
new-array p1, p2, [B
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
const/4 p2, 0x2
const/4 v0, 0x1
.line 4
aput-byte v0, p1, p2
return-void
.end method
# virtual methods
.method public appendToNalUnit([BII)V
.locals 4
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isFilling:Z
if-nez v0, :cond_0
return-void
:cond_0
sub-int/2addr p3, p2
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
array-length v1, v0
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
add-int v3, v2, p3
if-ge v1, v3, :cond_1
add-int/2addr v2, p3
mul-int/lit8 v2, v2, 0x2
.line 3
invoke-static {v0, v2}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
.line 4
:cond_1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalData:[B
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
invoke-static {p1, p2, v0, v1, p3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 5
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
add-int/2addr p1, p3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
return-void
.end method
.method public endNalUnit(I)Z
.locals 2
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isFilling:Z
const/4 v1, 0x0
if-nez v0, :cond_0
return v1
.line 2
:cond_0
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
sub-int/2addr v0, p1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
.line 3
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isFilling:Z
const/4 p1, 0x1
.line 4
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isCompleted:Z
return p1
.end method
.method public isCompleted()Z
.locals 1
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isCompleted:Z
return v0
.end method
.method public reset()V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isFilling:Z
.line 2
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isCompleted:Z
return-void
.end method
.method public startNalUnit(I)V
.locals 3
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isFilling:Z
const/4 v1, 0x1
xor-int/2addr v0, v1
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->targetType:I
const/4 v2, 0x0
if-ne p1, v0, :cond_0
goto :goto_0
:cond_0
move v1, v2
:goto_0
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isFilling:Z
if-eqz v1, :cond_1
const/4 p1, 0x3
.line 3
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->nalLength:I
.line 4
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer;->isCompleted:Z
:cond_1
return-void
.end method
@@ -0,0 +1,732 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/PesReader;
.super Ljava/lang/Object;
.source "PesReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
# static fields
.field private static final HEADER_SIZE:I = 0x9
.field private static final MAX_HEADER_EXTENSION_SIZE:I = 0xa
.field private static final PES_SCRATCH_SIZE:I = 0xa
.field private static final STATE_FINDING_HEADER:I = 0x0
.field private static final STATE_READING_BODY:I = 0x3
.field private static final STATE_READING_HEADER:I = 0x1
.field private static final STATE_READING_HEADER_EXTENSION:I = 0x2
.field private static final TAG:Ljava/lang/String; = "PesReader"
# instance fields
.field private bytesRead:I
.field private dataAlignmentIndicator:Z
.field private dtsFlag:Z
.field private extendedHeaderLength:I
.field private payloadSize:I
.field private final pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.field private ptsFlag:Z
.field private final reader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
.field private seenFirstDts:Z
.field private state:I
.field private timeUs:J
.field private timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;)V
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
.line 3
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v0, 0xa
new-array v0, v0, [B
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;-><init>([B)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 p1, 0x0
.line 4
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->state:I
return-void
.end method
.method private continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
.locals 3
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->bytesRead:I
sub-int v1, p3, v1
invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I
move-result v0
const/4 v1, 0x1
if-gtz v0, :cond_0
return v1
:cond_0
if-nez p2, :cond_1
.line 2
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
goto :goto_0
.line 3
:cond_1
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->bytesRead:I
invoke-virtual {p1, p2, v2, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 4
:goto_0
iget p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->bytesRead:I
add-int/2addr p1, v0
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->bytesRead:I
if-ne p1, p3, :cond_2
goto :goto_1
:cond_2
const/4 v1, 0x0
:goto_1
return v1
.end method
.method private parseHeader()Z
.locals 6
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->setPosition(I)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v2, 0x18
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v0
const/4 v2, -0x1
const/4 v3, 0x1
if-eq v0, v3, :cond_0
const-string v3, "Unexpected start code prefix: "
const-string v4, "PesReader"
.line 3
invoke-static {v3, v0, v4}, Ld1/e;->a(Ljava/lang/String;ILjava/lang/String;)V
.line 4
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->payloadSize:I
return v1
.line 5
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v1, 0x8
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 6
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v4, 0x10
invoke-virtual {v0, v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v0
.line 7
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v5, 0x5
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 8
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z
move-result v4
iput-boolean v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->dataAlignmentIndicator:Z
.line 9
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v5, 0x2
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 10
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z
move-result v4
iput-boolean v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->ptsFlag:Z
.line 11
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z
move-result v4
iput-boolean v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->dtsFlag:Z
.line 12
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v5, 0x6
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 13
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v4, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->extendedHeaderLength:I
if-nez v0, :cond_1
.line 14
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->payloadSize:I
goto :goto_0
:cond_1
add-int/2addr v0, v5
add-int/lit8 v0, v0, -0x9
sub-int/2addr v0, v1
.line 15
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->payloadSize:I
:goto_0
return v3
.end method
.method private parseHeaderExtension()V
.locals 10
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v1, 0x0
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->setPosition(I)V
const-wide v0, -0x7fffffffffffffffL # -4.9E-324
.line 2
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->timeUs:J
.line 3
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->ptsFlag:Z
if-eqz v0, :cond_1
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v1, 0x4
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v2, 0x3
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v0
int-to-long v3, v0
const/16 v0, 0x1e
shl-long/2addr v3, v0
.line 6
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v6, 0x1
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 7
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v7, 0xf
invoke-virtual {v5, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v5
shl-int/2addr v5, v7
int-to-long v8, v5
or-long/2addr v3, v8
.line 8
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 9
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v5
int-to-long v8, v5
or-long/2addr v3, v8
.line 10
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 11
iget-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->seenFirstDts:Z
if-nez v5, :cond_0
iget-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->dtsFlag:Z
if-eqz v5, :cond_0
.line 12
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 13
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v1
int-to-long v1, v1
shl-long v0, v1, v0
.line 14
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 15
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v2
shl-int/2addr v2, v7
int-to-long v8, v2
or-long/2addr v0, v8
.line 16
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 17
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v2
int-to-long v7, v2
or-long/2addr v0, v7
.line 18
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 19
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {v2, v0, v1}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->adjustTsTimestamp(J)J
.line 20
iput-boolean v6, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->seenFirstDts:Z
.line 21
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {v0, v3, v4}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->adjustTsTimestamp(J)J
move-result-wide v0
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->timeUs:J
:cond_1
return-void
.end method
.method private setState(I)V
.locals 0
.line 1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->state:I
const/4 p1, 0x0
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->bytesRead:I
return-void
.end method
# virtual methods
.method public final consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;Z)V
.locals 7
const/4 v0, -0x1
const/4 v1, 0x1
const/4 v2, 0x3
const/4 v3, 0x2
if-eqz p2, :cond_3
.line 1
iget p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->state:I
const-string v4, "PesReader"
if-eq p2, v3, :cond_2
if-eq p2, v2, :cond_0
goto :goto_0
.line 2
:cond_0
iget p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->payloadSize:I
if-eq p2, v0, :cond_1
const-string p2, "Unexpected start indicator: expected "
.line 3
invoke-static {p2}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object p2
iget v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->payloadSize:I
invoke-virtual {p2, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v5, " more bytes"
invoke-virtual {p2, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p2
invoke-static {v4, p2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
.line 4
:cond_1
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
invoke-interface {p2}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->packetFinished()V
goto :goto_0
:cond_2
const-string p2, "Unexpected start indicator reading extended header"
.line 5
invoke-static {v4, p2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
.line 6
:goto_0
invoke-direct {p0, v1}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->setState(I)V
.line 7
:cond_3
:goto_1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
if-lez p2, :cond_b
.line 8
iget p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->state:I
if-eqz p2, :cond_a
const/4 v4, 0x0
if-eq p2, v1, :cond_8
if-eq p2, v3, :cond_7
if-eq p2, v2, :cond_4
goto :goto_1
.line 9
:cond_4
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
.line 10
iget v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->payloadSize:I
if-ne v5, v0, :cond_5
goto :goto_2
:cond_5
sub-int v4, p2, v5
:goto_2
if-lez v4, :cond_6
sub-int/2addr p2, v4
.line 11
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v4
add-int/2addr v4, p2
invoke-virtual {p1, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 12
:cond_6
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
invoke-interface {v4, p1}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 13
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->payloadSize:I
if-eq v4, v0, :cond_3
sub-int/2addr v4, p2
.line 14
iput v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->payloadSize:I
if-nez v4, :cond_3
.line 15
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
invoke-interface {p2}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->packetFinished()V
.line 16
invoke-direct {p0, v1}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->setState(I)V
goto :goto_1
:cond_7
const/16 p2, 0xa
.line 17
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->extendedHeaderLength:I
invoke-static {p2, v4}, Ljava/lang/Math;->min(II)I
move-result p2
.line 18
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
iget-object v4, v4, Lcom/google/android/exoplayer2/util/ParsableBitArray;->data:[B
invoke-direct {p0, p1, v4, p2}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
move-result p2
if-eqz p2, :cond_3
const/4 p2, 0x0
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->extendedHeaderLength:I
.line 19
invoke-direct {p0, p1, p2, v4}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
move-result p2
if-eqz p2, :cond_3
.line 20
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->parseHeaderExtension()V
.line 21
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->timeUs:J
iget-boolean v6, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->dataAlignmentIndicator:Z
invoke-interface {p2, v4, v5, v6}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->packetStarted(JZ)V
.line 22
invoke-direct {p0, v2}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->setState(I)V
goto :goto_1
.line 23
:cond_8
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableBitArray;->data:[B
const/16 v5, 0x9
invoke-direct {p0, p1, p2, v5}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->continueRead(Lcom/google/android/exoplayer2/util/ParsableByteArray;[BI)Z
move-result p2
if-eqz p2, :cond_3
.line 24
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->parseHeader()Z
move-result p2
if-eqz p2, :cond_9
move v4, v3
:cond_9
invoke-direct {p0, v4}, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->setState(I)V
goto/16 :goto_1
.line 25
:cond_a
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
goto/16 :goto_1
:cond_b
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
.locals 0
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.line 2
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
invoke-interface {p1, p2, p3}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
return-void
.end method
.method public final seek()V
.locals 1
const/4 v0, 0x0
.line 1
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->state:I
.line 2
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->bytesRead:I
.line 3
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->seenFirstDts:Z
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PesReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
invoke-interface {v0}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->seek()V
return-void
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$1;
.super Ljava/lang/Object;
.source "PsExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,354 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;
.super Ljava/lang/Object;
.source "PsExtractor.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "PesReader"
.end annotation
# static fields
.field private static final PES_SCRATCH_SIZE:I = 0x40
# instance fields
.field private dtsFlag:Z
.field private extendedHeaderLength:I
.field private final pesPayloadReader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
.field private final pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.field private ptsFlag:Z
.field private seenFirstDts:Z
.field private timeUs:J
.field private final timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;Lcom/google/android/exoplayer2/util/TimestampAdjuster;)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesPayloadReader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
.line 3
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.line 4
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 p2, 0x40
new-array p2, p2, [B
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;-><init>([B)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
return-void
.end method
.method private parseHeader()V
.locals 3
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v1, 0x8
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z
move-result v0
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->ptsFlag:Z
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBit()Z
move-result v0
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->dtsFlag:Z
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v2, 0x6
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->extendedHeaderLength:I
return-void
.end method
.method private parseHeaderExtension()V
.locals 10
const-wide/16 v0, 0x0
.line 1
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->timeUs:J
.line 2
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->ptsFlag:Z
if-eqz v0, :cond_1
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v1, 0x4
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v2, 0x3
invoke-virtual {v0, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v0
int-to-long v3, v0
const/16 v0, 0x1e
shl-long/2addr v3, v0
.line 5
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v6, 0x1
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 6
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v7, 0xf
invoke-virtual {v5, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v5
shl-int/2addr v5, v7
int-to-long v8, v5
or-long/2addr v3, v8
.line 7
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 8
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v5
int-to-long v8, v5
or-long/2addr v3, v8
.line 9
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 10
iget-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->seenFirstDts:Z
if-nez v5, :cond_0
iget-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->dtsFlag:Z
if-eqz v5, :cond_0
.line 11
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v5, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 12
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v1
int-to-long v1, v1
shl-long v0, v1, v0
.line 13
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 14
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v2
shl-int/2addr v2, v7
int-to-long v8, v2
or-long/2addr v0, v8
.line 15
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 16
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v7}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v2
int-to-long v7, v2
or-long/2addr v0, v7
.line 17
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v2, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 18
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {v2, v0, v1}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->adjustTsTimestamp(J)J
.line 19
iput-boolean v6, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->seenFirstDts:Z
.line 20
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {v0, v3, v4}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->adjustTsTimestamp(J)J
move-result-wide v0
iput-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->timeUs:J
:cond_1
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 4
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableBitArray;->data:[B
const/4 v1, 0x0
const/4 v2, 0x3
invoke-virtual {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->setPosition(I)V
.line 3
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->parseHeader()V
.line 4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableBitArray;->data:[B
iget v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->extendedHeaderLength:I
invoke-virtual {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->setPosition(I)V
.line 6
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->parseHeaderExtension()V
.line 7
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesPayloadReader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->timeUs:J
const/4 v3, 0x1
invoke-interface {v0, v1, v2, v3}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->packetStarted(JZ)V
.line 8
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesPayloadReader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
invoke-interface {v0, p1}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 9
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesPayloadReader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->packetFinished()V
return-void
.end method
.method public seek()V
.locals 1
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->seenFirstDts:Z
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->pesPayloadReader:Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;
invoke-interface {v0}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->seek()V
return-void
.end method
@@ -0,0 +1,686 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;
.super Ljava/lang/Object;
.source "PsExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/Extractor;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;
}
.end annotation
# static fields
.field public static final AUDIO_STREAM:I = 0xc0
.field public static final AUDIO_STREAM_MASK:I = 0xe0
.field public static final FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.field private static final MAX_SEARCH_LENGTH:J = 0x100000L
.field private static final MAX_STREAM_ID_PLUS_ONE:I = 0x100
.field private static final MPEG_PROGRAM_END_CODE:I = 0x1b9
.field private static final PACKET_START_CODE_PREFIX:I = 0x1
.field private static final PACK_START_CODE:I = 0x1ba
.field public static final PRIVATE_STREAM_1:I = 0xbd
.field private static final SYSTEM_HEADER_START_CODE:I = 0x1bb
.field public static final VIDEO_STREAM:I = 0xe0
.field public static final VIDEO_STREAM_MASK:I = 0xf0
# instance fields
.field private foundAllTracks:Z
.field private foundAudioTrack:Z
.field private foundVideoTrack:Z
.field private output:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.field private final psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final psPayloadReaders:Landroid/util/SparseArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;",
">;"
}
.end annotation
.end field
.field private final timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
# direct methods
.method public static constructor <clinit>()V
.locals 1
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$1;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$1;-><init>()V
sput-object v0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
return-void
.end method
.method public constructor <init>()V
.locals 3
.line 1
new-instance v0, Lcom/google/android/exoplayer2/util/TimestampAdjuster;
const-wide/16 v1, 0x0
invoke-direct {v0, v1, v2}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;-><init>(J)V
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;-><init>(Lcom/google/android/exoplayer2/util/TimestampAdjuster;)V
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/util/TimestampAdjuster;)V
.locals 1
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 3
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.line 4
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v0, 0x1000
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 5
new-instance p1, Landroid/util/SparseArray;
invoke-direct {p1}, Landroid/util/SparseArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPayloadReaders:Landroid/util/SparseArray;
return-void
.end method
# virtual methods
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.locals 3
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->output:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.line 2
new-instance v0, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;
const-wide v1, -0x7fffffffffffffffL # -4.9E-324
invoke-direct {v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;-><init>(J)V
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
return-void
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.locals 9
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v0, 0x0
const/4 v1, 0x4
const/4 v2, 0x1
invoke-interface {p1, p2, v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BIIZ)Z
move-result p2
const/4 v1, -0x1
if-nez p2, :cond_0
return v1
.line 2
:cond_0
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 3
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result p2
const/16 v3, 0x1b9
if-ne p2, v3, :cond_1
return v1
:cond_1
const/16 v1, 0x1ba
if-ne p2, v1, :cond_2
.line 4
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v1, 0xa
invoke-interface {p1, p2, v0, v1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 5
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 v1, 0x9
invoke-virtual {p2, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 6
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p2
and-int/lit8 p2, p2, 0x7
add-int/lit8 p2, p2, 0xe
.line 7
invoke-interface {p1, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
return v0
:cond_2
const/16 v1, 0x1bb
const/4 v3, 0x2
const/4 v4, 0x6
if-ne p2, v1, :cond_3
.line 8
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, p2, v0, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 9
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 10
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result p2
add-int/2addr p2, v4
.line 11
invoke-interface {p1, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
return v0
:cond_3
and-int/lit16 v1, p2, -0x100
shr-int/lit8 v1, v1, 0x8
if-eq v1, v2, :cond_4
.line 12
invoke-interface {p1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
return v0
:cond_4
and-int/lit16 p2, p2, 0xff
.line 13
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPayloadReaders:Landroid/util/SparseArray;
invoke-virtual {v1, p2}, Landroid/util/SparseArray;->get(I)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;
.line 14
iget-boolean v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundAllTracks:Z
if-nez v5, :cond_b
if-nez v1, :cond_8
const/4 v5, 0x0
.line 15
iget-boolean v6, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundAudioTrack:Z
if-nez v6, :cond_5
const/16 v7, 0xbd
if-ne p2, v7, :cond_5
.line 16
new-instance v5, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/ts/Ac3Reader;-><init>()V
.line 17
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundAudioTrack:Z
goto :goto_0
:cond_5
if-nez v6, :cond_6
and-int/lit16 v6, p2, 0xe0
const/16 v7, 0xc0
if-ne v6, v7, :cond_6
.line 18
new-instance v5, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/ts/MpegAudioReader;-><init>()V
.line 19
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundAudioTrack:Z
goto :goto_0
.line 20
:cond_6
iget-boolean v6, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundVideoTrack:Z
if-nez v6, :cond_7
and-int/lit16 v6, p2, 0xf0
const/16 v7, 0xe0
if-ne v6, v7, :cond_7
.line 21
new-instance v5, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;
invoke-direct {v5}, Lcom/google/android/exoplayer2/extractor/ts/H262Reader;-><init>()V
.line 22
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundVideoTrack:Z
:cond_7
:goto_0
if-eqz v5, :cond_8
.line 23
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;
const/16 v6, 0x100
invoke-direct {v1, p2, v6}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;-><init>(II)V
.line 24
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->output:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
invoke-interface {v5, v6, v1}, Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;->createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.line 25
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;
iget-object v6, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-direct {v1, v5, v6}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/ElementaryStreamReader;Lcom/google/android/exoplayer2/util/TimestampAdjuster;)V
.line 26
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPayloadReaders:Landroid/util/SparseArray;
invoke-virtual {v5, p2, v1}, Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
.line 27
:cond_8
iget-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundAudioTrack:Z
if-eqz p2, :cond_9
iget-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundVideoTrack:Z
if-nez p2, :cond_a
:cond_9
invoke-interface {p1}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->getPosition()J
move-result-wide v5
const-wide/32 v7, 0x100000
cmp-long p2, v5, v7
if-lez p2, :cond_b
.line 28
:cond_a
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->foundAllTracks:Z
.line 29
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->output:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
invoke-interface {p2}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 30
:cond_b
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object p2, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, p2, v0, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 31
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 32
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result p2
add-int/2addr p2, v4
if-nez v1, :cond_c
.line 33
invoke-interface {p1, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
goto :goto_1
.line 34
:cond_c
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v2, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 35
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v2, v2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
invoke-interface {p1, v2, v0, p2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->readFully([BII)V
.line 36
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, v4}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 37
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v1, p1}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.line 38
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->capacity()I
move-result p2
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
:goto_1
return v0
.end method
.method public release()V
.locals 0
return-void
.end method
.method public seek(JJ)V
.locals 0
.line 1
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->reset()V
const/4 p1, 0x0
.line 2
:goto_0
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPayloadReaders:Landroid/util/SparseArray;
invoke-virtual {p2}, Landroid/util/SparseArray;->size()I
move-result p2
if-ge p1, p2, :cond_0
.line 3
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor;->psPayloadReaders:Landroid/util/SparseArray;
invoke-virtual {p2, p1}, Landroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
move-result-object p2
check-cast p2, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/PsExtractor$PesReader;->seek()V
add-int/lit8 p1, p1, 0x1
goto :goto_0
:cond_0
return-void
.end method
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 9
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
const/16 v0, 0xe
new-array v1, v0, [B
const/4 v2, 0x0
.line 1
invoke-interface {p1, v1, v2, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 2
aget-byte v0, v1, v2
and-int/lit16 v0, v0, 0xff
shl-int/lit8 v0, v0, 0x18
const/4 v3, 0x1
aget-byte v4, v1, v3
and-int/lit16 v4, v4, 0xff
shl-int/lit8 v4, v4, 0x10
or-int/2addr v0, v4
const/4 v4, 0x2
aget-byte v5, v1, v4
and-int/lit16 v5, v5, 0xff
const/16 v6, 0x8
shl-int/2addr v5, v6
or-int/2addr v0, v5
const/4 v5, 0x3
aget-byte v7, v1, v5
and-int/lit16 v7, v7, 0xff
or-int/2addr v0, v7
const/16 v7, 0x1ba
if-eq v7, v0, :cond_0
return v2
:cond_0
const/4 v0, 0x4
.line 3
aget-byte v7, v1, v0
and-int/lit16 v7, v7, 0xc4
const/16 v8, 0x44
if-eq v7, v8, :cond_1
return v2
:cond_1
const/4 v7, 0x6
.line 4
aget-byte v7, v1, v7
and-int/2addr v7, v0
if-eq v7, v0, :cond_2
return v2
.line 5
:cond_2
aget-byte v7, v1, v6
and-int/2addr v7, v0
if-eq v7, v0, :cond_3
return v2
:cond_3
const/16 v0, 0x9
.line 6
aget-byte v0, v1, v0
and-int/2addr v0, v3
if-eq v0, v3, :cond_4
return v2
:cond_4
const/16 v0, 0xc
.line 7
aget-byte v0, v1, v0
and-int/2addr v0, v5
if-eq v0, v5, :cond_5
return v2
:cond_5
const/16 v0, 0xd
.line 8
aget-byte v0, v1, v0
and-int/lit8 v0, v0, 0x7
.line 9
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->advancePeekPosition(I)V
.line 10
invoke-interface {p1, v1, v2, v5}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
.line 11
aget-byte p1, v1, v2
and-int/lit16 p1, p1, 0xff
shl-int/lit8 p1, p1, 0x10
aget-byte v0, v1, v3
and-int/lit16 v0, v0, 0xff
shl-int/2addr v0, v6
or-int/2addr p1, v0
aget-byte v0, v1, v4
and-int/lit16 v0, v0, 0xff
or-int/2addr p1, v0
if-ne v3, p1, :cond_6
move v2, v3
:cond_6
return v2
.end method
@@ -0,0 +1,11 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
.super Ljava/lang/Object;
.source "SectionPayloadReader.java"
# virtual methods
.method public abstract consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.end method
.method public abstract init(Lcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.end method
@@ -0,0 +1,386 @@
.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
.locals 1
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->reader:Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
.line 3
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
.locals 7
const/4 v0, -0x1
if-eqz p2, :cond_0
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v1
.line 2
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v2
add-int/2addr v2, v1
goto :goto_0
:cond_0
move v2, v0
.line 3
:goto_0
iget-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
const/4 v3, 0x0
if-eqz v1, :cond_2
if-nez p2, :cond_1
return-void
.line 4
:cond_1
iput-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
.line 5
invoke-virtual {p1, v2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 6
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
.line 7
:cond_2
:goto_1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
if-lez p2, :cond_8
.line 8
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_5
if-nez p2, :cond_3
.line 9
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result p2
.line 10
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_3
.line 11
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
return-void
.line 12
:cond_3
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 13
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 14
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_2
.line 15
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 16
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 17
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 18
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_4
goto :goto_2
:cond_4
move v1, v3
.line 19
:goto_2
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 20
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
.line 21
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_2
.line 22
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionData:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v4, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/16 v5, 0x1002
.line 23
array-length v6, v4
mul-int/lit8 v6, v6, 0x2
.line 24
invoke-static {v1, v6}, Ljava/lang/Math;->max(II)I
move-result v1
invoke-static {v5, v1}, Ljava/lang/Math;->min(II)I
move-result v1
.line 25
invoke-virtual {p2, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset(I)V
.line 26
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
invoke-static {v4, v3, p2, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
goto/16 :goto_1
.line 27
:cond_5
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 28
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 29
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 30
iget p2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->totalSectionLength:I
if-ne v2, p2, :cond_2
.line 31
iget-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->sectionSyntaxIndicator:Z
if-eqz v2, :cond_7
.line 32
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
invoke-static {v2, v3, p2, v0}, Lcom/google/android/exoplayer2/util/Util;->crc([BIII)I
move-result p2
if-eqz p2, :cond_6
.line 33
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
return-void
.line 34
:cond_6
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_3
.line 35
:cond_7
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 36
:goto_3
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 37
iput v3, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->bytesRead:I
goto/16 :goto_1
:cond_8
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
.locals 1
.line 1
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 2
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
return-void
.end method
.method public seek()V
.locals 1
const/4 v0, 0x1
.line 1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;->waitingForPayloadStart:Z
return-void
.end method
@@ -0,0 +1,194 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/SeiReader;
.super Ljava/lang/Object;
.source "SeiReader.java"
# instance fields
.field private final closedCaptionFormats:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/Format;",
">;"
}
.end annotation
.end field
.field private final outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
# direct methods
.method public constructor <init>(Ljava/util/List;)V
.locals 0
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/Format;",
">;)V"
}
.end annotation
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;->closedCaptionFormats:Ljava/util/List;
.line 3
invoke-interface {p1}, Ljava/util/List;->size()I
move-result p1
new-array p1, p1, [Lcom/google/android/exoplayer2/extractor/TrackOutput;
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
return-void
.end method
# virtual methods
.method public consume(JLcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 1
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-static {p1, p2, p3, v0}, Lcom/google/android/exoplayer2/text/cea/CeaUtil;->consume(JLcom/google/android/exoplayer2/util/ParsableByteArray;[Lcom/google/android/exoplayer2/extractor/TrackOutput;)V
return-void
.end method
.method public createTracks(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.locals 12
const/4 v0, 0x0
move v1, v0
.line 1
:goto_0
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
array-length v2, v2
if-ge v1, v2, :cond_3
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 3
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result v2
const/4 v3, 0x3
invoke-interface {p1, v2, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object v2
.line 4
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;->closedCaptionFormats:Ljava/util/List;
invoke-interface {v3, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v3
check-cast v3, Lcom/google/android/exoplayer2/Format;
.line 5
iget-object v5, v3, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
const-string v4, "application/cea-608"
.line 6
invoke-virtual {v4, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-nez v4, :cond_1
const-string v4, "application/cea-708"
.line 7
invoke-virtual {v4, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :cond_0
goto :goto_1
:cond_0
move v4, v0
goto :goto_2
:cond_1
:goto_1
const/4 v4, 0x1
:goto_2
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, "Invalid closed caption mime type provided: "
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v6
.line 8
invoke-static {v4, v6}, Lcom/google/android/exoplayer2/util/Assertions;->checkArgument(ZLjava/lang/Object;)V
.line 9
iget-object v4, v3, Lcom/google/android/exoplayer2/Format;->id:Ljava/lang/String;
if-eqz v4, :cond_2
goto :goto_3
:cond_2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object v4
:goto_3
const/4 v6, 0x0
const/4 v7, -0x1
.line 10
iget v8, v3, Lcom/google/android/exoplayer2/Format;->selectionFlags:I
iget-object v9, v3, Lcom/google/android/exoplayer2/Format;->language:Ljava/lang/String;
iget v10, v3, Lcom/google/android/exoplayer2/Format;->accessibilityChannel:I
const/4 v11, 0x0
invoke-static/range {v4 .. v11}, Lcom/google/android/exoplayer2/Format;->createTextSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;ILcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object v3
invoke-interface {v2, v3}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
.line 11
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/SeiReader;->outputs:[Lcom/google/android/exoplayer2/extractor/TrackOutput;
aput-object v2, v3, v1
add-int/lit8 v1, v1, 0x1
goto :goto_0
:cond_3
return-void
.end method
@@ -0,0 +1,150 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;
.super Ljava/lang/Object;
.source "SpliceInfoSectionReader.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
# instance fields
.field private formatDeclared:Z
.field private output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 8
.line 1
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->formatDeclared:Z
if-nez v0, :cond_1
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->getTimestampOffsetUs()J
move-result-wide v0
const-wide v2, -0x7fffffffffffffffL # -4.9E-324
cmp-long v0, v0, v2
if-nez v0, :cond_0
return-void
.line 3
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
const/4 v1, 0x0
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.line 4
invoke-virtual {v2}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->getTimestampOffsetUs()J
move-result-wide v2
const-string v4, "application/x-scte35"
.line 5
invoke-static {v1, v4, v2, v3}, Lcom/google/android/exoplayer2/Format;->createSampleFormat(Ljava/lang/String;Ljava/lang/String;J)Lcom/google/android/exoplayer2/Format;
move-result-object v1
invoke-interface {v0, v1}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
const/4 v0, 0x1
.line 6
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->formatDeclared:Z
.line 7
:cond_1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v5
.line 8
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
invoke-interface {v0, p1, v5}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleData(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)V
.line 9
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->getLastAdjustedTimestampUs()J
move-result-wide v2
const/4 v4, 0x1
const/4 v6, 0x0
const/4 v7, 0x0
invoke-interface/range {v1 .. v7}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIII[B)V
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
.locals 2
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->timestampAdjuster:Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.line 2
invoke-virtual {p3}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->generateNewId()V
.line 3
invoke-virtual {p3}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getTrackId()I
move-result p1
const/4 v0, 0x4
invoke-interface {p2, p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->track(II)Lcom/google/android/exoplayer2/extractor/TrackOutput;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/SpliceInfoSectionReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 4
invoke-virtual {p3}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->getFormatId()Ljava/lang/String;
move-result-object p2
const-string p3, "application/x-scte35"
const/4 v0, 0x0
const/4 v1, -0x1
invoke-static {p2, p3, v0, v1, v0}, Lcom/google/android/exoplayer2/Format;->createSampleFormat(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/Format;
move-result-object p2
invoke-interface {p1, p2}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->format(Lcom/google/android/exoplayer2/Format;)V
return-void
.end method
@@ -0,0 +1,49 @@
.class final Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$1;
.super Ljava/lang/Object;
.source "TsExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = null
.end annotation
# direct methods
.method public constructor <init>()V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public createExtractors()[Lcom/google/android/exoplayer2/extractor/Extractor;
.locals 3
const/4 v0, 0x1
new-array v0, v0, [Lcom/google/android/exoplayer2/extractor/Extractor;
.line 1
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-direct {v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;-><init>()V
const/4 v2, 0x0
aput-object v1, v0, v2
return-object v0
.end method
@@ -0,0 +1,21 @@
.class public interface abstract annotation Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$Mode;
.super Ljava/lang/Object;
.source "TsExtractor.java"
# interfaces
.implements Ljava/lang/annotation/Annotation;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x2609
name = "Mode"
.end annotation
.annotation runtime Ljava/lang/annotation/Retention;
value = .enum Ljava/lang/annotation/RetentionPolicy;->SOURCE:Ljava/lang/annotation/RetentionPolicy;
.end annotation
@@ -0,0 +1,183 @@
.class Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;
.super Ljava/lang/Object;
.source "TsExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1
name = "PatReader"
.end annotation
# instance fields
.field private final patScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.field public final synthetic this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)V
.locals 1
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v0, 0x4
new-array v0, v0, [B
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;-><init>([B)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->patScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
return-void
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 9
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
if-eqz v0, :cond_0
return-void
:cond_0
const/4 v0, 0x7
.line 2
invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 3
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v0
const/4 v1, 0x4
div-int/2addr v0, v1
const/4 v2, 0x0
move v3, v2
:goto_0
if-ge v3, v0, :cond_2
.line 4
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->patScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {p1, v4, v1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes(Lcom/google/android/exoplayer2/util/ParsableBitArray;I)V
.line 5
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->patScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v5, 0x10
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v4
.line 6
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->patScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v6, 0x3
invoke-virtual {v5, v6}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
const/16 v5, 0xd
if-nez v4, :cond_1
.line 7
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->patScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
goto :goto_1
.line 8
:cond_1
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->patScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v4, v5}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v4
.line 9
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v5}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$000(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Landroid/util/SparseArray;
move-result-object v5
new-instance v6, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;
new-instance v7, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;
iget-object v8, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-direct {v7, v8, v4}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;I)V
invoke-direct {v6, v7}, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;)V
invoke-virtual {v5, v4, v6}, Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
.line 10
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v4}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$108(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
:goto_1
add-int/lit8 v3, v3, 0x1
goto :goto_0
.line 11
:cond_2
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result p1
const/4 v0, 0x2
if-eq p1, v0, :cond_3
.line 12
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {p1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$000(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Landroid/util/SparseArray;
move-result-object p1
invoke-virtual {p1, v2}, Landroid/util/SparseArray;->remove(I)V
:cond_3
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
.locals 0
return-void
.end method
@@ -0,0 +1,890 @@
.class Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;
.super Ljava/lang/Object;
.source "TsExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1
name = "PmtReader"
.end annotation
# static fields
.field private static final TS_PMT_DESC_AC3:I = 0x6a
.field private static final TS_PMT_DESC_DTS:I = 0x7b
.field private static final TS_PMT_DESC_DVBSUBS:I = 0x59
.field private static final TS_PMT_DESC_EAC3:I = 0x7a
.field private static final TS_PMT_DESC_ISO639_LANG:I = 0xa
.field private static final TS_PMT_DESC_REGISTRATION:I = 0x5
# instance fields
.field private final pid:I
.field private final pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.field public final synthetic this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
.field private final trackIdToPidScratch:Landroid/util/SparseIntArray;
.field private final trackIdToReaderScratch:Landroid/util/SparseArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;",
">;"
}
.end annotation
.end field
# direct methods
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;I)V
.locals 1
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v0, 0x5
new-array v0, v0, [B
invoke-direct {p1, v0}, Lcom/google/android/exoplayer2/util/ParsableBitArray;-><init>([B)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
.line 3
new-instance p1, Landroid/util/SparseArray;
invoke-direct {p1}, Landroid/util/SparseArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToReaderScratch:Landroid/util/SparseArray;
.line 4
new-instance p1, Landroid/util/SparseIntArray;
invoke-direct {p1}, Landroid/util/SparseIntArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToPidScratch:Landroid/util/SparseIntArray;
.line 5
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pid:I
return-void
.end method
.method private readEsInfo(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;
.locals 12
.line 1
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v0
add-int/2addr p2, v0
const/4 v1, 0x0
const/4 v2, -0x1
move v3, v2
move-object v2, v1
.line 2
:goto_0
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v4
if-ge v4, p2, :cond_9
.line 3
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
.line 4
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v5
.line 5
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v6
add-int/2addr v6, v5
const/4 v5, 0x5
const/16 v7, 0x59
const/16 v8, 0x87
const/16 v9, 0x81
if-ne v4, v5, :cond_2
.line 6
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedInt()J
move-result-wide v4
.line 7
invoke-static {}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$900()J
move-result-wide v10
cmp-long v7, v4, v10
if-nez v7, :cond_0
goto :goto_1
.line 8
:cond_0
invoke-static {}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$1000()J
move-result-wide v9
cmp-long v7, v4, v9
if-nez v7, :cond_1
goto :goto_2
.line 9
:cond_1
invoke-static {}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$1100()J
move-result-wide v7
cmp-long v4, v4, v7
if-nez v4, :cond_8
const/16 v3, 0x24
goto :goto_4
:cond_2
const/16 v5, 0x6a
if-ne v4, v5, :cond_3
:goto_1
move v3, v9
goto :goto_4
:cond_3
const/16 v5, 0x7a
if-ne v4, v5, :cond_4
:goto_2
move v3, v8
goto :goto_4
:cond_4
const/16 v5, 0x7b
if-ne v4, v5, :cond_5
const/16 v3, 0x8a
goto :goto_4
:cond_5
const/16 v5, 0xa
const/4 v8, 0x3
if-ne v4, v5, :cond_6
.line 10
invoke-virtual {p1, v8}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readString(I)Ljava/lang/String;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v1
goto :goto_4
:cond_6
if-ne v4, v7, :cond_8
.line 11
new-instance v2, Ljava/util/ArrayList;
invoke-direct {v2}, Ljava/util/ArrayList;-><init>()V
.line 12
:goto_3
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v3
if-ge v3, v6, :cond_7
.line 13
invoke-virtual {p1, v8}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readString(I)Ljava/lang/String;
move-result-object v3
invoke-virtual {v3}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v3
.line 14
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v4
const/4 v5, 0x4
new-array v9, v5, [B
const/4 v10, 0x0
.line 15
invoke-virtual {p1, v9, v10, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes([BII)V
.line 16
new-instance v5, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;
invoke-direct {v5, v3, v4, v9}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;-><init>(Ljava/lang/String;I[B)V
invoke-virtual {v2, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_3
:cond_7
move v3, v7
.line 17
:cond_8
:goto_4
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v4
sub-int/2addr v6, v4
invoke-virtual {p1, v6}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
goto/16 :goto_0
.line 18
:cond_9
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 19
new-instance v4, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;
iget-object p1, p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 20
invoke-static {p1, v0, p2}, Ljava/util/Arrays;->copyOfRange([BII)[B
move-result-object p1
invoke-direct {v4, v3, v1, v2, p1}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;-><init>(ILjava/lang/String;Ljava/util/List;[B)V
return-object v4
.end method
# virtual methods
.method public consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;)V
.locals 16
move-object/from16 v0, p0
move-object/from16 v1, p1
.line 1
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v2
const/4 v3, 0x2
if-eq v2, v3, :cond_0
return-void
.line 2
:cond_0
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v2}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v2
const/4 v4, 0x0
const/4 v5, 0x1
if-eq v2, v5, :cond_2
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v2}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v2
if-eq v2, v3, :cond_2
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v2}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$100(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v2
if-ne v2, v5, :cond_1
goto :goto_0
.line 3
:cond_1
new-instance v2, Lcom/google/android/exoplayer2/util/TimestampAdjuster;
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
.line 4
invoke-static {v6}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$300(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Ljava/util/List;
move-result-object v6
invoke-interface {v6, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v6
check-cast v6, Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {v6}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->getFirstSampleTimestampUs()J
move-result-wide v6
invoke-direct {v2, v6, v7}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;-><init>(J)V
.line 5
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v6}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$300(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Ljava/util/List;
move-result-object v6
invoke-interface {v6, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_1
.line 6
:cond_2
:goto_0
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v2}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$300(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Ljava/util/List;
move-result-object v2
invoke-interface {v2, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v2
check-cast v2, Lcom/google/android/exoplayer2/util/TimestampAdjuster;
.line 7
:goto_1
invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 8
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedShort()I
move-result v6
const/4 v7, 0x5
.line 9
invoke-virtual {v1, v7}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 10
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v1, v8, v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes(Lcom/google/android/exoplayer2/util/ParsableBitArray;I)V
.line 11
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v9, 0x4
invoke-virtual {v8, v9}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 12
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v10, 0xc
invoke-virtual {v8, v10}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v8
.line 13
invoke-virtual {v1, v8}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
.line 14
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v8}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v8
const/16 v11, 0x2000
const/16 v12, 0x15
if-ne v8, v3, :cond_3
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v8}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$400(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
move-result-object v8
if-nez v8, :cond_3
.line 15
new-instance v8, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;
new-array v13, v4, [B
const/4 v14, 0x0
invoke-direct {v8, v12, v14, v14, v13}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;-><init>(ILjava/lang/String;Ljava/util/List;[B)V
.line 16
iget-object v13, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v13}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$500(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
move-result-object v14
invoke-interface {v14, v12, v8}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;->createPayloadReader(ILcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
move-result-object v8
invoke-static {v13, v8}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$402(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.line 17
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v8}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$400(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
move-result-object v8
iget-object v13, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v13}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$600(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
move-result-object v13
new-instance v14, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;
invoke-direct {v14, v6, v12, v11}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;-><init>(III)V
invoke-interface {v8, v2, v13, v14}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;->init(Lcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.line 18
:cond_3
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToReaderScratch:Landroid/util/SparseArray;
invoke-virtual {v8}, Landroid/util/SparseArray;->clear()V
.line 19
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToPidScratch:Landroid/util/SparseIntArray;
invoke-virtual {v8}, Landroid/util/SparseIntArray;->clear()V
.line 20
invoke-virtual/range {p1 .. p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result v8
:goto_2
if-lez v8, :cond_a
.line 21
iget-object v13, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v1, v13, v7}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readBytes(Lcom/google/android/exoplayer2/util/ParsableBitArray;I)V
.line 22
iget-object v13, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v14, 0x8
invoke-virtual {v13, v14}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v13
.line 23
iget-object v14, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/4 v15, 0x3
invoke-virtual {v14, v15}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 24
iget-object v14, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
const/16 v15, 0xd
invoke-virtual {v14, v15}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v14
.line 25
iget-object v15, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v15, v9}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->skipBits(I)V
.line 26
iget-object v15, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pmtScratch:Lcom/google/android/exoplayer2/util/ParsableBitArray;
invoke-virtual {v15, v10}, Lcom/google/android/exoplayer2/util/ParsableBitArray;->readBits(I)I
move-result v15
.line 27
invoke-direct {v0, v1, v15}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->readEsInfo(Lcom/google/android/exoplayer2/util/ParsableByteArray;I)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;
move-result-object v7
const/4 v9, 0x6
if-ne v13, v9, :cond_4
.line 28
iget v13, v7, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->streamType:I
:cond_4
add-int/lit8 v15, v15, 0x5
sub-int/2addr v8, v15
.line 29
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v9}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v9
if-ne v9, v3, :cond_5
move v9, v13
goto :goto_3
:cond_5
move v9, v14
.line 30
:goto_3
iget-object v15, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v15}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$700(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Landroid/util/SparseBooleanArray;
move-result-object v15
invoke-virtual {v15, v9}, Landroid/util/SparseBooleanArray;->get(I)Z
move-result v15
if-eqz v15, :cond_6
goto :goto_5
.line 31
:cond_6
iget-object v15, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v15}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v15
if-ne v15, v3, :cond_7
if-ne v13, v12, :cond_7
iget-object v7, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v7}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$400(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
move-result-object v7
goto :goto_4
:cond_7
iget-object v15, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
.line 32
invoke-static {v15}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$500(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
move-result-object v15
invoke-interface {v15, v13, v7}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;->createPayloadReader(ILcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
move-result-object v7
.line 33
:goto_4
iget-object v13, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v13}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v13
if-ne v13, v3, :cond_8
iget-object v13, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToPidScratch:Landroid/util/SparseIntArray;
.line 34
invoke-virtual {v13, v9, v11}, Landroid/util/SparseIntArray;->get(II)I
move-result v13
if-ge v14, v13, :cond_9
.line 35
:cond_8
iget-object v13, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToPidScratch:Landroid/util/SparseIntArray;
invoke-virtual {v13, v9, v14}, Landroid/util/SparseIntArray;->put(II)V
.line 36
iget-object v13, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToReaderScratch:Landroid/util/SparseArray;
invoke-virtual {v13, v9, v7}, Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
:cond_9
:goto_5
const/4 v7, 0x5
const/4 v9, 0x4
goto/16 :goto_2
.line 37
:cond_a
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToPidScratch:Landroid/util/SparseIntArray;
invoke-virtual {v1}, Landroid/util/SparseIntArray;->size()I
move-result v1
move v7, v4
:goto_6
if-ge v7, v1, :cond_d
.line 38
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToPidScratch:Landroid/util/SparseIntArray;
invoke-virtual {v8, v7}, Landroid/util/SparseIntArray;->keyAt(I)I
move-result v8
.line 39
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v9}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$700(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Landroid/util/SparseBooleanArray;
move-result-object v9
invoke-virtual {v9, v8, v5}, Landroid/util/SparseBooleanArray;->put(IZ)V
.line 40
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToReaderScratch:Landroid/util/SparseArray;
invoke-virtual {v9, v7}, Landroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
move-result-object v9
check-cast v9, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
if-eqz v9, :cond_c
.line 41
iget-object v10, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v10}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$400(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
move-result-object v10
if-eq v9, v10, :cond_b
.line 42
iget-object v10, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v10}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$600(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
move-result-object v10
new-instance v12, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;
invoke-direct {v12, v6, v8, v11}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;-><init>(III)V
invoke-interface {v9, v2, v10, v12}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;->init(Lcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.line 43
:cond_b
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v8}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$000(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Landroid/util/SparseArray;
move-result-object v8
iget-object v10, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->trackIdToPidScratch:Landroid/util/SparseIntArray;
invoke-virtual {v10, v7}, Landroid/util/SparseIntArray;->valueAt(I)I
move-result v10
invoke-virtual {v8, v10, v9}, Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
:cond_c
add-int/lit8 v7, v7, 0x1
goto :goto_6
.line 44
:cond_d
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v1
if-ne v1, v3, :cond_e
.line 45
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$800(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Z
move-result v1
if-nez v1, :cond_10
.line 46
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$600(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
move-result-object v1
invoke-interface {v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 47
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1, v4}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$102(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;I)I
.line 48
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1, v5}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$802(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;Z)Z
goto :goto_8
.line 49
:cond_e
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$000(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Landroid/util/SparseArray;
move-result-object v1
iget v2, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->pid:I
invoke-virtual {v1, v2}, Landroid/util/SparseArray;->remove(I)V
.line 50
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v2
if-ne v2, v5, :cond_f
goto :goto_7
:cond_f
iget-object v2, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v2}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$100(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v2
add-int/lit8 v4, v2, -0x1
:goto_7
invoke-static {v1, v4}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$102(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;I)I
.line 51
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$100(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
move-result v1
if-nez v1, :cond_10
.line 52
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$600(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
move-result-object v1
invoke-interface {v1}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->endTracks()V
.line 53
iget-object v1, v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;->this$0:Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
invoke-static {v1, v5}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->access$802(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;Z)Z
:cond_10
:goto_8
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
.locals 0
return-void
.end method
@@ -0,0 +1,952 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;
.super Ljava/lang/Object;
.source "TsExtractor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/extractor/Extractor;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PmtReader;,
Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;,
Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$Mode;
}
.end annotation
# static fields
.field private static final AC3_FORMAT_IDENTIFIER:J
.field private static final BUFFER_PACKET_COUNT:I = 0x5
.field private static final BUFFER_SIZE:I = 0x3ac
.field private static final E_AC3_FORMAT_IDENTIFIER:J
.field public static final FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
.field private static final HEVC_FORMAT_IDENTIFIER:J
.field private static final MAX_PID_PLUS_ONE:I = 0x2000
.field public static final MODE_HLS:I = 0x2
.field public static final MODE_MULTI_PMT:I = 0x0
.field public static final MODE_SINGLE_PMT:I = 0x1
.field private static final TS_PACKET_SIZE:I = 0xbc
.field private static final TS_PAT_PID:I = 0x0
.field public static final TS_STREAM_TYPE_AAC:I = 0xf
.field public static final TS_STREAM_TYPE_AC3:I = 0x81
.field public static final TS_STREAM_TYPE_DTS:I = 0x8a
.field public static final TS_STREAM_TYPE_DVBSUBS:I = 0x59
.field public static final TS_STREAM_TYPE_E_AC3:I = 0x87
.field public static final TS_STREAM_TYPE_H262:I = 0x2
.field public static final TS_STREAM_TYPE_H264:I = 0x1b
.field public static final TS_STREAM_TYPE_H265:I = 0x24
.field public static final TS_STREAM_TYPE_HDMV_DTS:I = 0x82
.field public static final TS_STREAM_TYPE_ID3:I = 0x15
.field public static final TS_STREAM_TYPE_MPA:I = 0x3
.field public static final TS_STREAM_TYPE_MPA_LSF:I = 0x4
.field public static final TS_STREAM_TYPE_SPLICE_INFO:I = 0x86
.field private static final TS_SYNC_BYTE:I = 0x47
# instance fields
.field private final continuityCounters:Landroid/util/SparseIntArray;
.field private id3Reader:Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.field private final mode:I
.field private output:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.field private final payloadReaderFactory:Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
.field private remainingPmts:I
.field private final timestampAdjusters:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/util/TimestampAdjuster;",
">;"
}
.end annotation
.end field
.field private final trackIds:Landroid/util/SparseBooleanArray;
.field private tracksEnded:Z
.field private final tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.field private final tsPayloadReaders:Landroid/util/SparseArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;",
">;"
}
.end annotation
.end field
# direct methods
.method public static constructor <clinit>()V
.locals 2
.line 1
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$1;
invoke-direct {v0}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$1;-><init>()V
sput-object v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->FACTORY:Lcom/google/android/exoplayer2/extractor/ExtractorsFactory;
const-string v0, "AC-3"
.line 2
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
int-to-long v0, v0
sput-wide v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->AC3_FORMAT_IDENTIFIER:J
const-string v0, "EAC3"
.line 3
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
int-to-long v0, v0
sput-wide v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->E_AC3_FORMAT_IDENTIFIER:J
const-string v0, "HEVC"
.line 4
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getIntegerCodeForString(Ljava/lang/String;)I
move-result v0
int-to-long v0, v0
sput-wide v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->HEVC_FORMAT_IDENTIFIER:J
return-void
.end method
.method public constructor <init>()V
.locals 1
const/4 v0, 0x0
.line 1
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;-><init>(I)V
return-void
.end method
.method public constructor <init>(I)V
.locals 1
const/4 v0, 0x1
.line 2
invoke-direct {p0, v0, p1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;-><init>(II)V
return-void
.end method
.method public constructor <init>(II)V
.locals 3
.line 3
new-instance v0, Lcom/google/android/exoplayer2/util/TimestampAdjuster;
const-wide/16 v1, 0x0
invoke-direct {v0, v1, v2}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;-><init>(J)V
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;
invoke-direct {v1, p2}, Lcom/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory;-><init>(I)V
invoke-direct {p0, p1, v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;-><init>(ILcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;)V
return-void
.end method
.method public constructor <init>(ILcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;)V
.locals 0
.line 4
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 5
invoke-static {p3}, Lcom/google/android/exoplayer2/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p3
check-cast p3, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
iput-object p3, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->payloadReaderFactory:Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
.line 6
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->mode:I
const/4 p3, 0x1
if-eq p1, p3, :cond_1
const/4 p3, 0x2
if-ne p1, p3, :cond_0
goto :goto_0
.line 7
:cond_0
new-instance p1, Ljava/util/ArrayList;
invoke-direct {p1}, Ljava/util/ArrayList;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->timestampAdjusters:Ljava/util/List;
.line 8
invoke-interface {p1, p2}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_1
.line 9
:cond_1
:goto_0
invoke-static {p2}, Ljava/util/Collections;->singletonList(Ljava/lang/Object;)Ljava/util/List;
move-result-object p1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->timestampAdjusters:Ljava/util/List;
.line 10
:goto_1
new-instance p1, Lcom/google/android/exoplayer2/util/ParsableByteArray;
const/16 p2, 0x3ac
invoke-direct {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>(I)V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
.line 11
new-instance p1, Landroid/util/SparseBooleanArray;
invoke-direct {p1}, Landroid/util/SparseBooleanArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->trackIds:Landroid/util/SparseBooleanArray;
.line 12
new-instance p1, Landroid/util/SparseArray;
invoke-direct {p1}, Landroid/util/SparseArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPayloadReaders:Landroid/util/SparseArray;
.line 13
new-instance p1, Landroid/util/SparseIntArray;
invoke-direct {p1}, Landroid/util/SparseIntArray;-><init>()V
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->continuityCounters:Landroid/util/SparseIntArray;
.line 14
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->resetPayloadReaders()V
return-void
.end method
.method public static synthetic access$000(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Landroid/util/SparseArray;
.locals 0
.line 1
iget-object p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPayloadReaders:Landroid/util/SparseArray;
return-object p0
.end method
.method public static synthetic access$100(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
.locals 0
.line 1
iget p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->remainingPmts:I
return p0
.end method
.method public static synthetic access$1000()J
.locals 2
.line 1
sget-wide v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->E_AC3_FORMAT_IDENTIFIER:J
return-wide v0
.end method
.method public static synthetic access$102(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;I)I
.locals 0
.line 1
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->remainingPmts:I
return p1
.end method
.method public static synthetic access$108(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->remainingPmts:I
add-int/lit8 v1, v0, 0x1
iput v1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->remainingPmts:I
return v0
.end method
.method public static synthetic access$1100()J
.locals 2
.line 1
sget-wide v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->HEVC_FORMAT_IDENTIFIER:J
return-wide v0
.end method
.method public static synthetic access$200(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)I
.locals 0
.line 1
iget p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->mode:I
return p0
.end method
.method public static synthetic access$300(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Ljava/util/List;
.locals 0
.line 1
iget-object p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->timestampAdjusters:Ljava/util/List;
return-object p0
.end method
.method public static synthetic access$400(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.locals 0
.line 1
iget-object p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->id3Reader:Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
return-object p0
.end method
.method public static synthetic access$402(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.locals 0
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->id3Reader:Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
return-object p1
.end method
.method public static synthetic access$500(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
.locals 0
.line 1
iget-object p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->payloadReaderFactory:Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
return-object p0
.end method
.method public static synthetic access$600(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.locals 0
.line 1
iget-object p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->output:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
return-object p0
.end method
.method public static synthetic access$700(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Landroid/util/SparseBooleanArray;
.locals 0
.line 1
iget-object p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->trackIds:Landroid/util/SparseBooleanArray;
return-object p0
.end method
.method public static synthetic access$800(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)Z
.locals 0
.line 1
iget-boolean p0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tracksEnded:Z
return p0
.end method
.method public static synthetic access$802(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;Z)Z
.locals 0
.line 1
iput-boolean p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tracksEnded:Z
return p1
.end method
.method public static synthetic access$900()J
.locals 2
.line 1
sget-wide v0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->AC3_FORMAT_IDENTIFIER:J
return-wide v0
.end method
.method private resetPayloadReaders()V
.locals 7
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->trackIds:Landroid/util/SparseBooleanArray;
invoke-virtual {v0}, Landroid/util/SparseBooleanArray;->clear()V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPayloadReaders:Landroid/util/SparseArray;
invoke-virtual {v0}, Landroid/util/SparseArray;->clear()V
.line 3
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->payloadReaderFactory:Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
.line 4
invoke-interface {v0}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;->createInitialPayloadReaders()Landroid/util/SparseArray;
move-result-object v0
.line 5
invoke-virtual {v0}, Landroid/util/SparseArray;->size()I
move-result v1
const/4 v2, 0x0
move v3, v2
:goto_0
if-ge v3, v1, :cond_0
.line 6
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPayloadReaders:Landroid/util/SparseArray;
invoke-virtual {v0, v3}, Landroid/util/SparseArray;->keyAt(I)I
move-result v5
invoke-virtual {v0, v3}, Landroid/util/SparseArray;->valueAt(I)Ljava/lang/Object;
move-result-object v6
invoke-virtual {v4, v5, v6}, Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
add-int/lit8 v3, v3, 0x1
goto :goto_0
.line 7
:cond_0
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPayloadReaders:Landroid/util/SparseArray;
new-instance v1, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;
new-instance v3, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;
invoke-direct {v3, p0}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor$PatReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;)V
invoke-direct {v1, v3}, Lcom/google/android/exoplayer2/extractor/ts/SectionReader;-><init>(Lcom/google/android/exoplayer2/extractor/ts/SectionPayloadReader;)V
invoke-virtual {v0, v2, v1}, Landroid/util/SparseArray;->put(ILjava/lang/Object;)V
const/4 v0, 0x0
.line 8
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->id3Reader:Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
return-void
.end method
# virtual methods
.method public init(Lcom/google/android/exoplayer2/extractor/ExtractorOutput;)V
.locals 3
.line 1
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->output:Lcom/google/android/exoplayer2/extractor/ExtractorOutput;
.line 2
new-instance v0, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;
const-wide v1, -0x7fffffffffffffffL # -4.9E-324
invoke-direct {v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/SeekMap$Unseekable;-><init>(J)V
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/extractor/ExtractorOutput;->seekMap(Lcom/google/android/exoplayer2/extractor/SeekMap;)V
return-void
.end method
.method public read(Lcom/google/android/exoplayer2/extractor/ExtractorInput;Lcom/google/android/exoplayer2/extractor/PositionHolder;)I
.locals 9
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, p2, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
.line 2
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result p2
rsub-int p2, p2, 0x3ac
const/16 v1, 0xbc
const/4 v2, 0x0
if-ge p2, v1, :cond_1
.line 3
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
if-lez p2, :cond_0
.line 4
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result v3
invoke-static {v0, v3, v0, v2, p2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 5
:cond_0
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v3, v0, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset([BI)V
.line 6
:cond_1
:goto_0
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->bytesLeft()I
move-result p2
if-ge p2, v1, :cond_3
.line 7
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result p2
rsub-int v3, p2, 0x3ac
.line 8
invoke-interface {p1, v0, p2, v3}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->read([BII)I
move-result v3
const/4 v4, -0x1
if-ne v3, v4, :cond_2
return v4
.line 9
:cond_2
iget-object v4, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
add-int/2addr p2, v3
invoke-virtual {v4, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
goto :goto_0
.line 10
:cond_3
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->limit()I
move-result p1
.line 11
iget-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->getPosition()I
move-result p2
:goto_1
if-ge p2, p1, :cond_4
.line 12
aget-byte v3, v0, p2
const/16 v4, 0x47
if-eq v3, v4, :cond_4
add-int/lit8 p2, p2, 0x1
goto :goto_1
.line 13
:cond_4
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
add-int/2addr p2, v1
if-le p2, p1, :cond_5
return v2
.line 14
:cond_5
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readInt()I
move-result v0
const/high16 v1, 0x800000
and-int/2addr v1, v0
if-eqz v1, :cond_6
.line 15
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return v2
:cond_6
const/high16 v1, 0x400000
and-int/2addr v1, v0
const/4 v3, 0x1
if-eqz v1, :cond_7
move v1, v3
goto :goto_2
:cond_7
move v1, v2
:goto_2
const v4, 0x1fff00
and-int/2addr v4, v0
shr-int/lit8 v4, v4, 0x8
and-int/lit8 v5, v0, 0x20
if-eqz v5, :cond_8
move v5, v3
goto :goto_3
:cond_8
move v5, v2
:goto_3
and-int/lit8 v6, v0, 0x10
if-eqz v6, :cond_9
move v6, v3
goto :goto_4
:cond_9
move v6, v2
.line 16
:goto_4
iget v7, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->mode:I
const/4 v8, 0x2
if-eq v7, v8, :cond_b
and-int/lit8 v0, v0, 0xf
.line 17
iget-object v7, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->continuityCounters:Landroid/util/SparseIntArray;
add-int/lit8 v8, v0, -0x1
invoke-virtual {v7, v4, v8}, Landroid/util/SparseIntArray;->get(II)I
move-result v7
.line 18
iget-object v8, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->continuityCounters:Landroid/util/SparseIntArray;
invoke-virtual {v8, v4, v0}, Landroid/util/SparseIntArray;->put(II)V
if-ne v7, v0, :cond_a
if-eqz v6, :cond_b
.line 19
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return v2
:cond_a
add-int/2addr v7, v3
and-int/lit8 v7, v7, 0xf
if-eq v0, v7, :cond_b
goto :goto_5
:cond_b
move v3, v2
:goto_5
if-eqz v5, :cond_c
.line 20
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedByte()I
move-result v0
.line 21
iget-object v5, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v5, v0}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->skipBytes(I)V
:cond_c
if-eqz v6, :cond_e
.line 22
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPayloadReaders:Landroid/util/SparseArray;
invoke-virtual {v0, v4}, Landroid/util/SparseArray;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
if-eqz v0, :cond_e
if-eqz v3, :cond_d
.line 23
invoke-interface {v0}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;->seek()V
.line 24
:cond_d
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v3, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 25
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-interface {v0, v3, v1}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;->consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;Z)V
.line 26
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setLimit(I)V
.line 27
:cond_e
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
return v2
.end method
.method public release()V
.locals 0
return-void
.end method
.method public seek(JJ)V
.locals 0
.line 1
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->timestampAdjusters:Ljava/util/List;
invoke-interface {p1}, Ljava/util/List;->size()I
move-result p1
const/4 p2, 0x0
:goto_0
if-ge p2, p1, :cond_0
.line 2
iget-object p3, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->timestampAdjusters:Ljava/util/List;
invoke-interface {p3, p2}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object p3
check-cast p3, Lcom/google/android/exoplayer2/util/TimestampAdjuster;
invoke-virtual {p3}, Lcom/google/android/exoplayer2/util/TimestampAdjuster;->reset()V
add-int/lit8 p2, p2, 0x1
goto :goto_0
.line 3
:cond_0
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
invoke-virtual {p1}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->reset()V
.line 4
iget-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->continuityCounters:Landroid/util/SparseIntArray;
invoke-virtual {p1}, Landroid/util/SparseIntArray;->clear()V
.line 5
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->resetPayloadReaders()V
return-void
.end method
.method public sniff(Lcom/google/android/exoplayer2/extractor/ExtractorInput;)Z
.locals 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Ljava/lang/InterruptedException;
}
.end annotation
.line 1
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsExtractor;->tsPacketBuffer:Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v0, v0, Lcom/google/android/exoplayer2/util/ParsableByteArray;->data:[B
const/4 v1, 0x0
const/16 v2, 0x3ac
.line 2
invoke-interface {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->peekFully([BII)V
move v2, v1
:goto_0
const/16 v3, 0xbc
if-ge v2, v3, :cond_2
move v3, v1
:goto_1
const/4 v4, 0x5
if-ne v3, v4, :cond_0
.line 3
invoke-interface {p1, v2}, Lcom/google/android/exoplayer2/extractor/ExtractorInput;->skipFully(I)V
const/4 p1, 0x1
return p1
:cond_0
mul-int/lit16 v4, v3, 0xbc
add-int/2addr v4, v2
.line 4
aget-byte v4, v0, v4
const/16 v5, 0x47
if-eq v4, v5, :cond_1
add-int/lit8 v2, v2, 0x1
goto :goto_0
:cond_1
add-int/lit8 v3, v3, 0x1
goto :goto_1
:cond_2
return v1
.end method
@@ -0,0 +1,42 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;
.super Ljava/lang/Object;
.source "TsPayloadReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "DvbSubtitleInfo"
.end annotation
# instance fields
.field public final initializationData:[B
.field public final language:Ljava/lang/String;
.field public final type:I
# direct methods
.method public constructor <init>(Ljava/lang/String;I[B)V
.locals 0
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;->language:Ljava/lang/String;
.line 3
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;->type:I
.line 4
iput-object p3, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;->initializationData:[B
return-void
.end method
@@ -0,0 +1,79 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;
.super Ljava/lang/Object;
.source "TsPayloadReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "EsInfo"
.end annotation
# instance fields
.field public final descriptorBytes:[B
.field public final dvbSubtitleInfos:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;",
">;"
}
.end annotation
.end field
.field public final language:Ljava/lang/String;
.field public final streamType:I
# direct methods
.method public constructor <init>(ILjava/lang/String;Ljava/util/List;[B)V
.locals 0
.annotation system Ldalvik/annotation/Signature;
value = {
"(I",
"Ljava/lang/String;",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;",
">;[B)V"
}
.end annotation
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
iput p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->streamType:I
.line 3
iput-object p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->language:Ljava/lang/String;
if-nez p3, :cond_0
.line 4
invoke-static {}, Ljava/util/Collections;->emptyList()Ljava/util/List;
move-result-object p1
goto :goto_0
.line 5
:cond_0
invoke-static {p3}, Ljava/util/Collections;->unmodifiableList(Ljava/util/List;)Ljava/util/List;
move-result-object p1
:goto_0
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->dvbSubtitleInfos:Ljava/util/List;
.line 6
iput-object p4, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;->descriptorBytes:[B
return-void
.end method
@@ -0,0 +1,30 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
.super Ljava/lang/Object;
.source "TsPayloadReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x609
name = "Factory"
.end annotation
# virtual methods
.method public abstract createInitialPayloadReaders()Landroid/util/SparseArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;",
">;"
}
.end annotation
.end method
.method public abstract createPayloadReader(ILcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;)Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.end method
@@ -0,0 +1,181 @@
.class public final Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;
.super Ljava/lang/Object;
.source "TsPayloadReader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "TrackIdGenerator"
.end annotation
# static fields
.field private static final ID_UNSET:I = -0x80000000
# instance fields
.field private final firstTrackId:I
.field private formatId:Ljava/lang/String;
.field private final formatIdPrefix:Ljava/lang/String;
.field private trackId:I
.field private final trackIdIncrement:I
# direct methods
.method public constructor <init>(II)V
.locals 1
const/high16 v0, -0x80000000
.line 1
invoke-direct {p0, v0, p1, p2}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;-><init>(III)V
return-void
.end method
.method public constructor <init>(III)V
.locals 2
.line 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/high16 v0, -0x80000000
if-eq p1, v0, :cond_0
.line 3
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string p1, "/"
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
goto :goto_0
:cond_0
const-string p1, ""
:goto_0
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->formatIdPrefix:Ljava/lang/String;
.line 4
iput p2, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->firstTrackId:I
.line 5
iput p3, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->trackIdIncrement:I
.line 6
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->trackId:I
return-void
.end method
.method private maybeThrowUninitializedError()V
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->trackId:I
const/high16 v1, -0x80000000
if-eq v0, v1, :cond_0
return-void
.line 2
:cond_0
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "generateNewId() must be called before retrieving ids."
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
# virtual methods
.method public generateNewId()V
.locals 2
.line 1
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->trackId:I
const/high16 v1, -0x80000000
if-ne v0, v1, :cond_0
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->firstTrackId:I
goto :goto_0
:cond_0
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->trackIdIncrement:I
add-int/2addr v0, v1
:goto_0
iput v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->trackId:I
.line 2
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
iget-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->formatIdPrefix:Ljava/lang/String;
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v1, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->trackId:I
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->formatId:Ljava/lang/String;
return-void
.end method
.method public getFormatId()Ljava/lang/String;
.locals 1
.line 1
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->maybeThrowUninitializedError()V
.line 2
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->formatId:Ljava/lang/String;
return-object v0
.end method
.method public getTrackId()I
.locals 1
.line 1
invoke-direct {p0}, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->maybeThrowUninitializedError()V
.line 2
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;->trackId:I
return v0
.end method
@@ -0,0 +1,25 @@
.class public interface abstract Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader;
.super Ljava/lang/Object;
.source "TsPayloadReader.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;,
Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$DvbSubtitleInfo;,
Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$EsInfo;,
Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$Factory;
}
.end annotation
# virtual methods
.method public abstract consume(Lcom/google/android/exoplayer2/util/ParsableByteArray;Z)V
.end method
.method public abstract init(Lcom/google/android/exoplayer2/util/TimestampAdjuster;Lcom/google/android/exoplayer2/extractor/ExtractorOutput;Lcom/google/android/exoplayer2/extractor/ts/TsPayloadReader$TrackIdGenerator;)V
.end method
.method public abstract seek()V
.end method