FfmpegDecoder.smali
.class final Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;
.super Lcom/google/android/exoplayer2/decoder/SimpleDecoder;
.source "FfmpegDecoder.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/ffmpeg/FfmpegDecoderException;",
">;"
}
.end annotation
# static fields
.field private static final DECODER_ERROR_INVALID_DATA:I
.field private static final DECODER_ERROR_OTHER:I
.field private static final OUTPUT_BUFFER_SIZE_16BIT:I
.field private static final OUTPUT_BUFFER_SIZE_32BIT:I
# instance fields
.field private volatile channelCount:I
.field private final codecName:Ljava/lang/String;
.field private final encoding:I
.field private final extraData:[B
.field private hasOutputFormat:Z
.field private nativeContext:J
.field private final outputBufferSize:I
.field private volatile sampleRate:I
# direct methods
.method static constructor <clinit>()V
.registers 1
const v0, -0x1570
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->DECODER_ERROR_INVALID_DATA:I
const v0, -0x156f
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->DECODER_ERROR_OTHER:I
const v0, 0x1156f
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->OUTPUT_BUFFER_SIZE_16BIT:I
const v0, 0x2156f
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->OUTPUT_BUFFER_SIZE_32BIT:I
return-void
.end method
.method public constructor <init>(IIILcom/google/android/exoplayer2/Format;Z)V
.registers 13
.param p1, "numInputBuffers" # I
.param p2, "numOutputBuffers" # I
.param p3, "initialInputBufferSize" # I
.param p4, "format" # Lcom/google/android/exoplayer2/Format;
.param p5, "outputFloat" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;
}
.end annotation
.line 61
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 62
iget-object v0, p4, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 63
iget-object v0, p4, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
iget v1, p4, Lcom/google/android/exoplayer2/Format;->pcmEncoding:I
.line 65
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegLibrary;->getCodecName(Ljava/lang/String;I)Ljava/lang/String;
move-result-object v0
.line 64
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
iput-object v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->codecName:Ljava/lang/String;
.line 66
iget-object v0, p4, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
iget-object v1, p4, Lcom/google/android/exoplayer2/Format;->initializationData:Ljava/util/List;
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->getExtraData(Ljava/lang/String;Ljava/util/List;)[B
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->extraData:[B
.line 67
if-eqz p5, :cond_2a
const/4 v0, 0x4
goto :goto_2b
:cond_2a
const/4 v0, 0x2
:goto_2b
iput v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->encoding:I
.line 68
if-eqz p5, :cond_32
const/high16 v0, 0x20000
goto :goto_34
:cond_32
const/high16 v0, 0x10000
:goto_34
iput v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->outputBufferSize:I
.line 69
iget-object v2, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->codecName:Ljava/lang/String;
iget-object v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->extraData:[B
iget v5, p4, Lcom/google/android/exoplayer2/Format;->sampleRate:I
iget v6, p4, Lcom/google/android/exoplayer2/Format;->channelCount:I
.line 70
move-object v1, p0
move v4, p5
invoke-direct/range {v1 .. v6}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->ffmpegInitialize(Ljava/lang/String;[BZII)J
move-result-wide v0
iput-wide v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->nativeContext:J
.line 71
const-wide/16 v2, 0x0
cmp-long v4, v0, v2
if-eqz v4, :cond_50
.line 74
invoke-virtual {p0, p3}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->setInitialInputBufferSize(I)V
.line 75
return-void
.line 72
:cond_50
new-instance v0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;
const-string v1, "Initialization failed."
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private native ffmpegDecode(JLjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;I)I
.end method
.method private native ffmpegGetChannelCount(J)I
.end method
.method private native ffmpegGetSampleRate(J)I
.end method
.method private native ffmpegInitialize(Ljava/lang/String;[BZII)J
.end method
.method private native ffmpegRelease(J)V
.end method
.method private native ffmpegReset(J[B)J
.end method
.method private static getExtraData(Ljava/lang/String;Ljava/util/List;)[B
.registers 10
.param p0, "mimeType" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/String;",
"Ljava/util/List<",
"[B>;)[B"
}
.end annotation
.line 170
.local p1, "initializationData":Ljava/util/List;, "Ljava/util/List<[B>;"
invoke-virtual {p0}, Ljava/lang/String;->hashCode()I
move-result v0
const/4 v1, 0x3
const/4 v2, 0x2
const/4 v3, 0x1
const/4 v4, 0x0
sparse-switch v0, :sswitch_data_8c
:cond_b
goto :goto_34
:sswitch_c
const-string v0, "audio/opus"
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_b
const/4 v0, 0x2
goto :goto_35
:sswitch_16
const-string v0, "audio/alac"
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_b
const/4 v0, 0x1
goto :goto_35
:sswitch_20
const-string v0, "audio/mp4a-latm"
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_b
const/4 v0, 0x0
goto :goto_35
:sswitch_2a
const-string v0, "audio/vorbis"
invoke-virtual {p0, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_b
const/4 v0, 0x3
goto :goto_35
:goto_34
const/4 v0, -0x1
:goto_35
if-eqz v0, :cond_84
if-eq v0, v3, :cond_84
if-eq v0, v2, :cond_84
if-eq v0, v1, :cond_3f
.line 190
const/4 v0, 0x0
return-object v0
.line 176
:cond_3f
invoke-interface {p1, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
.line 177
.local v0, "header0":[B
invoke-interface {p1, v3}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v5
check-cast v5, [B
.line 178
.local v5, "header1":[B
array-length v6, v0
array-length v7, v5
add-int/2addr v6, v7
add-int/lit8 v6, v6, 0x6
new-array v6, v6, [B
.line 179
.local v6, "extraData":[B
array-length v7, v0
shr-int/lit8 v7, v7, 0x8
int-to-byte v7, v7
aput-byte v7, v6, v4
.line 180
array-length v7, v0
and-int/lit16 v7, v7, 0xff
int-to-byte v7, v7
aput-byte v7, v6, v3
.line 181
array-length v3, v0
invoke-static {v0, v4, v6, v2, v3}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 182
array-length v3, v0
add-int/2addr v3, v2
aput-byte v4, v6, v3
.line 183
array-length v2, v0
add-int/2addr v2, v1
aput-byte v4, v6, v2
.line 184
array-length v1, v0
add-int/lit8 v1, v1, 0x4
array-length v2, v5
shr-int/lit8 v2, v2, 0x8
int-to-byte v2, v2
aput-byte v2, v6, v1
.line 185
array-length v1, v0
add-int/lit8 v1, v1, 0x5
array-length v2, v5
and-int/lit16 v2, v2, 0xff
int-to-byte v2, v2
aput-byte v2, v6, v1
.line 186
array-length v1, v0
add-int/lit8 v1, v1, 0x6
array-length v2, v5
invoke-static {v5, v4, v6, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 187
return-object v6
.line 174
.end local v0 # "header0":[B
.end local v5 # "header1":[B
.end local v6 # "extraData":[B
:cond_84
invoke-interface {p1, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v0
check-cast v0, [B
return-object v0
nop
:sswitch_data_8c
.sparse-switch
-0x3bd43e14 -> :sswitch_2a
-0x3313c2e -> :sswitch_20
0x59ac6426 -> :sswitch_16
0x59b2d2d8 -> :sswitch_c
.end sparse-switch
.end method
# virtual methods
.method protected createInputBuffer()Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.registers 3
.line 84
new-instance v0, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
const/4 v1, 0x2
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 33
invoke-virtual {p0}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->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 89
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/ffmpeg/FfmpegDecoderException;
.registers 4
.param p1, "error" # Ljava/lang/Throwable;
.line 94
new-instance v0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;
const-string v1, "Unexpected decode error"
invoke-direct {v0, v1, p1}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;-><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 33
invoke-virtual {p0, p1}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->createUnexpectedDecodeException(Ljava/lang/Throwable;)Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;
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/ffmpeg/FfmpegDecoderException;
.registers 14
.param p1, "inputBuffer" # Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.param p2, "outputBuffer" # Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;
.param p3, "reset" # Z
.line 100
if-eqz p3, :cond_1a
.line 101
iget-wide v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->nativeContext:J
iget-object v2, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->extraData:[B
invoke-direct {p0, v0, v1, v2}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->ffmpegReset(J[B)J
move-result-wide v0
iput-wide v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->nativeContext:J
.line 102
const-wide/16 v2, 0x0
cmp-long v4, v0, v2
if-nez v4, :cond_1a
.line 103
new-instance v0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;
const-string v1, "Error resetting (see logcat)."
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;-><init>(Ljava/lang/String;)V
return-object v0
.line 106
:cond_1a
iget-object v0, p1, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
.line 107
.local v0, "inputData":Ljava/nio/ByteBuffer;
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->limit()I
move-result v1
.line 108
.local v1, "inputSize":I
iget-wide v2, p1, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->timeUs:J
iget v4, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->outputBufferSize:I
invoke-virtual {p2, v2, v3, v4}, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;->init(JI)Ljava/nio/ByteBuffer;
move-result-object v9
.line 109
.local v9, "outputData":Ljava/nio/ByteBuffer;
iget-wide v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->nativeContext:J
iget v8, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->outputBufferSize:I
move-object v2, p0
move-object v5, v0
move v6, v1
move-object v7, v9
invoke-direct/range {v2 .. v8}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->ffmpegDecode(JLjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;I)I
move-result v2
.line 110
.local v2, "result":I
const/4 v3, -0x1
const/4 v4, 0x0
if-ne v2, v3, :cond_3e
.line 114
const/high16 v3, -0x80000000
invoke-virtual {p2, v3}, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;->setFlags(I)V
.line 115
return-object v4
.line 116
:cond_3e
const/4 v3, -0x2
if-ne v2, v3, :cond_49
.line 117
new-instance v3, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;
const-string v4, "Error decoding (see logcat)."
invoke-direct {v3, v4}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;-><init>(Ljava/lang/String;)V
return-object v3
.line 119
:cond_49
iget-boolean v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->hasOutputFormat:Z
if-nez v3, :cond_88
.line 120
iget-wide v5, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->nativeContext:J
invoke-direct {p0, v5, v6}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->ffmpegGetChannelCount(J)I
move-result v3
iput v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->channelCount:I
.line 121
iget-wide v5, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->nativeContext:J
invoke-direct {p0, v5, v6}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->ffmpegGetSampleRate(J)I
move-result v3
iput v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->sampleRate:I
.line 122
iget v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->sampleRate:I
if-nez v3, :cond_85
iget-object v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->codecName:Ljava/lang/String;
const-string v5, "alac"
invoke-virtual {v5, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v3
if-eqz v3, :cond_85
.line 123
iget-object v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->extraData:[B
invoke-static {v3}, Lcom/google/android/exoplayer2/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 126
new-instance v3, Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v5, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->extraData:[B
invoke-direct {v3, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;-><init>([B)V
.line 127
.local v3, "parsableExtraData":Lcom/google/android/exoplayer2/util/ParsableByteArray;
iget-object v5, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->extraData:[B
array-length v5, v5
add-int/lit8 v5, v5, -0x4
invoke-virtual {v3, v5}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->setPosition(I)V
.line 128
invoke-virtual {v3}, Lcom/google/android/exoplayer2/util/ParsableByteArray;->readUnsignedIntToInt()I
move-result v5
iput v5, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->sampleRate:I
.line 130
.end local v3 # "parsableExtraData":Lcom/google/android/exoplayer2/util/ParsableByteArray;
:cond_85
const/4 v3, 0x1
iput-boolean v3, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->hasOutputFormat:Z
.line 132
:cond_88
iget-object v3, p2, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;->data:Ljava/nio/ByteBuffer;
const/4 v5, 0x0
invoke-virtual {v3, v5}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 133
iget-object v3, p2, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;->data:Ljava/nio/ByteBuffer;
invoke-virtual {v3, v2}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
.line 134
return-object v4
.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 33
check-cast p2, Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;
invoke-virtual {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->decode(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;Lcom/google/android/exoplayer2/decoder/SimpleOutputBuffer;Z)Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoderException;
move-result-object p1
return-object p1
.end method
.method public getChannelCount()I
.registers 2
.line 148
iget v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->channelCount:I
return v0
.end method
.method public getEncoding()I
.registers 2
.line 162
iget v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->encoding:I
return v0
.end method
.method public getName()Ljava/lang/String;
.registers 3
.line 79
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "ffmpeg"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-static {}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegLibrary;->getVersion()Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v1, "-"
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v1, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->codecName:Ljava/lang/String;
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public getSampleRate()I
.registers 2
.line 155
iget v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->sampleRate:I
return v0
.end method
.method public release()V
.registers 3
.line 139
invoke-super {p0}, Lcom/google/android/exoplayer2/decoder/SimpleDecoder;->release()V
.line 140
iget-wide v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->nativeContext:J
invoke-direct {p0, v0, v1}, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->ffmpegRelease(J)V
.line 141
const-wide/16 v0, 0x0
iput-wide v0, p0, Lcom/google/android/exoplayer2/ext/ffmpeg/FfmpegDecoder;->nativeContext:J
.line 142
return-void
.end method