.class final Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker; .super Ljava/lang/Object; .source "SourceFile" # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$PlayState;, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener; } .end annotation # static fields .field private static final FORCE_RESET_WORKAROUND_TIMEOUT_MS:J = 0xc8L .field private static final MAX_AUDIO_TIMESTAMP_OFFSET_US:J = 0x4c4b40L .field private static final MAX_LATENCY_US:J = 0x4c4b40L .field private static final MAX_PLAYHEAD_OFFSET_COUNT:I = 0xa .field private static final MIN_LATENCY_SAMPLE_INTERVAL_US:I = 0x7a120 .field private static final MIN_PLAYHEAD_OFFSET_SAMPLE_INTERVAL_US:I = 0x7530 .field private static final PLAYSTATE_PAUSED:I = 0x2 .field private static final PLAYSTATE_PLAYING:I = 0x3 .field private static final PLAYSTATE_STOPPED:I = 0x1 # instance fields .field private audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .field private audioTrack:Landroid/media/AudioTrack; .field private bufferSize:I .field private bufferSizeUs:J .field private endPlaybackHeadPosition:J .field private forceResetWorkaroundTimeMs:J .field private getLatencyMethod:Ljava/lang/reflect/Method; .field private hasData:Z .field private isOutputPcm:Z .field private lastLatencySampleTimeUs:J .field private lastPlayheadSampleTimeUs:J .field private lastRawPlaybackHeadPosition:J .field private latencyUs:J .field private final listener:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener; .field private needsPassthroughWorkarounds:Z .field private nextPlayheadOffsetIndex:I .field private outputPcmFrameSize:I .field private outputSampleRate:I .field private passthroughWorkaroundPauseOffset:J .field private playheadOffsetCount:I .field private final playheadOffsets:[J .field private rawPlaybackHeadWrapCount:J .field private smoothedPlayheadOffsetUs:J .field private stopPlaybackHeadPosition:J .field private stopTimestampUs:J # direct methods .method public constructor (Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener;)V .locals 2 .line 96 invoke-direct {p0}, Ljava/lang/Object;->()V .line 97 invoke-static {p1}, Lcom/mbridge/msdk/playercommon/exoplayer2/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener; iput-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->listener:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener; .line 98 sget p1, Lcom/mbridge/msdk/playercommon/exoplayer2/util/Util;->SDK_INT:I const/16 v0, 0x12 if-lt p1, v0, :cond_0 :try_start_0 const-class p1, Landroid/media/AudioTrack; const-string v0, "getLatency" const/4 v1, 0x0 .line 100 invoke-virtual {p1, v0, v1}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; move-result-object p1 iput-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getLatencyMethod:Ljava/lang/reflect/Method; :try_end_0 .catch Ljava/lang/NoSuchMethodException; {:try_start_0 .. :try_end_0} :catch_0 :catch_0 :cond_0 const/16 p1, 0xa new-array p1, p1, [J iput-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->playheadOffsets:[J return-void .end method .method private forceHasPendingData()Z .locals 4 iget-boolean v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->needsPassthroughWorkarounds:Z if-eqz v0, :cond_0 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; .line 349 invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I move-result v0 const/4 v1, 0x2 if-ne v0, v1, :cond_0 .line 350 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getPlaybackHeadPosition()J move-result-wide v0 const-wide/16 v2, 0x0 cmp-long v0, v0, v2 if-nez v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method private framesToDurationUs(J)J .locals 2 const-wide/32 v0, 0xf4240 mul-long/2addr p1, v0 iget v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->outputSampleRate:I int-to-long v0, v0 .line 336 div-long/2addr p1, v0 return-wide p1 .end method .method private getPlaybackHeadPosition()J .locals 10 iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->stopTimestampUs:J const-wide v2, -0x7fffffffffffffffL # -4.9E-324 cmp-long v0, v0, v2 if-eqz v0, :cond_0 .line 367 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide v0 const-wide/16 v2, 0x3e8 mul-long/2addr v0, v2 iget-wide v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->stopTimestampUs:J sub-long/2addr v0, v2 iget v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->outputSampleRate:I int-to-long v2, v2 mul-long/2addr v0, v2 const-wide/32 v2, 0xf4240 .line 368 div-long/2addr v0, v2 iget-wide v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->endPlaybackHeadPosition:J iget-wide v4, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->stopPlaybackHeadPosition:J add-long/2addr v4, v0 .line 369 invoke-static {v2, v3, v4, v5}, Ljava/lang/Math;->min(JJ)J move-result-wide v0 return-wide v0 :cond_0 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; .line 372 invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I move-result v0 const/4 v1, 0x1 const-wide/16 v4, 0x0 if-ne v0, v1, :cond_1 return-wide v4 :cond_1 iget-object v1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; .line 378 invoke-virtual {v1}, Landroid/media/AudioTrack;->getPlaybackHeadPosition()I move-result v1 int-to-long v6, v1 const-wide v8, 0xffffffffL and-long/2addr v6, v8 iget-boolean v1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->needsPassthroughWorkarounds:Z if-eqz v1, :cond_3 const/4 v1, 0x2 if-ne v0, v1, :cond_2 cmp-long v1, v6, v4 if-nez v1, :cond_2 iget-wide v8, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastRawPlaybackHeadPosition:J iput-wide v8, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->passthroughWorkaroundPauseOffset:J :cond_2 iget-wide v8, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->passthroughWorkaroundPauseOffset:J add-long/2addr v6, v8 .line 389 :cond_3 sget v1, Lcom/mbridge/msdk/playercommon/exoplayer2/util/Util;->SDK_INT:I const/16 v8, 0x1c if-gt v1, v8, :cond_6 cmp-long v1, v6, v4 if-nez v1, :cond_5 iget-wide v8, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastRawPlaybackHeadPosition:J cmp-long v1, v8, v4 if-lez v1, :cond_5 const/4 v1, 0x3 if-ne v0, v1, :cond_5 iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->forceResetWorkaroundTimeMs:J cmp-long v0, v0, v2 if-nez v0, :cond_4 .line 399 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide v0 iput-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->forceResetWorkaroundTimeMs:J :cond_4 iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastRawPlaybackHeadPosition:J return-wide v0 :cond_5 iput-wide v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->forceResetWorkaroundTimeMs:J :cond_6 iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastRawPlaybackHeadPosition:J cmp-long v0, v0, v6 if-lez v0, :cond_7 iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->rawPlaybackHeadWrapCount:J const-wide/16 v2, 0x1 add-long/2addr v0, v2 iput-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->rawPlaybackHeadWrapCount:J :cond_7 iput-wide v6, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastRawPlaybackHeadPosition:J iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->rawPlaybackHeadWrapCount:J const/16 v2, 0x20 shl-long/2addr v0, v2 add-long/2addr v6, v0 return-wide v6 .end method .method private getPlaybackHeadPositionUs()J .locals 2 .line 360 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getPlaybackHeadPosition()J move-result-wide v0 invoke-direct {p0, v0, v1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->framesToDurationUs(J)J move-result-wide v0 return-wide v0 .end method .method private maybePollAndCheckTimestamp(JJ)V .locals 10 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 284 invoke-virtual {v0, p1, p2}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->maybePollTimestamp(J)Z move-result v0 if-nez v0, :cond_0 return-void :cond_0 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 289 invoke-virtual {v0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->getTimestampSystemTimeUs()J move-result-wide v4 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 290 invoke-virtual {v0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->getTimestampPositionFrames()J move-result-wide v2 sub-long v0, v4, p1 .line 291 invoke-static {v0, v1}, Ljava/lang/Math;->abs(J)J move-result-wide v0 const-wide/32 v6, 0x4c4b40 cmp-long v0, v0, v6 if-lez v0, :cond_1 iget-object v1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->listener:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener; move-wide v6, p1 move-wide v8, p3 .line 292 invoke-interface/range {v1 .. v9}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener;->onSystemTimeUsMismatch(JJJJ)V iget-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 297 invoke-virtual {p1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->rejectTimestamp()V goto :goto_0 .line 298 :cond_1 invoke-direct {p0, v2, v3}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->framesToDurationUs(J)J move-result-wide v0 sub-long/2addr v0, p3 invoke-static {v0, v1}, Ljava/lang/Math;->abs(J)J move-result-wide v0 cmp-long v0, v0, v6 if-lez v0, :cond_2 iget-object v1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->listener:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener; move-wide v6, p1 move-wide v8, p3 .line 300 invoke-interface/range {v1 .. v9}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener;->onPositionFramesMismatch(JJJJ)V iget-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 305 invoke-virtual {p1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->rejectTimestamp()V goto :goto_0 :cond_2 iget-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 307 invoke-virtual {p1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->acceptTimestamp()V :goto_0 return-void .end method .method private maybeSampleSyncParams()V .locals 13 .line 253 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getPlaybackHeadPositionUs()J move-result-wide v0 const-wide/16 v2, 0x0 cmp-long v4, v0, v2 if-nez v4, :cond_0 return-void .line 258 :cond_0 invoke-static {}, Ljava/lang/System;->nanoTime()J move-result-wide v4 const-wide/16 v6, 0x3e8 div-long/2addr v4, v6 iget-wide v6, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastPlayheadSampleTimeUs:J sub-long v6, v4, v6 const-wide/16 v8, 0x7530 cmp-long v6, v6, v8 if-ltz v6, :cond_2 iget-object v6, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->playheadOffsets:[J iget v7, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->nextPlayheadOffsetIndex:I sub-long v8, v0, v4 .line 261 aput-wide v8, v6, v7 add-int/lit8 v7, v7, 0x1 const/16 v6, 0xa .line 262 rem-int/2addr v7, v6 iput v7, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->nextPlayheadOffsetIndex:I iget v7, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->playheadOffsetCount:I if-ge v7, v6, :cond_1 add-int/lit8 v7, v7, 0x1 iput v7, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->playheadOffsetCount:I :cond_1 iput-wide v4, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastPlayheadSampleTimeUs:J iput-wide v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->smoothedPlayheadOffsetUs:J const/4 v2, 0x0 :goto_0 iget v3, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->playheadOffsetCount:I if-ge v2, v3, :cond_2 iget-wide v6, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->smoothedPlayheadOffsetUs:J iget-object v8, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->playheadOffsets:[J .line 269 aget-wide v9, v8, v2 int-to-long v11, v3 div-long/2addr v9, v11 add-long/2addr v6, v9 iput-wide v6, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->smoothedPlayheadOffsetUs:J add-int/lit8 v2, v2, 0x1 goto :goto_0 :cond_2 iget-boolean v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->needsPassthroughWorkarounds:Z if-eqz v2, :cond_3 return-void .line 279 :cond_3 invoke-direct {p0, v4, v5, v0, v1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->maybePollAndCheckTimestamp(JJ)V .line 280 invoke-direct {p0, v4, v5}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->maybeUpdateLatency(J)V return-void .end method .method private maybeUpdateLatency(J)V .locals 8 iget-boolean v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->isOutputPcm:Z if-eqz v0, :cond_1 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getLatencyMethod:Ljava/lang/reflect/Method; if-eqz v0, :cond_1 iget-wide v1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastLatencySampleTimeUs:J sub-long v1, p1, v1 const-wide/32 v3, 0x7a120 cmp-long v1, v1, v3 if-ltz v1, :cond_1 const/4 v1, 0x0 :try_start_0 iget-object v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; .line 319 invoke-virtual {v0, v2, v1}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/lang/Integer; invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I move-result v0 int-to-long v2, v0 const-wide/16 v4, 0x3e8 mul-long/2addr v2, v4 iget-wide v4, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->bufferSizeUs:J sub-long/2addr v2, v4 iput-wide v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->latencyUs:J const-wide/16 v4, 0x0 .line 321 invoke-static {v2, v3, v4, v5}, Ljava/lang/Math;->max(JJ)J move-result-wide v2 iput-wide v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->latencyUs:J const-wide/32 v6, 0x4c4b40 cmp-long v0, v2, v6 if-lez v0, :cond_0 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->listener:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener; .line 324 invoke-interface {v0, v2, v3}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener;->onInvalidLatency(J)V iput-wide v4, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->latencyUs:J :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_0 :catch_0 iput-object v1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getLatencyMethod:Ljava/lang/reflect/Method; :cond_0 :goto_0 iput-wide p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastLatencySampleTimeUs:J :cond_1 return-void .end method .method private static needsPassthroughWorkarounds(I)Z .locals 2 .line 355 sget v0, Lcom/mbridge/msdk/playercommon/exoplayer2/util/Util;->SDK_INT:I const/16 v1, 0x17 if-ge v0, v1, :cond_1 const/4 v0, 0x5 if-eq p0, v0, :cond_0 const/4 v0, 0x6 if-ne p0, v0, :cond_1 :cond_0 const/4 p0, 0x1 goto :goto_0 :cond_1 const/4 p0, 0x0 :goto_0 return p0 .end method .method private resetSyncParams()V .locals 3 const-wide/16 v0, 0x0 iput-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->smoothedPlayheadOffsetUs:J const/4 v2, 0x0 iput v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->playheadOffsetCount:I iput v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->nextPlayheadOffsetIndex:I iput-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastPlayheadSampleTimeUs:J return-void .end method # virtual methods .method public final getAvailableBufferSize(J)I .locals 4 .line 207 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getPlaybackHeadPosition()J move-result-wide v0 iget v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->outputPcmFrameSize:I int-to-long v2, v2 mul-long/2addr v0, v2 sub-long/2addr p1, v0 long-to-int p1, p1 iget p2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->bufferSize:I sub-int/2addr p2, p1 return p2 .end method .method public final getCurrentPositionUs(Z)J .locals 6 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; .line 132 invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I move-result v0 const/4 v1, 0x3 if-ne v0, v1, :cond_0 .line 133 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->maybeSampleSyncParams()V .line 138 :cond_0 invoke-static {}, Ljava/lang/System;->nanoTime()J move-result-wide v0 const-wide/16 v2, 0x3e8 div-long/2addr v0, v2 iget-object v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 139 invoke-virtual {v2}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->hasTimestamp()Z move-result v2 if-eqz v2, :cond_2 iget-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 141 invoke-virtual {p1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->getTimestampPositionFrames()J move-result-wide v2 .line 142 invoke-direct {p0, v2, v3}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->framesToDurationUs(J)J move-result-wide v2 iget-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 143 invoke-virtual {p1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->isTimestampAdvancing()Z move-result p1 if-nez p1, :cond_1 return-wide v2 :cond_1 iget-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 146 invoke-virtual {p1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->getTimestampSystemTimeUs()J move-result-wide v4 sub-long/2addr v0, v4 add-long/2addr v2, v0 return-wide v2 :cond_2 iget v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->playheadOffsetCount:I if-nez v2, :cond_3 .line 152 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getPlaybackHeadPositionUs()J move-result-wide v0 goto :goto_0 :cond_3 iget-wide v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->smoothedPlayheadOffsetUs:J add-long/2addr v0, v2 :goto_0 if-nez p1, :cond_4 iget-wide v2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->latencyUs:J sub-long/2addr v0, v2 :cond_4 return-wide v0 .end method .method public final handleEndOfStream(J)V .locals 4 .line 221 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getPlaybackHeadPosition()J move-result-wide v0 iput-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->stopPlaybackHeadPosition:J .line 222 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide v0 const-wide/16 v2, 0x3e8 mul-long/2addr v0, v2 iput-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->stopTimestampUs:J iput-wide p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->endPlaybackHeadPosition:J return-void .end method .method public final hasPendingData(J)Z .locals 2 .line 228 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getPlaybackHeadPosition()J move-result-wide v0 cmp-long p1, p1, v0 if-gtz p1, :cond_1 .line 229 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->forceHasPendingData()Z move-result p1 if-eqz p1, :cond_0 goto :goto_0 :cond_0 const/4 p1, 0x0 goto :goto_1 :cond_1 :goto_0 const/4 p1, 0x1 :goto_1 return p1 .end method .method public final isPlaying()Z .locals 2 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; .line 173 invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I move-result v0 const/4 v1, 0x3 if-ne v0, v1, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public final isStalled(J)Z .locals 4 iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->forceResetWorkaroundTimeMs:J const-wide v2, -0x7fffffffffffffffL # -4.9E-324 cmp-long v0, v0, v2 if-eqz v0, :cond_0 const-wide/16 v0, 0x0 cmp-long p1, p1, v0 if-lez p1, :cond_0 .line 215 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide p1 iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->forceResetWorkaroundTimeMs:J sub-long/2addr p1, v0 const-wide/16 v0, 0xc8 cmp-long p1, p1, v0 if-ltz p1, :cond_0 const/4 p1, 0x1 goto :goto_0 :cond_0 const/4 p1, 0x0 :goto_0 return p1 .end method .method public final mayHandleBuffer(J)Z .locals 8 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; .line 178 invoke-virtual {v0}, Landroid/media/AudioTrack;->getPlayState()I move-result v0 iget-boolean v1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->needsPassthroughWorkarounds:Z const/4 v2, 0x1 if-eqz v1, :cond_1 const/4 v1, 0x2 const/4 v3, 0x0 if-ne v0, v1, :cond_0 iput-boolean v3, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->hasData:Z return v3 :cond_0 if-ne v0, v2, :cond_1 .line 191 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->getPlaybackHeadPosition()J move-result-wide v4 const-wide/16 v6, 0x0 cmp-long v1, v4, v6 if-nez v1, :cond_1 return v3 :cond_1 iget-boolean v1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->hasData:Z .line 197 invoke-virtual {p0, p1, p2}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->hasPendingData(J)Z move-result p1 iput-boolean p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->hasData:Z if-eqz v1, :cond_2 if-nez p1, :cond_2 if-eq v0, v2, :cond_2 iget-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->listener:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener; if-eqz p1, :cond_2 iget p2, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->bufferSize:I iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->bufferSizeUs:J .line 199 invoke-static {v0, v1}, Lcom/mbridge/msdk/playercommon/exoplayer2/C;->usToMs(J)J move-result-wide v0 invoke-interface {p1, p2, v0, v1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker$Listener;->onUnderrun(IJ)V :cond_2 return v2 .end method .method public final pause()Z .locals 4 .line 234 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->resetSyncParams()V iget-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->stopTimestampUs:J const-wide v2, -0x7fffffffffffffffL # -4.9E-324 cmp-long v0, v0, v2 if-nez v0, :cond_0 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 238 invoke-virtual {v0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->reset()V const/4 v0, 0x1 return v0 :cond_0 const/4 v0, 0x0 return v0 .end method .method public final reset()V .locals 1 .line 247 invoke-direct {p0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->resetSyncParams()V const/4 v0, 0x0 iput-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; iput-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; return-void .end method .method public final setAudioTrack(Landroid/media/AudioTrack;III)V .locals 2 iput-object p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTrack:Landroid/media/AudioTrack; iput p3, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->outputPcmFrameSize:I iput p4, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->bufferSize:I .line 117 new-instance v0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; invoke-direct {v0, p1}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->(Landroid/media/AudioTrack;)V iput-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 118 invoke-virtual {p1}, Landroid/media/AudioTrack;->getSampleRate()I move-result p1 iput p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->outputSampleRate:I .line 119 invoke-static {p2}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->needsPassthroughWorkarounds(I)Z move-result p1 iput-boolean p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->needsPassthroughWorkarounds:Z .line 120 invoke-static {p2}, Lcom/mbridge/msdk/playercommon/exoplayer2/util/Util;->isEncodingPcm(I)Z move-result p1 iput-boolean p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->isOutputPcm:Z const-wide v0, -0x7fffffffffffffffL # -4.9E-324 if-eqz p1, :cond_0 .line 121 div-int/2addr p4, p3 int-to-long p1, p4 invoke-direct {p0, p1, p2}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->framesToDurationUs(J)J move-result-wide p1 goto :goto_0 :cond_0 move-wide p1, v0 :goto_0 iput-wide p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->bufferSizeUs:J const-wide/16 p1, 0x0 iput-wide p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->lastRawPlaybackHeadPosition:J iput-wide p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->rawPlaybackHeadWrapCount:J iput-wide p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->passthroughWorkaroundPauseOffset:J const/4 p3, 0x0 iput-boolean p3, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->hasData:Z iput-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->stopTimestampUs:J iput-wide v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->forceResetWorkaroundTimeMs:J iput-wide p1, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->latencyUs:J return-void .end method .method public final start()V .locals 1 iget-object v0, p0, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTrackPositionTracker;->audioTimestampPoller:Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller; .line 168 invoke-virtual {v0}, Lcom/mbridge/msdk/playercommon/exoplayer2/audio/AudioTimestampPoller;->reset()V return-void .end method