MediaCodecVideoDecoder.smali
.class public Lorg/webrtc/ali/MediaCodecVideoDecoder;
.super Ljava/lang/Object;
.source "MediaCodecVideoDecoder.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;,
Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedTextureBuffer;,
Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;,
Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;,
Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;,
Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback;,
Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;
}
.end annotation
# static fields
.field private static final COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m:I = 0x7fa30c04
.field private static final COLOR_QCOM_FORMATYVU420PackedSemiPlanar16m4ka:I = 0x7fa30c02
.field private static final COLOR_QCOM_FORMATYVU420PackedSemiPlanar32m4ka:I = 0x7fa30c01
.field private static final COLOR_QCOM_FORMATYVU420PackedSemiPlanar64x32Tile2m8ka:I = 0x7fa30c03
.field private static final DEQUEUE_INPUT_TIMEOUT:I = 0x7a120
.field private static final FORMAT_KEY_CROP_BOTTOM:Ljava/lang/String; = "crop-bottom"
.field private static final FORMAT_KEY_CROP_LEFT:Ljava/lang/String; = "crop-left"
.field private static final FORMAT_KEY_CROP_RIGHT:Ljava/lang/String; = "crop-right"
.field private static final FORMAT_KEY_CROP_TOP:Ljava/lang/String; = "crop-top"
.field private static final FORMAT_KEY_SLICE_HEIGHT:Ljava/lang/String; = "slice-height"
.field private static final FORMAT_KEY_STRIDE:Ljava/lang/String; = "stride"
.field private static final H264_MIME_TYPE:Ljava/lang/String; = "video/avc"
.field private static final MAX_DECODE_TIME_MS:J = 0xc8L
.field private static final MAX_QUEUED_OUTPUTBUFFERS:I = 0x3
.field private static final MEDIA_CODEC_RELEASE_TIMEOUT_MS:I = 0x1388
.field private static final TAG:Ljava/lang/String; = "MediaCodecVideoDecoder"
.field private static final VP8_MIME_TYPE:Ljava/lang/String; = "video/x-vnd.on2.vp8"
.field private static final VP9_MIME_TYPE:Ljava/lang/String; = "video/x-vnd.on2.vp9"
.field private static codecErrors:I = 0x0
.field private static errorCallback:Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback; = null
.field private static hwDecoderDisabledTypes:Ljava/util/Set; = null
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Set<",
"Ljava/lang/String;",
">;"
}
.end annotation
.end field
.field private static runningInstance:Lorg/webrtc/ali/MediaCodecVideoDecoder; = null
.field private static final supportedColorList:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Ljava/lang/Integer;",
">;"
}
.end annotation
.end field
.field private static final supportedExynosH264HighProfileHwCodecPrefix:Ljava/lang/String; = "OMX.Exynos."
.field private static final supportedH264HwCodecPrefixes:[Ljava/lang/String;
.field private static final supportedQcomH264HighProfileHwCodecPrefix:Ljava/lang/String; = "OMX.qcom."
.field private static final supportedVp8HwCodecPrefixes:[Ljava/lang/String;
.field private static final supportedVp9HwCodecPrefixes:[Ljava/lang/String;
# instance fields
.field private colorFormat:I
.field private final decodeStartTimeMs:Ljava/util/Queue;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Queue<",
"Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;",
">;"
}
.end annotation
.end field
.field private final dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Queue<",
"Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;",
">;"
}
.end annotation
.end field
.field private droppedFrames:I
.field private hasDecodedFirstFrame:Z
.field private height:I
.field private inputBuffers:[Ljava/nio/ByteBuffer;
.field private mediaCodec:Landroid/media/MediaCodec;
.field private mediaCodecThread:Ljava/lang/Thread;
.field private outputBuffers:[Ljava/nio/ByteBuffer;
.field private sliceHeight:I
.field private stride:I
.field private surface:Landroid/view/Surface;
.field private textureListener:Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;
.field private useSurface:Z
.field private width:I
# direct methods
.method static constructor <clinit>()V
.registers 5
.line 63
const/4 v0, 0x0
sput-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->runningInstance:Lorg/webrtc/ali/MediaCodecVideoDecoder;
.line 64
sput-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->errorCallback:Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback;
.line 65
const/4 v0, 0x0
sput v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->codecErrors:I
.line 67
new-instance v1, Ljava/util/HashSet;
invoke-direct {v1}, Ljava/util/HashSet;-><init>()V
sput-object v1, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hwDecoderDisabledTypes:Ljava/util/Set;
.line 77
const-string v1, "OMX.Intel."
const-string v2, "OMX.Exynos."
const-string v3, "OMX.qcom."
const-string v4, "OMX.Nvidia."
filled-new-array {v3, v4, v2, v1}, [Ljava/lang/String;
move-result-object v4
sput-object v4, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedVp8HwCodecPrefixes:[Ljava/lang/String;
.line 80
filled-new-array {v3, v2}, [Ljava/lang/String;
move-result-object v4
sput-object v4, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedVp9HwCodecPrefixes:[Ljava/lang/String;
.line 82
filled-new-array {v3, v1, v2}, [Ljava/lang/String;
move-result-object v1
sput-object v1, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedH264HwCodecPrefixes:[Ljava/lang/String;
.line 95
const/4 v1, 0x7
new-array v1, v1, [Ljava/lang/Integer;
.line 96
const/16 v2, 0x13
invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
aput-object v2, v1, v0
const/16 v0, 0x15
invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
const/4 v2, 0x1
aput-object v0, v1, v2
.line 97
const v0, 0x7fa30c00
invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
const/4 v2, 0x2
aput-object v0, v1, v2
.line 98
const v0, 0x7fa30c01
invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
const/4 v2, 0x3
aput-object v0, v1, v2
const v0, 0x7fa30c02
invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
const/4 v2, 0x4
aput-object v0, v1, v2
.line 99
const v0, 0x7fa30c03
invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
const/4 v2, 0x5
aput-object v0, v1, v2
.line 100
const v0, 0x7fa30c04
invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v0
const/4 v2, 0x6
aput-object v0, v1, v2
.line 95
invoke-static {v1}, Ljava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
move-result-object v0
sput-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedColorList:Ljava/util/List;
return-void
.end method
.method public constructor <init>()V
.registers 2
.line 35
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 108
new-instance v0, Ljava/util/LinkedList;
invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V
iput-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->decodeStartTimeMs:Ljava/util/Queue;
.line 114
const/4 v0, 0x0
iput-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->surface:Landroid/view/Surface;
.line 115
new-instance v0, Ljava/util/LinkedList;
invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V
iput-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
return-void
.end method
.method private MaybeRenderDecodedTextureBuffer()V
.registers 5
.line 729
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->isEmpty()Z
move-result v0
if-nez v0, :cond_29
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->textureListener:Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;
invoke-virtual {v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;->isWaitingForTexture()Z
move-result v0
if-eqz v0, :cond_11
goto :goto_29
.line 733
:cond_11
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->remove()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
.line 734
.local v0, "buffer":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
iget-object v1, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->textureListener:Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;
invoke-virtual {v1, v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;->addBufferToRender(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)V
.line 735
iget-object v1, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->index:I
invoke-static {v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$900(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)I
move-result v2
const/4 v3, 0x1
invoke-virtual {v1, v2, v3}, Landroid/media/MediaCodec;->releaseOutputBuffer(IZ)V
.line 736
return-void
.line 730
.end local v0 # "buffer":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
:cond_29
:goto_29
return-void
.end method
.method static synthetic access$000(Lorg/webrtc/ali/MediaCodecVideoDecoder;)Landroid/media/MediaCodec;
.registers 2
.param p0, "x0" # Lorg/webrtc/ali/MediaCodecVideoDecoder;
.line 35
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
return-object v0
.end method
.method private checkOnMediaCodecThread()V
.registers 6
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/IllegalStateException;
}
.end annotation
.line 270
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodecThread:Ljava/lang/Thread;
invoke-virtual {v0}, Ljava/lang/Thread;->getId()J
move-result-wide v0
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/Thread;->getId()J
move-result-wide v2
cmp-long v4, v0, v2
if-nez v4, :cond_13
.line 274
return-void
.line 271
:cond_13
new-instance v0, Ljava/lang/IllegalStateException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "MediaCodecVideoDecoder previously operated on "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodecThread:Ljava/lang/Thread;
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const-string v2, " but is now called on "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 272
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private dequeueInputBuffer()I
.registers 4
.line 413
invoke-direct {p0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->checkOnMediaCodecThread()V
.line 415
:try_start_3
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
const-wide/32 v1, 0x7a120
invoke-virtual {v0, v1, v2}, Landroid/media/MediaCodec;->dequeueInputBuffer(J)I
move-result v0
:try_end_c
.catch Ljava/lang/IllegalStateException; {:try_start_3 .. :try_end_c} :catch_d
return v0
.line 416
:catch_d
move-exception v0
.line 417
.local v0, "e":Ljava/lang/IllegalStateException;
const-string v1, "MediaCodecVideoDecoder"
const-string v2, "dequeueIntputBuffer failed"
invoke-static {v1, v2, v0}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 418
const/4 v1, -0x2
return v1
.end method
.method private dequeueOutputBuffer(I)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
.registers 24
.param p1, "dequeueTimeoutMs" # I
.line 600
move-object/from16 v0, p0
invoke-direct/range {p0 .. p0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->checkOnMediaCodecThread()V
.line 601
iget-object v1, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->decodeStartTimeMs:Ljava/util/Queue;
invoke-interface {v1}, Ljava/util/Queue;->isEmpty()Z
move-result v1
const/4 v2, 0x0
if-eqz v1, :cond_f
.line 602
return-object v2
.line 606
:cond_f
new-instance v1, Landroid/media/MediaCodec$BufferInfo;
invoke-direct {v1}, Landroid/media/MediaCodec$BufferInfo;-><init>()V
.line 608
.local v1, "info":Landroid/media/MediaCodec$BufferInfo;
:goto_14
iget-object v3, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
sget-object v4, Ljava/util/concurrent/TimeUnit;->MILLISECONDS:Ljava/util/concurrent/TimeUnit;
move/from16 v5, p1
int-to-long v6, v5
.line 609
invoke-virtual {v4, v6, v7}, Ljava/util/concurrent/TimeUnit;->toMicros(J)J
move-result-wide v6
invoke-virtual {v3, v1, v6, v7}, Landroid/media/MediaCodec;->dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I
move-result v3
.line 610
.local v3, "result":I
const/4 v4, -0x3
const-string v6, "MediaCodecVideoDecoder"
if-eq v3, v4, :cond_1dd
const/4 v4, -0x2
const/4 v7, 0x1
if-eq v3, v4, :cond_97
const/4 v4, -0x1
if-eq v3, v4, :cond_96
.line 661
iput-boolean v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hasDecodedFirstFrame:Z
.line 662
iget-object v2, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->decodeStartTimeMs:Ljava/util/Queue;
invoke-interface {v2}, Ljava/util/Queue;->remove()Ljava/lang/Object;
move-result-object v2
check-cast v2, Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;
.line 663
.local v2, "timeStamps":Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v7
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;->decodeStartTimeMs:J
invoke-static {v2}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;->access$600(Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;)J
move-result-wide v9
sub-long/2addr v7, v9
.line 664
.local v7, "decodeTimeMs":J
const-wide/16 v9, 0xc8
cmp-long v4, v7, v9
if-lez v4, :cond_73
.line 665
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v9, "Very high decode time: "
invoke-virtual {v4, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4, v7, v8}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
const-string v9, "ms. Q size: "
invoke-virtual {v4, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v9, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->decodeStartTimeMs:Ljava/util/Queue;
.line 666
invoke-interface {v9}, Ljava/util/Queue;->size()I
move-result v9
invoke-virtual {v4, v9}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v9, ". Might be caused by resuming H264 decoding after a pause."
invoke-virtual {v4, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
.line 665
invoke-static {v6, v4}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
.line 668
const-wide/16 v7, 0xc8
move-wide v6, v7
goto :goto_74
.line 664
:cond_73
move-wide v6, v7
.line 670
.end local v7 # "decodeTimeMs":J
.local v6, "decodeTimeMs":J
:goto_74
new-instance v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
iget v10, v1, Landroid/media/MediaCodec$BufferInfo;->offset:I
iget v11, v1, Landroid/media/MediaCodec$BufferInfo;->size:I
sget-object v8, Ljava/util/concurrent/TimeUnit;->MICROSECONDS:Ljava/util/concurrent/TimeUnit;
iget-wide v12, v1, Landroid/media/MediaCodec$BufferInfo;->presentationTimeUs:J
.line 671
invoke-virtual {v8, v12, v13}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J
move-result-wide v12
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;->timeStampMs:J
invoke-static {v2}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;->access$700(Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;)J
move-result-wide v14
.line 672
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;->ntpTimeStampMs:J
invoke-static {v2}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;->access$800(Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;)J
move-result-wide v16
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v20
move-object v8, v4
move v9, v3
move-wide/from16 v18, v6
invoke-direct/range {v8 .. v21}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;-><init>(IIIJJJJJ)V
.line 670
return-object v4
.line 659
.end local v2 # "timeStamps":Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;
.end local v6 # "decodeTimeMs":J
:cond_96
return-object v2
.line 619
:cond_97
iget-object v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
invoke-virtual {v4}, Landroid/media/MediaCodec;->getOutputFormat()Landroid/media/MediaFormat;
move-result-object v4
.line 620
.local v4, "format":Landroid/media/MediaFormat;
new-instance v8, Ljava/lang/StringBuilder;
invoke-direct {v8}, Ljava/lang/StringBuilder;-><init>()V
const-string v9, "Decoder format changed: "
invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Landroid/media/MediaFormat;->toString()Ljava/lang/String;
move-result-object v9
invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v8}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v8
invoke-static {v6, v8}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 623
const-string v8, "crop-left"
invoke-virtual {v4, v8}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
move-result v9
if-eqz v9, :cond_ea
const-string v9, "crop-right"
invoke-virtual {v4, v9}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
move-result v10
if-eqz v10, :cond_ea
.line 624
const-string v10, "crop-bottom"
invoke-virtual {v4, v10}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
move-result v11
if-eqz v11, :cond_ea
.line 625
const-string v11, "crop-top"
invoke-virtual {v4, v11}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
move-result v12
if-eqz v12, :cond_ea
.line 626
invoke-virtual {v4, v9}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v9
add-int/2addr v9, v7
.line 627
invoke-virtual {v4, v8}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v8
sub-int/2addr v9, v8
.line 628
.local v9, "newWidth":I
invoke-virtual {v4, v10}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v8
add-int/2addr v8, v7
.line 629
invoke-virtual {v4, v11}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v7
sub-int/2addr v8, v7
.local v8, "newHeight":I
goto :goto_f6
.line 631
.end local v8 # "newHeight":I
.end local v9 # "newWidth":I
:cond_ea
const-string v7, "width"
invoke-virtual {v4, v7}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v9
.line 632
.restart local v9 # "newWidth":I
const-string v7, "height"
invoke-virtual {v4, v7}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v8
.line 634
.restart local v8 # "newHeight":I
:goto_f6
iget-boolean v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hasDecodedFirstFrame:Z
if-eqz v7, :cond_134
iget v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->width:I
if-ne v9, v7, :cond_103
iget v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->height:I
if-ne v8, v7, :cond_103
goto :goto_134
.line 635
:cond_103
new-instance v2, Ljava/lang/RuntimeException;
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, "Unexpected size change. Configured "
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->width:I
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v7, "*"
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v10, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->height:I
invoke-virtual {v6, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v10, ". New "
invoke-virtual {v6, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6, v9}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v6, v8}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v6
invoke-direct {v2, v6}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v2
.line 638
:cond_134
:goto_134
iput v9, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->width:I
.line 639
iput v8, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->height:I
.line 641
iget-boolean v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->useSurface:Z
if-nez v7, :cond_18c
const-string v7, "color-format"
invoke-virtual {v4, v7}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
move-result v10
if-eqz v10, :cond_18c
.line 642
invoke-virtual {v4, v7}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v7
iput v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->colorFormat:I
.line 643
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v10, "Color: 0x"
invoke-virtual {v7, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v10, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->colorFormat:I
invoke-static {v10}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;
move-result-object v10
invoke-virtual {v7, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
invoke-static {v6, v7}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 644
sget-object v7, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedColorList:Ljava/util/List;
iget v10, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->colorFormat:I
invoke-static {v10}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v10
invoke-interface {v7, v10}, Ljava/util/List;->contains(Ljava/lang/Object;)Z
move-result v7
if-eqz v7, :cond_173
goto :goto_18c
.line 645
:cond_173
new-instance v2, Ljava/lang/IllegalStateException;
new-instance v6, Ljava/lang/StringBuilder;
invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, "Non supported color format: "
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->colorFormat:I
invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v6
invoke-direct {v2, v6}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v2
.line 648
:cond_18c
:goto_18c
const-string v7, "stride"
invoke-virtual {v4, v7}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
move-result v10
if-eqz v10, :cond_19a
.line 649
invoke-virtual {v4, v7}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v7
iput v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->stride:I
.line 651
:cond_19a
const-string v7, "slice-height"
invoke-virtual {v4, v7}, Landroid/media/MediaFormat;->containsKey(Ljava/lang/String;)Z
move-result v10
if-eqz v10, :cond_1a8
.line 652
invoke-virtual {v4, v7}, Landroid/media/MediaFormat;->getInteger(Ljava/lang/String;)I
move-result v7
iput v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->sliceHeight:I
.line 654
:cond_1a8
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v10, "Frame stride and slice height: "
invoke-virtual {v7, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v10, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->stride:I
invoke-virtual {v7, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v10, " x "
invoke-virtual {v7, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v10, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->sliceHeight:I
invoke-virtual {v7, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
invoke-static {v6, v7}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 655
iget v6, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->width:I
iget v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->stride:I
invoke-static {v6, v7}, Ljava/lang/Math;->max(II)I
move-result v6
iput v6, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->stride:I
.line 656
iget v6, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->height:I
iget v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->sliceHeight:I
invoke-static {v6, v7}, Ljava/lang/Math;->max(II)I
move-result v6
iput v6, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->sliceHeight:I
.line 657
goto :goto_200
.line 612
.end local v4 # "format":Landroid/media/MediaFormat;
.end local v8 # "newHeight":I
.end local v9 # "newWidth":I
:cond_1dd
iget-object v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
invoke-virtual {v4}, Landroid/media/MediaCodec;->getOutputBuffers()[Ljava/nio/ByteBuffer;
move-result-object v4
iput-object v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->outputBuffers:[Ljava/nio/ByteBuffer;
.line 613
new-instance v4, Ljava/lang/StringBuilder;
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, "Decoder output buffers changed: "
invoke-virtual {v4, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v7, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->outputBuffers:[Ljava/nio/ByteBuffer;
array-length v7, v7
invoke-virtual {v4, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-static {v6, v4}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 614
iget-boolean v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hasDecodedFirstFrame:Z
if-nez v4, :cond_202
.line 674
.end local v3 # "result":I
:goto_200
goto/16 :goto_14
.line 615
.restart local v3 # "result":I
:cond_202
new-instance v2, Ljava/lang/RuntimeException;
const-string v4, "Unexpected output buffer change event."
invoke-direct {v2, v4}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
goto :goto_20b
:goto_20a
throw v2
:goto_20b
goto :goto_20a
.end method
.method private dequeueTextureBuffer(I)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedTextureBuffer;
.registers 23
.param p1, "dequeueTimeoutMs" # I
.line 683
move-object/from16 v0, p0
move/from16 v1, p1
invoke-direct/range {p0 .. p0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->checkOnMediaCodecThread()V
.line 684
iget-boolean v2, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->useSurface:Z
if-eqz v2, :cond_d2
.line 687
invoke-direct/range {p0 .. p1}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeueOutputBuffer(I)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
move-result-object v2
.line 688
.local v2, "outputBuffer":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
if-eqz v2, :cond_16
.line 689
iget-object v3, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
invoke-interface {v3, v2}, Ljava/util/Queue;->add(Ljava/lang/Object;)Z
.line 692
:cond_16
invoke-direct/range {p0 .. p0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->MaybeRenderDecodedTextureBuffer()V
.line 694
iget-object v3, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->textureListener:Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;
invoke-virtual {v3, v1}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;->dequeueTextureBuffer(I)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedTextureBuffer;
move-result-object v3
.line 695
.local v3, "renderedBuffer":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedTextureBuffer;
if-eqz v3, :cond_25
.line 696
invoke-direct/range {p0 .. p0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->MaybeRenderDecodedTextureBuffer()V
.line 697
return-object v3
.line 700
:cond_25
iget-object v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
invoke-interface {v4}, Ljava/util/Queue;->size()I
move-result v4
const/4 v5, 0x3
iget-object v6, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->outputBuffers:[Ljava/nio/ByteBuffer;
array-length v6, v6
.line 701
invoke-static {v5, v6}, Ljava/lang/Math;->min(II)I
move-result v5
if-ge v4, v5, :cond_42
if-lez v1, :cond_40
iget-object v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
.line 702
invoke-interface {v4}, Ljava/util/Queue;->isEmpty()Z
move-result v4
if-nez v4, :cond_40
goto :goto_42
.line 725
:cond_40
const/4 v4, 0x0
return-object v4
.line 703
:cond_42
:goto_42
iget v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->droppedFrames:I
add-int/lit8 v4, v4, 0x1
iput v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->droppedFrames:I
.line 707
iget-object v4, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
invoke-interface {v4}, Ljava/util/Queue;->remove()Ljava/lang/Object;
move-result-object v4
check-cast v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
.line 708
.local v4, "droppedFrame":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
const-string v5, ". Total number of dropped frames: "
const-string v6, "MediaCodecVideoDecoder"
if-lez v1, :cond_77
.line 711
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, "Draining decoder. Dropping frame with TS: "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 712
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->presentationTimeStampMs:J
invoke-static {v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$100(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)J
move-result-wide v8
invoke-virtual {v7, v8, v9}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v5, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->droppedFrames:I
invoke-virtual {v7, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v5
.line 711
invoke-static {v6, v5}, Lorg/webrtc/ali/Logging;->w(Ljava/lang/String;Ljava/lang/String;)V
goto :goto_a5
.line 715
:cond_77
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, "Too many output buffers "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v8, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
invoke-interface {v8}, Ljava/util/Queue;->size()I
move-result v8
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v8, ". Dropping frame with TS: "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 716
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->presentationTimeStampMs:J
invoke-static {v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$100(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)J
move-result-wide v8
invoke-virtual {v7, v8, v9}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
invoke-virtual {v7, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v5, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->droppedFrames:I
invoke-virtual {v7, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v5
.line 715
invoke-static {v6, v5}, Lorg/webrtc/ali/Logging;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 720
:goto_a5
iget-object v5, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->index:I
invoke-static {v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$900(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)I
move-result v6
const/4 v7, 0x0
invoke-virtual {v5, v6, v7}, Landroid/media/MediaCodec;->releaseOutputBuffer(IZ)V
.line 721
new-instance v5, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedTextureBuffer;
const/4 v9, 0x0
const/4 v10, 0x0
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->presentationTimeStampMs:J
invoke-static {v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$100(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)J
move-result-wide v11
.line 722
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->timeStampMs:J
invoke-static {v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$200(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)J
move-result-wide v13
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->ntpTimeStampMs:J
invoke-static {v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$300(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)J
move-result-wide v15
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->decodeTimeMs:J
invoke-static {v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$400(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)J
move-result-wide v17
.line 723
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v6
# getter for: Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->endDecodeTimeMs:J
invoke-static {v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;->access$500(Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;)J
move-result-wide v19
sub-long v19, v6, v19
move-object v8, v5
invoke-direct/range {v8 .. v20}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedTextureBuffer;-><init>(I[FJJJJJ)V
.line 721
return-object v5
.line 685
.end local v2 # "outputBuffer":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
.end local v3 # "renderedBuffer":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedTextureBuffer;
.end local v4 # "droppedFrame":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecodedOutputBuffer;
:cond_d2
new-instance v2, Ljava/lang/IllegalStateException;
const-string v3, "dequeueTexture() called for byte buffer decoding."
invoke-direct {v2, v3}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v2
.end method
.method public static disableH264HwCodec()V
.registers 2
.line 143
const-string v0, "MediaCodecVideoDecoder"
const-string v1, "H.264 decoding is disabled by application."
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 144
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hwDecoderDisabledTypes:Ljava/util/Set;
const-string v1, "video/avc"
invoke-interface {v0, v1}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
.line 145
return-void
.end method
.method public static disableVp8HwCodec()V
.registers 2
.line 133
const-string v0, "MediaCodecVideoDecoder"
const-string v1, "VP8 decoding is disabled by application."
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 134
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hwDecoderDisabledTypes:Ljava/util/Set;
const-string v1, "video/x-vnd.on2.vp8"
invoke-interface {v0, v1}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
.line 135
return-void
.end method
.method public static disableVp9HwCodec()V
.registers 2
.line 138
const-string v0, "MediaCodecVideoDecoder"
const-string v1, "VP9 decoding is disabled by application."
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->w(Ljava/lang/String;Ljava/lang/String;)V
.line 139
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hwDecoderDisabledTypes:Ljava/util/Set;
const-string v1, "video/x-vnd.on2.vp9"
invoke-interface {v0, v1}, Ljava/util/Set;->add(Ljava/lang/Object;)Z
.line 140
return-void
.end method
.method private static findDecoder(Ljava/lang/String;[Ljava/lang/String;)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
.registers 16
.param p0, "mime" # Ljava/lang/String;
.param p1, "supportedCodecPrefixes" # [Ljava/lang/String;
.line 205
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/4 v1, 0x0
const/16 v2, 0x13
if-ge v0, v2, :cond_8
.line 206
return-object v1
.line 208
:cond_8
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Trying to find HW decoder for mime "
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v2, "MediaCodecVideoDecoder"
invoke-static {v2, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 209
const/4 v0, 0x0
.local v0, "i":I
:goto_1f
invoke-static {}, Landroid/media/MediaCodecList;->getCodecCount()I
move-result v3
if-ge v0, v3, :cond_101
.line 210
const/4 v3, 0x0
.line 212
.local v3, "info":Landroid/media/MediaCodecInfo;
:try_start_26
invoke-static {v0}, Landroid/media/MediaCodecList;->getCodecInfoAt(I)Landroid/media/MediaCodecInfo;
move-result-object v4
:try_end_2a
.catch Ljava/lang/IllegalArgumentException; {:try_start_26 .. :try_end_2a} :catch_2c
move-object v3, v4
.line 215
goto :goto_32
.line 213
:catch_2c
move-exception v4
.line 214
.local v4, "e":Ljava/lang/IllegalArgumentException;
const-string v5, "Cannot retrieve decoder codec info"
invoke-static {v2, v5, v4}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 216
.end local v4 # "e":Ljava/lang/IllegalArgumentException;
:goto_32
if-eqz v3, :cond_fd
invoke-virtual {v3}, Landroid/media/MediaCodecInfo;->isEncoder()Z
move-result v4
if-eqz v4, :cond_3c
.line 217
goto/16 :goto_fd
.line 219
:cond_3c
const/4 v4, 0x0
.line 220
.local v4, "name":Ljava/lang/String;
invoke-virtual {v3}, Landroid/media/MediaCodecInfo;->getSupportedTypes()[Ljava/lang/String;
move-result-object v5
array-length v6, v5
const/4 v7, 0x0
const/4 v8, 0x0
:goto_44
if-ge v8, v6, :cond_56
aget-object v9, v5, v8
.line 221
.local v9, "mimeType":Ljava/lang/String;
invoke-virtual {v9, p0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v10
if-eqz v10, :cond_53
.line 222
invoke-virtual {v3}, Landroid/media/MediaCodecInfo;->getName()Ljava/lang/String;
move-result-object v4
.line 223
goto :goto_56
.line 220
.end local v9 # "mimeType":Ljava/lang/String;
:cond_53
add-int/lit8 v8, v8, 0x1
goto :goto_44
.line 226
:cond_56
:goto_56
if-nez v4, :cond_5a
.line 227
goto/16 :goto_fd
.line 229
:cond_5a
new-instance v5, Ljava/lang/StringBuilder;
invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V
const-string v6, "Found candidate decoder "
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v5
invoke-static {v2, v5}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 232
const/4 v5, 0x0
.line 233
.local v5, "supportedCodec":Z
array-length v6, p1
const/4 v8, 0x0
:goto_71
if-ge v8, v6, :cond_80
aget-object v9, p1, v8
.line 234
.local v9, "codecPrefix":Ljava/lang/String;
invoke-virtual {v4, v9}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v10
if-eqz v10, :cond_7d
.line 235
const/4 v5, 0x1
.line 236
goto :goto_80
.line 233
.end local v9 # "codecPrefix":Ljava/lang/String;
:cond_7d
add-int/lit8 v8, v8, 0x1
goto :goto_71
.line 239
:cond_80
:goto_80
if-nez v5, :cond_84
.line 240
goto/16 :goto_fd
.line 246
:cond_84
:try_start_84
invoke-virtual {v3, p0}, Landroid/media/MediaCodecInfo;->getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;
move-result-object v6
:try_end_88
.catch Ljava/lang/IllegalArgumentException; {:try_start_84 .. :try_end_88} :catch_f6
.line 250
.local v6, "capabilities":Landroid/media/MediaCodecInfo$CodecCapabilities;
nop
.line 251
iget-object v8, v6, Landroid/media/MediaCodecInfo$CodecCapabilities;->colorFormats:[I
array-length v9, v8
const/4 v10, 0x0
:goto_8d
if-ge v10, v9, :cond_ac
aget v11, v8, v10
.line 252
.local v11, "colorFormat":I
new-instance v12, Ljava/lang/StringBuilder;
invoke-direct {v12}, Ljava/lang/StringBuilder;-><init>()V
const-string v13, " Color: 0x"
invoke-virtual {v12, v13}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-static {v11}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;
move-result-object v13
invoke-virtual {v12, v13}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v12}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v12
invoke-static {v2, v12}, Lorg/webrtc/ali/Logging;->v(Ljava/lang/String;Ljava/lang/String;)V
.line 251
.end local v11 # "colorFormat":I
add-int/lit8 v10, v10, 0x1
goto :goto_8d
.line 254
:cond_ac
sget-object v8, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedColorList:Ljava/util/List;
invoke-interface {v8}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v8
:goto_b2
invoke-interface {v8}, Ljava/util/Iterator;->hasNext()Z
move-result v9
if-eqz v9, :cond_fd
invoke-interface {v8}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v9
check-cast v9, Ljava/lang/Integer;
invoke-virtual {v9}, Ljava/lang/Integer;->intValue()I
move-result v9
.line 255
.local v9, "supportedColorFormat":I
iget-object v10, v6, Landroid/media/MediaCodecInfo$CodecCapabilities;->colorFormats:[I
array-length v11, v10
const/4 v12, 0x0
:goto_c6
if-ge v12, v11, :cond_f5
aget v13, v10, v12
.line 256
.local v13, "codecColorFormat":I
if-ne v13, v9, :cond_f2
.line 258
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v7, "Found target decoder "
invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v7, ". Color: 0x"
invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 259
invoke-static {v13}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;
move-result-object v7
invoke-virtual {v1, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
.line 258
invoke-static {v2, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 260
new-instance v1, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
invoke-direct {v1, v4, v13}, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;-><init>(Ljava/lang/String;I)V
return-object v1
.line 255
.end local v13 # "codecColorFormat":I
:cond_f2
add-int/lit8 v12, v12, 0x1
goto :goto_c6
.line 263
.end local v9 # "supportedColorFormat":I
:cond_f5
goto :goto_b2
.line 247
.end local v6 # "capabilities":Landroid/media/MediaCodecInfo$CodecCapabilities;
:catch_f6
move-exception v6
.line 248
.local v6, "e":Ljava/lang/IllegalArgumentException;
const-string v7, "Cannot retrieve decoder capabilities"
invoke-static {v2, v7, v6}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 249
nop
.line 209
.end local v3 # "info":Landroid/media/MediaCodecInfo;
.end local v4 # "name":Ljava/lang/String;
.end local v5 # "supportedCodec":Z
.end local v6 # "e":Ljava/lang/IllegalArgumentException;
:cond_fd
:goto_fd
add-int/lit8 v0, v0, 0x1
goto/16 :goto_1f
.line 265
.end local v0 # "i":I
:cond_101
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "No HW decoder found for mime "
invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p0}, 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 {v2, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 266
return-object v1
.end method
.method private initDecode(Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;IILorg/webrtc/ali/SurfaceTextureHelper;)Z
.registers 15
.param p1, "type" # Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;
.param p2, "width" # I
.param p3, "height" # I
.param p4, "surfaceTextureHelper" # Lorg/webrtc/ali/SurfaceTextureHelper;
.line 279
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodecThread:Ljava/lang/Thread;
if-nez v0, :cond_14b
.line 283
const/4 v0, 0x0
.line 284
.local v0, "mime":Ljava/lang/String;
const/4 v1, 0x1
const/4 v2, 0x0
if-eqz p4, :cond_b
const/4 v3, 0x1
goto :goto_c
:cond_b
const/4 v3, 0x0
:goto_c
iput-boolean v3, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->useSurface:Z
.line 285
const/4 v3, 0x0
.line 286
.local v3, "supportedCodecPrefixes":[Ljava/lang/String;
sget-object v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;->VIDEO_CODEC_VP8:Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;
if-ne p1, v4, :cond_18
.line 287
const-string v0, "video/x-vnd.on2.vp8"
.line 288
sget-object v3, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedVp8HwCodecPrefixes:[Ljava/lang/String;
goto :goto_29
.line 289
:cond_18
sget-object v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;->VIDEO_CODEC_VP9:Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;
if-ne p1, v4, :cond_21
.line 290
const-string v0, "video/x-vnd.on2.vp9"
.line 291
sget-object v3, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedVp9HwCodecPrefixes:[Ljava/lang/String;
goto :goto_29
.line 292
:cond_21
sget-object v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;->VIDEO_CODEC_H264:Lorg/webrtc/ali/MediaCodecVideoDecoder$VideoCodecType;
if-ne p1, v4, :cond_134
.line 293
const-string v0, "video/avc"
.line 294
sget-object v3, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedH264HwCodecPrefixes:[Ljava/lang/String;
.line 298
:goto_29
invoke-static {v0, v3}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->findDecoder(Ljava/lang/String;[Ljava/lang/String;)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
move-result-object v4
.line 299
.local v4, "properties":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
if-eqz v4, :cond_11d
.line 303
new-instance v5, Ljava/lang/StringBuilder;
invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V
const-string v6, "Java initDecode: "
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const-string v6, " : "
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v6, " x "
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v5, p3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v6, ". Color: 0x"
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v6, v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;->colorFormat:I
.line 304
invoke-static {v6}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String;
move-result-object v6
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v6, ". Use Surface: "
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-boolean v6, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->useSurface:Z
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v5
.line 303
const-string v6, "MediaCodecVideoDecoder"
invoke-static {v6, v5}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 306
sput-object p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->runningInstance:Lorg/webrtc/ali/MediaCodecVideoDecoder;
.line 307
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v5
iput-object v5, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodecThread:Ljava/lang/Thread;
.line 309
:try_start_75
iput p2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->width:I
.line 310
iput p3, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->height:I
.line 311
iput p2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->stride:I
.line 312
iput p3, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->sliceHeight:I
.line 314
iget-boolean v5, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->useSurface:Z
if-eqz v5, :cond_93
.line 315
new-instance v5, Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;
invoke-direct {v5, p4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;-><init>(Lorg/webrtc/ali/SurfaceTextureHelper;)V
iput-object v5, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->textureListener:Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;
.line 316
new-instance v5, Landroid/view/Surface;
invoke-virtual {p4}, Lorg/webrtc/ali/SurfaceTextureHelper;->getSurfaceTexture()Landroid/graphics/SurfaceTexture;
move-result-object v7
invoke-direct {v5, v7}, Landroid/view/Surface;-><init>(Landroid/graphics/SurfaceTexture;)V
iput-object v5, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->surface:Landroid/view/Surface;
.line 319
:cond_93
invoke-static {v0, p2, p3}, Landroid/media/MediaFormat;->createVideoFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;
move-result-object v5
.line 320
.local v5, "format":Landroid/media/MediaFormat;
iget-boolean v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->useSurface:Z
if-nez v7, :cond_a2
.line 321
const-string v7, "color-format"
iget v8, v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;->colorFormat:I
invoke-virtual {v5, v7, v8}, Landroid/media/MediaFormat;->setInteger(Ljava/lang/String;I)V
.line 323
:cond_a2
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, " Format: "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v7, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
invoke-static {v6, v7}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 324
iget-object v7, v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;->codecName:Ljava/lang/String;
invoke-static {v7}, Lorg/webrtc/ali/MediaCodecVideoEncoder;->createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;
move-result-object v7
iput-object v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
.line 325
if-nez v7, :cond_c6
.line 326
const-string v1, "Can not create media decoder"
invoke-static {v6, v1}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
.line 327
return v2
.line 329
:cond_c6
iget-object v8, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->surface:Landroid/view/Surface;
const/4 v9, 0x0
invoke-virtual {v7, v5, v8, v9, v2}, Landroid/media/MediaCodec;->configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V
.line 330
iget-object v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
invoke-virtual {v7}, Landroid/media/MediaCodec;->start()V
.line 332
iget v7, v4, Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;->colorFormat:I
iput v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->colorFormat:I
.line 333
iget-object v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
invoke-virtual {v7}, Landroid/media/MediaCodec;->getOutputBuffers()[Ljava/nio/ByteBuffer;
move-result-object v7
iput-object v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->outputBuffers:[Ljava/nio/ByteBuffer;
.line 334
iget-object v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
invoke-virtual {v7}, Landroid/media/MediaCodec;->getInputBuffers()[Ljava/nio/ByteBuffer;
move-result-object v7
iput-object v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->inputBuffers:[Ljava/nio/ByteBuffer;
.line 335
iget-object v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->decodeStartTimeMs:Ljava/util/Queue;
invoke-interface {v7}, Ljava/util/Queue;->clear()V
.line 336
iput-boolean v2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hasDecodedFirstFrame:Z
.line 337
iget-object v7, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
invoke-interface {v7}, Ljava/util/Queue;->clear()V
.line 338
iput v2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->droppedFrames:I
.line 339
new-instance v7, Ljava/lang/StringBuilder;
invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
const-string v8, "Input buffers: "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v8, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->inputBuffers:[Ljava/nio/ByteBuffer;
array-length v8, v8
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v8, ". Output buffers: "
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v8, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->outputBuffers:[Ljava/nio/ByteBuffer;
array-length v8, v8
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
invoke-static {v6, v7}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
:try_end_115
.catch Ljava/lang/IllegalStateException; {:try_start_75 .. :try_end_115} :catch_116
.line 341
return v1
.line 342
.end local v5 # "format":Landroid/media/MediaFormat;
:catch_116
move-exception v1
.line 343
.local v1, "e":Ljava/lang/IllegalStateException;
const-string v5, "initDecode failed"
invoke-static {v6, v5, v1}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 344
return v2
.line 300
.end local v1 # "e":Ljava/lang/IllegalStateException;
:cond_11d
new-instance v1, Ljava/lang/RuntimeException;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v5, "Cannot find HW decoder for "
invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v1
.line 296
.end local v4 # "properties":Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
:cond_134
new-instance v1, Ljava/lang/RuntimeException;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "initDecode: Non-supported codec "
invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-direct {v1, v2}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v1
.line 280
.end local v0 # "mime":Ljava/lang/String;
.end local v3 # "supportedCodecPrefixes":[Ljava/lang/String;
:cond_14b
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "initDecode: Forgot to release()?"
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public static isH264HighProfileHwSupported()Z
.registers 5
.line 164
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hwDecoderDisabledTypes:Ljava/util/Set;
const-string v1, "video/avc"
invoke-interface {v0, v1}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z
move-result v0
const/4 v2, 0x0
if-eqz v0, :cond_c
.line 165
return v2
.line 168
:cond_c
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v3, 0x15
const/4 v4, 0x1
if-lt v0, v3, :cond_20
const-string v0, "OMX.qcom."
filled-new-array {v0}, [Ljava/lang/String;
move-result-object v0
.line 169
invoke-static {v1, v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->findDecoder(Ljava/lang/String;[Ljava/lang/String;)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
move-result-object v0
if-eqz v0, :cond_20
.line 171
return v4
.line 174
:cond_20
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v3, 0x17
if-lt v0, v3, :cond_33
const-string v0, "OMX.Exynos."
filled-new-array {v0}, [Ljava/lang/String;
move-result-object v0
.line 175
invoke-static {v1, v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->findDecoder(Ljava/lang/String;[Ljava/lang/String;)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
move-result-object v0
if-eqz v0, :cond_33
.line 177
return v4
.line 179
:cond_33
return v2
.end method
.method public static isH264HwSupported()Z
.registers 2
.line 159
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hwDecoderDisabledTypes:Ljava/util/Set;
const-string v1, "video/avc"
invoke-interface {v0, v1}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_14
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedH264HwCodecPrefixes:[Ljava/lang/String;
.line 160
invoke-static {v1, v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->findDecoder(Ljava/lang/String;[Ljava/lang/String;)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
move-result-object v0
if-eqz v0, :cond_14
const/4 v0, 0x1
goto :goto_15
:cond_14
const/4 v0, 0x0
.line 159
:goto_15
return v0
.end method
.method public static isVp8HwSupported()Z
.registers 2
.line 149
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hwDecoderDisabledTypes:Ljava/util/Set;
const-string v1, "video/x-vnd.on2.vp8"
invoke-interface {v0, v1}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_14
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedVp8HwCodecPrefixes:[Ljava/lang/String;
.line 150
invoke-static {v1, v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->findDecoder(Ljava/lang/String;[Ljava/lang/String;)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
move-result-object v0
if-eqz v0, :cond_14
const/4 v0, 0x1
goto :goto_15
:cond_14
const/4 v0, 0x0
.line 149
:goto_15
return v0
.end method
.method public static isVp9HwSupported()Z
.registers 2
.line 154
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hwDecoderDisabledTypes:Ljava/util/Set;
const-string v1, "video/x-vnd.on2.vp9"
invoke-interface {v0, v1}, Ljava/util/Set;->contains(Ljava/lang/Object;)Z
move-result v0
if-nez v0, :cond_14
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->supportedVp9HwCodecPrefixes:[Ljava/lang/String;
.line 155
invoke-static {v1, v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->findDecoder(Ljava/lang/String;[Ljava/lang/String;)Lorg/webrtc/ali/MediaCodecVideoDecoder$DecoderProperties;
move-result-object v0
if-eqz v0, :cond_14
const/4 v0, 0x1
goto :goto_15
:cond_14
const/4 v0, 0x0
.line 154
:goto_15
return v0
.end method
.method public static printStackTrace()V
.registers 6
.line 183
sget-object v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->runningInstance:Lorg/webrtc/ali/MediaCodecVideoDecoder;
if-eqz v0, :cond_26
iget-object v0, v0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodecThread:Ljava/lang/Thread;
if-eqz v0, :cond_26
.line 184
invoke-virtual {v0}, Ljava/lang/Thread;->getStackTrace()[Ljava/lang/StackTraceElement;
move-result-object v0
.line 185
.local v0, "mediaCodecStackTraces":[Ljava/lang/StackTraceElement;
array-length v1, v0
if-lez v1, :cond_26
.line 186
const-string v1, "MediaCodecVideoDecoder"
const-string v2, "MediaCodecVideoDecoder stacks trace:"
invoke-static {v1, v2}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 187
array-length v2, v0
const/4 v3, 0x0
:goto_18
if-ge v3, v2, :cond_26
aget-object v4, v0, v3
.line 188
.local v4, "stackTrace":Ljava/lang/StackTraceElement;
invoke-virtual {v4}, Ljava/lang/StackTraceElement;->toString()Ljava/lang/String;
move-result-object v5
invoke-static {v1, v5}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 187
.end local v4 # "stackTrace":Ljava/lang/StackTraceElement;
add-int/lit8 v3, v3, 0x1
goto :goto_18
.line 192
.end local v0 # "mediaCodecStackTraces":[Ljava/lang/StackTraceElement;
:cond_26
return-void
.end method
.method private queueInputBuffer(IIJJJ)Z
.registers 21
.param p1, "inputBufferIndex" # I
.param p2, "size" # I
.param p3, "presentationTimeStamUs" # J
.param p5, "timeStampMs" # J
.param p7, "ntpTimeStamp" # J
.line 424
move-object v1, p0
invoke-direct {p0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->checkOnMediaCodecThread()V
.line 426
const/4 v9, 0x0
:try_start_5
iget-object v0, v1, Lorg/webrtc/ali/MediaCodecVideoDecoder;->inputBuffers:[Ljava/nio/ByteBuffer;
aget-object v0, v0, p1
invoke-virtual {v0, v9}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 427
iget-object v0, v1, Lorg/webrtc/ali/MediaCodecVideoDecoder;->inputBuffers:[Ljava/nio/ByteBuffer;
aget-object v0, v0, p1
:try_end_10
.catch Ljava/lang/IllegalStateException; {:try_start_5 .. :try_end_10} :catch_35
move v10, p2
:try_start_11
invoke-virtual {v0, p2}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;
.line 428
iget-object v0, v1, Lorg/webrtc/ali/MediaCodecVideoDecoder;->decodeStartTimeMs:Ljava/util/Queue;
new-instance v11, Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;
.line 429
invoke-static {}, Landroid/os/SystemClock;->elapsedRealtime()J
move-result-wide v3
move-object v2, v11
move-wide/from16 v5, p5
move-wide/from16 v7, p7
invoke-direct/range {v2 .. v8}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TimeStamps;-><init>(JJJ)V
.line 428
invoke-interface {v0, v11}, Ljava/util/Queue;->add(Ljava/lang/Object;)Z
.line 430
iget-object v2, v1, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
const/4 v4, 0x0
const/4 v8, 0x0
move v3, p1
move v5, p2
move-wide v6, p3
invoke-virtual/range {v2 .. v8}, Landroid/media/MediaCodec;->queueInputBuffer(IIIJI)V
:try_end_31
.catch Ljava/lang/IllegalStateException; {:try_start_11 .. :try_end_31} :catch_33
.line 431
const/4 v0, 0x1
return v0
.line 432
:catch_33
move-exception v0
goto :goto_37
:catch_35
move-exception v0
move v10, p2
.line 433
.local v0, "e":Ljava/lang/IllegalStateException;
:goto_37
const-string v2, "MediaCodecVideoDecoder"
const-string v3, "decode failed"
invoke-static {v2, v3, v0}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 434
return v9
.end method
.method private release()V
.registers 7
.line 367
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Java releaseDecoder. Total number of dropped frames: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v1, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->droppedFrames:I
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "MediaCodecVideoDecoder"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 368
invoke-direct {p0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->checkOnMediaCodecThread()V
.line 372
new-instance v0, Ljava/util/concurrent/CountDownLatch;
const/4 v2, 0x1
invoke-direct {v0, v2}, Ljava/util/concurrent/CountDownLatch;-><init>(I)V
.line 374
.local v0, "releaseDone":Ljava/util/concurrent/CountDownLatch;
new-instance v3, Lorg/webrtc/ali/MediaCodecVideoDecoder$1;
invoke-direct {v3, p0, v0}, Lorg/webrtc/ali/MediaCodecVideoDecoder$1;-><init>(Lorg/webrtc/ali/MediaCodecVideoDecoder;Ljava/util/concurrent/CountDownLatch;)V
.line 388
.local v3, "runMediaCodecRelease":Ljava/lang/Runnable;
new-instance v4, Ljava/lang/Thread;
invoke-direct {v4, v3}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
invoke-virtual {v4}, Ljava/lang/Thread;->start()V
.line 390
const-wide/16 v4, 0x1388
invoke-static {v0, v4, v5}, Lorg/webrtc/ali/ThreadUtils;->awaitUninterruptibly(Ljava/util/concurrent/CountDownLatch;J)Z
move-result v4
if-nez v4, :cond_61
.line 391
const-string v4, "Media decoder release timeout"
invoke-static {v1, v4}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
.line 392
sget v4, Lorg/webrtc/ali/MediaCodecVideoDecoder;->codecErrors:I
add-int/2addr v4, v2
sput v4, Lorg/webrtc/ali/MediaCodecVideoDecoder;->codecErrors:I
.line 393
sget-object v2, Lorg/webrtc/ali/MediaCodecVideoDecoder;->errorCallback:Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback;
if-eqz v2, :cond_61
.line 394
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "Invoke codec error callback. Errors: "
invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
sget v4, Lorg/webrtc/ali/MediaCodecVideoDecoder;->codecErrors:I
invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-static {v1, v2}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V
.line 395
sget-object v2, Lorg/webrtc/ali/MediaCodecVideoDecoder;->errorCallback:Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback;
sget v4, Lorg/webrtc/ali/MediaCodecVideoDecoder;->codecErrors:I
invoke-interface {v2, v4}, Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback;->onMediaCodecVideoDecoderCriticalError(I)V
.line 399
:cond_61
const/4 v2, 0x0
iput-object v2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
.line 400
iput-object v2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodecThread:Ljava/lang/Thread;
.line 401
sput-object v2, Lorg/webrtc/ali/MediaCodecVideoDecoder;->runningInstance:Lorg/webrtc/ali/MediaCodecVideoDecoder;
.line 402
iget-boolean v4, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->useSurface:Z
if-eqz v4, :cond_78
.line 403
iget-object v4, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->surface:Landroid/view/Surface;
invoke-virtual {v4}, Landroid/view/Surface;->release()V
.line 404
iput-object v2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->surface:Landroid/view/Surface;
.line 405
iget-object v2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->textureListener:Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;
invoke-virtual {v2}, Lorg/webrtc/ali/MediaCodecVideoDecoder$TextureListener;->release()V
.line 407
:cond_78
const-string v2, "Java releaseDecoder done"
invoke-static {v1, v2}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 408
return-void
.end method
.method private reset(II)V
.registers 5
.param p1, "width" # I
.param p2, "height" # I
.line 351
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodecThread:Ljava/lang/Thread;
if-eqz v0, :cond_3f
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
if-eqz v0, :cond_3f
.line 354
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Java reset: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v1, " x "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "MediaCodecVideoDecoder"
invoke-static {v1, v0}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 356
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
invoke-virtual {v0}, Landroid/media/MediaCodec;->flush()V
.line 358
iput p1, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->width:I
.line 359
iput p2, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->height:I
.line 360
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->decodeStartTimeMs:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->clear()V
.line 361
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->dequeuedSurfaceOutputBuffers:Ljava/util/Queue;
invoke-interface {v0}, Ljava/util/Queue;->clear()V
.line 362
const/4 v0, 0x0
iput-boolean v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->hasDecodedFirstFrame:Z
.line 363
iput v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->droppedFrames:I
.line 364
return-void
.line 352
:cond_3f
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "Incorrect reset call for non-initialized decoder."
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method private returnDecodedOutputBuffer(I)V
.registers 4
.param p1, "index" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/IllegalStateException;,
Landroid/media/MediaCodec$CodecException;
}
.end annotation
.line 745
invoke-direct {p0}, Lorg/webrtc/ali/MediaCodecVideoDecoder;->checkOnMediaCodecThread()V
.line 746
iget-boolean v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->useSurface:Z
if-nez v0, :cond_e
.line 749
iget-object v0, p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->mediaCodec:Landroid/media/MediaCodec;
const/4 v1, 0x0
invoke-virtual {v0, p1, v1}, Landroid/media/MediaCodec;->releaseOutputBuffer(IZ)V
.line 750
return-void
.line 747
:cond_e
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "returnDecodedOutputBuffer() called for surface decoding."
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public static setErrorCallback(Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback;)V
.registers 3
.param p0, "errorCallback" # Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback;
.line 126
const-string v0, "MediaCodecVideoDecoder"
const-string v1, "Set error callback"
invoke-static {v0, v1}, Lorg/webrtc/ali/Logging;->d(Ljava/lang/String;Ljava/lang/String;)V
.line 127
sput-object p0, Lorg/webrtc/ali/MediaCodecVideoDecoder;->errorCallback:Lorg/webrtc/ali/MediaCodecVideoDecoder$MediaCodecVideoDecoderErrorCallback;
.line 128
return-void
.end method