FloatResamplingAudioProcessor.smali
.class final Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;
.super Ljava/lang/Object;
.source "FloatResamplingAudioProcessor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/audio/AudioProcessor;
# static fields
.field private static final FLOAT_NAN_AS_INT:I
.field private static final PCM_32_BIT_INT_TO_PCM_32_BIT_FLOAT_FACTOR:D = 4.656612875245797E-10
# instance fields
.field private buffer:Ljava/nio/ByteBuffer;
.field private channelCount:I
.field private inputEnded:Z
.field private outputBuffer:Ljava/nio/ByteBuffer;
.field private sampleRateHz:I
.field private sourceEncoding:I
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 30
const/high16 v0, 0x7fc00000 # Float.NaN
invoke-static {v0}, Ljava/lang/Float;->floatToIntBits(F)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->FLOAT_NAN_AS_INT:I
return-void
.end method
.method public constructor <init>()V
.registers 2
.line 41
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 42
const/4 v0, -0x1
iput v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sampleRateHz:I
.line 43
iput v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->channelCount:I
.line 44
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sourceEncoding:I
.line 45
sget-object v0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
.line 46
sget-object v0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
.line 47
return-void
.end method
.method private static writePcm32BitFloat(ILjava/nio/ByteBuffer;)V
.registers 6
.param p0, "pcm32BitInt" # I
.param p1, "buffer" # Ljava/nio/ByteBuffer;
.line 163
int-to-double v0, p0
const-wide v2, 0x3e00000000200000L # 4.656612875245797E-10
invoke-static {v0, v1}, Ljava/lang/Double;->isNaN(D)Z
mul-double v0, v0, v2
double-to-float v0, v0
.line 164
.local v0, "pcm32BitFloat":F
invoke-static {v0}, Ljava/lang/Float;->floatToIntBits(F)I
move-result v1
.line 165
.local v1, "floatBits":I
sget v2, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->FLOAT_NAN_AS_INT:I
if-ne v1, v2, :cond_19
.line 166
const/4 v2, 0x0
invoke-static {v2}, Ljava/lang/Float;->floatToIntBits(F)I
move-result v1
.line 168
:cond_19
invoke-virtual {p1, v1}, Ljava/nio/ByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;
.line 169
return-void
.end method
# virtual methods
.method public configure(III)Z
.registers 5
.param p1, "sampleRateHz" # I
.param p2, "channelCount" # I
.param p3, "encoding" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/audio/AudioProcessor$UnhandledFormatException;
}
.end annotation
.line 52
invoke-static {p3}, Lcom/google/android/exoplayer2/util/Util;->isEncodingHighResolutionIntegerPcm(I)Z
move-result v0
if-eqz v0, :cond_1c
.line 55
iget v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sampleRateHz:I
if-ne v0, p1, :cond_14
iget v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->channelCount:I
if-ne v0, p2, :cond_14
iget v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sourceEncoding:I
if-ne v0, p3, :cond_14
.line 58
const/4 v0, 0x0
return v0
.line 60
:cond_14
iput p1, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sampleRateHz:I
.line 61
iput p2, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->channelCount:I
.line 62
iput p3, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sourceEncoding:I
.line 63
const/4 v0, 0x1
return v0
.line 53
:cond_1c
new-instance v0, Lcom/google/android/exoplayer2/audio/AudioProcessor$UnhandledFormatException;
invoke-direct {v0, p1, p2, p3}, Lcom/google/android/exoplayer2/audio/AudioProcessor$UnhandledFormatException;-><init>(III)V
throw v0
.end method
.method public flush()V
.registers 2
.line 143
sget-object v0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
.line 144
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->inputEnded:Z
.line 145
return-void
.end method
.method public getOutput()Ljava/nio/ByteBuffer;
.registers 3
.line 130
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
.line 131
.local v0, "outputBuffer":Ljava/nio/ByteBuffer;
sget-object v1, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v1, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
.line 132
return-object v0
.end method
.method public getOutputChannelCount()I
.registers 2
.line 73
iget v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->channelCount:I
return v0
.end method
.method public getOutputEncoding()I
.registers 2
.line 78
const/4 v0, 0x4
return v0
.end method
.method public getOutputSampleRateHz()I
.registers 2
.line 83
iget v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sampleRateHz:I
return v0
.end method
.method public isActive()Z
.registers 2
.line 68
iget v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sourceEncoding:I
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->isEncodingHighResolutionIntegerPcm(I)Z
move-result v0
return v0
.end method
.method public isEnded()Z
.registers 3
.line 138
iget-boolean v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->inputEnded:Z
if-eqz v0, :cond_c
iget-object v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
sget-object v1, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
if-ne v0, v1, :cond_c
const/4 v0, 0x1
goto :goto_d
:cond_c
const/4 v0, 0x0
:goto_d
return v0
.end method
.method public queueEndOfStream()V
.registers 2
.line 125
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->inputEnded:Z
.line 126
return-void
.end method
.method public queueInput(Ljava/nio/ByteBuffer;)V
.registers 10
.param p1, "inputBuffer" # Ljava/nio/ByteBuffer;
.line 88
iget v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sourceEncoding:I
const/high16 v1, 0x40000000 # 2.0f
if-ne v0, v1, :cond_8
const/4 v0, 0x1
goto :goto_9
:cond_8
const/4 v0, 0x0
.line 89
.local v0, "isInput32Bit":Z
:goto_9
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->position()I
move-result v1
.line 90
.local v1, "position":I
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I
move-result v2
.line 91
.local v2, "limit":I
sub-int v3, v2, v1
.line 93
.local v3, "size":I
if-eqz v0, :cond_17
move v4, v3
goto :goto_1b
:cond_17
div-int/lit8 v4, v3, 0x3
mul-int/lit8 v4, v4, 0x4
.line 94
.local v4, "resampledSize":I
:goto_1b
iget-object v5, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
invoke-virtual {v5}, Ljava/nio/ByteBuffer;->capacity()I
move-result v5
if-ge v5, v4, :cond_32
.line 95
invoke-static {v4}, Ljava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;
move-result-object v5
invoke-static {}, Ljava/nio/ByteOrder;->nativeOrder()Ljava/nio/ByteOrder;
move-result-object v6
invoke-virtual {v5, v6}, Ljava/nio/ByteBuffer;->order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
move-result-object v5
iput-object v5, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
goto :goto_37
.line 97
:cond_32
iget-object v5, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
invoke-virtual {v5}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;
.line 99
:goto_37
if-eqz v0, :cond_6d
.line 100
move v5, v1
.local v5, "i":I
:goto_3a
if-ge v5, v2, :cond_6c
.line 101
nop
.line 102
invoke-virtual {p1, v5}, Ljava/nio/ByteBuffer;->get(I)B
move-result v6
and-int/lit16 v6, v6, 0xff
add-int/lit8 v7, v5, 0x1
.line 103
invoke-virtual {p1, v7}, Ljava/nio/ByteBuffer;->get(I)B
move-result v7
and-int/lit16 v7, v7, 0xff
shl-int/lit8 v7, v7, 0x8
or-int/2addr v6, v7
add-int/lit8 v7, v5, 0x2
.line 104
invoke-virtual {p1, v7}, Ljava/nio/ByteBuffer;->get(I)B
move-result v7
and-int/lit16 v7, v7, 0xff
shl-int/lit8 v7, v7, 0x10
or-int/2addr v6, v7
add-int/lit8 v7, v5, 0x3
.line 105
invoke-virtual {p1, v7}, Ljava/nio/ByteBuffer;->get(I)B
move-result v7
and-int/lit16 v7, v7, 0xff
shl-int/lit8 v7, v7, 0x18
or-int/2addr v6, v7
.line 106
.local v6, "pcm32BitInteger":I
iget-object v7, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
invoke-static {v6, v7}, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->writePcm32BitFloat(ILjava/nio/ByteBuffer;)V
.line 100
.end local v6 # "pcm32BitInteger":I
add-int/lit8 v5, v5, 0x4
goto :goto_3a
.end local v5 # "i":I
:cond_6c
goto :goto_97
.line 109
:cond_6d
move v5, v1
.restart local v5 # "i":I
:goto_6e
if-ge v5, v2, :cond_97
.line 110
nop
.line 111
invoke-virtual {p1, v5}, Ljava/nio/ByteBuffer;->get(I)B
move-result v6
and-int/lit16 v6, v6, 0xff
shl-int/lit8 v6, v6, 0x8
add-int/lit8 v7, v5, 0x1
.line 112
invoke-virtual {p1, v7}, Ljava/nio/ByteBuffer;->get(I)B
move-result v7
and-int/lit16 v7, v7, 0xff
shl-int/lit8 v7, v7, 0x10
or-int/2addr v6, v7
add-int/lit8 v7, v5, 0x2
.line 113
invoke-virtual {p1, v7}, Ljava/nio/ByteBuffer;->get(I)B
move-result v7
and-int/lit16 v7, v7, 0xff
shl-int/lit8 v7, v7, 0x18
or-int/2addr v6, v7
.line 114
.restart local v6 # "pcm32BitInteger":I
iget-object v7, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
invoke-static {v6, v7}, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->writePcm32BitFloat(ILjava/nio/ByteBuffer;)V
.line 109
.end local v6 # "pcm32BitInteger":I
add-int/lit8 v5, v5, 0x3
goto :goto_6e
.line 118
.end local v5 # "i":I
:cond_97
:goto_97
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->limit()I
move-result v5
invoke-virtual {p1, v5}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 119
iget-object v5, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
invoke-virtual {v5}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;
.line 120
iget-object v5, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
iput-object v5, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->outputBuffer:Ljava/nio/ByteBuffer;
.line 121
return-void
.end method
.method public reset()V
.registers 2
.line 149
invoke-virtual {p0}, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->flush()V
.line 150
const/4 v0, -0x1
iput v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sampleRateHz:I
.line 151
iput v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->channelCount:I
.line 152
const/4 v0, 0x0
iput v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->sourceEncoding:I
.line 153
sget-object v0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->EMPTY_BUFFER:Ljava/nio/ByteBuffer;
iput-object v0, p0, Lcom/google/android/exoplayer2/audio/FloatResamplingAudioProcessor;->buffer:Ljava/nio/ByteBuffer;
.line 154
return-void
.end method