FlacDecoder.smali
.class final Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;
.super Lcom/google/android/exoplayer2/decoder/SimpleDecoder;
.source "FlacDecoder.java"
# annotations
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/google/android/exoplayer2/decoder/SimpleDecoder<",
"Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;",
"Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;",
"Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;",
">;"
}
.end annotation
# instance fields
.field private final decoderJni:Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;
.field private final maxOutputBufferSize:I
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>(IIILjava/util/List;)V
.registers 8
.param p1, "numInputBuffers" # I
.param p2, "numOutputBuffers" # I
.param p3, "maxInputBufferSize" # I
.annotation system Ldalvik/annotation/Signature;
value = {
"(III",
"Ljava/util/List<",
"[B>;)V"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
}
.end annotation
.line 53
.local p4, "initializationData":Ljava/util/List;, "Ljava/util/List<[B>;"
new-array v0, p1, [Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
new-array v1, p2, [Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;
invoke-direct {p0, v0, v1}, Lcom/google/android/exoplayer2/decoder/SimpleDecoder;-><init>([Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;[Lcom/google/android/exoplayer2/decoder/OutputBuffer;)V
.line 54
invoke-interface {p4}, Ljava/util/List;->size()I
move-result v0
const/4 v1, 0x1
if-ne v0, v1, :cond_4e
.line 57
new-instance v0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;
invoke-direct {v0}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->decoderJni:Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;
.line 58
const/4 v1, 0x0
invoke-interface {p4, v1}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v1
check-cast v1, [B
invoke-static {v1}, Ljava/nio/ByteBuffer;->wrap([B)Ljava/nio/ByteBuffer;
move-result-object v1
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;->setData(Ljava/nio/ByteBuffer;)V
.line 61
:try_start_23
iget-object v0, p0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->decoderJni:Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;->decodeMetadata()Lcom/google/android/exoplayer2/util/FlacStreamInfo;
move-result-object v0
:try_end_29
.catch Ljava/io/IOException; {:try_start_23 .. :try_end_29} :catch_47
.catch Ljava/lang/InterruptedException; {:try_start_23 .. :try_end_29} :catch_45
.line 65
.local v0, "streamInfo":Lcom/google/android/exoplayer2/util/FlacStreamInfo;
nop
.line 66
if-eqz v0, :cond_3d
.line 70
const/4 v1, -0x1
if-eq p3, v1, :cond_31
move v1, p3
goto :goto_33
:cond_31
iget v1, v0, Lcom/google/android/exoplayer2/util/FlacStreamInfo;->maxFrameSize:I
.line 72
.local v1, "initialInputBufferSize":I
:goto_33
invoke-virtual {p0, v1}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->setInitialInputBufferSize(I)V
.line 73
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/FlacStreamInfo;->maxDecodedFrameSize()I
move-result v2
iput v2, p0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->maxOutputBufferSize:I
.line 74
return-void
.line 67
.end local v1 # "initialInputBufferSize":I
:cond_3d
new-instance v1, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
const-string v2, "Metadata decoding failed"
invoke-direct {v1, v2}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;-><init>(Ljava/lang/String;)V
throw v1
.line 62
.end local v0 # "streamInfo":Lcom/google/android/exoplayer2/util/FlacStreamInfo;
:catch_45
move-exception v0
goto :goto_48
:catch_47
move-exception v0
.line 64
.local v0, "e":Ljava/lang/Exception;
:goto_48
new-instance v1, Ljava/lang/IllegalStateException;
invoke-direct {v1, v0}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/Throwable;)V
throw v1
.line 55
.end local v0 # "e":Ljava/lang/Exception;
:cond_4e
new-instance v0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
const-string v1, "Initialization data must be of length 1"
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;-><init>(Ljava/lang/String;)V
throw v0
.end method
# virtual methods
.method protected createInputBuffer()Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.registers 3
.line 83
new-instance v0, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
const/4 v1, 0x1
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;-><init>(I)V
return-object v0
.end method
.method protected bridge synthetic createOutputBuffer()Lcom/google/android/exoplayer2/decoder/OutputBuffer;
.registers 2
.line 30
invoke-virtual {p0}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->createOutputBuffer()Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;
move-result-object v0
return-object v0
.end method
.method protected createOutputBuffer()Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;
.registers 2
.line 88
new-instance v0, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;
invoke-direct {v0, p0}, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;-><init>(Lcom/google/android/exoplayer2/decoder/SimpleDecoder;)V
return-object v0
.end method
.method protected createUnexpectedDecodeException(Ljava/lang/Throwable;)Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
.registers 4
.param p1, "error" # Ljava/lang/Throwable;
.line 93
new-instance v0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
const-string v1, "Unexpected decode error"
invoke-direct {v0, v1, p1}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
return-object v0
.end method
.method protected bridge synthetic createUnexpectedDecodeException(Ljava/lang/Throwable;)Ljava/lang/Exception;
.registers 2
.line 30
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->createUnexpectedDecodeException(Ljava/lang/Throwable;)Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
move-result-object p1
return-object p1
.end method
.method protected decode(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;Z)Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
.registers 8
.param p1, "inputBuffer" # Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.param p2, "outputBuffer" # Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;
.param p3, "reset" # Z
.line 99
if-eqz p3, :cond_7
.line 100
iget-object v0, p0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->decoderJni:Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;->flush()V
.line 102
:cond_7
iget-object v0, p0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->decoderJni:Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;
iget-object v1, p1, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;->setData(Ljava/nio/ByteBuffer;)V
.line 103
iget-wide v0, p1, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->timeUs:J
iget v2, p0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->maxOutputBufferSize:I
invoke-virtual {p2, v0, v1, v2}, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;->init(JI)Ljava/nio/ByteBuffer;
move-result-object v0
.line 105
.local v0, "outputData":Ljava/nio/ByteBuffer;
:try_start_16
iget-object v1, p0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->decoderJni:Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;
invoke-virtual {v1, v0}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;->decodeSample(Ljava/nio/ByteBuffer;)V
:try_end_1b
.catch Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni$FlacFrameDecodeException; {:try_start_16 .. :try_end_1b} :catch_27
.catch Ljava/io/IOException; {:try_start_16 .. :try_end_1b} :catch_20
.catch Ljava/lang/InterruptedException; {:try_start_16 .. :try_end_1b} :catch_1e
.line 111
nop
.line 112
const/4 v1, 0x0
return-object v1
.line 108
:catch_1e
move-exception v1
goto :goto_21
:catch_20
move-exception v1
.line 110
.local v1, "e":Ljava/lang/Exception;
:goto_21
new-instance v2, Ljava/lang/IllegalStateException;
invoke-direct {v2, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/Throwable;)V
throw v2
.line 106
.end local v1 # "e":Ljava/lang/Exception;
:catch_27
move-exception v1
.line 107
.local v1, "e":Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni$FlacFrameDecodeException;
new-instance v2, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
const-string v3, "Frame decoding failed"
invoke-direct {v2, v3, v1}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
return-object v2
.end method
.method protected bridge synthetic decode(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;Lcom/google/android/exoplayer2/decoder/OutputBuffer;Z)Ljava/lang/Exception;
.registers 4
.line 30
check-cast p2, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;
invoke-virtual {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->decode(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;Z)Lcom/google/android/exoplayer2/ext/flac/FlacDecoderException;
move-result-object p1
return-object p1
.end method
.method public getName()Ljava/lang/String;
.registers 2
.line 78
const-string v0, "libflac"
return-object v0
.end method
.method public release()V
.registers 2
.line 117
invoke-super {p0}, Lcom/google/android/exoplayer2/decoder/SimpleDecoder;->release()V
.line 118
iget-object v0, p0, Lcom/google/android/exoplayer2/ext/flac/FlacDecoder;->decoderJni:Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/ext/flac/FlacDecoderJni;->release()V
.line 119
return-void
.end method