MMCDefaultAudioSink.smali
.class public Lcom/mmc/player/audioRender/MMCDefaultAudioSink;
.super Ljava/lang/Object;
.source "SourceFile"
# interfaces
.implements Lcom/mmc/player/audioRender/MMCAudioSink;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/mmc/player/audioRender/MMCDefaultAudioSink$PositionTrackerListener;,
Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
}
.end annotation
# static fields
.field private static final BUFFER_MULTIPLICATION_FACTOR:I = 0x4
.field public static final CURRENT_POSITION_NOT_SET:J = -0x8000000000000000L
.field private static final ERROR_BAD_VALUE:I = -0x2
.field private static final MAX_BUFFER_DURATION_US:J = 0xb71b0L
.field private static final MIN_BUFFER_DURATION_US:J = 0x3d090L
.field private static final MODE_STREAM:I = 0x1
.field private static final START_IN_SYNC:I = 0x1
.field private static final START_NEED_SYNC:I = 0x2
.field private static final START_NOT_SET:I = 0x0
.field private static final STATE_INITIALIZED:I = 0x1
.field private static final TAG:Ljava/lang/String; = "DefaultAudioSink"
.field private static final WRITE_NON_BLOCKING:I = 0x1
.annotation build Landroid/annotation/SuppressLint;
value = {
"InlinedApi"
}
.end annotation
.end field
# instance fields
.field private audioAttributes:Lcom/mmc/player/audioRender/MMCAudioAttributes;
.field private audioSessionId:I
.field private audioTrack:Landroid/media/AudioTrack;
.field private final audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
.field private configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
.field private handledEndOfStream:Z
.field private inputBuffer:Ljava/nio/ByteBuffer;
.field private lastFeedElapsedRealtimeMs:J
.field private listener:Lcom/mmc/player/audioRender/MMCAudioSink$Listener;
.field private mLastPointPositionUs:J
.field private mLastPointPresentationUs:J
.field private mLastPresentationUs:J
.field private mOldSpeed:F
.field private mSpeed:F
.field private outputBuffer:Ljava/nio/ByteBuffer;
.field private pendingConfiguration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
.field private playing:Z
.field private preV21OutputBuffer:[B
.field private preV21OutputBufferOffset:I
.field private final releasingConditionVariable:Landroid/os/ConditionVariable;
.field private startMediaTimeState:I
.field private startMediaTimeUs:J
.field private stoppedAudioTrack:Z
.field private submittedPcmBytes:J
.field private volume:F
.field private writtenPcmBytes:J
# direct methods
.method public constructor <init>()V
.registers 5
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/high16 v0, 0x3f800000 # 1.0f
.line 2
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mOldSpeed:F
.line 3
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mSpeed:F
.line 4
new-instance v1, Landroid/os/ConditionVariable;
const/4 v2, 0x1
invoke-direct {v1, v2}, Landroid/os/ConditionVariable;-><init>(Z)V
iput-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->releasingConditionVariable:Landroid/os/ConditionVariable;
.line 5
new-instance v1, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
new-instance v2, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$PositionTrackerListener;
const/4 v3, 0x0
invoke-direct {v2, p0, v3}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$PositionTrackerListener;-><init>(Lcom/mmc/player/audioRender/MMCDefaultAudioSink;Lcom/mmc/player/audioRender/MMCDefaultAudioSink$1;)V
invoke-direct {v1, v2}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;-><init>(Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker$Listener;)V
iput-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
.line 6
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->volume:F
const/4 v0, 0x0
.line 7
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
.line 8
sget-object v1, Lcom/mmc/player/audioRender/MMCAudioAttributes;->DEFAULT:Lcom/mmc/player/audioRender/MMCAudioAttributes;
iput-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioAttributes:Lcom/mmc/player/audioRender/MMCAudioAttributes;
.line 9
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioSessionId:I
return-void
.end method
.method public static INVOKEVIRTUAL_com_mmc_player_audioRender_MMCDefaultAudioSink_com_shopee_app_asm_anr_threadpool_ExecutorProxy_execute(Ljava/util/concurrent/ThreadPoolExecutor;Ljava/lang/Runnable;)V
.registers 4
.line 1
invoke-static {}, Lcom/shopee/app/asm/anr/threadpool/c;->b()Z
move-result v0
if-eqz v0, :cond_3a
invoke-static {}, Lcom/shopee/app/asm/anr/threadpool/c;->a()Z
move-result v0
if-eqz v0, :cond_3a
.line 2
:try_start_c
sget-object v0, Lcom/shopee/app/asm/anr/threadpool/c;->a:Landroid/os/HandlerThread;
.line 3
sget-object v0, Lcom/shopee/app/asm/anr/threadpool/c;->b:Landroid/os/Handler;
new-instance v1, Lcom/shopee/app/asm/anr/threadpool/a$b;
invoke-direct {v1, p0, p1}, Lcom/shopee/app/asm/anr/threadpool/a$b;-><init>(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)V
invoke-virtual {v0, v1}, Landroid/os/Handler;->post(Ljava/lang/Runnable;)Z
:try_end_18
.catchall {:try_start_c .. :try_end_18} :catchall_19
goto :goto_54
:catchall_19
move-exception v0
.line 4
invoke-virtual {v0}, Ljava/lang/Throwable;->getMessage()Ljava/lang/String;
sget-object v0, Lcom/shopee/app/asm/anr/threadpool/c;->a:Landroid/os/HandlerThread;
.line 5
:try_start_1f
invoke-static {p1, p0}, Lcom/shopee/app/asm/anr/threadpool/a;->a(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_2b
.line 6
sget-object p0, Lcom/shopee/app/asm/fix/threadpool/global/i;->e:Lcom/shopee/app/asm/fix/threadpool/global/j;
.line 7
invoke-virtual {p0, p1}, Lcom/shopee/app/asm/anr/threadpool/b;->execute(Ljava/lang/Runnable;)V
return-void
.line 8
:cond_2b
invoke-virtual {p0, p1}, Ljava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
:try_end_2e
.catchall {:try_start_1f .. :try_end_2e} :catchall_2f
goto :goto_54
:catchall_2f
move-exception p0
.line 9
sget-object p1, Lcom/shopee/app/asm/anr/threadpool/c;->a:Landroid/os/HandlerThread;
.line 10
invoke-static {}, Lcom/shopee/app/apm/c;->d()Lcom/shopee/app/apm/nonfatal/a;
move-result-object p1
invoke-virtual {p1, p0}, Lcom/shopee/app/apm/nonfatal/a;->c(Ljava/lang/Throwable;)V
goto :goto_54
.line 11
:cond_3a
:try_start_3a
invoke-static {p1, p0}, Lcom/shopee/app/asm/anr/threadpool/a;->a(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_46
.line 12
sget-object p0, Lcom/shopee/app/asm/fix/threadpool/global/i;->e:Lcom/shopee/app/asm/fix/threadpool/global/j;
.line 13
invoke-virtual {p0, p1}, Lcom/shopee/app/asm/anr/threadpool/b;->execute(Ljava/lang/Runnable;)V
return-void
.line 14
:cond_46
invoke-virtual {p0, p1}, Ljava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
:try_end_49
.catchall {:try_start_3a .. :try_end_49} :catchall_4a
goto :goto_54
:catchall_4a
move-exception p0
.line 15
sget-object p1, Lcom/shopee/app/asm/anr/threadpool/c;->a:Landroid/os/HandlerThread;
.line 16
invoke-static {}, Lcom/shopee/app/apm/c;->d()Lcom/shopee/app/apm/nonfatal/a;
move-result-object p1
invoke-virtual {p1, p0}, Lcom/shopee/app/apm/nonfatal/a;->c(Ljava/lang/Throwable;)V
:goto_54
return-void
.end method
.method public static INVOKEVIRTUAL_com_mmc_player_audioRender_MMCDefaultAudioSink_com_shopee_app_asm_anr_threadpool_ExecutorProxy_executeThread(Ljava/util/concurrent/ThreadPoolExecutor;Ljava/lang/Runnable;)V
.registers 3
.line 1
invoke-static {p1, p0}, Lcom/shopee/app/asm/anr/threadpool/a;->a(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_c
.line 2
sget-object p0, Lcom/shopee/app/asm/fix/threadpool/global/i;->e:Lcom/shopee/app/asm/fix/threadpool/global/j;
.line 3
invoke-virtual {p0, p1}, Lcom/shopee/app/asm/anr/threadpool/b;->execute(Ljava/lang/Runnable;)V
return-void
.line 4
:cond_c
invoke-static {p0, p1}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->INVOKEVIRTUAL_com_mmc_player_audioRender_MMCDefaultAudioSink_com_shopee_app_asm_anr_threadpool_ExecutorProxy_execute(Ljava/util/concurrent/ThreadPoolExecutor;Ljava/lang/Runnable;)V
return-void
.end method
.method public static synthetic a(Lcom/mmc/player/audioRender/MMCDefaultAudioSink;Landroid/media/AudioTrack;)V
.registers 2
invoke-direct {p0, p1}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->lambda$flush$0(Landroid/media/AudioTrack;)V
return-void
.end method
.method public static synthetic access$200(Lcom/mmc/player/audioRender/MMCDefaultAudioSink;)J
.registers 3
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getSubmittedFrames()J
move-result-wide v0
return-wide v0
.end method
.method public static synthetic access$300(Lcom/mmc/player/audioRender/MMCDefaultAudioSink;)J
.registers 3
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getWrittenFrames()J
move-result-wide v0
return-wide v0
.end method
.method public static synthetic access$400(Lcom/mmc/player/audioRender/MMCDefaultAudioSink;)Lcom/mmc/player/audioRender/MMCAudioSink$Listener;
.registers 1
iget-object p0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->listener:Lcom/mmc/player/audioRender/MMCAudioSink$Listener;
return-object p0
.end method
.method public static synthetic access$500(Lcom/mmc/player/audioRender/MMCDefaultAudioSink;)J
.registers 3
iget-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->lastFeedElapsedRealtimeMs:J
return-wide v0
.end method
.method private static getChannelConfig(I)I
.registers 1
invoke-static {p0}, Lcom/mmc/player/audioRender/util/AudioUtils;->getAudioTrackChannelConfig(I)I
move-result p0
return p0
.end method
.method private getMediaDuration(JF)J
.registers 10
.line 1
iget-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPointPresentationUs:J
const-wide/16 v2, 0x0
cmp-long v4, v0, v2
if-lez v4, :cond_c
iget-wide v4, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeUs:J
sub-long/2addr v0, v4
goto :goto_d
:cond_c
move-wide v0, v2
.line 2
:goto_d
iget-wide v4, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPointPositionUs:J
sub-long/2addr p1, v4
cmp-long v4, p1, v2
if-lez v4, :cond_1e
long-to-double p1, p1
float-to-double v2, p3
mul-double p1, p1, v2
.line 3
invoke-static {p1, p2}, Ljava/lang/Math;->round(D)J
move-result-wide p1
:goto_1c
add-long/2addr p1, v0
return-wide p1
:cond_1e
long-to-double p1, p1
.line 4
iget p3, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mOldSpeed:F
float-to-double v2, p3
mul-double p1, p1, v2
invoke-static {p1, p2}, Ljava/lang/Math;->round(D)J
move-result-wide p1
goto :goto_1c
.end method
.method private getSubmittedFrames()J
.registers 5
iget-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->submittedPcmBytes:J
iget-object v2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
iget v2, v2, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->inputPcmFrameSize:I
int-to-long v2, v2
div-long/2addr v0, v2
return-wide v0
.end method
.method private getWrittenFrames()J
.registers 5
iget-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->writtenPcmBytes:J
iget-object v2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
iget v2, v2, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->inputPcmFrameSize:I
int-to-long v2, v2
div-long/2addr v0, v2
return-wide v0
.end method
.method private initialize(J)V
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/mmc/player/audioRender/MMCAudioSink$InitializationException;
}
.end annotation
.line 1
iget-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->releasingConditionVariable:Landroid/os/ConditionVariable;
invoke-virtual {p1}, Landroid/os/ConditionVariable;->block()V
.line 2
iget-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
.line 3
invoke-static {p1}, Lcom/mmc/player/audioRender/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object p1
check-cast p1, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
iget-object p2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioAttributes:Lcom/mmc/player/audioRender/MMCAudioAttributes;
iget v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioSessionId:I
.line 4
invoke-virtual {p1, p2, v0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->buildAudioTrack(Lcom/mmc/player/audioRender/MMCAudioAttributes;I)Landroid/media/AudioTrack;
move-result-object p1
iput-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
.line 5
invoke-virtual {p1}, Landroid/media/AudioTrack;->getAudioSessionId()I
move-result p1
.line 6
iget p2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioSessionId:I
if-eq p2, p1, :cond_28
.line 7
iput p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioSessionId:I
.line 8
iget-object p2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->listener:Lcom/mmc/player/audioRender/MMCAudioSink$Listener;
if-eqz p2, :cond_28
.line 9
invoke-interface {p2, p1}, Lcom/mmc/player/audioRender/MMCAudioSink$Listener;->onAudioSessionId(I)V
.line 10
:cond_28
iget-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
iget-object p2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
iget v1, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->inputEncoding:I
iget v2, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->inputPcmFrameSize:I
iget v0, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->bufferSize:I
invoke-virtual {p1, p2, v1, v2, v0}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->setAudioTrack(Landroid/media/AudioTrack;III)V
.line 11
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->setVolumeInternal()V
return-void
.end method
.method private synthetic lambda$flush$0(Landroid/media/AudioTrack;)V
.registers 3
.line 1
:try_start_0
invoke-virtual {p1}, Landroid/media/AudioTrack;->flush()V
.line 2
invoke-virtual {p1}, Landroid/media/AudioTrack;->release()V
:try_end_6
.catchall {:try_start_0 .. :try_end_6} :catchall_c
.line 3
iget-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->releasingConditionVariable:Landroid/os/ConditionVariable;
invoke-virtual {p1}, Landroid/os/ConditionVariable;->open()V
return-void
:catchall_c
move-exception p1
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->releasingConditionVariable:Landroid/os/ConditionVariable;
invoke-virtual {v0}, Landroid/os/ConditionVariable;->open()V
.line 4
throw p1
.end method
.method private playPendingData()V
.registers 4
.line 1
iget-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->stoppedAudioTrack:Z
if-nez v0, :cond_15
const/4 v0, 0x1
.line 2
iput-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->stoppedAudioTrack:Z
.line 3
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getWrittenFrames()J
move-result-wide v1
invoke-virtual {v0, v1, v2}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->handleEndOfStream(J)V
.line 4
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->stop()V
:cond_15
return-void
.end method
.method private setVolumeInternal()V
.registers 3
.line 1
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
if-nez v0, :cond_7
goto :goto_1c
.line 2
:cond_7
sget v0, Lcom/mmc/player/audioRender/util/AudioUtils;->SDK_INT:I
const/16 v1, 0x15
if-lt v0, v1, :cond_15
.line 3
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
iget v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->volume:F
invoke-static {v0, v1}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->setVolumeInternalV21(Landroid/media/AudioTrack;F)V
goto :goto_1c
.line 4
:cond_15
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
iget v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->volume:F
invoke-static {v0, v1}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->setVolumeInternalV3(Landroid/media/AudioTrack;F)V
:goto_1c
return-void
.end method
.method private static setVolumeInternalV21(Landroid/media/AudioTrack;F)V
.registers 2
.annotation build Landroid/annotation/TargetApi;
value = 0x15
.end annotation
invoke-virtual {p0, p1}, Landroid/media/AudioTrack;->setVolume(F)I
return-void
.end method
.method private static setVolumeInternalV3(Landroid/media/AudioTrack;F)V
.registers 2
invoke-virtual {p0, p1, p1}, Landroid/media/AudioTrack;->setStereoVolume(FF)I
return-void
.end method
.method private writeBuffer(Ljava/nio/ByteBuffer;J)V
.registers 9
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/mmc/player/audioRender/MMCAudioSink$WriteException;
}
.end annotation
.line 1
invoke-virtual {p1}, Ljava/nio/Buffer;->hasRemaining()Z
move-result p2
if-nez p2, :cond_7
return-void
.line 2
:cond_7
iget-object p2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->outputBuffer:Ljava/nio/ByteBuffer;
const/16 p3, 0x15
const/4 v0, 0x0
if-eqz p2, :cond_17
if-ne p2, p1, :cond_12
const/4 p2, 0x1
goto :goto_13
:cond_12
const/4 p2, 0x0
.line 3
:goto_13
invoke-static {p2}, Lcom/mmc/player/audioRender/util/Assertions;->checkArgument(Z)V
goto :goto_3a
.line 4
:cond_17
iput-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->outputBuffer:Ljava/nio/ByteBuffer;
.line 5
sget p2, Lcom/mmc/player/audioRender/util/AudioUtils;->SDK_INT:I
if-ge p2, p3, :cond_3a
.line 6
invoke-virtual {p1}, Ljava/nio/Buffer;->remaining()I
move-result p2
.line 7
iget-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->preV21OutputBuffer:[B
if-eqz v1, :cond_28
array-length v1, v1
if-ge v1, p2, :cond_2c
.line 8
:cond_28
new-array v1, p2, [B
iput-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->preV21OutputBuffer:[B
.line 9
:cond_2c
invoke-virtual {p1}, Ljava/nio/Buffer;->position()I
move-result v1
.line 10
iget-object v2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->preV21OutputBuffer:[B
invoke-virtual {p1, v2, v0, p2}, Ljava/nio/ByteBuffer;->get([BII)Ljava/nio/ByteBuffer;
.line 11
invoke-virtual {p1, v1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 12
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->preV21OutputBufferOffset:I
.line 13
:cond_3a
:goto_3a
invoke-virtual {p1}, Ljava/nio/Buffer;->remaining()I
move-result p2
.line 14
sget v1, Lcom/mmc/player/audioRender/util/AudioUtils;->SDK_INT:I
if-ge v1, p3, :cond_6a
.line 15
iget-object p3, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
iget-wide v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->writtenPcmBytes:J
invoke-virtual {p3, v1, v2}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->getAvailableBufferSize(J)I
move-result p3
if-lez p3, :cond_70
.line 16
invoke-static {p2, p3}, Ljava/lang/Math;->min(II)I
move-result p3
.line 17
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
iget-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->preV21OutputBuffer:[B
iget v2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->preV21OutputBufferOffset:I
invoke-virtual {v0, v1, v2, p3}, Landroid/media/AudioTrack;->write([BII)I
move-result v0
if-lez v0, :cond_70
.line 18
iget p3, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->preV21OutputBufferOffset:I
add-int/2addr p3, v0
iput p3, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->preV21OutputBufferOffset:I
.line 19
invoke-virtual {p1}, Ljava/nio/Buffer;->position()I
move-result p3
add-int/2addr p3, v0
invoke-virtual {p1, p3}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
goto :goto_70
.line 20
:cond_6a
iget-object p3, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
invoke-static {p3, p1, p2}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->writeNonBlockingV21(Landroid/media/AudioTrack;Ljava/nio/ByteBuffer;I)I
move-result v0
.line 21
:cond_70
:goto_70
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v1
iput-wide v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->lastFeedElapsedRealtimeMs:J
const/4 p1, 0x0
if-ltz v0, :cond_84
.line 22
iget-wide v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->writtenPcmBytes:J
int-to-long v3, v0
add-long/2addr v1, v3
iput-wide v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->writtenPcmBytes:J
if-ne v0, p2, :cond_83
.line 23
iput-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->outputBuffer:Ljava/nio/ByteBuffer;
:cond_83
return-void
.line 24
:cond_84
new-instance p2, Ljava/lang/StringBuilder;
invoke-direct {p2}, Ljava/lang/StringBuilder;-><init>()V
const-string p3, "writeBuffer error bytesWritten = "
invoke-virtual {p2, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {p2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p2
const-string p3, "DefaultAudioSink"
invoke-static {p3, p2, p1}, Lcom/mmc/player/log/MMCLogDelegate;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 25
new-instance p1, Lcom/mmc/player/audioRender/MMCAudioSink$WriteException;
invoke-direct {p1, v0}, Lcom/mmc/player/audioRender/MMCAudioSink$WriteException;-><init>(I)V
throw p1
.end method
.method private static writeNonBlockingV21(Landroid/media/AudioTrack;Ljava/nio/ByteBuffer;I)I
.registers 4
.annotation build Landroid/annotation/TargetApi;
value = 0x15
.end annotation
const/4 v0, 0x1
invoke-virtual {p0, p1, p2, v0}, Landroid/media/AudioTrack;->write(Ljava/nio/ByteBuffer;II)I
move-result p0
return p0
.end method
# virtual methods
.method public configure(III)V
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/mmc/player/audioRender/MMCAudioSink$ConfigurationException;
}
.end annotation
.line 26
iget v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mSpeed:F
invoke-virtual {p0, p1, p2, p3, v0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configure(IIIF)V
return-void
.end method
.method public configure(IIIF)V
.registers 13
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/mmc/player/audioRender/MMCAudioSink$ConfigurationException;
}
.end annotation
const-string v0, "configure, inputEncoding = "
const-string v1, " inputChannelCount = "
const-string v2, " inputSampleRate = "
.line 1
invoke-static {v0, p1, v1, p2, v2}, Landroidx/appcompat/g;->f(Ljava/lang/String;ILjava/lang/String;ILjava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
.line 2
invoke-virtual {v0, p3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, " speed = "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p4}, Ljava/lang/StringBuilder;->append(F)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "DefaultAudioSink"
invoke-static {v1, v0}, Lcom/mmc/player/log/MMCLogDelegate;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 3
invoke-static {p2}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getChannelConfig(I)I
move-result v5
if-eqz v5, :cond_4e
.line 4
invoke-static {p1, p2}, Lcom/mmc/player/audioRender/util/AudioUtils;->getPcmFrameSize(II)I
move-result v3
.line 5
new-instance p2, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
move-object v2, p2
move v4, p3
move v6, p1
move v7, p4
invoke-direct/range {v2 .. v7}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;-><init>(IIIIF)V
.line 6
iget-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->pendingConfiguration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
if-eqz p1, :cond_37
const/4 p1, 0x1
goto :goto_38
:cond_37
const/4 p1, 0x0
.line 7
:goto_38
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result p3
if-eqz p3, :cond_4b
iget-object p3, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
invoke-virtual {p2, p3}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->canReuseAudioTrack(Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;)Z
move-result p3
if-eqz p3, :cond_48
if-eqz p1, :cond_4b
.line 8
:cond_48
iput-object p2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->pendingConfiguration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
goto :goto_4d
.line 9
:cond_4b
iput-object p2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
:goto_4d
return-void
:cond_4e
const-string p1, "configure: channelCount is invalid"
.line 10
invoke-static {v1, p1}, Lcom/mmc/player/log/MMCLogDelegate;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 11
new-instance p1, Lcom/mmc/player/audioRender/MMCAudioSink$ConfigurationException;
const-string p3, "Unsupported channel count: "
.line 12
invoke-static {p3, p2}, Landroidx/appcompat/widget/h;->a(Ljava/lang/String;I)Ljava/lang/String;
move-result-object p2
.line 13
invoke-direct {p1, p2}, Lcom/mmc/player/audioRender/MMCAudioSink$ConfigurationException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public flush()V
.registers 5
.line 1
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
if-eqz v0, :cond_4e
const-wide/16 v0, 0x0
.line 2
iput-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPointPositionUs:J
.line 3
iput-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPointPresentationUs:J
.line 4
iput-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPresentationUs:J
.line 5
iput-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->submittedPcmBytes:J
.line 6
iput-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->writtenPcmBytes:J
const/4 v0, 0x0
.line 7
iput-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->inputBuffer:Ljava/nio/ByteBuffer;
.line 8
iput-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->outputBuffer:Ljava/nio/ByteBuffer;
const/4 v1, 0x0
.line 9
iput-boolean v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->stoppedAudioTrack:Z
.line 10
iput-boolean v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->handledEndOfStream:Z
.line 11
iput v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
.line 12
iget-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-virtual {v1}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->isPlaying()Z
move-result v1
if-eqz v1, :cond_2b
.line 13
iget-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v1}, Landroid/media/AudioTrack;->pause()V
.line 14
:cond_2b
iget-object v1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
.line 15
iput-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
.line 16
iget-object v2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->pendingConfiguration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
if-eqz v2, :cond_37
.line 17
iput-object v2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
.line 18
iput-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->pendingConfiguration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
.line 19
:cond_37
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-virtual {v0}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->reset()V
.line 20
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->releasingConditionVariable:Landroid/os/ConditionVariable;
invoke-virtual {v0}, Landroid/os/ConditionVariable;->close()V
.line 21
invoke-static {}, Lcom/mmc/player/utils/MMCCpuThreadPool;->get()Ljava/util/concurrent/ThreadPoolExecutor;
move-result-object v0
new-instance v2, Lcom/facebook/appevents/iap/e;
const/4 v3, 0x4
invoke-direct {v2, p0, v1, v3}, Lcom/facebook/appevents/iap/e;-><init>(Ljava/lang/Object;Ljava/lang/Object;I)V
invoke-static {v0, v2}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->INVOKEVIRTUAL_com_mmc_player_audioRender_MMCDefaultAudioSink_com_shopee_app_asm_anr_threadpool_ExecutorProxy_executeThread(Ljava/util/concurrent/ThreadPoolExecutor;Ljava/lang/Runnable;)V
:cond_4e
return-void
.end method
.method public getCurrentPositionUs(Z)J
.registers 6
.line 1
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
if-eqz v0, :cond_2d
iget v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
if-nez v0, :cond_b
goto :goto_2d
.line 2
:cond_b
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-virtual {v0, p1}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->getCurrentPositionUs(Z)J
move-result-wide v0
.line 3
iget-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getWrittenFrames()J
move-result-wide v2
invoke-virtual {p1, v2, v3}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->framesToDurationUs(J)J
move-result-wide v2
invoke-static {v0, v1, v2, v3}, Ljava/lang/Math;->min(JJ)J
move-result-wide v0
.line 4
iget-wide v2, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeUs:J
iget-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
# getter for: Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->speed:F
invoke-static {p1}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->access$100(Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;)F
move-result p1
invoke-direct {p0, v0, v1, p1}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getMediaDuration(JF)J
move-result-wide v0
add-long/2addr v2, v0
return-wide v2
:cond_2d
:goto_2d
const-wide/high16 v0, -0x8000000000000000L
return-wide v0
.end method
.method public handleBuffer(Ljava/nio/ByteBuffer;J)Z
.registers 23
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/mmc/player/audioRender/MMCAudioSink$InitializationException;,
Lcom/mmc/player/audioRender/MMCAudioSink$WriteException;
}
.end annotation
move-object/from16 v0, p0
move-object/from16 v1, p1
move-wide/from16 v2, p2
.line 1
iget-object v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->inputBuffer:Ljava/nio/ByteBuffer;
const/4 v5, 0x0
const/4 v6, 0x1
if-eqz v4, :cond_11
if-ne v1, v4, :cond_f
goto :goto_11
:cond_f
const/4 v4, 0x0
goto :goto_12
:cond_11
:goto_11
const/4 v4, 0x1
:goto_12
invoke-static {v4}, Lcom/mmc/player/audioRender/util/Assertions;->checkArgument(Z)V
.line 2
iput-wide v2, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPresentationUs:J
.line 3
iget-object v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->pendingConfiguration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
const/4 v7, 0x0
if-eqz v4, :cond_38
.line 4
iget-object v8, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
invoke-virtual {v4, v8}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->canReuseAudioTrack(Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;)Z
move-result v4
if-nez v4, :cond_32
.line 5
invoke-direct/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->playPendingData()V
.line 6
invoke-virtual/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->hasPendingData()Z
move-result v4
if-eqz v4, :cond_2e
return v5
.line 7
:cond_2e
invoke-virtual/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->flush()V
goto :goto_38
.line 8
:cond_32
iget-object v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->pendingConfiguration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
iput-object v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
.line 9
iput-object v7, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->pendingConfiguration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
.line 10
:cond_38
:goto_38
invoke-virtual/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v4
if-nez v4, :cond_48
.line 11
invoke-direct {v0, v2, v3}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->initialize(J)V
.line 12
iget-boolean v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->playing:Z
if-eqz v4, :cond_48
.line 13
invoke-virtual/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->play()V
.line 14
:cond_48
iget-object v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-direct/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getWrittenFrames()J
move-result-wide v8
invoke-virtual {v4, v8, v9}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->mayHandleBuffer(J)Z
move-result v4
if-nez v4, :cond_55
return v5
.line 15
:cond_55
iget-object v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->inputBuffer:Ljava/nio/ByteBuffer;
const-string v8, "DefaultAudioSink"
if-nez v4, :cond_d4
.line 16
invoke-virtual/range {p1 .. p1}, Ljava/nio/Buffer;->hasRemaining()Z
move-result v4
if-nez v4, :cond_62
return v6
.line 17
:cond_62
iget v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
const-wide/16 v9, 0x0
if-nez v4, :cond_71
.line 18
invoke-static {v9, v10, v2, v3}, Ljava/lang/Math;->max(JJ)J
move-result-wide v9
iput-wide v9, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeUs:J
.line 19
iput v6, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
goto :goto_c2
.line 20
:cond_71
iget-wide v11, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeUs:J
iget-object v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
.line 21
invoke-direct/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getSubmittedFrames()J
move-result-wide v13
invoke-virtual {v4, v13, v14}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->framesToDurationUs(J)J
move-result-wide v13
add-long/2addr v13, v11
.line 22
iget v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
const/4 v11, 0x2
if-ne v4, v6, :cond_a3
sub-long v15, v13, v2
.line 23
invoke-static/range {v15 .. v16}, Ljava/lang/Math;->abs(J)J
move-result-wide v15
const-wide/32 v17, 0xc350
cmp-long v4, v15, v17
if-lez v4, :cond_a3
const-string v4, "Discontinuity detected [expected "
const-string v12, ", got "
.line 24
invoke-static {v4, v13, v14, v12}, Landroidx/appcompat/k;->e(Ljava/lang/String;JLjava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
const-string v12, "]"
.line 25
invoke-static {v4, v2, v3, v12}, Landroid/support/v4/media/session/b;->c(Ljava/lang/StringBuilder;JLjava/lang/String;)Ljava/lang/String;
move-result-object v4
.line 26
invoke-static {v8, v4, v7}, Lcom/mmc/player/log/MMCLogDelegate;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 27
iput v11, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
.line 28
:cond_a3
iget v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
if-ne v4, v11, :cond_c2
const-wide/32 v11, 0x186a0
cmp-long v4, v2, v11
if-lez v4, :cond_c2
sub-long v11, v2, v13
.line 29
iget-wide v13, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeUs:J
add-long/2addr v13, v11
iput-wide v13, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeUs:J
.line 30
iput v6, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
.line 31
iget-object v4, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->listener:Lcom/mmc/player/audioRender/MMCAudioSink$Listener;
if-eqz v4, :cond_c2
cmp-long v13, v11, v9
if-eqz v13, :cond_c2
.line 32
invoke-interface {v4}, Lcom/mmc/player/audioRender/MMCAudioSink$Listener;->onPositionDiscontinuity()V
.line 33
:cond_c2
:goto_c2
iget-wide v9, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->submittedPcmBytes:J
long-to-float v4, v9
invoke-virtual/range {p1 .. p1}, Ljava/nio/Buffer;->remaining()I
move-result v9
int-to-float v9, v9
iget v10, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mSpeed:F
mul-float v9, v9, v10
add-float/2addr v9, v4
float-to-long v9, v9
iput-wide v9, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->submittedPcmBytes:J
.line 34
iput-object v1, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->inputBuffer:Ljava/nio/ByteBuffer;
.line 35
:cond_d4
iget-object v1, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->inputBuffer:Ljava/nio/ByteBuffer;
invoke-direct {v0, v1, v2, v3}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->writeBuffer(Ljava/nio/ByteBuffer;J)V
.line 36
iget-object v1, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->inputBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/Buffer;->hasRemaining()Z
move-result v1
if-nez v1, :cond_e4
.line 37
iput-object v7, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->inputBuffer:Ljava/nio/ByteBuffer;
return v6
.line 38
:cond_e4
iget-object v1, v0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-direct/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getWrittenFrames()J
move-result-wide v2
invoke-virtual {v1, v2, v3}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->isStalled(J)Z
move-result v1
if-eqz v1, :cond_f9
const-string v1, "Resetting stalled audio track"
.line 39
invoke-static {v8, v1, v7}, Lcom/mmc/player/log/MMCLogDelegate;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 40
invoke-virtual/range {p0 .. p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->flush()V
return v6
:cond_f9
return v5
.end method
.method public handleDiscontinuity()V
.registers 3
.line 1
iget v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
const/4 v1, 0x1
if-ne v0, v1, :cond_8
const/4 v0, 0x2
.line 2
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->startMediaTimeState:I
:cond_8
return-void
.end method
.method public hasPendingData()Z
.registers 4
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
if-eqz v0, :cond_14
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getWrittenFrames()J
move-result-wide v1
invoke-virtual {v0, v1, v2}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->hasPendingData(J)Z
move-result v0
if-eqz v0, :cond_14
const/4 v0, 0x1
goto :goto_15
:cond_14
const/4 v0, 0x0
:goto_15
return v0
.end method
.method public isInitialized()Z
.registers 2
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
if-eqz v0, :cond_6
const/4 v0, 0x1
goto :goto_7
:cond_6
const/4 v0, 0x0
:goto_7
return v0
.end method
.method public isPlaying()Z
.registers 2
iget-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->playing:Z
return v0
.end method
.method public isRenderEnded()Z
.registers 7
.line 1
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
const/4 v1, 0x1
if-nez v0, :cond_8
return v1
.line 2
:cond_8
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isSourceEnded()Z
move-result v2
invoke-virtual {v0, v2}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->getCurrentPositionUs(Z)J
move-result-wide v2
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getWrittenFrames()J
move-result-wide v4
invoke-virtual {v0, v4, v5}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->framesToDurationUs(J)J
move-result-wide v4
cmp-long v0, v2, v4
if-ltz v0, :cond_21
goto :goto_22
:cond_21
const/4 v1, 0x0
:goto_22
return v1
.end method
.method public isSourceEnded()Z
.registers 2
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
if-eqz v0, :cond_13
iget-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->handledEndOfStream:Z
if-eqz v0, :cond_11
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->hasPendingData()Z
move-result v0
if-nez v0, :cond_11
goto :goto_13
:cond_11
const/4 v0, 0x0
goto :goto_14
:cond_13
:goto_13
const/4 v0, 0x1
:goto_14
return v0
.end method
.method public pause()V
.registers 2
const/4 v0, 0x0
.line 1
iput-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->playing:Z
.line 2
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
if-eqz v0, :cond_16
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-virtual {v0}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->pause()Z
move-result v0
if-eqz v0, :cond_16
.line 3
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->pause()V
:cond_16
return-void
.end method
.method public play()V
.registers 2
const/4 v0, 0x1
.line 1
iput-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->playing:Z
.line 2
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
if-eqz v0, :cond_13
.line 3
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrackPositionTracker:Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;
invoke-virtual {v0}, Lcom/mmc/player/audioRender/MMCAudioTrackPositionTracker;->start()V
.line 4
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioTrack:Landroid/media/AudioTrack;
invoke-virtual {v0}, Landroid/media/AudioTrack;->play()V
:cond_13
return-void
.end method
.method public playToEndOfStream()V
.registers 2
.line 1
iget-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->handledEndOfStream:Z
if-nez v0, :cond_10
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->isInitialized()Z
move-result v0
if-eqz v0, :cond_10
.line 2
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->playPendingData()V
const/4 v0, 0x1
.line 3
iput-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->handledEndOfStream:Z
:cond_10
return-void
.end method
.method public reset()V
.registers 2
.line 1
invoke-virtual {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->flush()V
const/4 v0, 0x0
.line 2
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->audioSessionId:I
.line 3
iput-boolean v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->playing:Z
return-void
.end method
.method public setListener(Lcom/mmc/player/audioRender/MMCAudioSink$Listener;)V
.registers 2
iput-object p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->listener:Lcom/mmc/player/audioRender/MMCAudioSink$Listener;
return-void
.end method
.method public setSpeed(F)V
.registers 5
.line 1
iget v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mSpeed:F
iput v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mOldSpeed:F
.line 2
iput p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mSpeed:F
.line 3
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
if-eqz v0, :cond_1d
.line 4
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->getWrittenFrames()J
move-result-wide v1
invoke-virtual {v0, v1, v2}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->framesToDurationUs(J)J
move-result-wide v0
iput-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPointPositionUs:J
.line 5
iget-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPresentationUs:J
iput-wide v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->mLastPointPresentationUs:J
.line 6
iget-object v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->configuration:Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;
invoke-virtual {v0, p1}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink$Configuration;->setSpeed(F)V
:cond_1d
return-void
.end method
.method public setVolume(F)V
.registers 3
.line 1
iget v0, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->volume:F
cmpl-float v0, v0, p1
if-eqz v0, :cond_b
.line 2
iput p1, p0, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->volume:F
.line 3
invoke-direct {p0}, Lcom/mmc/player/audioRender/MMCDefaultAudioSink;->setVolumeInternal()V
:cond_b
return-void
.end method
.method public supportsOutput(II)Z
.registers 5
.line 1
invoke-static {p2}, Lcom/mmc/player/audioRender/util/AudioUtils;->isEncodingLinearPcm(I)Z
move-result v0
const/4 v1, 0x0
if-eqz v0, :cond_16
const/16 v0, 0x8
if-ge p1, v0, :cond_16
const/4 p1, 0x4
if-ne p2, p1, :cond_14
.line 2
sget p1, Lcom/mmc/player/audioRender/util/AudioUtils;->SDK_INT:I
const/16 p2, 0x15
if-lt p1, p2, :cond_15
:cond_14
const/4 v1, 0x1
:cond_15
return v1
:cond_16
const-string p1, "DefaultAudioSink"
const-string p2, "supportsOutput, encoding is not support!"
.line 3
invoke-static {p1, p2}, Lcom/mmc/player/log/MMCLogDelegate;->w(Ljava/lang/String;Ljava/lang/String;)V
return v1
.end method