MediaCodecRenderer.smali
.class public abstract Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;
.super Lcom/google/android/exoplayer2/BaseRenderer;
.source "MediaCodecRenderer.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$AdaptationWorkaroundMode;,
Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DrainAction;,
Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DrainState;,
Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$ReconfigurationState;,
Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$KeepCodecResult;,
Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
}
.end annotation
# static fields
.field private static final ADAPTATION_WORKAROUND_BUFFER:[B
.field private static final ADAPTATION_WORKAROUND_MODE_ALWAYS:I = 0x2
.field private static final ADAPTATION_WORKAROUND_MODE_NEVER:I = 0x0
.field private static final ADAPTATION_WORKAROUND_MODE_SAME_RESOLUTION:I = 0x1
.field private static final ADAPTATION_WORKAROUND_SLICE_WIDTH_HEIGHT:I = 0x20
.field protected static final CODEC_OPERATING_RATE_UNSET:F = -1.0f
.field private static final DRAIN_ACTION_FLUSH:I = 0x1
.field private static final DRAIN_ACTION_NONE:I = 0x0
.field private static final DRAIN_ACTION_REINITIALIZE:I = 0x2
.field private static final DRAIN_STATE_NONE:I = 0x0
.field private static final DRAIN_STATE_SIGNAL_END_OF_STREAM:I = 0x1
.field private static final DRAIN_STATE_WAIT_END_OF_STREAM:I = 0x2
.field protected static final KEEP_CODEC_RESULT_NO:I = 0x0
.field protected static final KEEP_CODEC_RESULT_YES_WITHOUT_RECONFIGURATION:I = 0x3
.field protected static final KEEP_CODEC_RESULT_YES_WITH_FLUSH:I = 0x1
.field protected static final KEEP_CODEC_RESULT_YES_WITH_RECONFIGURATION:I = 0x2
.field private static final MAX_CODEC_HOTSWAP_TIME_MS:J = 0x3e8L
.field private static final RECONFIGURATION_STATE_NONE:I = 0x0
.field private static final RECONFIGURATION_STATE_QUEUE_PENDING:I = 0x2
.field private static final RECONFIGURATION_STATE_WRITE_PENDING:I = 0x1
.field private static final TAG:Ljava/lang/String; = "MediaCodecRenderer"
# instance fields
.field private final assumedMinimumCodecOperatingRate:F
.field private availableCodecInfos:Ljava/util/ArrayDeque;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/ArrayDeque<",
"Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;",
">;"
}
.end annotation
.end field
.field private final buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.field private codec:Landroid/media/MediaCodec;
.field private codecAdaptationWorkaroundMode:I
.field private codecDrainAction:I
.field private codecDrainState:I
.field private codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/google/android/exoplayer2/drm/DrmSession<",
"Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;",
">;"
}
.end annotation
.end field
.field private codecFormat:Lcom/google/android/exoplayer2/Format;
.field private codecHotswapDeadlineMs:J
.field private codecInfo:Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.field private codecNeedsAdaptationWorkaroundBuffer:Z
.field private codecNeedsDiscardToSpsWorkaround:Z
.field private codecNeedsEosFlushWorkaround:Z
.field private codecNeedsEosOutputExceptionWorkaround:Z
.field private codecNeedsEosPropagation:Z
.field private codecNeedsFlushWorkaround:Z
.field private codecNeedsMonoChannelCountWorkaround:Z
.field private codecNeedsReconfigureWorkaround:Z
.field private codecOperatingRate:F
.field private codecReceivedBuffers:Z
.field private codecReceivedEos:Z
.field private codecReconfigurationState:I
.field private codecReconfigured:Z
.field private final decodeOnlyPresentationTimestamps:Ljava/util/ArrayList;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/ArrayList<",
"Ljava/lang/Long;",
">;"
}
.end annotation
.end field
.field protected decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters;
.field private final drmSessionManager:Lcom/google/android/exoplayer2/drm/DrmSessionManager;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/google/android/exoplayer2/drm/DrmSessionManager<",
"Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;",
">;"
}
.end annotation
.end field
.field private final flagsOnlyBuffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.field private final formatHolder:Lcom/google/android/exoplayer2/FormatHolder;
.field private final formatQueue:Lcom/google/android/exoplayer2/util/TimedValueQueue;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/google/android/exoplayer2/util/TimedValueQueue<",
"Lcom/google/android/exoplayer2/Format;",
">;"
}
.end annotation
.end field
.field private inputBuffers:[Ljava/nio/ByteBuffer;
.field private inputFormat:Lcom/google/android/exoplayer2/Format;
.field private inputIndex:I
.field private inputStreamEnded:Z
.field private final mediaCodecSelector:Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;
.field private mediaCrypto:Landroid/media/MediaCrypto;
.field private mediaCryptoRequiresSecureDecoder:Z
.field private outputBuffer:Ljava/nio/ByteBuffer;
.field private final outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
.field private outputBuffers:[Ljava/nio/ByteBuffer;
.field private outputFormat:Lcom/google/android/exoplayer2/Format;
.field private outputIndex:I
.field private outputStreamEnded:Z
.field private final playClearSamplesWithoutKeys:Z
.field private preferredDecoderInitializationException:Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
.field private renderTimeLimitMs:J
.field private rendererOperatingRate:F
.field private shouldSkipAdaptationWorkaroundOutputBuffer:Z
.field private shouldSkipOutputBuffer:Z
.field private sourceDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/google/android/exoplayer2/drm/DrmSession<",
"Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;",
">;"
}
.end annotation
.end field
.field private waitingForFirstSampleInFormat:Z
.field private waitingForFirstSyncSample:Z
.field private waitingForKeys:Z
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 279
const-string v0, "0000016742C00BDA259000000168CE0F13200000016588840DCE7118A0002FBF1C31C3275D78"
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Util;->getBytesFromHexString(Ljava/lang/String;)[B
move-result-object v0
sput-object v0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->ADAPTATION_WORKAROUND_BUFFER:[B
return-void
.end method
.method public constructor <init>(ILcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;Lcom/google/android/exoplayer2/drm/DrmSessionManager;ZF)V
.registers 9
.param p1, "trackType" # I
.param p2, "mediaCodecSelector" # Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;
.param p4, "playClearSamplesWithoutKeys" # Z
.param p5, "assumedMinimumCodecOperatingRate" # F
.annotation system Ldalvik/annotation/Signature;
value = {
"(I",
"Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;",
"Lcom/google/android/exoplayer2/drm/DrmSessionManager<",
"Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;",
">;ZF)V"
}
.end annotation
.line 361
.local p3, "drmSessionManager":Lcom/google/android/exoplayer2/drm/DrmSessionManager;, "Lcom/google/android/exoplayer2/drm/DrmSessionManager<Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;>;"
invoke-direct {p0, p1}, Lcom/google/android/exoplayer2/BaseRenderer;-><init>(I)V
.line 362
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/4 v1, 0x0
const/16 v2, 0x10
if-lt v0, v2, :cond_c
const/4 v0, 0x1
goto :goto_d
:cond_c
const/4 v0, 0x0
:goto_d
invoke-static {v0}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 363
invoke-static {p2}, Lcom/google/android/exoplayer2/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCodecSelector:Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;
.line 364
iput-object p3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drmSessionManager:Lcom/google/android/exoplayer2/drm/DrmSessionManager;
.line 365
iput-boolean p4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->playClearSamplesWithoutKeys:Z
.line 366
iput p5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->assumedMinimumCodecOperatingRate:F
.line 367
new-instance v0, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;-><init>(I)V
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.line 368
invoke-static {}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->newFlagsOnlyInstance()Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flagsOnlyBuffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.line 369
new-instance v0, Lcom/google/android/exoplayer2/FormatHolder;
invoke-direct {v0}, Lcom/google/android/exoplayer2/FormatHolder;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatHolder:Lcom/google/android/exoplayer2/FormatHolder;
.line 370
new-instance v0, Lcom/google/android/exoplayer2/util/TimedValueQueue;
invoke-direct {v0}, Lcom/google/android/exoplayer2/util/TimedValueQueue;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatQueue:Lcom/google/android/exoplayer2/util/TimedValueQueue;
.line 371
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decodeOnlyPresentationTimestamps:Ljava/util/ArrayList;
.line 372
new-instance v0, Landroid/media/MediaCodec$BufferInfo;
invoke-direct {v0}, Landroid/media/MediaCodec$BufferInfo;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
.line 373
iput v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 374
iput v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
.line 375
iput v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainAction:I
.line 376
const/high16 v0, -0x40800000 # -1.0f
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecOperatingRate:F
.line 377
const/high16 v0, 0x3f800000 # 1.0f
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->rendererOperatingRate:F
.line 378
const-wide v0, -0x7fffffffffffffffL # -4.9E-324
iput-wide v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->renderTimeLimitMs:J
.line 379
return-void
.end method
.method private codecAdaptationWorkaroundMode(Ljava/lang/String;)I
.registers 4
.param p1, "name" # Ljava/lang/String;
.line 1637
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x19
if-gt v0, v1, :cond_38
const-string v0, "OMX.Exynos.avc.dec.secure"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_38
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
.line 1638
const-string v1, "SM-T585"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_36
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
const-string v1, "SM-A510"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_36
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
.line 1639
const-string v1, "SM-A520"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-nez v0, :cond_36
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
const-string v1, "SM-J700"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_38
.line 1640
:cond_36
const/4 v0, 0x2
return v0
.line 1641
:cond_38
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x18
if-ge v0, v1, :cond_79
.line 1642
const-string v0, "OMX.Nvidia.h264.decode"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_4e
const-string v0, "OMX.Nvidia.h264.decode.secure"
invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_79
:cond_4e
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String;
.line 1643
const-string v1, "flounder"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_77
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String;
const-string v1, "flounder_lte"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_77
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String;
.line 1644
const-string v1, "grouper"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_77
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String;
const-string/jumbo v1, "tilapia"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_79
.line 1645
:cond_77
const/4 v0, 0x1
return v0
.line 1647
:cond_79
const/4 v0, 0x0
return v0
.end method
.method private static codecNeedsDiscardToSpsWorkaround(Ljava/lang/String;Lcom/google/android/exoplayer2/Format;)Z
.registers 4
.param p0, "name" # Ljava/lang/String;
.param p1, "format" # Lcom/google/android/exoplayer2/Format;
.line 1677
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x15
if-ge v0, v1, :cond_18
iget-object v0, p1, Lcom/google/android/exoplayer2/Format;->initializationData:Ljava/util/List;
invoke-interface {v0}, Ljava/util/List;->isEmpty()Z
move-result v0
if-eqz v0, :cond_18
.line 1678
const-string v0, "OMX.MTK.VIDEO.DECODER.AVC"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_18
const/4 v0, 0x1
goto :goto_19
:cond_18
const/4 v0, 0x0
.line 1677
:goto_19
return v0
.end method
.method private static codecNeedsEosFlushWorkaround(Ljava/lang/String;)Z
.registers 3
.param p0, "name" # Ljava/lang/String;
.line 1715
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x17
if-gt v0, v1, :cond_e
const-string v0, "OMX.google.vorbis.decoder"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_39
:cond_e
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x13
if-gt v0, v1, :cond_3b
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String;
.line 1717
const-string v1, "hb2000"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_29
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String;
const-string/jumbo v1, "stvm8"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_3b
.line 1718
:cond_29
const-string v0, "OMX.amlogic.avc.decoder.awesome"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_39
.line 1719
const-string v0, "OMX.amlogic.avc.decoder.awesome.secure"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_3b
:cond_39
const/4 v0, 0x1
goto :goto_3c
:cond_3b
const/4 v0, 0x0
.line 1715
:goto_3c
return v0
.end method
.method private static codecNeedsEosOutputExceptionWorkaround(Ljava/lang/String;)Z
.registers 3
.param p0, "name" # Ljava/lang/String;
.line 1734
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x15
if-ne v0, v1, :cond_10
const-string v0, "OMX.google.aac.decoder"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_10
const/4 v0, 0x1
goto :goto_11
:cond_10
const/4 v0, 0x0
:goto_11
return v0
.end method
.method private static codecNeedsEosPropagationWorkaround(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;)Z
.registers 4
.param p0, "codecInfo" # Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.line 1694
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->name:Ljava/lang/String;
.line 1695
.local v0, "name":Ljava/lang/String;
sget v1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v2, 0x11
if-gt v1, v2, :cond_18
.line 1696
const-string v1, "OMX.rk.video_decoder.avc"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_30
.line 1697
const-string v1, "OMX.allwinner.video.decoder.avc"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_30
:cond_18
sget-object v1, Lcom/google/android/exoplayer2/util/Util;->MANUFACTURER:Ljava/lang/String;
.line 1698
const-string v2, "Amazon"
invoke-virtual {v2, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_32
sget-object v1, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
const-string v2, "AFTS"
invoke-virtual {v2, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_32
iget-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->secure:Z
if-eqz v1, :cond_32
:cond_30
const/4 v1, 0x1
goto :goto_33
:cond_32
const/4 v1, 0x0
.line 1695
:goto_33
return v1
.end method
.method private static codecNeedsFlushWorkaround(Ljava/lang/String;)Z
.registers 3
.param p0, "name" # Ljava/lang/String;
.line 1616
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x12
if-lt v0, v1, :cond_3d
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
if-ne v0, v1, :cond_1a
.line 1618
const-string v0, "OMX.SEC.avc.dec"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_3d
const-string v0, "OMX.SEC.avc.dec.secure"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_3d
:cond_1a
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x13
if-ne v0, v1, :cond_3b
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
.line 1619
const-string v1, "SM-G800"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_3b
.line 1620
const-string v0, "OMX.Exynos.avc.dec"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_3d
const-string v0, "OMX.Exynos.avc.dec.secure"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_3b
goto :goto_3d
:cond_3b
const/4 v0, 0x0
goto :goto_3e
:cond_3d
:goto_3d
const/4 v0, 0x1
.line 1616
:goto_3e
return v0
.end method
.method private static codecNeedsMonoChannelCountWorkaround(Ljava/lang/String;Lcom/google/android/exoplayer2/Format;)Z
.registers 5
.param p0, "name" # Ljava/lang/String;
.param p1, "format" # Lcom/google/android/exoplayer2/Format;
.line 1751
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/4 v1, 0x1
const/16 v2, 0x12
if-gt v0, v2, :cond_14
iget v0, p1, Lcom/google/android/exoplayer2/Format;->channelCount:I
if-ne v0, v1, :cond_14
.line 1752
const-string v0, "OMX.MTK.AUDIO.DECODER.MP3"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_14
goto :goto_15
:cond_14
const/4 v1, 0x0
.line 1751
:goto_15
return v1
.end method
.method private static codecNeedsReconfigureWorkaround(Ljava/lang/String;)Z
.registers 3
.param p0, "name" # Ljava/lang/String;
.line 1663
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
const-string v1, "SM-T230"
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_14
const-string v0, "OMX.MARVELL.VIDEO.HW.CODA7542DECODER"
invoke-virtual {v0, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)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 private deviceNeedsDrmKeysToConfigureCodecWorkaround()Z
.registers 3
.line 1599
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MANUFACTURER:Ljava/lang/String;
const-string v1, "Amazon"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_20
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
.line 1600
const-string v1, "AFTM"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_1e
sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String;
.line 1601
const-string v1, "AFTB"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_20
:cond_1e
const/4 v0, 0x1
goto :goto_21
:cond_20
const/4 v0, 0x0
.line 1599
:goto_21
return v0
.end method
.method private drainAndFlushCodec()V
.registers 2
.line 1328
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedBuffers:Z
if-eqz v0, :cond_9
.line 1329
const/4 v0, 0x1
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
.line 1330
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainAction:I
.line 1332
:cond_9
return-void
.end method
.method private drainAndReinitializeCodec()V
.registers 2
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1341
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedBuffers:Z
if-eqz v0, :cond_b
.line 1342
const/4 v0, 0x1
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
.line 1343
const/4 v0, 0x2
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainAction:I
goto :goto_11
.line 1346
:cond_b
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseCodec()V
.line 1347
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->maybeInitCodec()V
.line 1349
:goto_11
return-void
.end method
.method private drainOutputBuffer(JJ)Z
.registers 22
.param p1, "positionUs" # J
.param p3, "elapsedRealtimeUs" # J
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1357
move-object/from16 v14, p0
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->hasOutputBuffer()Z
move-result v0
const/4 v15, 0x1
const/4 v13, 0x0
if-nez v0, :cond_a6
.line 1359
iget-boolean v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosOutputExceptionWorkaround:Z
if-eqz v0, :cond_2b
iget-boolean v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedEos:Z
if-eqz v0, :cond_2b
.line 1361
:try_start_12
iget-object v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
.line 1362
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getDequeueOutputBufferTimeoutUs()J
move-result-wide v2
invoke-virtual {v0, v1, v2, v3}, Landroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I
move-result v0
:try_end_1e
.catch Ljava/lang/IllegalStateException; {:try_start_12 .. :try_end_1e} :catch_1f
.line 1370
.local v0, "outputIndex":I
goto :goto_37
.line 1363
.end local v0 # "outputIndex":I
:catch_1f
move-exception v0
.line 1364
.local v0, "e":Ljava/lang/IllegalStateException;
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processEndOfStream()V
.line 1365
iget-boolean v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputStreamEnded:Z
if-eqz v1, :cond_2a
.line 1367
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseCodec()V
.line 1369
:cond_2a
return v13
.line 1372
.end local v0 # "e":Ljava/lang/IllegalStateException;
:cond_2b
iget-object v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
.line 1373
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getDequeueOutputBufferTimeoutUs()J
move-result-wide v2
invoke-virtual {v0, v1, v2, v3}, Landroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I
move-result v0
.line 1376
.local v0, "outputIndex":I
:goto_37
if-gez v0, :cond_58
.line 1377
const/4 v1, -0x2
if-ne v0, v1, :cond_40
.line 1378
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processOutputFormat()V
.line 1379
return v15
.line 1380
:cond_40
const/4 v1, -0x3
if-ne v0, v1, :cond_47
.line 1381
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processOutputBuffersChanged()V
.line 1382
return v15
.line 1385
:cond_47
iget-boolean v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosPropagation:Z
if-eqz v1, :cond_57
iget-boolean v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputStreamEnded:Z
if-nez v1, :cond_54
iget v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
const/4 v2, 0x2
if-ne v1, v2, :cond_57
.line 1387
:cond_54
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processEndOfStream()V
.line 1389
:cond_57
return v13
.line 1393
:cond_58
iget-boolean v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipAdaptationWorkaroundOutputBuffer:Z
if-eqz v1, :cond_64
.line 1394
iput-boolean v13, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipAdaptationWorkaroundOutputBuffer:Z
.line 1395
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v1, v0, v13}, Landroid/media/MediaCodec;->releaseOutputBuffer(IZ)V
.line 1396
return v15
.line 1397
:cond_64
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget v1, v1, Landroid/media/MediaCodec$BufferInfo;->size:I
if-nez v1, :cond_76
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget v1, v1, Landroid/media/MediaCodec$BufferInfo;->flags:I
and-int/lit8 v1, v1, 0x4
if-eqz v1, :cond_76
.line 1400
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processEndOfStream()V
.line 1401
return v13
.line 1404
:cond_76
iput v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputIndex:I
.line 1405
invoke-direct {v14, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getOutputBuffer(I)Ljava/nio/ByteBuffer;
move-result-object v1
iput-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffer:Ljava/nio/ByteBuffer;
.line 1408
if-eqz v1, :cond_95
.line 1409
iget-object v2, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget v2, v2, Landroid/media/MediaCodec$BufferInfo;->offset:I
invoke-virtual {v1, v2}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 1410
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffer:Ljava/nio/ByteBuffer;
iget-object v2, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget v2, v2, Landroid/media/MediaCodec$BufferInfo;->offset:I
iget-object v3, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget v3, v3, Landroid/media/MediaCodec$BufferInfo;->size:I
add-int/2addr v2, v3
invoke-virtual {v1, v2}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
.line 1412
:cond_95
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget-wide v1, v1, Landroid/media/MediaCodec$BufferInfo;->presentationTimeUs:J
invoke-direct {v14, v1, v2}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipOutputBuffer(J)Z
move-result v1
iput-boolean v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipOutputBuffer:Z
.line 1413
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget-wide v1, v1, Landroid/media/MediaCodec$BufferInfo;->presentationTimeUs:J
invoke-virtual {v14, v1, v2}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->updateOutputFormatForTime(J)Lcom/google/android/exoplayer2/Format;
.line 1417
.end local v0 # "outputIndex":I
:cond_a6
iget-boolean v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosOutputExceptionWorkaround:Z
if-eqz v0, :cond_de
iget-boolean v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedEos:Z
if-eqz v0, :cond_de
.line 1419
:try_start_ae
iget-object v6, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget-object v7, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffer:Ljava/nio/ByteBuffer;
iget v8, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputIndex:I
iget-object v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget v9, v0, Landroid/media/MediaCodec$BufferInfo;->flags:I
iget-object v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget-wide v10, v0, Landroid/media/MediaCodec$BufferInfo;->presentationTimeUs:J
iget-boolean v12, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipOutputBuffer:Z
iget-object v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputFormat:Lcom/google/android/exoplayer2/Format;
:try_end_c0
.catch Ljava/lang/IllegalStateException; {:try_start_ae .. :try_end_c0} :catch_d0
.line 1420
move-object/from16 v1, p0
move-wide/from16 v2, p1
move-wide/from16 v4, p3
const/16 v16, 0x0
move-object v13, v0
:try_start_c9
invoke-virtual/range {v1 .. v13}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processOutputBuffer(JJLandroid/media/MediaCodec;Ljava/nio/ByteBuffer;IIJZLcom/google/android/exoplayer2/Format;)Z
move-result v0
:try_end_cd
.catch Ljava/lang/IllegalStateException; {:try_start_c9 .. :try_end_cd} :catch_ce
.line 1437
.local v0, "processedOutputBuffer":Z
goto :goto_fc
.line 1430
.end local v0 # "processedOutputBuffer":Z
:catch_ce
move-exception v0
goto :goto_d3
:catch_d0
move-exception v0
const/16 v16, 0x0
.line 1431
.local v0, "e":Ljava/lang/IllegalStateException;
:goto_d3
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processEndOfStream()V
.line 1432
iget-boolean v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputStreamEnded:Z
if-eqz v1, :cond_dd
.line 1434
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseCodec()V
.line 1436
:cond_dd
return v16
.line 1417
.end local v0 # "e":Ljava/lang/IllegalStateException;
:cond_de
const/16 v16, 0x0
.line 1439
iget-object v6, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget-object v7, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffer:Ljava/nio/ByteBuffer;
iget v8, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputIndex:I
iget-object v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget v9, v0, Landroid/media/MediaCodec$BufferInfo;->flags:I
iget-object v0, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget-wide v10, v0, Landroid/media/MediaCodec$BufferInfo;->presentationTimeUs:J
iget-boolean v12, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipOutputBuffer:Z
iget-object v13, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputFormat:Lcom/google/android/exoplayer2/Format;
.line 1440
move-object/from16 v1, p0
move-wide/from16 v2, p1
move-wide/from16 v4, p3
invoke-virtual/range {v1 .. v13}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processOutputBuffer(JJLandroid/media/MediaCodec;Ljava/nio/ByteBuffer;IIJZLcom/google/android/exoplayer2/Format;)Z
move-result v0
.line 1452
.local v0, "processedOutputBuffer":Z
:goto_fc
if-eqz v0, :cond_11a
.line 1453
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget-wide v1, v1, Landroid/media/MediaCodec$BufferInfo;->presentationTimeUs:J
invoke-virtual {v14, v1, v2}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onProcessedOutputBuffer(J)V
.line 1454
iget-object v1, v14, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBufferInfo:Landroid/media/MediaCodec$BufferInfo;
iget v1, v1, Landroid/media/MediaCodec$BufferInfo;->flags:I
and-int/lit8 v1, v1, 0x4
if-eqz v1, :cond_10f
const/4 v13, 0x1
goto :goto_110
:cond_10f
const/4 v13, 0x0
:goto_110
move v1, v13
.line 1455
.local v1, "isEndOfStream":Z
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetOutputBuffer()V
.line 1456
if-nez v1, :cond_117
.line 1457
return v15
.line 1459
:cond_117
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processEndOfStream()V
.line 1462
.end local v1 # "isEndOfStream":Z
:cond_11a
return v16
.end method
.method private feedInputBuffer()Z
.registers 15
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 953
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
const/4 v1, 0x0
if-eqz v0, :cond_1b0
iget v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
const/4 v3, 0x2
if-eq v2, v3, :cond_1b0
iget-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputStreamEnded:Z
if-eqz v2, :cond_10
goto/16 :goto_1b0
.line 957
:cond_10
iget v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputIndex:I
if-gez v2, :cond_2c
.line 958
const-wide/16 v4, 0x0
invoke-virtual {v0, v4, v5}, Landroid/media/MediaCodec;->dequeueInputBuffer(J)I
move-result v0
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputIndex:I
.line 959
if-gez v0, :cond_1f
.line 960
return v1
.line 962
:cond_1f
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getInputBuffer(I)Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, v2, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
.line 963
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->clear()V
.line 966
:cond_2c
iget v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
const/4 v2, 0x1
if-ne v0, v2, :cond_4a
.line 969
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosPropagation:Z
if-eqz v0, :cond_36
goto :goto_47
.line 972
:cond_36
iput-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedEos:Z
.line 973
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputIndex:I
const/4 v6, 0x0
const/4 v7, 0x0
const-wide/16 v8, 0x0
const/4 v10, 0x4
invoke-virtual/range {v4 .. v10}, Landroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
.line 974
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetInputBuffer()V
.line 976
:goto_47
iput v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
.line 977
return v1
.line 980
:cond_4a
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsAdaptationWorkaroundBuffer:Z
if-eqz v0, :cond_6d
.line 981
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsAdaptationWorkaroundBuffer:Z
.line 982
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
iget-object v0, v0, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
sget-object v1, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->ADAPTATION_WORKAROUND_BUFFER:[B
invoke-virtual {v0, v1}, Ljava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;
.line 983
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputIndex:I
const/4 v5, 0x0
sget-object v0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->ADAPTATION_WORKAROUND_BUFFER:[B
array-length v6, v0
const-wide/16 v7, 0x0
const/4 v9, 0x0
invoke-virtual/range {v3 .. v9}, Landroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
.line 984
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetInputBuffer()V
.line 985
iput-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedBuffers:Z
.line 986
return v2
.line 990
:cond_6d
const/4 v0, 0x0
.line 991
.local v0, "adaptiveReconfigurationBytes":I
iget-boolean v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForKeys:Z
if-eqz v4, :cond_74
.line 993
const/4 v4, -0x4
.local v4, "result":I
goto :goto_a9
.line 997
.end local v4 # "result":I
:cond_74
iget v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
if-ne v4, v2, :cond_99
.line 998
const/4 v4, 0x0
.local v4, "i":I
:goto_79
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
iget-object v5, v5, Lcom/google/android/exoplayer2/Format;->initializationData:Ljava/util/List;
invoke-interface {v5}, Ljava/util/List;->size()I
move-result v5
if-ge v4, v5, :cond_97
.line 999
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
iget-object v5, v5, Lcom/google/android/exoplayer2/Format;->initializationData:Ljava/util/List;
invoke-interface {v5, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v5
check-cast v5, [B
.line 1000
.local v5, "data":[B
iget-object v6, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
iget-object v6, v6, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
invoke-virtual {v6, v5}, Ljava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;
.line 998
.end local v5 # "data":[B
add-int/lit8 v4, v4, 0x1
goto :goto_79
.line 1002
.end local v4 # "i":I
:cond_97
iput v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 1004
:cond_99
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
iget-object v4, v4, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->position()I
move-result v0
.line 1005
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatHolder:Lcom/google/android/exoplayer2/FormatHolder;
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {p0, v4, v5, v1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->readSource(Lcom/google/android/exoplayer2/FormatHolder;Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;Z)I
move-result v4
.line 1008
.local v4, "result":I
:goto_a9
const/4 v5, -0x3
if-ne v4, v5, :cond_ad
.line 1009
return v1
.line 1011
:cond_ad
const/4 v5, -0x5
if-ne v4, v5, :cond_c3
.line 1012
iget v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
if-ne v1, v3, :cond_bb
.line 1015
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->clear()V
.line 1016
iput v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 1018
:cond_bb
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatHolder:Lcom/google/android/exoplayer2/FormatHolder;
iget-object v1, v1, Lcom/google/android/exoplayer2/FormatHolder;->format:Lcom/google/android/exoplayer2/Format;
invoke-virtual {p0, v1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onInputFormatChanged(Lcom/google/android/exoplayer2/Format;)V
.line 1019
return v2
.line 1023
:cond_c3
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v5}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->isEndOfStream()Z
move-result v5
if-eqz v5, :cond_102
.line 1024
iget v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
if-ne v5, v3, :cond_d6
.line 1028
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->clear()V
.line 1029
iput v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 1031
:cond_d6
iput-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputStreamEnded:Z
.line 1032
iget-boolean v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedBuffers:Z
if-nez v3, :cond_e0
.line 1033
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processEndOfStream()V
.line 1034
return v1
.line 1037
:cond_e0
:try_start_e0
iget-boolean v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosPropagation:Z
if-eqz v3, :cond_e5
goto :goto_f6
.line 1040
:cond_e5
iput-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedEos:Z
.line 1041
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget v6, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputIndex:I
const/4 v7, 0x0
const/4 v8, 0x0
const-wide/16 v9, 0x0
const/4 v11, 0x4
invoke-virtual/range {v5 .. v11}, Landroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
.line 1042
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetInputBuffer()V
:try_end_f6
.catch Landroid/media/MediaCodec$CryptoException; {:try_start_e0 .. :try_end_f6} :catch_f8
.line 1046
:goto_f6
nop
.line 1047
return v1
.line 1044
:catch_f8
move-exception v1
.line 1045
.local v1, "e":Landroid/media/MediaCodec$CryptoException;
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getIndex()I
move-result v2
invoke-static {v1, v2}, Lcom/google/android/exoplayer2/ExoPlaybackException;->createForRenderer(Ljava/lang/Exception;I)Lcom/google/android/exoplayer2/ExoPlaybackException;
move-result-object v2
throw v2
.line 1049
.end local v1 # "e":Landroid/media/MediaCodec$CryptoException;
:cond_102
iget-boolean v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForFirstSyncSample:Z
if-eqz v5, :cond_11a
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v5}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->isKeyFrame()Z
move-result v5
if-nez v5, :cond_11a
.line 1050
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->clear()V
.line 1051
iget v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
if-ne v1, v3, :cond_119
.line 1054
iput v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 1056
:cond_119
return v2
.line 1058
:cond_11a
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForFirstSyncSample:Z
.line 1059
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->isEncrypted()Z
move-result v3
.line 1060
.local v3, "bufferEncrypted":Z
invoke-direct {p0, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldWaitForKeys(Z)Z
move-result v5
iput-boolean v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForKeys:Z
.line 1061
if-eqz v5, :cond_12b
.line 1062
return v1
.line 1064
:cond_12b
iget-boolean v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsDiscardToSpsWorkaround:Z
if-eqz v5, :cond_145
if-nez v3, :cond_145
.line 1065
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
iget-object v5, v5, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
invoke-static {v5}, Lcom/google/android/exoplayer2/util/NalUnitUtil;->discardToSps(Ljava/nio/ByteBuffer;)V
.line 1066
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
iget-object v5, v5, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
invoke-virtual {v5}, Ljava/nio/ByteBuffer;->position()I
move-result v5
if-nez v5, :cond_143
.line 1067
return v2
.line 1069
:cond_143
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsDiscardToSpsWorkaround:Z
.line 1072
:cond_145
:try_start_145
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
iget-wide v5, v5, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->timeUs:J
.line 1073
.local v5, "presentationTimeUs":J
iget-object v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v7}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->isDecodeOnly()Z
move-result v7
if-eqz v7, :cond_15a
.line 1074
iget-object v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decodeOnlyPresentationTimestamps:Ljava/util/ArrayList;
invoke-static {v5, v6}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
move-result-object v8
invoke-virtual {v7, v8}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 1076
:cond_15a
iget-boolean v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForFirstSampleInFormat:Z
if-eqz v7, :cond_167
.line 1077
iget-object v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatQueue:Lcom/google/android/exoplayer2/util/TimedValueQueue;
iget-object v8, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
invoke-virtual {v7, v5, v6, v8}, Lcom/google/android/exoplayer2/util/TimedValueQueue;->add(JLjava/lang/Object;)V
.line 1078
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForFirstSampleInFormat:Z
.line 1081
:cond_167
iget-object v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v7}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->flip()V
.line 1082
iget-object v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {p0, v7}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onQueueInputBuffer(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;)V
.line 1084
if-eqz v3, :cond_184
.line 1085
iget-object v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-static {v7, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getFrameworkCryptoInfo(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;I)Landroid/media/MediaCodec$CryptoInfo;
move-result-object v10
.line 1087
.local v10, "cryptoInfo":Landroid/media/MediaCodec$CryptoInfo;
iget-object v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget v8, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputIndex:I
const/4 v9, 0x0
const/4 v13, 0x0
move-wide v11, v5
invoke-virtual/range {v7 .. v13}, Landroid/media/MediaCodec;->queueSecureInputBuffer(IILandroid/media/MediaCodec$CryptoInfo;JI)V
.line 1088
.end local v10 # "cryptoInfo":Landroid/media/MediaCodec$CryptoInfo;
goto :goto_196
.line 1089
:cond_184
iget-object v7, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
iget v8, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputIndex:I
const/4 v9, 0x0
iget-object v10, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
iget-object v10, v10, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
invoke-virtual {v10}, Ljava/nio/ByteBuffer;->limit()I
move-result v10
const/4 v13, 0x0
move-wide v11, v5
invoke-virtual/range {v7 .. v13}, Landroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
.line 1091
:goto_196
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetInputBuffer()V
.line 1092
iput-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedBuffers:Z
.line 1093
iput v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 1094
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters;
iget v7, v1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->inputBufferCount:I
add-int/2addr v7, v2
iput v7, v1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->inputBufferCount:I
:try_end_1a4
.catch Landroid/media/MediaCodec$CryptoException; {:try_start_145 .. :try_end_1a4} :catch_1a6
.line 1097
.end local v5 # "presentationTimeUs":J
nop
.line 1098
return v2
.line 1095
:catch_1a6
move-exception v1
.line 1096
.restart local v1 # "e":Landroid/media/MediaCodec$CryptoException;
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getIndex()I
move-result v2
invoke-static {v1, v2}, Lcom/google/android/exoplayer2/ExoPlaybackException;->createForRenderer(Ljava/lang/Exception;I)Lcom/google/android/exoplayer2/ExoPlaybackException;
move-result-object v2
throw v2
.line 954
.end local v0 # "adaptiveReconfigurationBytes":I
.end local v1 # "e":Landroid/media/MediaCodec$CryptoException;
.end local v3 # "bufferEncrypted":Z
.end local v4 # "result":I
:cond_1b0
:goto_1b0
return v1
.end method
.method private getAvailableCodecInfos(Z)Ljava/util/List;
.registers 6
.param p1, "mediaCryptoRequiresSecureDecoder" # Z
.annotation system Ldalvik/annotation/Signature;
value = {
"(Z)",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;",
">;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException;
}
.end annotation
.line 788
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCodecSelector:Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
.line 789
invoke-virtual {p0, v0, v1, p1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getDecoderInfos(Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;Lcom/google/android/exoplayer2/Format;Z)Ljava/util/List;
move-result-object v0
.line 790
.local v0, "codecInfos":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;>;"
invoke-interface {v0}, Ljava/util/List;->isEmpty()Z
move-result v1
if-eqz v1, :cond_46
if-eqz p1, :cond_46
.line 795
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCodecSelector:Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
const/4 v3, 0x0
.line 796
invoke-virtual {p0, v1, v2, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getDecoderInfos(Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;Lcom/google/android/exoplayer2/Format;Z)Ljava/util/List;
move-result-object v0
.line 797
invoke-interface {v0}, Ljava/util/List;->isEmpty()Z
move-result v1
if-nez v1, :cond_46
.line 798
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Drm session requires secure decoder for "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
iget-object v2, v2, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v2, ", but no secure decoder available. Trying to proceed with "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const-string v2, "."
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
const-string v2, "MediaCodecRenderer"
invoke-static {v2, v1}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 807
:cond_46
return-object v0
.end method
.method private getCodecBuffers(Landroid/media/MediaCodec;)V
.registers 4
.param p1, "codec" # Landroid/media/MediaCodec;
.line 887
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x15
if-ge v0, v1, :cond_12
.line 888
invoke-virtual {p1}, Landroid/media/MediaCodec;->getInputBuffers()[Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputBuffers:[Ljava/nio/ByteBuffer;
.line 889
invoke-virtual {p1}, Landroid/media/MediaCodec;->getOutputBuffers()[Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffers:[Ljava/nio/ByteBuffer;
.line 891
:cond_12
return-void
.end method
.method private static getFrameworkCryptoInfo(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;I)Landroid/media/MediaCodec$CryptoInfo;
.registers 6
.param p0, "buffer" # Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.param p1, "adaptiveReconfigurationBytes" # I
.line 1580
iget-object v0, p0, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->cryptoInfo:Lcom/google/android/exoplayer2/decoder/CryptoInfo;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/decoder/CryptoInfo;->getFrameworkCryptoInfoV16()Landroid/media/MediaCodec$CryptoInfo;
move-result-object v0
.line 1581
.local v0, "cryptoInfo":Landroid/media/MediaCodec$CryptoInfo;
if-nez p1, :cond_9
.line 1582
return-object v0
.line 1587
:cond_9
iget-object v1, v0, Landroid/media/MediaCodec$CryptoInfo;->numBytesOfClearData:[I
if-nez v1, :cond_12
.line 1588
const/4 v1, 0x1
new-array v1, v1, [I
iput-object v1, v0, Landroid/media/MediaCodec$CryptoInfo;->numBytesOfClearData:[I
.line 1590
:cond_12
iget-object v1, v0, Landroid/media/MediaCodec$CryptoInfo;->numBytesOfClearData:[I
const/4 v2, 0x0
aget v3, v1, v2
add-int/2addr v3, p1
aput v3, v1, v2
.line 1591
return-object v0
.end method
.method private getInputBuffer(I)Ljava/nio/ByteBuffer;
.registers 4
.param p1, "inputIndex" # I
.line 901
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x15
if-lt v0, v1, :cond_d
.line 902
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v0, p1}, Landroid/media/MediaCodec;->getInputBuffer(I)Ljava/nio/ByteBuffer;
move-result-object v0
return-object v0
.line 904
:cond_d
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputBuffers:[Ljava/nio/ByteBuffer;
aget-object v0, v0, p1
return-object v0
.end method
.method private getOutputBuffer(I)Ljava/nio/ByteBuffer;
.registers 4
.param p1, "outputIndex" # I
.line 909
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x15
if-lt v0, v1, :cond_d
.line 910
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v0, p1}, Landroid/media/MediaCodec;->getOutputBuffer(I)Ljava/nio/ByteBuffer;
move-result-object v0
return-object v0
.line 912
:cond_d
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffers:[Ljava/nio/ByteBuffer;
aget-object v0, v0, p1
return-object v0
.end method
.method private hasOutputBuffer()Z
.registers 2
.line 917
iget v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputIndex:I
if-ltz v0, :cond_6
const/4 v0, 0x1
goto :goto_7
:cond_6
const/4 v0, 0x0
:goto_7
return v0
.end method
.method private initCodec(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Landroid/media/MediaCrypto;)V
.registers 21
.param p1, "codecInfo" # Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.param p2, "crypto" # Landroid/media/MediaCrypto;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/Exception;
}
.end annotation
.line 813
move-object/from16 v7, p0
move-object/from16 v8, p1
const/4 v1, 0x0
.line 814
.local v1, "codec":Landroid/media/MediaCodec;
iget-object v9, v8, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->name:Ljava/lang/String;
.line 816
.local v9, "codecName":Ljava/lang/String;
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v2, 0x17
if-ge v0, v2, :cond_10
const/high16 v0, -0x40800000 # -1.0f
goto :goto_1c
:cond_10
iget v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->rendererOperatingRate:F
iget-object v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
.line 819
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getStreamFormats()[Lcom/google/android/exoplayer2/Format;
move-result-object v3
invoke-virtual {v7, v0, v2, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getCodecOperatingRateV23(FLcom/google/android/exoplayer2/Format;[Lcom/google/android/exoplayer2/Format;)F
move-result v0
:goto_1c
nop
.line 820
.local v0, "codecOperatingRate":F
iget v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->assumedMinimumCodecOperatingRate:F
cmpg-float v2, v0, v2
if-gtz v2, :cond_27
.line 821
const/high16 v0, -0x40800000 # -1.0f
move v10, v0
goto :goto_28
.line 820
:cond_27
move v10, v0
.line 824
.end local v0 # "codecOperatingRate":F
.local v10, "codecOperatingRate":F
:goto_28
:try_start_28
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v2
move-wide v11, v2
.line 825
.local v11, "codecInitializingTimestamp":J
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "createCodec:"
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Lcom/google/android/exoplayer2/util/TraceUtil;->beginSection(Ljava/lang/String;)V
.line 826
invoke-static {v9}, Landroid/media/MediaCodec;->createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;
move-result-object v0
:try_end_45
.catch Ljava/lang/Exception; {:try_start_28 .. :try_end_45} :catch_107
move-object v13, v0
.line 827
.end local v1 # "codec":Landroid/media/MediaCodec;
.local v13, "codec":Landroid/media/MediaCodec;
:try_start_46
invoke-static {}, Lcom/google/android/exoplayer2/util/TraceUtil;->endSection()V
.line 828
const-string v0, "configureCodec"
invoke-static {v0}, Lcom/google/android/exoplayer2/util/TraceUtil;->beginSection(Ljava/lang/String;)V
.line 829
iget-object v4, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
move-object/from16 v1, p0
move-object/from16 v2, p1
move-object v3, v13
move-object/from16 v5, p2
move v6, v10
invoke-virtual/range {v1 .. v6}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->configureCodec(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Landroid/media/MediaCodec;Lcom/google/android/exoplayer2/Format;Landroid/media/MediaCrypto;F)V
.line 830
invoke-static {}, Lcom/google/android/exoplayer2/util/TraceUtil;->endSection()V
.line 831
const-string/jumbo v0, "startCodec"
invoke-static {v0}, Lcom/google/android/exoplayer2/util/TraceUtil;->beginSection(Ljava/lang/String;)V
.line 832
invoke-virtual {v13}, Landroid/media/MediaCodec;->start()V
.line 833
invoke-static {}, Lcom/google/android/exoplayer2/util/TraceUtil;->endSection()V
.line 834
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v0
move-wide v14, v0
.line 835
.local v14, "codecInitializedTimestamp":J
invoke-direct {v7, v13}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getCodecBuffers(Landroid/media/MediaCodec;)V
:try_end_72
.catch Ljava/lang/Exception; {:try_start_46 .. :try_end_72} :catch_104
.line 842
nop
.line 844
iput-object v13, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
.line 845
iput-object v8, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecInfo:Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.line 846
iput v10, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecOperatingRate:F
.line 847
iget-object v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
iput-object v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
.line 848
invoke-direct {v7, v9}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecAdaptationWorkaroundMode(Ljava/lang/String;)I
move-result v0
iput v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecAdaptationWorkaroundMode:I
.line 849
invoke-static {v9}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsReconfigureWorkaround(Ljava/lang/String;)Z
move-result v0
iput-boolean v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsReconfigureWorkaround:Z
.line 850
iget-object v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
invoke-static {v9, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsDiscardToSpsWorkaround(Ljava/lang/String;Lcom/google/android/exoplayer2/Format;)Z
move-result v0
iput-boolean v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsDiscardToSpsWorkaround:Z
.line 851
invoke-static {v9}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsFlushWorkaround(Ljava/lang/String;)Z
move-result v0
iput-boolean v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsFlushWorkaround:Z
.line 852
invoke-static {v9}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosFlushWorkaround(Ljava/lang/String;)Z
move-result v0
iput-boolean v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosFlushWorkaround:Z
.line 853
invoke-static {v9}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosOutputExceptionWorkaround(Ljava/lang/String;)Z
move-result v0
iput-boolean v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosOutputExceptionWorkaround:Z
.line 854
iget-object v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
.line 855
invoke-static {v9, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsMonoChannelCountWorkaround(Ljava/lang/String;Lcom/google/android/exoplayer2/Format;)Z
move-result v0
iput-boolean v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsMonoChannelCountWorkaround:Z
.line 856
nop
.line 857
invoke-static/range {p1 .. p1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosPropagationWorkaround(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;)Z
move-result v0
const/4 v1, 0x1
const/4 v2, 0x0
if-nez v0, :cond_bd
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getCodecNeedsEosPropagation()Z
move-result v0
if-eqz v0, :cond_bb
goto :goto_bd
:cond_bb
const/4 v0, 0x0
goto :goto_be
:cond_bd
:goto_bd
const/4 v0, 0x1
:goto_be
iput-boolean v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosPropagation:Z
.line 859
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetInputBuffer()V
.line 860
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetOutputBuffer()V
.line 861
nop
.line 862
invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getState()I
move-result v0
const/4 v3, 0x2
if-ne v0, v3, :cond_d6
.line 863
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v3
const-wide/16 v5, 0x3e8
add-long/2addr v3, v5
goto :goto_db
:cond_d6
const-wide v3, -0x7fffffffffffffffL # -4.9E-324
:goto_db
iput-wide v3, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecHotswapDeadlineMs:J
.line 865
iput-boolean v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigured:Z
.line 866
iput v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 867
iput-boolean v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedEos:Z
.line 868
iput-boolean v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedBuffers:Z
.line 869
iput v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
.line 870
iput v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainAction:I
.line 871
iput-boolean v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsAdaptationWorkaroundBuffer:Z
.line 872
iput-boolean v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipAdaptationWorkaroundOutputBuffer:Z
.line 873
iput-boolean v2, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipOutputBuffer:Z
.line 874
iput-boolean v1, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForFirstSyncSample:Z
.line 876
iget-object v0, v7, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters;
iget v2, v0, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->decoderInitCount:I
add-int/2addr v2, v1
iput v2, v0, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->decoderInitCount:I
.line 877
sub-long v16, v14, v11
.line 878
.local v16, "elapsed":J
move-object/from16 v1, p0
move-object v2, v9
move-wide v3, v14
move-wide/from16 v5, v16
invoke-virtual/range {v1 .. v6}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onCodecInitialized(Ljava/lang/String;JJ)V
.line 879
return-void
.line 836
.end local v11 # "codecInitializingTimestamp":J
.end local v14 # "codecInitializedTimestamp":J
.end local v16 # "elapsed":J
:catch_104
move-exception v0
move-object v1, v13
goto :goto_108
.end local v13 # "codec":Landroid/media/MediaCodec;
.restart local v1 # "codec":Landroid/media/MediaCodec;
:catch_107
move-exception v0
.line 837
.local v0, "e":Ljava/lang/Exception;
:goto_108
if-eqz v1, :cond_110
.line 838
invoke-direct/range {p0 .. p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetCodecBuffers()V
.line 839
invoke-virtual {v1}, Landroid/media/MediaCodec;->release()V
.line 841
:cond_110
throw v0
.end method
.method private maybeInitCodecWithFallback(Landroid/media/MediaCrypto;Z)V
.registers 9
.param p1, "crypto" # Landroid/media/MediaCrypto;
.param p2, "mediaCryptoRequiresSecureDecoder" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
}
.end annotation
.line 733
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->availableCodecInfos:Ljava/util/ArrayDeque;
const/4 v1, 0x0
if-nez v0, :cond_1f
.line 735
:try_start_5
new-instance v0, Ljava/util/ArrayDeque;
.line 736
invoke-direct {p0, p2}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getAvailableCodecInfos(Z)Ljava/util/List;
move-result-object v2
invoke-direct {v0, v2}, Ljava/util/ArrayDeque;-><init>(Ljava/util/Collection;)V
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->availableCodecInfos:Ljava/util/ArrayDeque;
.line 737
iput-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->preferredDecoderInitializationException:Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
:try_end_12
.catch Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException; {:try_start_5 .. :try_end_12} :catch_13
.line 744
goto :goto_1f
.line 738
:catch_13
move-exception v0
.line 739
.local v0, "e":Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException;
new-instance v1, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
const v3, -0xc34e
invoke-direct {v1, v2, v0, p2, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;-><init>(Lcom/google/android/exoplayer2/Format;Ljava/lang/Throwable;ZI)V
throw v1
.line 747
.end local v0 # "e":Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException;
:cond_1f
:goto_1f
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->availableCodecInfos:Ljava/util/ArrayDeque;
invoke-virtual {v0}, Ljava/util/ArrayDeque;->isEmpty()Z
move-result v0
if-nez v0, :cond_80
.line 755
:goto_27
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
if-nez v0, :cond_7d
.line 756
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->availableCodecInfos:Ljava/util/ArrayDeque;
invoke-virtual {v0}, Ljava/util/ArrayDeque;->peekFirst()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.line 757
.local v0, "codecInfo":Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
invoke-virtual {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldInitCodec(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;)Z
move-result v2
if-nez v2, :cond_3a
.line 758
return-void
.line 761
:cond_3a
:try_start_3a
invoke-direct {p0, v0, p1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->initCodec(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Landroid/media/MediaCrypto;)V
:try_end_3d
.catch Ljava/lang/Exception; {:try_start_3a .. :try_end_3d} :catch_3e
.line 780
goto :goto_79
.line 762
:catch_3e
move-exception v2
.line 763
.local v2, "e":Ljava/lang/Exception;
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "Failed to initialize decoder: "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
const-string v4, "MediaCodecRenderer"
invoke-static {v4, v3, v2}, Lcom/google/android/exoplayer2/util/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 767
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->availableCodecInfos:Ljava/util/ArrayDeque;
invoke-virtual {v3}, Ljava/util/ArrayDeque;->removeFirst()Ljava/lang/Object;
.line 768
new-instance v3, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
iget-object v5, v0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->name:Ljava/lang/String;
invoke-direct {v3, v4, v2, p2, v5}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;-><init>(Lcom/google/android/exoplayer2/Format;Ljava/lang/Throwable;ZLjava/lang/String;)V
.line 771
.local v3, "exception":Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->preferredDecoderInitializationException:Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
if-nez v4, :cond_6a
.line 772
iput-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->preferredDecoderInitializationException:Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
goto :goto_71
.line 774
:cond_6a
nop
.line 775
invoke-static {v4, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;->access$000(Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;)Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
move-result-object v4
iput-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->preferredDecoderInitializationException:Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
.line 777
:goto_71
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->availableCodecInfos:Ljava/util/ArrayDeque;
invoke-virtual {v4}, Ljava/util/ArrayDeque;->isEmpty()Z
move-result v4
if-nez v4, :cond_7a
.line 781
.end local v0 # "codecInfo":Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.end local v2 # "e":Ljava/lang/Exception;
.end local v3 # "exception":Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
:goto_79
goto :goto_27
.line 778
.restart local v0 # "codecInfo":Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.restart local v2 # "e":Ljava/lang/Exception;
.restart local v3 # "exception":Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
:cond_7a
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->preferredDecoderInitializationException:Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
throw v1
.line 783
.end local v0 # "codecInfo":Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.end local v2 # "e":Ljava/lang/Exception;
.end local v3 # "exception":Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
:cond_7d
iput-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->availableCodecInfos:Ljava/util/ArrayDeque;
.line 784
return-void
.line 748
:cond_80
new-instance v0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
const v3, -0xc34f
invoke-direct {v0, v2, v1, p2, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;-><init>(Lcom/google/android/exoplayer2/Format;Ljava/lang/Throwable;ZI)V
goto :goto_8c
:goto_8b
throw v0
:goto_8c
goto :goto_8b
.end method
.method private processEndOfStream()V
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1549
iget v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainAction:I
const/4 v1, 0x1
if-eq v0, v1, :cond_15
const/4 v2, 0x2
if-eq v0, v2, :cond_e
.line 1559
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputStreamEnded:Z
.line 1560
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->renderToEndOfStream()V
goto :goto_19
.line 1551
:cond_e
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseCodec()V
.line 1552
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->maybeInitCodec()V
.line 1553
goto :goto_19
.line 1555
:cond_15
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flushOrReinitCodec()V
.line 1556
nop
.line 1563
:goto_19
return-void
.end method
.method private processOutputBuffersChanged()V
.registers 3
.line 1487
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x15
if-ge v0, v1, :cond_e
.line 1488
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v0}, Landroid/media/MediaCodec;->getOutputBuffers()[Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffers:[Ljava/nio/ByteBuffer;
.line 1490
:cond_e
return-void
.end method
.method private processOutputFormat()V
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1469
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v0}, Landroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;
move-result-object v0
.line 1470
.local v0, "format":Landroid/media/MediaFormat;
iget v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecAdaptationWorkaroundMode:I
const/4 v2, 0x1
if-eqz v1, :cond_21
.line 1471
const-string/jumbo v1, "width"
invoke-virtual {v0, v1}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v1
const/16 v3, 0x20
if-ne v1, v3, :cond_21
.line 1472
const-string v1, "height"
invoke-virtual {v0, v1}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v1
if-ne v1, v3, :cond_21
.line 1474
iput-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipAdaptationWorkaroundOutputBuffer:Z
.line 1475
return-void
.line 1477
:cond_21
iget-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsMonoChannelCountWorkaround:Z
if-eqz v1, :cond_2a
.line 1478
const-string v1, "channel-count"
invoke-virtual {v0, v1, v2}, Landroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V
.line 1480
:cond_2a
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {p0, v1, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onOutputFormatChanged(Landroid/media/MediaCodec;Landroid/media/MediaFormat;)V
.line 1481
return-void
.end method
.method private releaseDrmSessionIfUnused(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/drm/DrmSession<",
"Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;",
">;)V"
}
.end annotation
.line 943
.local p1, "session":Lcom/google/android/exoplayer2/drm/DrmSession;, "Lcom/google/android/exoplayer2/drm/DrmSession<Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;>;"
if-eqz p1, :cond_f
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->sourceDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
if-eq p1, v0, :cond_f
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
if-eq p1, v0, :cond_f
.line 944
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drmSessionManager:Lcom/google/android/exoplayer2/drm/DrmSessionManager;
invoke-interface {v0, p1}, Lcom/google/android/exoplayer2/drm/DrmSessionManager;->releaseSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 946
:cond_f
return-void
.end method
.method private resetCodecBuffers()V
.registers 3
.line 894
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x15
if-ge v0, v1, :cond_b
.line 895
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputBuffers:[Ljava/nio/ByteBuffer;
.line 896
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffers:[Ljava/nio/ByteBuffer;
.line 898
:cond_b
return-void
.end method
.method private resetInputBuffer()V
.registers 3
.line 921
const/4 v0, -0x1
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputIndex:I
.line 922
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->buffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
const/4 v1, 0x0
iput-object v1, v0, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->data:Ljava/nio/ByteBuffer;
.line 923
return-void
.end method
.method private resetOutputBuffer()V
.registers 2
.line 926
const/4 v0, -0x1
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputIndex:I
.line 927
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputBuffer:Ljava/nio/ByteBuffer;
.line 928
return-void
.end method
.method private setCodecDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/drm/DrmSession<",
"Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;",
">;)V"
}
.end annotation
.line 937
.local p1, "session":Lcom/google/android/exoplayer2/drm/DrmSession;, "Lcom/google/android/exoplayer2/drm/DrmSession<Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;>;"
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
.line 938
.local v0, "previous":Lcom/google/android/exoplayer2/drm/DrmSession;, "Lcom/google/android/exoplayer2/drm/DrmSession<Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;>;"
iput-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
.line 939
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseDrmSessionIfUnused(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 940
return-void
.end method
.method private setSourceDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/drm/DrmSession<",
"Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;",
">;)V"
}
.end annotation
.line 931
.local p1, "session":Lcom/google/android/exoplayer2/drm/DrmSession;, "Lcom/google/android/exoplayer2/drm/DrmSession<Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;>;"
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->sourceDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
.line 932
.local v0, "previous":Lcom/google/android/exoplayer2/drm/DrmSession;, "Lcom/google/android/exoplayer2/drm/DrmSession<Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;>;"
iput-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->sourceDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
.line 933
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseDrmSessionIfUnused(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 934
return-void
.end method
.method private shouldContinueFeeding(J)Z
.registers 8
.param p1, "drainStartTimeMs" # J
.line 882
iget-wide v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->renderTimeLimitMs:J
const-wide v2, -0x7fffffffffffffffL # -4.9E-324
cmp-long v4, v0, v2
if-eqz v4, :cond_19
.line 883
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v0
sub-long/2addr v0, p1
iget-wide v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->renderTimeLimitMs:J
cmp-long v4, v0, v2
if-gez v4, :cond_17
goto :goto_19
:cond_17
const/4 v0, 0x0
goto :goto_1a
:cond_19
:goto_19
const/4 v0, 0x1
.line 882
:goto_1a
return v0
.end method
.method private shouldSkipOutputBuffer(J)Z
.registers 8
.param p1, "presentationTimeUs" # J
.line 1568
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decodeOnlyPresentationTimestamps:Ljava/util/ArrayList;
invoke-virtual {v0}, Ljava/util/ArrayList;->size()I
move-result v0
.line 1569
.local v0, "size":I
const/4 v1, 0x0
.local v1, "i":I
:goto_7
if-ge v1, v0, :cond_23
.line 1570
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decodeOnlyPresentationTimestamps:Ljava/util/ArrayList;
invoke-virtual {v2, v1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/lang/Long;
invoke-virtual {v2}, Ljava/lang/Long;->longValue()J
move-result-wide v2
cmp-long v4, v2, p1
if-nez v4, :cond_20
.line 1571
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decodeOnlyPresentationTimestamps:Ljava/util/ArrayList;
invoke-virtual {v2, v1}, Ljava/util/ArrayList;->remove(I)Ljava/lang/Object;
.line 1572
const/4 v2, 0x1
return v2
.line 1569
:cond_20
add-int/lit8 v1, v1, 0x1
goto :goto_7
.line 1575
.end local v1 # "i":I
:cond_23
const/4 v1, 0x0
return v1
.end method
.method private shouldWaitForKeys(Z)Z
.registers 6
.param p1, "bufferEncrypted" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1102
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
const/4 v1, 0x0
if-eqz v0, :cond_29
if-nez p1, :cond_c
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->playClearSamplesWithoutKeys:Z
if-eqz v0, :cond_c
goto :goto_29
.line 1105
:cond_c
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
invoke-interface {v0}, Lcom/google/android/exoplayer2/drm/DrmSession;->getState()I
move-result v0
.line 1106
.local v0, "drmSessionState":I
const/4 v2, 0x1
if-eq v0, v2, :cond_1a
.line 1109
const/4 v3, 0x4
if-eq v0, v3, :cond_19
const/4 v1, 0x1
:cond_19
return v1
.line 1107
:cond_1a
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
invoke-interface {v1}, Lcom/google/android/exoplayer2/drm/DrmSession;->getError()Lcom/google/android/exoplayer2/drm/DrmSession$DrmSessionException;
move-result-object v1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getIndex()I
move-result v2
invoke-static {v1, v2}, Lcom/google/android/exoplayer2/ExoPlaybackException;->createForRenderer(Ljava/lang/Exception;I)Lcom/google/android/exoplayer2/ExoPlaybackException;
move-result-object v1
throw v1
.line 1103
.end local v0 # "drmSessionState":I
:cond_29
:goto_29
return v1
.end method
.method private updateCodecOperatingRate()V
.registers 5
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1303
sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I
const/16 v1, 0x17
if-ge v0, v1, :cond_7
.line 1304
return-void
.line 1307
:cond_7
iget v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->rendererOperatingRate:F
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
.line 1308
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getStreamFormats()[Lcom/google/android/exoplayer2/Format;
move-result-object v2
invoke-virtual {p0, v0, v1, v2}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getCodecOperatingRateV23(FLcom/google/android/exoplayer2/Format;[Lcom/google/android/exoplayer2/Format;)F
move-result v0
.line 1309
.local v0, "newCodecOperatingRate":F
iget v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecOperatingRate:F
cmpl-float v2, v1, v0
if-nez v2, :cond_1a
goto :goto_3f
.line 1311
:cond_1a
const/high16 v2, -0x40800000 # -1.0f
cmpl-float v3, v0, v2
if-nez v3, :cond_24
.line 1314
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drainAndReinitializeCodec()V
goto :goto_3f
.line 1315
:cond_24
cmpl-float v1, v1, v2
if-nez v1, :cond_2e
iget v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->assumedMinimumCodecOperatingRate:F
cmpl-float v1, v0, v1
if-lez v1, :cond_3f
.line 1319
:cond_2e
new-instance v1, Landroid/os/Bundle;
invoke-direct {v1}, Landroid/os/Bundle;-><init>()V
.line 1320
.local v1, "codecParameters":Landroid/os/Bundle;
const-string v2, "operating-rate"
invoke-virtual {v1, v2, v0}, Landroid/os/Bundle;->putFloat(Ljava/lang/String;F)V
.line 1321
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v2, v1}, Landroid/media/MediaCodec;->setParameters(Landroid/os/Bundle;)V
.line 1322
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecOperatingRate:F
.line 1324
.end local v1 # "codecParameters":Landroid/os/Bundle;
:cond_3f
:goto_3f
return-void
.end method
# virtual methods
.method protected canKeepCodec(Landroid/media/MediaCodec;Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Lcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/Format;)I
.registers 6
.param p1, "codec" # Landroid/media/MediaCodec;
.param p2, "codecInfo" # Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.param p3, "oldFormat" # Lcom/google/android/exoplayer2/Format;
.param p4, "newFormat" # Lcom/google/android/exoplayer2/Format;
.line 1253
const/4 v0, 0x0
return v0
.end method
.method protected abstract configureCodec(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Landroid/media/MediaCodec;Lcom/google/android/exoplayer2/Format;Landroid/media/MediaCrypto;F)V
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException;
}
.end annotation
.end method
.method public experimental_setRenderTimeLimitMs(J)V
.registers 3
.param p1, "renderTimeLimitMs" # J
.line 392
iput-wide p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->renderTimeLimitMs:J
.line 393
return-void
.end method
.method protected final flushOrReinitCodec()V
.registers 2
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 685
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flushOrReleaseCodec()Z
move-result v0
if-eqz v0, :cond_9
.line 686
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->maybeInitCodec()V
.line 688
:cond_9
return-void
.end method
.method protected flushOrReleaseCodec()Z
.registers 7
.line 697
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
const/4 v1, 0x0
if-nez v0, :cond_6
.line 698
return v1
.line 700
:cond_6
iget v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainAction:I
const/4 v2, 0x2
const/4 v3, 0x1
if-eq v0, v2, :cond_47
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsFlushWorkaround:Z
if-nez v0, :cond_47
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsEosFlushWorkaround:Z
if-eqz v0, :cond_19
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedEos:Z
if-eqz v0, :cond_19
goto :goto_47
.line 707
:cond_19
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v0}, Landroid/media/MediaCodec;->flush()V
.line 708
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetInputBuffer()V
.line 709
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetOutputBuffer()V
.line 710
const-wide v4, -0x7fffffffffffffffL # -4.9E-324
iput-wide v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecHotswapDeadlineMs:J
.line 711
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedEos:Z
.line 712
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReceivedBuffers:Z
.line 713
iput-boolean v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForFirstSyncSample:Z
.line 714
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsAdaptationWorkaroundBuffer:Z
.line 715
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipAdaptationWorkaroundOutputBuffer:Z
.line 716
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldSkipOutputBuffer:Z
.line 718
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForKeys:Z
.line 719
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decodeOnlyPresentationTimestamps:Ljava/util/ArrayList;
invoke-virtual {v0}, Ljava/util/ArrayList;->clear()V
.line 720
iput v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainState:I
.line 721
iput v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainAction:I
.line 725
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigured:Z
iput v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 727
return v1
.line 703
:cond_47
:goto_47
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseCodec()V
.line 704
return v3
.end method
.method protected final getCodec()Landroid/media/MediaCodec;
.registers 2
.line 534
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
return-object v0
.end method
.method protected final getCodecInfo()Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.registers 2
.line 538
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecInfo:Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
return-object v0
.end method
.method protected getCodecNeedsEosPropagation()Z
.registers 2
.line 516
const/4 v0, 0x0
return v0
.end method
.method protected getCodecOperatingRateV23(FLcom/google/android/exoplayer2/Format;[Lcom/google/android/exoplayer2/Format;)F
.registers 5
.param p1, "operatingRate" # F
.param p2, "format" # Lcom/google/android/exoplayer2/Format;
.param p3, "streamFormats" # [Lcom/google/android/exoplayer2/Format;
.line 1294
const/high16 v0, -0x40800000 # -1.0f
return v0
.end method
.method protected getDecoderInfos(Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;Lcom/google/android/exoplayer2/Format;Z)Ljava/util/List;
.registers 5
.param p1, "mediaCodecSelector" # Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;
.param p2, "format" # Lcom/google/android/exoplayer2/Format;
.param p3, "requiresSecureDecoder" # Z
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;",
"Lcom/google/android/exoplayer2/Format;",
"Z)",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;",
">;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException;
}
.end annotation
.line 435
iget-object v0, p2, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
invoke-interface {p1, v0, p3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;->getDecoderInfos(Ljava/lang/String;Z)Ljava/util/List;
move-result-object v0
return-object v0
.end method
.method protected getDequeueOutputBufferTimeoutUs()J
.registers 3
.line 1277
const-wide/16 v0, 0x0
return-wide v0
.end method
.method public isEnded()Z
.registers 2
.line 1258
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputStreamEnded:Z
return v0
.end method
.method public isReady()Z
.registers 6
.line 1263
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
if-eqz v0, :cond_2b
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForKeys:Z
if-nez v0, :cond_2b
.line 1265
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->isSourceReady()Z
move-result v0
if-nez v0, :cond_29
.line 1266
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->hasOutputBuffer()Z
move-result v0
if-nez v0, :cond_29
iget-wide v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecHotswapDeadlineMs:J
const-wide v2, -0x7fffffffffffffffL # -4.9E-324
cmp-long v4, v0, v2
if-eqz v4, :cond_2b
.line 1268
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v0
iget-wide v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecHotswapDeadlineMs:J
cmp-long v4, v0, v2
if-gez v4, :cond_2b
:cond_29
const/4 v0, 0x1
goto :goto_2c
:cond_2b
const/4 v0, 0x0
.line 1263
:goto_2c
return v0
.end method
.method protected final maybeInitCodec()V
.registers 7
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 458
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
if-nez v0, :cond_8a
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
if-nez v0, :cond_a
goto/16 :goto_8a
.line 463
:cond_a
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->sourceDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setCodecDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 465
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
iget-object v0, v0, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String;
.line 466
.local v0, "mimeType":Ljava/lang/String;
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
if-eqz v1, :cond_77
.line 467
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
const/4 v3, 0x1
if-nez v2, :cond_56
.line 468
invoke-interface {v1}, Lcom/google/android/exoplayer2/drm/DrmSession;->getMediaCrypto()Lcom/google/android/exoplayer2/drm/ExoMediaCrypto;
move-result-object v1
check-cast v1, Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;
.line 469
.local v1, "sessionMediaCrypto":Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;
if-nez v1, :cond_2e
.line 470
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
invoke-interface {v2}, Lcom/google/android/exoplayer2/drm/DrmSession;->getError()Lcom/google/android/exoplayer2/drm/DrmSession$DrmSessionException;
move-result-object v2
.line 471
.local v2, "drmError":Lcom/google/android/exoplayer2/drm/DrmSession$DrmSessionException;
if-eqz v2, :cond_2d
.line 478
.end local v2 # "drmError":Lcom/google/android/exoplayer2/drm/DrmSession$DrmSessionException;
goto :goto_56
.line 476
.restart local v2 # "drmError":Lcom/google/android/exoplayer2/drm/DrmSession$DrmSessionException;
:cond_2d
return-void
.line 480
.end local v2 # "drmError":Lcom/google/android/exoplayer2/drm/DrmSession$DrmSessionException;
:cond_2e
:try_start_2e
new-instance v2, Landroid/media/MediaCrypto;
iget-object v4, v1, Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;->uuid:Ljava/util/UUID;
iget-object v5, v1, Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;->sessionId:[B
invoke-direct {v2, v4, v5}, Landroid/media/MediaCrypto;-><init>(Ljava/util/UUID;[B)V
iput-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
:try_end_39
.catch Landroid/media/MediaCryptoException; {:try_start_2e .. :try_end_39} :catch_4c
.line 483
nop
.line 484
iget-boolean v2, v1, Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;->forceAllowInsecureDecoderComponents:Z
if-nez v2, :cond_48
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
.line 486
invoke-virtual {v2, v0}, Landroid/media/MediaCrypto;->requiresSecureDecoderComponent(Ljava/lang/String;)Z
move-result v2
if-eqz v2, :cond_48
const/4 v2, 0x1
goto :goto_49
:cond_48
const/4 v2, 0x0
:goto_49
iput-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCryptoRequiresSecureDecoder:Z
goto :goto_56
.line 481
:catch_4c
move-exception v2
.line 482
.local v2, "e":Landroid/media/MediaCryptoException;
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getIndex()I
move-result v3
invoke-static {v2, v3}, Lcom/google/android/exoplayer2/ExoPlaybackException;->createForRenderer(Ljava/lang/Exception;I)Lcom/google/android/exoplayer2/ExoPlaybackException;
move-result-object v3
throw v3
.line 489
.end local v1 # "sessionMediaCrypto":Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;
.end local v2 # "e":Landroid/media/MediaCryptoException;
:cond_56
:goto_56
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->deviceNeedsDrmKeysToConfigureCodecWorkaround()Z
move-result v1
if-eqz v1, :cond_77
.line 490
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
invoke-interface {v1}, Lcom/google/android/exoplayer2/drm/DrmSession;->getState()I
move-result v1
.line 491
.local v1, "drmSessionState":I
if-eq v1, v3, :cond_68
.line 493
const/4 v2, 0x4
if-eq v1, v2, :cond_77
.line 495
return-void
.line 492
:cond_68
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
invoke-interface {v2}, Lcom/google/android/exoplayer2/drm/DrmSession;->getError()Lcom/google/android/exoplayer2/drm/DrmSession$DrmSessionException;
move-result-object v2
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getIndex()I
move-result v3
invoke-static {v2, v3}, Lcom/google/android/exoplayer2/ExoPlaybackException;->createForRenderer(Ljava/lang/Exception;I)Lcom/google/android/exoplayer2/ExoPlaybackException;
move-result-object v2
throw v2
.line 501
.end local v1 # "drmSessionState":I
:cond_77
:try_start_77
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
iget-boolean v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCryptoRequiresSecureDecoder:Z
invoke-direct {p0, v1, v2}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->maybeInitCodecWithFallback(Landroid/media/MediaCrypto;Z)V
:try_end_7e
.catch Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException; {:try_start_77 .. :try_end_7e} :catch_80
.line 504
nop
.line 505
return-void
.line 502
:catch_80
move-exception v1
.line 503
.local v1, "e":Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getIndex()I
move-result v2
invoke-static {v1, v2}, Lcom/google/android/exoplayer2/ExoPlaybackException;->createForRenderer(Ljava/lang/Exception;I)Lcom/google/android/exoplayer2/ExoPlaybackException;
move-result-object v2
throw v2
.line 460
.end local v0 # "mimeType":Ljava/lang/String;
.end local v1 # "e":Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer$DecoderInitializationException;
:cond_8a
:goto_8a
return-void
.end method
.method protected onCodecInitialized(Ljava/lang/String;JJ)V
.registers 6
.param p1, "name" # Ljava/lang/String;
.param p2, "initializedTimestampMs" # J
.param p4, "initializationDurationMs" # J
.line 1125
return-void
.end method
.method protected onDisabled()V
.registers 2
.line 564
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
.line 565
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->sourceDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
if-nez v0, :cond_10
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
if-eqz v0, :cond_c
goto :goto_10
.line 569
:cond_c
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flushOrReleaseCodec()Z
goto :goto_13
.line 567
:cond_10
:goto_10
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onReset()V
.line 571
:goto_13
return-void
.end method
.method protected onEnabled(Z)V
.registers 3
.param p1, "joining" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 543
new-instance v0, Lcom/google/android/exoplayer2/decoder/DecoderCounters;
invoke-direct {v0}, Lcom/google/android/exoplayer2/decoder/DecoderCounters;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters;
.line 544
return-void
.end method
.method protected onInputFormatChanged(Lcom/google/android/exoplayer2/Format;)V
.registers 8
.param p1, "newFormat" # Lcom/google/android/exoplayer2/Format;
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1134
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
.line 1135
.local v0, "oldFormat":Lcom/google/android/exoplayer2/Format;
iput-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
.line 1136
const/4 v1, 0x1
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForFirstSampleInFormat:Z
.line 1138
iget-object v2, p1, Lcom/google/android/exoplayer2/Format;->drmInitData:Lcom/google/android/exoplayer2/drm/DrmInitData;
const/4 v3, 0x0
if-nez v0, :cond_e
move-object v4, v3
goto :goto_10
:cond_e
iget-object v4, v0, Lcom/google/android/exoplayer2/Format;->drmInitData:Lcom/google/android/exoplayer2/drm/DrmInitData;
.line 1139
:goto_10
invoke-static {v2, v4}, Lcom/google/android/exoplayer2/util/Util;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
move-result v2
xor-int/2addr v2, v1
.line 1140
.local v2, "drmInitDataChanged":Z
if-eqz v2, :cond_4e
.line 1141
iget-object v4, p1, Lcom/google/android/exoplayer2/Format;->drmInitData:Lcom/google/android/exoplayer2/drm/DrmInitData;
if-eqz v4, :cond_4b
.line 1142
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drmSessionManager:Lcom/google/android/exoplayer2/drm/DrmSessionManager;
if-eqz v3, :cond_3b
.line 1146
nop
.line 1147
invoke-static {}, Landroid/os/Looper;->myLooper()Landroid/os/Looper;
move-result-object v4
iget-object v5, p1, Lcom/google/android/exoplayer2/Format;->drmInitData:Lcom/google/android/exoplayer2/drm/DrmInitData;
invoke-interface {v3, v4, v5}, Lcom/google/android/exoplayer2/drm/DrmSessionManager;->acquireSession(Landroid/os/Looper;Lcom/google/android/exoplayer2/drm/DrmInitData;)Lcom/google/android/exoplayer2/drm/DrmSession;
move-result-object v3
.line 1148
.local v3, "session":Lcom/google/android/exoplayer2/drm/DrmSession;, "Lcom/google/android/exoplayer2/drm/DrmSession<Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;>;"
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->sourceDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
if-eq v3, v4, :cond_32
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
if-ne v3, v4, :cond_37
.line 1151
:cond_32
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drmSessionManager:Lcom/google/android/exoplayer2/drm/DrmSessionManager;
invoke-interface {v4, v3}, Lcom/google/android/exoplayer2/drm/DrmSessionManager;->releaseSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 1153
:cond_37
invoke-direct {p0, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setSourceDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 1154
.end local v3 # "session":Lcom/google/android/exoplayer2/drm/DrmSession;, "Lcom/google/android/exoplayer2/drm/DrmSession<Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;>;"
goto :goto_4e
.line 1143
:cond_3b
new-instance v1, Ljava/lang/IllegalStateException;
const-string v3, "Media requires a DrmSessionManager"
invoke-direct {v1, v3}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
.line 1144
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getIndex()I
move-result v3
.line 1143
invoke-static {v1, v3}, Lcom/google/android/exoplayer2/ExoPlaybackException;->createForRenderer(Ljava/lang/Exception;I)Lcom/google/android/exoplayer2/ExoPlaybackException;
move-result-object v1
throw v1
.line 1155
:cond_4b
invoke-direct {p0, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setSourceDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 1159
:cond_4e
:goto_4e
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
if-nez v3, :cond_56
.line 1160
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->maybeInitCodec()V
.line 1161
return-void
.line 1166
:cond_56
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->sourceDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrmSession:Lcom/google/android/exoplayer2/drm/DrmSession;
if-eq v4, v5, :cond_60
.line 1167
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drainAndReinitializeCodec()V
goto :goto_b7
.line 1169
:cond_60
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecInfo:Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
iget-object v5, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
invoke-virtual {p0, v3, v4, v5, p1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->canKeepCodec(Landroid/media/MediaCodec;Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Lcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/Format;)I
move-result v3
if-eqz v3, :cond_b3
if-eq v3, v1, :cond_aa
const/4 v4, 0x2
if-eq v3, v4, :cond_7e
const/4 v1, 0x3
if-ne v3, v1, :cond_78
.line 1194
iput-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
.line 1195
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->updateCodecOperatingRate()V
.line 1196
goto :goto_b7
.line 1198
:cond_78
new-instance v1, Ljava/lang/IllegalStateException;
invoke-direct {v1}, Ljava/lang/IllegalStateException;-><init>()V
throw v1
.line 1179
:cond_7e
iget-boolean v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsReconfigureWorkaround:Z
if-eqz v3, :cond_86
.line 1180
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drainAndReinitializeCodec()V
goto :goto_b7
.line 1182
:cond_86
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigured:Z
.line 1183
iput v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecReconfigurationState:I
.line 1184
iget v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecAdaptationWorkaroundMode:I
if-eq v3, v4, :cond_a2
if-ne v3, v1, :cond_a1
iget v3, p1, Lcom/google/android/exoplayer2/Format;->width:I
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
iget v4, v4, Lcom/google/android/exoplayer2/Format;->width:I
if-ne v3, v4, :cond_a1
iget v3, p1, Lcom/google/android/exoplayer2/Format;->height:I
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
iget v4, v4, Lcom/google/android/exoplayer2/Format;->height:I
if-ne v3, v4, :cond_a1
goto :goto_a2
:cond_a1
const/4 v1, 0x0
:cond_a2
:goto_a2
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecNeedsAdaptationWorkaroundBuffer:Z
.line 1189
iput-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
.line 1190
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->updateCodecOperatingRate()V
.line 1192
goto :goto_b7
.line 1174
:cond_aa
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drainAndFlushCodec()V
.line 1175
iput-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
.line 1176
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->updateCodecOperatingRate()V
.line 1177
goto :goto_b7
.line 1171
:cond_b3
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drainAndReinitializeCodec()V
.line 1172
nop
.line 1201
:goto_b7
return-void
.end method
.method protected onOutputFormatChanged(Landroid/media/MediaCodec;Landroid/media/MediaFormat;)V
.registers 3
.param p1, "codec" # Landroid/media/MediaCodec;
.param p2, "outputFormat" # Landroid/media/MediaFormat;
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1215
return-void
.end method
.method protected onPositionReset(JZ)V
.registers 5
.param p1, "positionUs" # J
.param p3, "joining" # Z
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 548
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputStreamEnded:Z
.line 549
iput-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputStreamEnded:Z
.line 550
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flushOrReinitCodec()V
.line 551
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatQueue:Lcom/google/android/exoplayer2/util/TimedValueQueue;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/util/TimedValueQueue;->clear()V
.line 552
return-void
.end method
.method protected onProcessedOutputBuffer(J)V
.registers 3
.param p1, "presentationTimeUs" # J
.line 1237
return-void
.end method
.method protected onQueueInputBuffer(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;)V
.registers 2
.param p1, "buffer" # Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
.line 1226
return-void
.end method
.method protected onReset()V
.registers 3
.line 576
const/4 v0, 0x0
:try_start_1
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseCodec()V
:try_end_4
.catchall {:try_start_1 .. :try_end_4} :catchall_9
.line 578
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setSourceDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 579
nop
.line 580
return-void
.line 578
:catchall_9
move-exception v1
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setSourceDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 579
throw v1
.end method
.method protected onStarted()V
.registers 1
.line 618
return-void
.end method
.method protected onStopped()V
.registers 1
.line 623
return-void
.end method
.method protected abstract processOutputBuffer(JJLandroid/media/MediaCodec;Ljava/nio/ByteBuffer;IIJZLcom/google/android/exoplayer2/Format;)Z
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.end method
.method protected releaseCodec()V
.registers 5
.line 583
const/4 v0, 0x0
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->availableCodecInfos:Ljava/util/ArrayDeque;
.line 584
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecInfo:Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.line 585
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecFormat:Lcom/google/android/exoplayer2/Format;
.line 586
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetInputBuffer()V
.line 587
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetOutputBuffer()V
.line 588
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->resetCodecBuffers()V
.line 589
const/4 v1, 0x0
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->waitingForKeys:Z
.line 590
const-wide v2, -0x7fffffffffffffffL # -4.9E-324
iput-wide v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecHotswapDeadlineMs:J
.line 591
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decodeOnlyPresentationTimestamps:Ljava/util/ArrayList;
invoke-virtual {v2}, Ljava/util/ArrayList;->clear()V
.line 593
:try_start_1f
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
if-eqz v2, :cond_3d
.line 594
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters;
iget v3, v2, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->decoderReleaseCount:I
add-int/lit8 v3, v3, 0x1
iput v3, v2, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->decoderReleaseCount:I
:try_end_2b
.catchall {:try_start_1f .. :try_end_2b} :catchall_5b
.line 596
:try_start_2b
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v2}, Landroid/media/MediaCodec;->stop()V
:try_end_30
.catchall {:try_start_2b .. :try_end_30} :catchall_36
.line 598
:try_start_30
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v2}, Landroid/media/MediaCodec;->release()V
.line 599
goto :goto_3d
.line 598
:catchall_36
move-exception v2
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
invoke-virtual {v3}, Landroid/media/MediaCodec;->release()V
.line 599
throw v2
:try_end_3d
.catchall {:try_start_30 .. :try_end_3d} :catchall_5b
.line 602
:cond_3d
:goto_3d
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
.line 604
:try_start_3f
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
if-eqz v2, :cond_48
.line 605
iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
invoke-virtual {v2}, Landroid/media/MediaCrypto;->release()V
:try_end_48
.catchall {:try_start_3f .. :try_end_48} :catchall_52
.line 608
:cond_48
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
.line 609
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCryptoRequiresSecureDecoder:Z
.line 610
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setCodecDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 611
nop
.line 612
nop
.line 613
return-void
.line 608
:catchall_52
move-exception v2
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
.line 609
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCryptoRequiresSecureDecoder:Z
.line 610
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setCodecDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 611
throw v2
.line 602
:catchall_5b
move-exception v2
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
.line 604
:try_start_5e
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
if-eqz v3, :cond_67
.line 605
iget-object v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
invoke-virtual {v3}, Landroid/media/MediaCrypto;->release()V
:try_end_67
.catchall {:try_start_5e .. :try_end_67} :catchall_70
.line 608
:cond_67
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
.line 609
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCryptoRequiresSecureDecoder:Z
.line 610
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setCodecDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 611
nop
.line 612
throw v2
.line 608
:catchall_70
move-exception v2
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCrypto:Landroid/media/MediaCrypto;
.line 609
iput-boolean v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCryptoRequiresSecureDecoder:Z
.line 610
invoke-direct {p0, v0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->setCodecDrmSession(Lcom/google/android/exoplayer2/drm/DrmSession;)V
.line 611
throw v2
.end method
.method public render(JJ)V
.registers 11
.param p1, "positionUs" # J
.param p3, "elapsedRealtimeUs" # J
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 627
iget-boolean v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputStreamEnded:Z
if-eqz v0, :cond_8
.line 628
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->renderToEndOfStream()V
.line 629
return-void
.line 631
:cond_8
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputFormat:Lcom/google/android/exoplayer2/Format;
const/4 v1, -0x4
const/4 v2, -0x5
const/4 v3, 0x1
if-nez v0, :cond_38
.line 633
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flagsOnlyBuffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->clear()V
.line 634
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatHolder:Lcom/google/android/exoplayer2/FormatHolder;
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flagsOnlyBuffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {p0, v0, v4, v3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->readSource(Lcom/google/android/exoplayer2/FormatHolder;Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;Z)I
move-result v0
.line 635
.local v0, "result":I
if-ne v0, v2, :cond_26
.line 636
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatHolder:Lcom/google/android/exoplayer2/FormatHolder;
iget-object v4, v4, Lcom/google/android/exoplayer2/FormatHolder;->format:Lcom/google/android/exoplayer2/Format;
invoke-virtual {p0, v4}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onInputFormatChanged(Lcom/google/android/exoplayer2/Format;)V
goto :goto_38
.line 637
:cond_26
if-ne v0, v1, :cond_37
.line 639
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flagsOnlyBuffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->isEndOfStream()Z
move-result v1
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 640
iput-boolean v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputStreamEnded:Z
.line 641
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processEndOfStream()V
.line 642
return-void
.line 645
:cond_37
return-void
.line 649
.end local v0 # "result":I
:cond_38
:goto_38
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->maybeInitCodec()V
.line 650
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
if-eqz v0, :cond_60
.line 651
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v0
.line 652
.local v0, "drainStartTimeMs":J
const-string v2, "drainAndFeed"
invoke-static {v2}, Lcom/google/android/exoplayer2/util/TraceUtil;->beginSection(Ljava/lang/String;)V
.line 653
:goto_48
invoke-direct {p0, p1, p2, p3, p4}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drainOutputBuffer(JJ)Z
move-result v2
if-eqz v2, :cond_4f
goto :goto_48
.line 654
:cond_4f
:goto_4f
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->feedInputBuffer()Z
move-result v2
if-eqz v2, :cond_5c
invoke-direct {p0, v0, v1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldContinueFeeding(J)Z
move-result v2
if-eqz v2, :cond_5c
goto :goto_4f
.line 655
:cond_5c
invoke-static {}, Lcom/google/android/exoplayer2/util/TraceUtil;->endSection()V
.line 656
.end local v0 # "drainStartTimeMs":J
goto :goto_93
.line 657
:cond_60
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters;
iget v4, v0, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->skippedInputBufferCount:I
invoke-virtual {p0, p1, p2}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->skipSource(J)I
move-result v5
add-int/2addr v4, v5
iput v4, v0, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->skippedInputBufferCount:I
.line 662
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flagsOnlyBuffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->clear()V
.line 663
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatHolder:Lcom/google/android/exoplayer2/FormatHolder;
iget-object v4, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flagsOnlyBuffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
const/4 v5, 0x0
invoke-virtual {p0, v0, v4, v5}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->readSource(Lcom/google/android/exoplayer2/FormatHolder;Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;Z)I
move-result v0
.line 664
.local v0, "result":I
if-ne v0, v2, :cond_83
.line 665
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatHolder:Lcom/google/android/exoplayer2/FormatHolder;
iget-object v1, v1, Lcom/google/android/exoplayer2/FormatHolder;->format:Lcom/google/android/exoplayer2/Format;
invoke-virtual {p0, v1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onInputFormatChanged(Lcom/google/android/exoplayer2/Format;)V
goto :goto_93
.line 666
:cond_83
if-ne v0, v1, :cond_93
.line 667
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->flagsOnlyBuffer:Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;
invoke-virtual {v1}, Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;->isEndOfStream()Z
move-result v1
invoke-static {v1}, Lcom/google/android/exoplayer2/util/Assertions;->checkState(Z)V
.line 668
iput-boolean v3, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->inputStreamEnded:Z
.line 669
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->processEndOfStream()V
.line 672
.end local v0 # "result":I
:cond_93
:goto_93
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->ensureUpdated()V
.line 673
return-void
.end method
.method protected renderToEndOfStream()V
.registers 1
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 1541
return-void
.end method
.method public final setOperatingRate(F)V
.registers 4
.param p1, "operatingRate" # F
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 556
iput p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->rendererOperatingRate:F
.line 557
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codec:Landroid/media/MediaCodec;
if-eqz v0, :cond_e
iget v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->codecDrainAction:I
const/4 v1, 0x2
if-eq v0, v1, :cond_e
.line 558
invoke-direct {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->updateCodecOperatingRate()V
.line 560
:cond_e
return-void
.end method
.method protected shouldInitCodec(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;)Z
.registers 3
.param p1, "codecInfo" # Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;
.line 508
const/4 v0, 0x1
return v0
.end method
.method public final supportsFormat(Lcom/google/android/exoplayer2/Format;)I
.registers 4
.param p1, "format" # Lcom/google/android/exoplayer2/Format;
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/ExoPlaybackException;
}
.end annotation
.line 403
:try_start_0
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->mediaCodecSelector:Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;
iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->drmSessionManager:Lcom/google/android/exoplayer2/drm/DrmSessionManager;
invoke-virtual {p0, v0, v1, p1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->supportsFormat(Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;Lcom/google/android/exoplayer2/drm/DrmSessionManager;Lcom/google/android/exoplayer2/Format;)I
move-result v0
:try_end_8
.catch Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException; {:try_start_0 .. :try_end_8} :catch_9
return v0
.line 404
:catch_9
move-exception v0
.line 405
.local v0, "e":Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException;
invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getIndex()I
move-result v1
invoke-static {v0, v1}, Lcom/google/android/exoplayer2/ExoPlaybackException;->createForRenderer(Ljava/lang/Exception;I)Lcom/google/android/exoplayer2/ExoPlaybackException;
move-result-object v1
throw v1
.end method
.method protected abstract supportsFormat(Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;Lcom/google/android/exoplayer2/drm/DrmSessionManager;Lcom/google/android/exoplayer2/Format;)I
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;",
"Lcom/google/android/exoplayer2/drm/DrmSessionManager<",
"Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;",
">;",
"Lcom/google/android/exoplayer2/Format;",
")I"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException;
}
.end annotation
.end method
.method public final supportsMixedMimeTypeAdaptation()I
.registers 2
.line 397
const/16 v0, 0x8
return v0
.end method
.method protected final updateOutputFormatForTime(J)Lcom/google/android/exoplayer2/Format;
.registers 4
.param p1, "presentationTimeUs" # J
.line 526
iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->formatQueue:Lcom/google/android/exoplayer2/util/TimedValueQueue;
invoke-virtual {v0, p1, p2}, Lcom/google/android/exoplayer2/util/TimedValueQueue;->pollFloor(J)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/Format;
.line 527
.local v0, "format":Lcom/google/android/exoplayer2/Format;
if-eqz v0, :cond_c
.line 528
iput-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->outputFormat:Lcom/google/android/exoplayer2/Format;
.line 530
:cond_c
return-object v0
.end method