.class public Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer; .super Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer; .source "MediaCodecVideoRenderer.java" # annotations .annotation build Landroid/annotation/TargetApi; value = 0x10 .end annotation .annotation system Ldalvik/annotation/MemberClasses; value = { Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23;, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues; } .end annotation # static fields .field private static final KEY_CROP_BOTTOM:Ljava/lang/String; = "crop-bottom" .field private static final KEY_CROP_LEFT:Ljava/lang/String; = "crop-left" .field private static final KEY_CROP_RIGHT:Ljava/lang/String; = "crop-right" .field private static final KEY_CROP_TOP:Ljava/lang/String; = "crop-top" .field private static final STANDARD_LONG_EDGE_VIDEO_PX:[I .field private static final TAG:Ljava/lang/String; = "MediaCodecVideoRenderer" # instance fields .field private final allowedJoiningTimeMs:J .field private codecMaxValues:Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues; .field private consecutiveDroppedFrameCount:I .field private currentHeight:I .field private currentPixelWidthHeightRatio:F .field private currentUnappliedRotationDegrees:I .field private currentWidth:I .field private final deviceNeedsAutoFrcWorkaround:Z .field private droppedFrameAccumulationStartTimeMs:J .field private droppedFrames:I .field private final eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; .field private final frameReleaseTimeHelper:Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper; .field private joiningDeadlineMs:J .field private final maxDroppedFramesToNotify:I .field private pendingPixelWidthHeightRatio:F .field private pendingRotationDegrees:I .field private renderedFirstFrame:Z .field private reportedHeight:I .field private reportedPixelWidthHeightRatio:F .field private reportedUnappliedRotationDegrees:I .field private reportedWidth:I .field private scalingMode:I .field private streamFormats:[Lcom/google/android/exoplayer2/Format; .field private surface:Landroid/view/Surface; .field private tunneling:Z .field private tunnelingAudioSessionId:I .field public tunnelingOnFrameRenderedListener:Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23; # direct methods .method public static constructor ()V .locals 1 const/16 v0, 0x9 new-array v0, v0, [I .line 1 fill-array-data v0, :array_0 sput-object v0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->STANDARD_LONG_EDGE_VIDEO_PX:[I return-void :array_0 .array-data 4 0x780 0x640 0x5a0 0x500 0x3c0 0x356 0x280 0x21c 0x1e0 .end array-data .end method .method public constructor (Landroid/content/Context;Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;)V .locals 2 const-wide/16 v0, 0x0 .line 1 invoke-direct {p0, p1, p2, v0, v1}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->(Landroid/content/Context;Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;J)V return-void .end method .method public constructor (Landroid/content/Context;Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;J)V .locals 8 const/4 v5, 0x0 const/4 v6, 0x0 const/4 v7, -0x1 move-object v0, p0 move-object v1, p1 move-object v2, p2 move-wide v3, p3 .line 2 invoke-direct/range {v0 .. v7}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->(Landroid/content/Context;Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;JLandroid/os/Handler;Lcom/google/android/exoplayer2/video/VideoRendererEventListener;I)V return-void .end method .method public constructor (Landroid/content/Context;Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;JLandroid/os/Handler;Lcom/google/android/exoplayer2/video/VideoRendererEventListener;I)V .locals 10 const/4 v5, 0x0 const/4 v6, 0x0 move-object v0, p0 move-object v1, p1 move-object v2, p2 move-wide v3, p3 move-object v7, p5 move-object/from16 v8, p6 move/from16 v9, p7 .line 3 invoke-direct/range {v0 .. v9}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->(Landroid/content/Context;Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;JLcom/google/android/exoplayer2/drm/DrmSessionManager;ZLandroid/os/Handler;Lcom/google/android/exoplayer2/video/VideoRendererEventListener;I)V return-void .end method .method public constructor (Landroid/content/Context;Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;JLcom/google/android/exoplayer2/drm/DrmSessionManager;ZLandroid/os/Handler;Lcom/google/android/exoplayer2/video/VideoRendererEventListener;I)V .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "(", "Landroid/content/Context;", "Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;", "J", "Lcom/google/android/exoplayer2/drm/DrmSessionManager<", "Lcom/google/android/exoplayer2/drm/FrameworkMediaCrypto;", ">;Z", "Landroid/os/Handler;", "Lcom/google/android/exoplayer2/video/VideoRendererEventListener;", "I)V" } .end annotation const/4 v0, 0x2 .line 4 invoke-direct {p0, v0, p2, p5, p6}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->(ILcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;Lcom/google/android/exoplayer2/drm/DrmSessionManager;Z)V .line 5 iput-wide p3, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->allowedJoiningTimeMs:J .line 6 iput p9, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maxDroppedFramesToNotify:I .line 7 new-instance p2, Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper; invoke-direct {p2, p1}, Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper;->(Landroid/content/Context;)V iput-object p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->frameReleaseTimeHelper:Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper; .line 8 new-instance p1, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; invoke-direct {p1, p7, p8}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->(Landroid/os/Handler;Lcom/google/android/exoplayer2/video/VideoRendererEventListener;)V iput-object p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; .line 9 invoke-static {}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->deviceNeedsAutoFrcWorkaround()Z move-result p1 iput-boolean p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->deviceNeedsAutoFrcWorkaround:Z const-wide p1, -0x7fffffffffffffffL # -4.9E-324 .line 10 iput-wide p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->joiningDeadlineMs:J const/4 p1, -0x1 .line 11 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentWidth:I .line 12 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentHeight:I const/high16 p1, -0x40800000 # -1.0f .line 13 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentPixelWidthHeightRatio:F .line 14 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->pendingPixelWidthHeightRatio:F const/4 p1, 0x1 .line 15 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->scalingMode:I .line 16 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->clearReportedVideoSize()V return-void .end method .method private static areAdaptationCompatible(ZLcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/Format;)Z .locals 2 .line 1 iget-object v0, p1, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String; iget-object v1, p2, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String; invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_1 .line 2 invoke-static {p1}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getRotationDegrees(Lcom/google/android/exoplayer2/Format;)I move-result v0 invoke-static {p2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getRotationDegrees(Lcom/google/android/exoplayer2/Format;)I move-result v1 if-ne v0, v1, :cond_1 if-nez p0, :cond_0 iget p0, p1, Lcom/google/android/exoplayer2/Format;->width:I iget v0, p2, Lcom/google/android/exoplayer2/Format;->width:I if-ne p0, v0, :cond_1 iget p0, p1, Lcom/google/android/exoplayer2/Format;->height:I iget p1, p2, Lcom/google/android/exoplayer2/Format;->height:I if-ne p0, p1, :cond_1 :cond_0 const/4 p0, 0x1 goto :goto_0 :cond_1 const/4 p0, 0x0 :goto_0 return p0 .end method .method private clearRenderedFirstFrame()V .locals 3 const/4 v0, 0x0 .line 1 iput-boolean v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderedFirstFrame:Z .line 2 sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 v1, 0x17 if-lt v0, v1, :cond_0 iget-boolean v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunneling:Z if-eqz v0, :cond_0 .line 3 invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getCodec()Landroid/media/MediaCodec; move-result-object v0 if-eqz v0, :cond_0 .line 4 new-instance v1, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23; const/4 v2, 0x0 invoke-direct {v1, p0, v0, v2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23;->(Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;Landroid/media/MediaCodec;Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$1;)V iput-object v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunnelingOnFrameRenderedListener:Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23; :cond_0 return-void .end method .method private clearReportedVideoSize()V .locals 2 const/4 v0, -0x1 .line 1 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedWidth:I .line 2 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedHeight:I const/high16 v1, -0x40800000 # -1.0f .line 3 iput v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedPixelWidthHeightRatio:F .line 4 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedUnappliedRotationDegrees:I return-void .end method .method private static configureTunnelingV21(Landroid/media/MediaFormat;I)V .locals 2 .annotation build Landroid/annotation/TargetApi; value = 0x15 .end annotation const-string v0, "tunneled-playback" const/4 v1, 0x1 .line 1 invoke-virtual {p0, v0, v1}, Landroid/media/MediaFormat;->setFeatureEnabled(Ljava/lang/String;Z)V const-string v0, "audio-session-id" .line 2 invoke-virtual {p0, v0, p1}, Landroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V return-void .end method .method private static deviceNeedsAutoFrcWorkaround()Z .locals 2 .line 1 sget v0, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 v1, 0x16 if-gt v0, v1, :cond_0 sget-object v0, Lcom/google/android/exoplayer2/util/Util;->DEVICE:Ljava/lang/String; const-string v1, "foster" invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0 sget-object v0, Lcom/google/android/exoplayer2/util/Util;->MANUFACTURER:Ljava/lang/String; const-string v1, "NVIDIA" invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method private dropOutputBuffer(Landroid/media/MediaCodec;I)V .locals 1 const-string v0, "dropVideoBuffer" .line 1 invoke-static {v0}, Lcom/google/android/exoplayer2/util/TraceUtil;->beginSection(Ljava/lang/String;)V const/4 v0, 0x0 .line 2 invoke-virtual {p1, p2, v0}, Landroid/media/MediaCodec;->releaseOutputBuffer(IZ)V .line 3 invoke-static {}, Lcom/google/android/exoplayer2/util/TraceUtil;->endSection()V .line 4 iget-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters; iget p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->droppedOutputBufferCount:I add-int/lit8 p2, p2, 0x1 iput p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->droppedOutputBufferCount:I .line 5 iget p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrames:I add-int/lit8 p2, p2, 0x1 iput p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrames:I .line 6 iget p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->consecutiveDroppedFrameCount:I add-int/lit8 p2, p2, 0x1 iput p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->consecutiveDroppedFrameCount:I .line 7 iget v0, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->maxConsecutiveDroppedOutputBufferCount:I invoke-static {p2, v0}, Ljava/lang/Math;->max(II)I move-result p2 iput p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->maxConsecutiveDroppedOutputBufferCount:I .line 8 iget p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrames:I iget p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maxDroppedFramesToNotify:I if-ne p1, p2, :cond_0 .line 9 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeNotifyDroppedFrames()V :cond_0 return-void .end method .method private static getCodecMaxSize(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Lcom/google/android/exoplayer2/Format;)Landroid/graphics/Point; .locals 13 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException; } .end annotation .line 1 iget v0, p1, Lcom/google/android/exoplayer2/Format;->height:I iget v1, p1, Lcom/google/android/exoplayer2/Format;->width:I const/4 v2, 0x0 if-le v0, v1, :cond_0 const/4 v3, 0x1 goto :goto_0 :cond_0 move v3, v2 :goto_0 if-eqz v3, :cond_1 move v4, v0 goto :goto_1 :cond_1 move v4, v1 :goto_1 if-eqz v3, :cond_2 move v0, v1 :cond_2 int-to-float v1, v0 int-to-float v5, v4 div-float/2addr v1, v5 .line 2 sget-object v5, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->STANDARD_LONG_EDGE_VIDEO_PX:[I array-length v6, v5 :goto_2 const/4 v7, 0x0 if-ge v2, v6, :cond_a aget v8, v5, v2 int-to-float v9, v8 mul-float/2addr v9, v1 float-to-int v9, v9 if-le v8, v4, :cond_a if-gt v9, v0, :cond_3 goto :goto_7 .line 3 :cond_3 sget v7, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 v10, 0x15 if-lt v7, v10, :cond_6 if-eqz v3, :cond_4 move v7, v9 goto :goto_3 :cond_4 move v7, v8 :goto_3 if-eqz v3, :cond_5 goto :goto_4 :cond_5 move v8, v9 .line 4 :goto_4 invoke-virtual {p0, v7, v8}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->alignVideoSizeV21(II)Landroid/graphics/Point; move-result-object v7 .line 5 iget v8, p1, Lcom/google/android/exoplayer2/Format;->frameRate:F .line 6 iget v9, v7, Landroid/graphics/Point;->x:I iget v10, v7, Landroid/graphics/Point;->y:I float-to-double v11, v8 invoke-virtual {p0, v9, v10, v11, v12}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->isVideoSizeAndRateSupportedV21(IID)Z move-result v8 if-eqz v8, :cond_9 return-object v7 :cond_6 const/16 v7, 0x10 .line 7 invoke-static {v8, v7}, Lcom/google/android/exoplayer2/util/Util;->ceilDivide(II)I move-result v8 mul-int/2addr v8, v7 .line 8 invoke-static {v9, v7}, Lcom/google/android/exoplayer2/util/Util;->ceilDivide(II)I move-result v9 mul-int/2addr v9, v7 mul-int v7, v8, v9 .line 9 invoke-static {}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil;->maxH264DecodableFrameSize()I move-result v10 if-gt v7, v10, :cond_9 .line 10 new-instance p0, Landroid/graphics/Point; if-eqz v3, :cond_7 move p1, v9 goto :goto_5 :cond_7 move p1, v8 :goto_5 if-eqz v3, :cond_8 goto :goto_6 :cond_8 move v8, v9 :goto_6 invoke-direct {p0, p1, v8}, Landroid/graphics/Point;->(II)V return-object p0 :cond_9 add-int/lit8 v2, v2, 0x1 goto :goto_2 :cond_a :goto_7 return-object v7 .end method .method private static getMaxInputSize(Lcom/google/android/exoplayer2/Format;)I .locals 2 .line 1 iget v0, p0, Lcom/google/android/exoplayer2/Format;->maxInputSize:I const/4 v1, -0x1 if-eq v0, v1, :cond_0 return v0 .line 2 :cond_0 iget-object v0, p0, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String; iget v1, p0, Lcom/google/android/exoplayer2/Format;->width:I iget p0, p0, Lcom/google/android/exoplayer2/Format;->height:I invoke-static {v0, v1, p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getMaxInputSize(Ljava/lang/String;II)I move-result p0 return p0 .end method .method private static getMaxInputSize(Ljava/lang/String;II)I .locals 5 const/4 v0, -0x1 if-eq p1, v0, :cond_8 if-ne p2, v0, :cond_0 goto/16 :goto_4 .line 3 :cond_0 invoke-static {p0}, Ljava/util/Objects;->requireNonNull(Ljava/lang/Object;)Ljava/lang/Object; invoke-virtual {p0}, Ljava/lang/String;->hashCode()I move-result v1 const/4 v2, 0x4 const/4 v3, 0x3 const/4 v4, 0x2 sparse-switch v1, :sswitch_data_0 :goto_0 move p0, v0 goto :goto_1 :sswitch_0 const-string v1, "video/x-vnd.on2.vp9" invoke-virtual {p0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p0 if-nez p0, :cond_1 goto :goto_0 :cond_1 const/4 p0, 0x5 goto :goto_1 :sswitch_1 const-string v1, "video/x-vnd.on2.vp8" invoke-virtual {p0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p0 if-nez p0, :cond_2 goto :goto_0 :cond_2 move p0, v2 goto :goto_1 :sswitch_2 const-string v1, "video/avc" invoke-virtual {p0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p0 if-nez p0, :cond_3 goto :goto_0 :cond_3 move p0, v3 goto :goto_1 :sswitch_3 const-string v1, "video/mp4v-es" invoke-virtual {p0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p0 if-nez p0, :cond_4 goto :goto_0 :cond_4 move p0, v4 goto :goto_1 :sswitch_4 const-string v1, "video/hevc" invoke-virtual {p0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p0 if-nez p0, :cond_5 goto :goto_0 :cond_5 const/4 p0, 0x1 goto :goto_1 :sswitch_5 const-string v1, "video/3gpp" invoke-virtual {p0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p0 if-nez p0, :cond_6 goto :goto_0 :cond_6 const/4 p0, 0x0 :goto_1 packed-switch p0, :pswitch_data_0 return v0 .line 4 :pswitch_0 sget-object p0, Lcom/google/android/exoplayer2/util/Util;->MODEL:Ljava/lang/String; const-string v1, "BRAVIA 4K 2015" invoke-virtual {v1, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p0 if-eqz p0, :cond_7 return v0 :cond_7 const/16 p0, 0x10 .line 5 invoke-static {p1, p0}, Lcom/google/android/exoplayer2/util/Util;->ceilDivide(II)I move-result p1 invoke-static {p2, p0}, Lcom/google/android/exoplayer2/util/Util;->ceilDivide(II)I move-result p2 mul-int/2addr p2, p1 mul-int/2addr p2, p0 mul-int/lit8 p1, p2, 0x10 goto :goto_2 :pswitch_1 mul-int/2addr p1, p2 goto :goto_3 :pswitch_2 mul-int/2addr p1, p2 :goto_2 move v2, v4 :goto_3 mul-int/2addr p1, v3 mul-int/2addr v2, v4 .line 6 div-int/2addr p1, v2 return p1 :cond_8 :goto_4 return v0 :sswitch_data_0 .sparse-switch -0x63306f58 -> :sswitch_5 -0x63185e82 -> :sswitch_4 0x46cdc642 -> :sswitch_3 0x4f62373a -> :sswitch_2 0x5f50bed8 -> :sswitch_1 0x5f50bed9 -> :sswitch_0 .end sparse-switch :pswitch_data_0 .packed-switch 0x0 :pswitch_2 :pswitch_1 :pswitch_2 :pswitch_0 :pswitch_2 :pswitch_1 .end packed-switch .end method .method private static getMediaFormat(Lcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;ZI)Landroid/media/MediaFormat; .locals 2 .annotation build Landroid/annotation/SuppressLint; value = { "InlinedApi" } .end annotation .line 1 invoke-virtual {p0}, Lcom/google/android/exoplayer2/Format;->getFrameworkMediaFormatV16()Landroid/media/MediaFormat; move-result-object p0 .line 2 iget v0, p1, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;->width:I const-string v1, "max-width" invoke-virtual {p0, v1, v0}, Landroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V .line 3 iget v0, p1, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;->height:I const-string v1, "max-height" invoke-virtual {p0, v1, v0}, Landroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V .line 4 iget p1, p1, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;->inputSize:I const/4 v0, -0x1 if-eq p1, v0, :cond_0 const-string v0, "max-input-size" .line 5 invoke-virtual {p0, v0, p1}, Landroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V :cond_0 if-eqz p2, :cond_1 const/4 p1, 0x0 const-string p2, "auto-frc" .line 6 invoke-virtual {p0, p2, p1}, Landroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V :cond_1 if-eqz p3, :cond_2 .line 7 invoke-static {p0, p3}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->configureTunnelingV21(Landroid/media/MediaFormat;I)V :cond_2 return-object p0 .end method .method private static getPixelWidthHeightRatio(Lcom/google/android/exoplayer2/Format;)F .locals 1 .line 1 iget p0, p0, Lcom/google/android/exoplayer2/Format;->pixelWidthHeightRatio:F const/high16 v0, -0x40800000 # -1.0f cmpl-float v0, p0, v0 if-nez v0, :cond_0 const/high16 p0, 0x3f800000 # 1.0f :cond_0 return p0 .end method .method private static getRotationDegrees(Lcom/google/android/exoplayer2/Format;)I .locals 1 .line 1 iget p0, p0, Lcom/google/android/exoplayer2/Format;->rotationDegrees:I const/4 v0, -0x1 if-ne p0, v0, :cond_0 const/4 p0, 0x0 :cond_0 return p0 .end method .method private maybeNotifyDroppedFrames()V .locals 6 .line 1 iget v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrames:I if-lez v0, :cond_0 .line 2 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide v0 .line 3 iget-wide v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrameAccumulationStartTimeMs:J sub-long v2, v0, v2 .line 4 iget-object v4, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; iget v5, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrames:I invoke-virtual {v4, v5, v2, v3}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->droppedFrames(IJ)V const/4 v2, 0x0 .line 5 iput v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrames:I .line 6 iput-wide v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrameAccumulationStartTimeMs:J :cond_0 return-void .end method .method private maybeNotifyVideoSizeChanged()V .locals 5 .line 1 iget v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentWidth:I const/4 v1, -0x1 if-ne v0, v1, :cond_0 iget v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentHeight:I if-eq v2, v1, :cond_2 :cond_0 iget v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedWidth:I if-ne v1, v0, :cond_1 iget v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedHeight:I iget v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentHeight:I if-ne v1, v2, :cond_1 iget v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedUnappliedRotationDegrees:I iget v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentUnappliedRotationDegrees:I if-ne v1, v2, :cond_1 iget v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedPixelWidthHeightRatio:F iget v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentPixelWidthHeightRatio:F cmpl-float v1, v1, v2 if-eqz v1, :cond_2 .line 2 :cond_1 iget-object v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; iget v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentHeight:I iget v3, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentUnappliedRotationDegrees:I iget v4, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentPixelWidthHeightRatio:F invoke-virtual {v1, v0, v2, v3, v4}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->videoSizeChanged(IIIF)V .line 3 iget v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentWidth:I iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedWidth:I .line 4 iget v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentHeight:I iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedHeight:I .line 5 iget v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentUnappliedRotationDegrees:I iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedUnappliedRotationDegrees:I .line 6 iget v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentPixelWidthHeightRatio:F iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedPixelWidthHeightRatio:F :cond_2 return-void .end method .method private maybeRenotifyRenderedFirstFrame()V .locals 2 .line 1 iget-boolean v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderedFirstFrame:Z if-eqz v0, :cond_0 .line 2 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; iget-object v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->surface:Landroid/view/Surface; invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->renderedFirstFrame(Landroid/view/Surface;)V :cond_0 return-void .end method .method private maybeRenotifyVideoSizeChanged()V .locals 5 .line 1 iget v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedWidth:I const/4 v1, -0x1 if-ne v0, v1, :cond_0 iget v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedHeight:I if-eq v2, v1, :cond_1 .line 2 :cond_0 iget-object v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; iget v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedHeight:I iget v3, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedUnappliedRotationDegrees:I iget v4, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->reportedPixelWidthHeightRatio:F invoke-virtual {v1, v0, v2, v3, v4}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->videoSizeChanged(IIIF)V :cond_1 return-void .end method .method private renderOutputBuffer(Landroid/media/MediaCodec;I)V .locals 1 .line 1 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeNotifyVideoSizeChanged()V const-string v0, "releaseOutputBuffer" .line 2 invoke-static {v0}, Lcom/google/android/exoplayer2/util/TraceUtil;->beginSection(Ljava/lang/String;)V const/4 v0, 0x1 .line 3 invoke-virtual {p1, p2, v0}, Landroid/media/MediaCodec;->releaseOutputBuffer(IZ)V .line 4 invoke-static {}, Lcom/google/android/exoplayer2/util/TraceUtil;->endSection()V .line 5 iget-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters; iget p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->renderedOutputBufferCount:I add-int/2addr p2, v0 iput p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->renderedOutputBufferCount:I const/4 p1, 0x0 .line 6 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->consecutiveDroppedFrameCount:I .line 7 invoke-virtual {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeNotifyRenderedFirstFrame()V return-void .end method .method private renderOutputBufferV21(Landroid/media/MediaCodec;IJ)V .locals 1 .annotation build Landroid/annotation/TargetApi; value = 0x15 .end annotation .line 1 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeNotifyVideoSizeChanged()V const-string v0, "releaseOutputBuffer" .line 2 invoke-static {v0}, Lcom/google/android/exoplayer2/util/TraceUtil;->beginSection(Ljava/lang/String;)V .line 3 invoke-virtual {p1, p2, p3, p4}, Landroid/media/MediaCodec;->releaseOutputBuffer(IJ)V .line 4 invoke-static {}, Lcom/google/android/exoplayer2/util/TraceUtil;->endSection()V .line 5 iget-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters; iget p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->renderedOutputBufferCount:I add-int/lit8 p2, p2, 0x1 iput p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->renderedOutputBufferCount:I const/4 p1, 0x0 .line 6 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->consecutiveDroppedFrameCount:I .line 7 invoke-virtual {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeNotifyRenderedFirstFrame()V return-void .end method .method private setJoiningDeadlineMs()V .locals 4 .line 1 iget-wide v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->allowedJoiningTimeMs:J const-wide/16 v2, 0x0 cmp-long v0, v0, v2 if-lez v0, :cond_0 .line 2 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide v0 iget-wide v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->allowedJoiningTimeMs:J add-long/2addr v0, v2 goto :goto_0 :cond_0 const-wide v0, -0x7fffffffffffffffL # -4.9E-324 :goto_0 iput-wide v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->joiningDeadlineMs:J return-void .end method .method private static setOutputSurfaceV23(Landroid/media/MediaCodec;Landroid/view/Surface;)V .locals 0 .annotation build Landroid/annotation/TargetApi; value = 0x17 .end annotation .line 1 invoke-virtual {p0, p1}, Landroid/media/MediaCodec;->setOutputSurface(Landroid/view/Surface;)V return-void .end method .method private setSurface(Landroid/view/Surface;)V .locals 5 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/ExoPlaybackException; } .end annotation .line 1 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->surface:Landroid/view/Surface; if-eq v0, p1, :cond_4 .line 2 iput-object p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->surface:Landroid/view/Surface; .line 3 invoke-virtual {p0}, Lcom/google/android/exoplayer2/BaseRenderer;->getState()I move-result v0 const/4 v1, 0x1 const/4 v2, 0x2 if-eq v0, v1, :cond_0 if-ne v0, v2, :cond_2 .line 4 :cond_0 invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getCodec()Landroid/media/MediaCodec; move-result-object v1 .line 5 sget v3, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 v4, 0x17 if-lt v3, v4, :cond_1 if-eqz v1, :cond_1 if-eqz p1, :cond_1 .line 6 invoke-static {v1, p1}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->setOutputSurfaceV23(Landroid/media/MediaCodec;Landroid/view/Surface;)V goto :goto_0 .line 7 :cond_1 invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->releaseCodec()V .line 8 invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->maybeInitCodec()V :cond_2 :goto_0 if-eqz p1, :cond_3 .line 9 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeRenotifyVideoSizeChanged()V .line 10 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->clearRenderedFirstFrame()V if-ne v0, v2, :cond_5 .line 11 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->setJoiningDeadlineMs()V goto :goto_1 .line 12 :cond_3 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->clearReportedVideoSize()V .line 13 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->clearRenderedFirstFrame()V goto :goto_1 :cond_4 if-eqz p1, :cond_5 .line 14 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeRenotifyVideoSizeChanged()V .line 15 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeRenotifyRenderedFirstFrame()V :cond_5 :goto_1 return-void .end method .method private static setVideoScalingMode(Landroid/media/MediaCodec;I)V .locals 0 .line 1 invoke-virtual {p0, p1}, Landroid/media/MediaCodec;->setVideoScalingMode(I)V return-void .end method .method private skipOutputBuffer(Landroid/media/MediaCodec;I)V .locals 1 const-string v0, "skipVideoBuffer" .line 1 invoke-static {v0}, Lcom/google/android/exoplayer2/util/TraceUtil;->beginSection(Ljava/lang/String;)V const/4 v0, 0x0 .line 2 invoke-virtual {p1, p2, v0}, Landroid/media/MediaCodec;->releaseOutputBuffer(IZ)V .line 3 invoke-static {}, Lcom/google/android/exoplayer2/util/TraceUtil;->endSection()V .line 4 iget-object p1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters; iget p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->skippedOutputBufferCount:I add-int/lit8 p2, p2, 0x1 iput p2, p1, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->skippedOutputBufferCount:I return-void .end method # virtual methods .method public canReconfigureCodec(Landroid/media/MediaCodec;ZLcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/Format;)Z .locals 0 .line 1 invoke-static {p2, p3, p4}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->areAdaptationCompatible(ZLcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/Format;)Z move-result p1 if-eqz p1, :cond_0 iget p1, p4, Lcom/google/android/exoplayer2/Format;->width:I iget-object p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->codecMaxValues:Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues; iget p3, p2, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;->width:I if-gt p1, p3, :cond_0 iget p1, p4, Lcom/google/android/exoplayer2/Format;->height:I iget p3, p2, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;->height:I if-gt p1, p3, :cond_0 iget p1, p4, Lcom/google/android/exoplayer2/Format;->maxInputSize:I iget p2, p2, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;->inputSize:I if-gt p1, p2, :cond_0 const/4 p1, 0x1 goto :goto_0 :cond_0 const/4 p1, 0x0 :goto_0 return p1 .end method .method public configureCodec(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Landroid/media/MediaCodec;Lcom/google/android/exoplayer2/Format;Landroid/media/MediaCrypto;)V .locals 2 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException; } .end annotation .line 1 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->streamFormats:[Lcom/google/android/exoplayer2/Format; invoke-virtual {p0, p1, p3, v0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getCodecMaxValues(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Lcom/google/android/exoplayer2/Format;[Lcom/google/android/exoplayer2/Format;)Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues; move-result-object p1 iput-object p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->codecMaxValues:Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues; .line 2 iget-boolean v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->deviceNeedsAutoFrcWorkaround:Z iget v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunnelingAudioSessionId:I invoke-static {p3, p1, v0, v1}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getMediaFormat(Lcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;ZI)Landroid/media/MediaFormat; move-result-object p1 .line 3 iget-object p3, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->surface:Landroid/view/Surface; const/4 v0, 0x0 invoke-virtual {p2, p1, p3, p4, v0}, Landroid/media/MediaCodec;->configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V .line 4 sget p1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 p3, 0x17 if-lt p1, p3, :cond_0 iget-boolean p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunneling:Z if-eqz p1, :cond_0 .line 5 new-instance p1, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23; const/4 p3, 0x0 invoke-direct {p1, p0, p2, p3}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23;->(Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;Landroid/media/MediaCodec;Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$1;)V iput-object p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunnelingOnFrameRenderedListener:Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23; :cond_0 return-void .end method .method public getCodecMaxValues(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Lcom/google/android/exoplayer2/Format;[Lcom/google/android/exoplayer2/Format;)Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues; .locals 12 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException; } .end annotation .line 1 iget v0, p2, Lcom/google/android/exoplayer2/Format;->width:I .line 2 iget v1, p2, Lcom/google/android/exoplayer2/Format;->height:I .line 3 invoke-static {p2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getMaxInputSize(Lcom/google/android/exoplayer2/Format;)I move-result v2 .line 4 array-length v3, p3 const/4 v4, 0x1 if-ne v3, v4, :cond_0 .line 5 new-instance p1, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues; invoke-direct {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;->(III)V return-object p1 .line 6 :cond_0 array-length v3, p3 const/4 v5, 0x0 move v6, v5 move v7, v6 :goto_0 if-ge v6, v3, :cond_4 aget-object v8, p3, v6 .line 7 iget-boolean v9, p1, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->adaptive:Z invoke-static {v9, p2, v8}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->areAdaptationCompatible(ZLcom/google/android/exoplayer2/Format;Lcom/google/android/exoplayer2/Format;)Z move-result v9 if-eqz v9, :cond_3 .line 8 iget v9, v8, Lcom/google/android/exoplayer2/Format;->width:I const/4 v10, -0x1 if-eq v9, v10, :cond_2 iget v11, v8, Lcom/google/android/exoplayer2/Format;->height:I if-ne v11, v10, :cond_1 goto :goto_1 :cond_1 move v10, v5 goto :goto_2 :cond_2 :goto_1 move v10, v4 :goto_2 or-int/2addr v7, v10 .line 9 invoke-static {v0, v9}, Ljava/lang/Math;->max(II)I move-result v0 .line 10 iget v9, v8, Lcom/google/android/exoplayer2/Format;->height:I invoke-static {v1, v9}, Ljava/lang/Math;->max(II)I move-result v1 .line 11 invoke-static {v8}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getMaxInputSize(Lcom/google/android/exoplayer2/Format;)I move-result v8 invoke-static {v2, v8}, Ljava/lang/Math;->max(II)I move-result v2 :cond_3 add-int/lit8 v6, v6, 0x1 goto :goto_0 :cond_4 if-eqz v7, :cond_5 .line 12 new-instance p3, Ljava/lang/StringBuilder; invoke-direct {p3}, Ljava/lang/StringBuilder;->()V const-string v3, "Resolutions unknown. Codec max resolution: " invoke-virtual {p3, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p3, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; const-string v3, "x" invoke-virtual {p3, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p3, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; invoke-virtual {p3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p3 const-string v4, "MediaCodecVideoRenderer" invoke-static {v4, p3}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I .line 13 invoke-static {p1, p2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getCodecMaxSize(Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;Lcom/google/android/exoplayer2/Format;)Landroid/graphics/Point; move-result-object p1 if-eqz p1, :cond_5 .line 14 iget p3, p1, Landroid/graphics/Point;->x:I invoke-static {v0, p3}, Ljava/lang/Math;->max(II)I move-result v0 .line 15 iget p1, p1, Landroid/graphics/Point;->y:I invoke-static {v1, p1}, Ljava/lang/Math;->max(II)I move-result v1 .line 16 iget-object p1, p2, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String; .line 17 invoke-static {p1, v0, v1}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getMaxInputSize(Ljava/lang/String;II)I move-result p1 .line 18 invoke-static {v2, p1}, Ljava/lang/Math;->max(II)I move-result v2 .line 19 new-instance p1, Ljava/lang/StringBuilder; invoke-direct {p1}, Ljava/lang/StringBuilder;->()V const-string p2, "Codec max resolution adjusted to: " invoke-virtual {p1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p1, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; invoke-virtual {p1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p1, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-static {v4, p1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I .line 20 :cond_5 new-instance p1, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues; invoke-direct {p1, v0, v1, v2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$CodecMaxValues;->(III)V return-object p1 .end method .method public handleMessage(ILjava/lang/Object;)V .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/ExoPlaybackException; } .end annotation const/4 v0, 0x1 if-ne p1, v0, :cond_0 .line 1 check-cast p2, Landroid/view/Surface; invoke-direct {p0, p2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->setSurface(Landroid/view/Surface;)V goto :goto_0 :cond_0 const/4 v0, 0x4 if-ne p1, v0, :cond_1 .line 2 check-cast p2, Ljava/lang/Integer; invoke-virtual {p2}, Ljava/lang/Integer;->intValue()I move-result p1 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->scalingMode:I .line 3 invoke-virtual {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->getCodec()Landroid/media/MediaCodec; move-result-object p1 if-eqz p1, :cond_2 .line 4 iget p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->scalingMode:I invoke-static {p1, p2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->setVideoScalingMode(Landroid/media/MediaCodec;I)V goto :goto_0 .line 5 :cond_1 invoke-super {p0, p1, p2}, Lcom/google/android/exoplayer2/BaseRenderer;->handleMessage(ILjava/lang/Object;)V :cond_2 :goto_0 return-void .end method .method public isReady()Z .locals 9 .line 1 iget-boolean v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderedFirstFrame:Z const/4 v1, 0x1 const-wide v2, -0x7fffffffffffffffL # -4.9E-324 if-nez v0, :cond_0 invoke-super {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldInitCodec()Z move-result v0 if-eqz v0, :cond_1 :cond_0 invoke-super {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->isReady()Z move-result v0 if-eqz v0, :cond_1 .line 2 iput-wide v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->joiningDeadlineMs:J return v1 .line 3 :cond_1 iget-wide v4, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->joiningDeadlineMs:J cmp-long v0, v4, v2 const/4 v4, 0x0 if-nez v0, :cond_2 return v4 .line 4 :cond_2 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide v5 iget-wide v7, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->joiningDeadlineMs:J cmp-long v0, v5, v7 if-gez v0, :cond_3 return v1 .line 5 :cond_3 iput-wide v2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->joiningDeadlineMs:J return v4 .end method .method public maybeNotifyRenderedFirstFrame()V .locals 2 .line 1 iget-boolean v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderedFirstFrame:Z if-nez v0, :cond_0 const/4 v0, 0x1 .line 2 iput-boolean v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderedFirstFrame:Z .line 3 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; iget-object v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->surface:Landroid/view/Surface; invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->renderedFirstFrame(Landroid/view/Surface;)V :cond_0 return-void .end method .method public onCodecInitialized(Ljava/lang/String;JJ)V .locals 6 .line 1 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; move-object v1, p1 move-wide v2, p2 move-wide v4, p4 invoke-virtual/range {v0 .. v5}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->decoderInitialized(Ljava/lang/String;JJ)V return-void .end method .method public onDisabled()V .locals 3 const/4 v0, -0x1 .line 1 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentWidth:I .line 2 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentHeight:I const/high16 v0, -0x40800000 # -1.0f .line 3 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentPixelWidthHeightRatio:F .line 4 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->pendingPixelWidthHeightRatio:F .line 5 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->clearReportedVideoSize()V .line 6 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->clearRenderedFirstFrame()V .line 7 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->frameReleaseTimeHelper:Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper; invoke-virtual {v0}, Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper;->disable()V const/4 v0, 0x0 .line 8 iput-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunnelingOnFrameRenderedListener:Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer$OnFrameRenderedListenerV23; .line 9 :try_start_0 invoke-super {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onDisabled()V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 10 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 11 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters; invoke-virtual {v0, v1}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->disabled(Lcom/google/android/exoplayer2/decoder/DecoderCounters;)V return-void :catchall_0 move-exception v0 .line 12 iget-object v1, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters; invoke-virtual {v1}, Lcom/google/android/exoplayer2/decoder/DecoderCounters;->ensureUpdated()V .line 13 iget-object v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; iget-object v2, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters; invoke-virtual {v1, v2}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->disabled(Lcom/google/android/exoplayer2/decoder/DecoderCounters;)V throw v0 .end method .method public onEnabled(Z)V .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/ExoPlaybackException; } .end annotation .line 1 invoke-super {p0, p1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onEnabled(Z)V .line 2 invoke-virtual {p0}, Lcom/google/android/exoplayer2/BaseRenderer;->getConfiguration()Lcom/google/android/exoplayer2/RendererConfiguration; move-result-object p1 iget p1, p1, Lcom/google/android/exoplayer2/RendererConfiguration;->tunnelingAudioSessionId:I iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunnelingAudioSessionId:I if-eqz p1, :cond_0 const/4 p1, 0x1 goto :goto_0 :cond_0 const/4 p1, 0x0 .line 3 :goto_0 iput-boolean p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunneling:Z .line 4 iget-object p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; iget-object v0, p0, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->decoderCounters:Lcom/google/android/exoplayer2/decoder/DecoderCounters; invoke-virtual {p1, v0}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->enabled(Lcom/google/android/exoplayer2/decoder/DecoderCounters;)V .line 5 iget-object p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->frameReleaseTimeHelper:Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper; invoke-virtual {p1}, Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper;->enable()V return-void .end method .method public onInputFormatChanged(Lcom/google/android/exoplayer2/Format;)V .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/ExoPlaybackException; } .end annotation .line 1 invoke-super {p0, p1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onInputFormatChanged(Lcom/google/android/exoplayer2/Format;)V .line 2 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->eventDispatcher:Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher; invoke-virtual {v0, p1}, Lcom/google/android/exoplayer2/video/VideoRendererEventListener$EventDispatcher;->inputFormatChanged(Lcom/google/android/exoplayer2/Format;)V .line 3 invoke-static {p1}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getPixelWidthHeightRatio(Lcom/google/android/exoplayer2/Format;)F move-result v0 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->pendingPixelWidthHeightRatio:F .line 4 invoke-static {p1}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->getRotationDegrees(Lcom/google/android/exoplayer2/Format;)I move-result p1 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->pendingRotationDegrees:I return-void .end method .method public onOutputFormatChanged(Landroid/media/MediaCodec;Landroid/media/MediaFormat;)V .locals 6 const-string v0, "crop-right" .line 1 invoke-virtual {p2, v0}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z move-result v1 const-string v2, "crop-top" const-string v3, "crop-bottom" const-string v4, "crop-left" const/4 v5, 0x1 if-eqz v1, :cond_0 .line 2 invoke-virtual {p2, v4}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z move-result v1 if-eqz v1, :cond_0 invoke-virtual {p2, v3}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z move-result v1 if-eqz v1, :cond_0 .line 3 invoke-virtual {p2, v2}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z move-result v1 if-eqz v1, :cond_0 move v1, v5 goto :goto_0 :cond_0 const/4 v1, 0x0 :goto_0 if-eqz v1, :cond_1 .line 4 invoke-virtual {p2, v0}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I move-result v0 invoke-virtual {p2, v4}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I move-result v4 sub-int/2addr v0, v4 add-int/2addr v0, v5 goto :goto_1 :cond_1 const-string v0, "width" .line 5 invoke-virtual {p2, v0}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I move-result v0 :goto_1 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentWidth:I if-eqz v1, :cond_2 .line 6 invoke-virtual {p2, v3}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I move-result v0 invoke-virtual {p2, v2}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I move-result p2 sub-int/2addr v0, p2 add-int/2addr v0, v5 goto :goto_2 :cond_2 const-string v0, "height" .line 7 invoke-virtual {p2, v0}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I move-result v0 :goto_2 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentHeight:I .line 8 iget p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->pendingPixelWidthHeightRatio:F iput p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentPixelWidthHeightRatio:F .line 9 sget v1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 v2, 0x15 if-lt v1, v2, :cond_4 .line 10 iget v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->pendingRotationDegrees:I const/16 v2, 0x5a if-eq v1, v2, :cond_3 const/16 v2, 0x10e if-ne v1, v2, :cond_5 .line 11 :cond_3 iget v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentWidth:I .line 12 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentWidth:I .line 13 iput v1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentHeight:I const/high16 v0, 0x3f800000 # 1.0f div-float/2addr v0, p2 .line 14 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentPixelWidthHeightRatio:F goto :goto_3 .line 15 :cond_4 iget p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->pendingRotationDegrees:I iput p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->currentUnappliedRotationDegrees:I .line 16 :cond_5 :goto_3 iget p2, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->scalingMode:I invoke-static {p1, p2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->setVideoScalingMode(Landroid/media/MediaCodec;I)V return-void .end method .method public onPositionReset(JZ)V .locals 0 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/ExoPlaybackException; } .end annotation .line 1 invoke-super {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onPositionReset(JZ)V .line 2 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->clearRenderedFirstFrame()V const/4 p1, 0x0 .line 3 iput p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->consecutiveDroppedFrameCount:I if-eqz p3, :cond_0 .line 4 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->setJoiningDeadlineMs()V goto :goto_0 :cond_0 const-wide p1, -0x7fffffffffffffffL # -4.9E-324 .line 5 iput-wide p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->joiningDeadlineMs:J :goto_0 return-void .end method .method public onQueueInputBuffer(Lcom/google/android/exoplayer2/decoder/DecoderInputBuffer;)V .locals 1 .line 1 sget p1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 v0, 0x17 if-ge p1, v0, :cond_0 iget-boolean p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->tunneling:Z if-eqz p1, :cond_0 .line 2 invoke-virtual {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeNotifyRenderedFirstFrame()V :cond_0 return-void .end method .method public onStarted()V .locals 2 .line 1 invoke-super {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onStarted()V const/4 v0, 0x0 .line 2 iput v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrames:I .line 3 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide v0 iput-wide v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->droppedFrameAccumulationStartTimeMs:J return-void .end method .method public onStopped()V .locals 2 const-wide v0, -0x7fffffffffffffffL # -4.9E-324 .line 1 iput-wide v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->joiningDeadlineMs:J .line 2 invoke-direct {p0}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->maybeNotifyDroppedFrames()V .line 3 invoke-super {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->onStopped()V return-void .end method .method public onStreamChanged([Lcom/google/android/exoplayer2/Format;)V .locals 0 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/ExoPlaybackException; } .end annotation .line 1 iput-object p1, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->streamFormats:[Lcom/google/android/exoplayer2/Format; .line 2 invoke-super {p0, p1}, Lcom/google/android/exoplayer2/BaseRenderer;->onStreamChanged([Lcom/google/android/exoplayer2/Format;)V return-void .end method .method public processOutputBuffer(JJLandroid/media/MediaCodec;Ljava/nio/ByteBuffer;IIJZ)Z .locals 18 move-object/from16 v0, p0 move-wide/from16 v1, p3 move-object/from16 v3, p5 move/from16 v4, p7 move-wide/from16 v5, p9 const/4 v7, 0x1 if-eqz p11, :cond_0 .line 1 invoke-direct {v0, v3, v4}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->skipOutputBuffer(Landroid/media/MediaCodec;I)V return v7 .line 2 :cond_0 iget-boolean v8, v0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderedFirstFrame:Z const/16 v9, 0x15 if-nez v8, :cond_2 .line 3 sget v1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I if-lt v1, v9, :cond_1 .line 4 invoke-static {}, Ljava/lang/System;->nanoTime()J move-result-wide v1 invoke-direct {v0, v3, v4, v1, v2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderOutputBufferV21(Landroid/media/MediaCodec;IJ)V goto :goto_0 .line 5 :cond_1 invoke-direct {v0, v3, v4}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderOutputBuffer(Landroid/media/MediaCodec;I)V :goto_0 return v7 .line 6 :cond_2 invoke-virtual/range {p0 .. p0}, Lcom/google/android/exoplayer2/BaseRenderer;->getState()I move-result v8 const/4 v10, 0x2 const/4 v11, 0x0 if-eq v8, v10, :cond_3 return v11 .line 7 :cond_3 invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J move-result-wide v12 const-wide/16 v14, 0x3e8 mul-long/2addr v12, v14 sub-long/2addr v12, v1 sub-long v16, v5, p1 sub-long v16, v16, v12 .line 8 invoke-static {}, Ljava/lang/System;->nanoTime()J move-result-wide v12 mul-long v16, v16, v14 add-long v9, v16, v12 .line 9 iget-object v8, v0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->frameReleaseTimeHelper:Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper; invoke-virtual {v8, v5, v6, v9, v10}, Lcom/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper;->adjustReleaseTime(JJ)J move-result-wide v5 sub-long v8, v5, v12 .line 10 div-long/2addr v8, v14 .line 11 invoke-virtual {v0, v8, v9, v1, v2}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->shouldDropOutputBuffer(JJ)Z move-result v1 if-eqz v1, :cond_4 .line 12 invoke-direct {v0, v3, v4}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->dropOutputBuffer(Landroid/media/MediaCodec;I)V return v7 .line 13 :cond_4 sget v1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 v2, 0x15 if-lt v1, v2, :cond_5 const-wide/32 v1, 0xc350 cmp-long v1, v8, v1 if-gez v1, :cond_7 .line 14 invoke-direct {v0, v3, v4, v5, v6}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderOutputBufferV21(Landroid/media/MediaCodec;IJ)V return v7 :cond_5 const-wide/16 v1, 0x7530 cmp-long v1, v8, v1 if-gez v1, :cond_7 const-wide/16 v1, 0x2af8 cmp-long v1, v8, v1 if-lez v1, :cond_6 const-wide/16 v1, 0x2710 sub-long/2addr v8, v1 .line 15 :try_start_0 div-long/2addr v8, v14 invoke-static {v8, v9}, Ljava/lang/Thread;->sleep(J)V :try_end_0 .catch Ljava/lang/InterruptedException; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_1 .line 16 :catch_0 invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread; move-result-object v1 invoke-virtual {v1}, Ljava/lang/Thread;->interrupt()V .line 17 :cond_6 :goto_1 invoke-direct {v0, v3, v4}, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->renderOutputBuffer(Landroid/media/MediaCodec;I)V return v7 :cond_7 return v11 .end method .method public shouldDropOutputBuffer(JJ)Z .locals 0 const-wide/16 p3, -0x7530 cmp-long p1, p1, p3 if-gez p1, :cond_0 const/4 p1, 0x1 goto :goto_0 :cond_0 const/4 p1, 0x0 :goto_0 return p1 .end method .method public shouldInitCodec()Z .locals 1 .line 1 invoke-super {p0}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecRenderer;->shouldInitCodec()Z move-result v0 if-eqz v0, :cond_0 iget-object v0, p0, Lcom/google/android/exoplayer2/video/MediaCodecVideoRenderer;->surface:Landroid/view/Surface; if-eqz v0, :cond_0 invoke-virtual {v0}, Landroid/view/Surface;->isValid()Z move-result v0 if-eqz v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public supportsFormat(Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;Lcom/google/android/exoplayer2/Format;)I .locals 6 .annotation system Ldalvik/annotation/Throws; value = { Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil$DecoderQueryException; } .end annotation .line 1 iget-object v0, p2, Lcom/google/android/exoplayer2/Format;->sampleMimeType:Ljava/lang/String; .line 2 invoke-static {v0}, Lcom/google/android/exoplayer2/util/MimeTypes;->isVideo(Ljava/lang/String;)Z move-result v1 const/4 v2, 0x0 if-nez v1, :cond_0 return v2 .line 3 :cond_0 iget-object v1, p2, Lcom/google/android/exoplayer2/Format;->drmInitData:Lcom/google/android/exoplayer2/drm/DrmInitData; if-eqz v1, :cond_1 move v3, v2 move v4, v3 .line 4 :goto_0 iget v5, v1, Lcom/google/android/exoplayer2/drm/DrmInitData;->schemeDataCount:I if-ge v3, v5, :cond_2 .line 5 invoke-virtual {v1, v3}, Lcom/google/android/exoplayer2/drm/DrmInitData;->get(I)Lcom/google/android/exoplayer2/drm/DrmInitData$SchemeData; move-result-object v5 iget-boolean v5, v5, Lcom/google/android/exoplayer2/drm/DrmInitData$SchemeData;->requiresSecureDecryption:Z or-int/2addr v4, v5 add-int/lit8 v3, v3, 0x1 goto :goto_0 :cond_1 move v4, v2 .line 6 :cond_2 invoke-interface {p1, v0, v4}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecSelector;->getDecoderInfo(Ljava/lang/String;Z)Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo; move-result-object p1 const/4 v0, 0x1 if-nez p1, :cond_3 return v0 .line 7 :cond_3 iget-object v1, p2, Lcom/google/android/exoplayer2/Format;->codecs:Ljava/lang/String; invoke-virtual {p1, v1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->isCodecSupported(Ljava/lang/String;)Z move-result v1 if-eqz v1, :cond_7 .line 8 iget v3, p2, Lcom/google/android/exoplayer2/Format;->width:I if-lez v3, :cond_7 iget v4, p2, Lcom/google/android/exoplayer2/Format;->height:I if-lez v4, :cond_7 .line 9 sget v1, Lcom/google/android/exoplayer2/util/Util;->SDK_INT:I const/16 v5, 0x15 if-lt v1, v5, :cond_4 .line 10 iget p2, p2, Lcom/google/android/exoplayer2/Format;->frameRate:F float-to-double v0, p2 invoke-virtual {p1, v3, v4, v0, v1}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->isVideoSizeAndRateSupportedV21(IID)Z move-result v1 goto :goto_2 :cond_4 mul-int/2addr v3, v4 .line 11 invoke-static {}, Lcom/google/android/exoplayer2/mediacodec/MediaCodecUtil;->maxH264DecodableFrameSize()I move-result v1 if-gt v3, v1, :cond_5 goto :goto_1 :cond_5 move v0, v2 :goto_1 if-nez v0, :cond_6 const-string v1, "FalseCheck [legacyFrameSize, " .line 12 invoke-static {v1}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1 iget v3, p2, Lcom/google/android/exoplayer2/Format;->width:I invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; const-string v3, "x" invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; iget p2, p2, Lcom/google/android/exoplayer2/Format;->height:I invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; const-string p2, "] [" invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; sget-object p2, Lcom/google/android/exoplayer2/util/Util;->DEVICE_DEBUG_INFO:Ljava/lang/String; invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string p2, "]" invoke-virtual {v1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p2 const-string v1, "MediaCodecVideoRenderer" invoke-static {v1, p2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_6 move v1, v0 .line 13 :cond_7 :goto_2 iget-boolean p2, p1, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->adaptive:Z if-eqz p2, :cond_8 const/16 p2, 0x8 goto :goto_3 :cond_8 const/4 p2, 0x4 .line 14 :goto_3 iget-boolean p1, p1, Lcom/google/android/exoplayer2/mediacodec/MediaCodecInfo;->tunneling:Z if-eqz p1, :cond_9 const/16 v2, 0x10 :cond_9 if-eqz v1, :cond_a const/4 p1, 0x3 goto :goto_4 :cond_a const/4 p1, 0x2 :goto_4 or-int/2addr p2, v2 or-int/2addr p1, p2 return p1 .end method