.class final Lorg/tensorflow/lite/NativeInterpreterWrapper; .super Ljava/lang/Object; .source "NativeInterpreterWrapper.java" # interfaces .implements Ljava/lang/AutoCloseable; # static fields .field public static final l:I = 0x200 # instance fields .field public a:J .field public b:J .field public c:J .field public d:Ljava/nio/ByteBuffer; .field public e:Ljava/util/Map; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Map<", "Ljava/lang/String;", "Ljava/lang/Integer;", ">;" } .end annotation .end field .field public f:Ljava/util/Map; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Map<", "Ljava/lang/String;", "Ljava/lang/Integer;", ">;" } .end annotation .end field .field public g:[Lorg/tensorflow/lite/Tensor; .field public h:[Lorg/tensorflow/lite/Tensor; .field public i:Z .field private inferenceDurationNanoseconds:J .field public final j:Ljava/util/List; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/List<", "Lorg/tensorflow/lite/a;", ">;" } .end annotation .end field .field public final k:Ljava/util/List; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/List<", "Ljava/lang/AutoCloseable;", ">;" } .end annotation .end field # direct methods .method public constructor (Ljava/lang/String;)V .locals 1 const/4 v0, 0x0 .line 1 invoke-direct {p0, p1, v0}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->(Ljava/lang/String;Lorg/tensorflow/lite/b$a;)V return-void .end method .method public constructor (Ljava/lang/String;Lorg/tensorflow/lite/b$a;)V .locals 7 .line 3 invoke-direct {p0}, Ljava/lang/Object;->()V const-wide/16 v0, -0x1 .line 4 iput-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->inferenceDurationNanoseconds:J const/4 v0, 0x0 .line 5 iput-boolean v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z .line 6 new-instance v0, Ljava/util/ArrayList; invoke-direct {v0}, Ljava/util/ArrayList;->()V iput-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->j:Ljava/util/List; .line 7 new-instance v0, Ljava/util/ArrayList; invoke-direct {v0}, Ljava/util/ArrayList;->()V iput-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->k:Ljava/util/List; .line 8 invoke-static {}, Lorg/tensorflow/lite/TensorFlowLite;->a()V const/16 v0, 0x200 .line 9 invoke-static {v0}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->createErrorReporter(I)J move-result-wide v2 .line 10 invoke-static {p1, v2, v3}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->createModel(Ljava/lang/String;J)J move-result-wide v4 move-object v1, p0 move-object v6, p2 .line 11 invoke-virtual/range {v1 .. v6}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->N(JJLorg/tensorflow/lite/b$a;)V return-void .end method .method public constructor (Ljava/nio/ByteBuffer;)V .locals 1 const/4 v0, 0x0 .line 2 invoke-direct {p0, p1, v0}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->(Ljava/nio/ByteBuffer;Lorg/tensorflow/lite/b$a;)V return-void .end method .method public constructor (Ljava/nio/ByteBuffer;Lorg/tensorflow/lite/b$a;)V .locals 6 .line 12 invoke-direct {p0}, Ljava/lang/Object;->()V const-wide/16 v0, -0x1 .line 13 iput-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->inferenceDurationNanoseconds:J const/4 v0, 0x0 .line 14 iput-boolean v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z .line 15 new-instance v0, Ljava/util/ArrayList; invoke-direct {v0}, Ljava/util/ArrayList;->()V iput-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->j:Ljava/util/List; .line 16 new-instance v0, Ljava/util/ArrayList; invoke-direct {v0}, Ljava/util/ArrayList;->()V iput-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->k:Ljava/util/List; .line 17 invoke-static {}, Lorg/tensorflow/lite/TensorFlowLite;->a()V if-eqz p1, :cond_1 .line 18 instance-of v0, p1, Ljava/nio/MappedByteBuffer; if-nez v0, :cond_0 .line 19 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->isDirect()Z move-result v0 if-eqz v0, :cond_1 invoke-virtual {p1}, Ljava/nio/ByteBuffer;->order()Ljava/nio/ByteOrder; move-result-object v0 invoke-static {}, Ljava/nio/ByteOrder;->nativeOrder()Ljava/nio/ByteOrder; move-result-object v1 if-ne v0, v1, :cond_1 .line 20 :cond_0 iput-object p1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->d:Ljava/nio/ByteBuffer; const/16 p1, 0x200 .line 21 invoke-static {p1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->createErrorReporter(I)J move-result-wide v1 .line 22 iget-object p1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->d:Ljava/nio/ByteBuffer; invoke-static {p1, v1, v2}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->createModelWithBuffer(Ljava/nio/ByteBuffer;J)J move-result-wide v3 move-object v0, p0 move-object v5, p2 .line 23 invoke-virtual/range {v0 .. v5}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->N(JJLorg/tensorflow/lite/b$a;)V return-void .line 24 :cond_1 new-instance p1, Ljava/lang/IllegalArgumentException; const-string p2, "Model ByteBuffer should be either a MappedByteBuffer of the model file, or a direct ByteBuffer using ByteOrder.nativeOrder() which contains bytes of model content." invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw p1 .end method .method public static O(Ljava/util/List;)Lorg/tensorflow/lite/a; .locals 3 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/util/List<", "Lorg/tensorflow/lite/a;", ">;)", "Lorg/tensorflow/lite/a;" } .end annotation const/4 v0, 0x0 :try_start_0 const-string v1, "org.tensorflow.lite.flex.FlexDelegate" .line 1 invoke-static {v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; move-result-object v1 .line 2 invoke-interface {p0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object p0 :cond_0 invoke-interface {p0}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_1 invoke-interface {p0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Lorg/tensorflow/lite/a; .line 3 invoke-virtual {v1, v2}, Ljava/lang/Class;->isInstance(Ljava/lang/Object;)Z move-result v2 if-eqz v2, :cond_0 return-object v0 :cond_1 const/4 p0, 0x0 new-array v2, p0, [Ljava/lang/Class; .line 4 invoke-virtual {v1, v2}, Ljava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor; move-result-object v1 new-array p0, p0, [Ljava/lang/Object; invoke-virtual {v1, p0}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object; move-result-object p0 check-cast p0, Lorg/tensorflow/lite/a; :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 return-object p0 :catch_0 return-object v0 .end method .method private static native allocateTensors(JJ)J .end method .method private static native allowBufferHandleOutput(JZ)V .end method .method private static native allowFp16PrecisionForFp32(JZ)V .end method .method private static native applyDelegate(JJJ)V .end method .method private static native createErrorReporter(I)J .end method .method private static native createInterpreter(JJI)J .end method .method private static native createModel(Ljava/lang/String;J)J .end method .method private static native createModelWithBuffer(Ljava/nio/ByteBuffer;J)J .end method .method private static native delete(JJJ)V .end method .method private static native getExecutionPlanLength(J)I .end method .method private static native getInputCount(J)I .end method .method private static native getInputNames(J)[Ljava/lang/String; .end method .method private static native getInputTensorIndex(JI)I .end method .method private static native getOutputCount(J)I .end method .method private static native getOutputDataType(JI)I .end method .method private static native getOutputNames(J)[Ljava/lang/String; .end method .method private static native getOutputTensorIndex(JI)I .end method .method private static native hasUnresolvedFlexOp(J)Z .end method .method private static native numThreads(JI)V .end method .method private static native resetVariableTensors(JJ)V .end method .method private static native resizeInput(JJI[IZ)Z .end method .method private static native run(JJ)V .end method .method private static native useNNAPI(JZ)V .end method .method private static native useXNNPACK(JJZI)V .end method # virtual methods .method public B0(I)V .locals 2 .line 1 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static {v0, v1, p1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->numThreads(JI)V return-void .end method .method public D0(Z)V .locals 2 .line 1 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static {v0, v1, p1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->useNNAPI(JZ)V return-void .end method .method public G(I)Lorg/tensorflow/lite/Tensor; .locals 4 if-ltz p1, :cond_1 .line 1 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->h:[Lorg/tensorflow/lite/Tensor; array-length v1, v0 if-ge p1, v1, :cond_1 .line 2 aget-object v1, v0, p1 if-nez v1, :cond_0 .line 3 iget-wide v1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J .line 4 invoke-static {v1, v2, p1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->getOutputTensorIndex(JI)I move-result v3 invoke-static {v1, v2, v3}, Lorg/tensorflow/lite/Tensor;->k(JI)Lorg/tensorflow/lite/Tensor; move-result-object v1 aput-object v1, v0, p1 :cond_0 return-object v1 .line 5 :cond_1 new-instance v0, Ljava/lang/IllegalArgumentException; const-string v1, "Invalid output Tensor index: " invoke-static {v1, p1}, Landroid/support/v4/media/b;->a(Ljava/lang/String;I)Ljava/lang/String; move-result-object p1 invoke-direct {v0, p1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw v0 .end method .method public L()I .locals 1 .line 1 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->h:[Lorg/tensorflow/lite/Tensor; array-length v0, v0 return v0 .end method .method public final N(JJLorg/tensorflow/lite/b$a;)V .locals 6 if-nez p5, :cond_0 .line 1 new-instance p5, Lorg/tensorflow/lite/b$a; invoke-direct {p5}, Lorg/tensorflow/lite/b$a;->()V .line 2 :cond_0 iput-wide p1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J .line 3 iput-wide p3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->c:J .line 4 iget v0, p5, Lorg/tensorflow/lite/b$a;->a:I invoke-static {p3, p4, p1, p2, v0}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->createInterpreter(JJI)J move-result-wide p3 iput-wide p3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J .line 5 invoke-static {p3, p4}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->getInputCount(J)I move-result p3 new-array p3, p3, [Lorg/tensorflow/lite/Tensor; iput-object p3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->g:[Lorg/tensorflow/lite/Tensor; .line 6 iget-wide p3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static {p3, p4}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->getOutputCount(J)I move-result p3 new-array p3, p3, [Lorg/tensorflow/lite/Tensor; iput-object p3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->h:[Lorg/tensorflow/lite/Tensor; .line 7 iget-object p3, p5, Lorg/tensorflow/lite/b$a;->c:Ljava/lang/Boolean; if-eqz p3, :cond_1 .line 8 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J .line 9 invoke-virtual {p3}, Ljava/lang/Boolean;->booleanValue()Z move-result p3 .line 10 invoke-static {v0, v1, p3}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->allowFp16PrecisionForFp32(JZ)V .line 11 :cond_1 iget-object p3, p5, Lorg/tensorflow/lite/b$a;->d:Ljava/lang/Boolean; if-eqz p3, :cond_2 .line 12 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-virtual {p3}, Ljava/lang/Boolean;->booleanValue()Z move-result p3 invoke-static {v0, v1, p3}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->allowBufferHandleOutput(JZ)V .line 13 :cond_2 invoke-virtual {p0, p5}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b(Lorg/tensorflow/lite/b$a;)V .line 14 iget-object p3, p5, Lorg/tensorflow/lite/b$a;->e:Ljava/lang/Boolean; if-eqz p3, :cond_3 .line 15 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J .line 16 invoke-virtual {p3}, Ljava/lang/Boolean;->booleanValue()Z move-result v4 iget v5, p5, Lorg/tensorflow/lite/b$a;->a:I move-wide v2, p1 .line 17 invoke-static/range {v0 .. v5}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->useXNNPACK(JJZI)V .line 18 :cond_3 iget-wide p3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static {p3, p4, p1, p2}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->allocateTensors(JJ)J const/4 p1, 0x1 .line 19 iput-boolean p1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z return-void .end method .method public W(Lorg/tensorflow/lite/a;)V .locals 6 .line 1 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J invoke-interface {p1}, Lorg/tensorflow/lite/a;->a()J move-result-wide v4 invoke-static/range {v0 .. v5}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->applyDelegate(JJJ)V .line 2 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->j:Ljava/util/List; invoke-interface {v0, p1}, Ljava/util/List;->add(Ljava/lang/Object;)Z return-void .end method .method public Y()V .locals 4 .line 1 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J invoke-static {v0, v1, v2, v3}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->resetVariableTensors(JJ)V return-void .end method .method public a()V .locals 4 .line 1 iget-boolean v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z if-eqz v0, :cond_0 return-void :cond_0 const/4 v0, 0x1 .line 2 iput-boolean v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z .line 3 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J invoke-static {v0, v1, v2, v3}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->allocateTensors(JJ)J const/4 v0, 0x0 .line 4 :goto_0 iget-object v1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->h:[Lorg/tensorflow/lite/Tensor; array-length v2, v1 if-ge v0, v2, :cond_2 .line 5 aget-object v2, v1, v0 if-eqz v2, :cond_1 .line 6 aget-object v1, v1, v0 invoke-virtual {v1}, Lorg/tensorflow/lite/Tensor;->u()V :cond_1 add-int/lit8 v0, v0, 0x1 goto :goto_0 :cond_2 return-void .end method .method public a0(I[I)V .locals 1 const/4 v0, 0x0 .line 1 invoke-virtual {p0, p1, p2, v0}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->c0(I[IZ)V return-void .end method .method public final b(Lorg/tensorflow/lite/b$a;)V .locals 10 .line 1 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static {v0, v1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->hasUnresolvedFlexOp(J)Z move-result v0 if-eqz v0, :cond_0 .line 2 iget-object v1, p1, Lorg/tensorflow/lite/b$a;->f:Ljava/util/List; invoke-static {v1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->O(Ljava/util/List;)Lorg/tensorflow/lite/a; move-result-object v1 if-eqz v1, :cond_0 .line 3 iget-object v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->k:Ljava/util/List; move-object v3, v1 check-cast v3, Ljava/lang/AutoCloseable; invoke-interface {v2, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z .line 4 iget-wide v4, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v6, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J invoke-interface {v1}, Lorg/tensorflow/lite/a;->a()J move-result-wide v8 invoke-static/range {v4 .. v9}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->applyDelegate(JJJ)V .line 5 :cond_0 :try_start_0 iget-object v1, p1, Lorg/tensorflow/lite/b$a;->f:Ljava/util/List; invoke-interface {v1}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v1 :goto_0 invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_1 invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Lorg/tensorflow/lite/a; .line 6 iget-wide v3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v5, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J invoke-interface {v2}, Lorg/tensorflow/lite/a;->a()J move-result-wide v7 invoke-static/range {v3 .. v8}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->applyDelegate(JJJ)V .line 7 iget-object v3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->j:Ljava/util/List; invoke-interface {v3, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z goto :goto_0 .line 8 :cond_1 iget-object p1, p1, Lorg/tensorflow/lite/b$a;->b:Ljava/lang/Boolean; if-eqz p1, :cond_3 invoke-virtual {p1}, Ljava/lang/Boolean;->booleanValue()Z move-result p1 if-eqz p1, :cond_3 .line 9 new-instance p1, Lorg/tensorflow/lite/nnapi/NnApiDelegate; invoke-direct {p1}, Lorg/tensorflow/lite/nnapi/NnApiDelegate;->()V .line 10 iget-object v1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->k:Ljava/util/List; invoke-interface {v1, p1}, Ljava/util/List;->add(Ljava/lang/Object;)Z .line 11 iget-wide v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v4, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J invoke-virtual {p1}, Lorg/tensorflow/lite/nnapi/NnApiDelegate;->a()J move-result-wide v6 invoke-static/range {v2 .. v7}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->applyDelegate(JJJ)V :try_end_0 .catch Ljava/lang/IllegalArgumentException; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_2 :catch_0 move-exception p1 if-eqz v0, :cond_2 .line 12 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J .line 13 invoke-static {v0, v1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->hasUnresolvedFlexOp(J)Z move-result v0 if-nez v0, :cond_2 const/4 v0, 0x1 goto :goto_1 :cond_2 const/4 v0, 0x0 :goto_1 if-eqz v0, :cond_4 .line 14 sget-object v0, Ljava/lang/System;->err:Ljava/io/PrintStream; new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V const-string v2, "Ignoring failed delegate application: " invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-virtual {v0, p1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V :cond_3 :goto_2 return-void .line 15 :cond_4 throw p1 .end method .method public c()I .locals 2 .line 1 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static {v0, v1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->getExecutionPlanLength(J)I move-result v0 return v0 .end method .method public c0(I[IZ)V .locals 7 .line 1 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J move v4, p1 move-object v5, p2 move v6, p3 invoke-static/range {v0 .. v6}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->resizeInput(JJI[IZ)Z move-result p2 if-eqz p2, :cond_0 const/4 p2, 0x0 .line 2 iput-boolean p2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z .line 3 iget-object p2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->g:[Lorg/tensorflow/lite/Tensor; aget-object p3, p2, p1 if-eqz p3, :cond_0 .line 4 aget-object p1, p2, p1 invoke-virtual {p1}, Lorg/tensorflow/lite/Tensor;->u()V :cond_0 return-void .end method .method public close()V .locals 11 const/4 v0, 0x0 move v1, v0 .line 1 :goto_0 iget-object v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->g:[Lorg/tensorflow/lite/Tensor; array-length v3, v2 const/4 v4, 0x0 if-ge v1, v3, :cond_1 .line 2 aget-object v3, v2, v1 if-eqz v3, :cond_0 .line 3 aget-object v2, v2, v1 invoke-virtual {v2}, Lorg/tensorflow/lite/Tensor;->b()V .line 4 iget-object v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->g:[Lorg/tensorflow/lite/Tensor; aput-object v4, v2, v1 :cond_0 add-int/lit8 v1, v1, 0x1 goto :goto_0 :cond_1 move v1, v0 .line 5 :goto_1 iget-object v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->h:[Lorg/tensorflow/lite/Tensor; array-length v3, v2 if-ge v1, v3, :cond_3 .line 6 aget-object v3, v2, v1 if-eqz v3, :cond_2 .line 7 aget-object v2, v2, v1 invoke-virtual {v2}, Lorg/tensorflow/lite/Tensor;->b()V .line 8 iget-object v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->h:[Lorg/tensorflow/lite/Tensor; aput-object v4, v2, v1 :cond_2 add-int/lit8 v1, v1, 0x1 goto :goto_1 .line 9 :cond_3 iget-wide v5, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J iget-wide v7, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->c:J iget-wide v9, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static/range {v5 .. v10}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->delete(JJJ)V const-wide/16 v1, 0x0 .line 10 iput-wide v1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J .line 11 iput-wide v1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->c:J .line 12 iput-wide v1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J .line 13 iput-object v4, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->d:Ljava/nio/ByteBuffer; .line 14 iput-object v4, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->e:Ljava/util/Map; .line 15 iput-object v4, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f:Ljava/util/Map; .line 16 iput-boolean v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z .line 17 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->j:Ljava/util/List; invoke-interface {v0}, Ljava/util/List;->clear()V .line 18 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->k:Ljava/util/List; invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v0 :goto_2 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v1 if-eqz v1, :cond_4 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v1 check-cast v1, Ljava/lang/AutoCloseable; .line 19 :try_start_0 invoke-interface {v1}, Ljava/lang/AutoCloseable;->close()V :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_2 :catch_0 move-exception v1 .line 20 sget-object v2, Ljava/lang/System;->err:Ljava/io/PrintStream; new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3}, Ljava/lang/StringBuilder;->()V const-string v4, "Failed to close flex delegate: " invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-virtual {v2, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V goto :goto_2 .line 21 :cond_4 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->k:Ljava/util/List; invoke-interface {v0}, Ljava/util/List;->clear()V return-void .end method .method public d(Ljava/lang/String;)I .locals 6 .line 1 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->e:Ljava/util/Map; const/4 v1, 0x0 if-nez v0, :cond_0 .line 2 iget-wide v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static {v2, v3}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->getInputNames(J)[Ljava/lang/String; move-result-object v0 .line 3 new-instance v2, Ljava/util/HashMap; invoke-direct {v2}, Ljava/util/HashMap;->()V iput-object v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->e:Ljava/util/Map; if-eqz v0, :cond_0 move v2, v1 .line 4 :goto_0 array-length v3, v0 if-ge v2, v3, :cond_0 .line 5 iget-object v3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->e:Ljava/util/Map; aget-object v4, v0, v2 invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v5 invoke-interface {v3, v4, v5}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; add-int/lit8 v2, v2, 0x1 goto :goto_0 .line 6 :cond_0 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->e:Ljava/util/Map; invoke-interface {v0, p1}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_1 .line 7 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->e:Ljava/util/Map; invoke-interface {v0, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/lang/Integer; invoke-virtual {p1}, Ljava/lang/Integer;->intValue()I move-result p1 return p1 .line 8 :cond_1 new-instance v0, Ljava/lang/IllegalArgumentException; const/4 v2, 0x2 new-array v2, v2, [Ljava/lang/Object; aput-object p1, v2, v1 iget-object p1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->e:Ljava/util/Map; .line 9 invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object p1 const/4 v1, 0x1 aput-object p1, v2, v1 const-string p1, "Input error: \'%s\' is not a valid name for any input. Names of inputs and their indexes are %s" .line 10 invoke-static {p1, v2}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 invoke-direct {v0, p1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw v0 .end method .method public e0([Ljava/lang/Object;Ljava/util/Map;)V .locals 8 .annotation system Ldalvik/annotation/Signature; value = { "([", "Ljava/lang/Object;", "Ljava/util/Map<", "Ljava/lang/Integer;", "Ljava/lang/Object;", ">;)V" } .end annotation const-wide/16 v0, -0x1 .line 1 iput-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->inferenceDurationNanoseconds:J if-eqz p1, :cond_8 .line 2 array-length v0, p1 if-eqz v0, :cond_8 if-eqz p2, :cond_7 .line 3 invoke-interface {p2}, Ljava/util/Map;->isEmpty()Z move-result v0 if-nez v0, :cond_7 const/4 v0, 0x0 move v1, v0 .line 4 :goto_0 array-length v2, p1 if-ge v1, v2, :cond_1 .line 5 invoke-virtual {p0, v1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f(I)Lorg/tensorflow/lite/Tensor; move-result-object v2 .line 6 aget-object v3, p1, v1 invoke-virtual {v2, v3}, Lorg/tensorflow/lite/Tensor;->l(Ljava/lang/Object;)[I move-result-object v2 if-eqz v2, :cond_0 .line 7 invoke-virtual {p0, v1, v2}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a0(I[I)V :cond_0 add-int/lit8 v1, v1, 0x1 goto :goto_0 .line 8 :cond_1 iget-boolean v1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z const/4 v2, 0x1 xor-int/2addr v1, v2 if-eqz v1, :cond_2 .line 9 iget-wide v3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v5, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J invoke-static {v3, v4, v5, v6}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->allocateTensors(JJ)J .line 10 iput-boolean v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->i:Z :cond_2 move v2, v0 .line 11 :goto_1 array-length v3, p1 if-ge v2, v3, :cond_3 .line 12 invoke-virtual {p0, v2}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f(I)Lorg/tensorflow/lite/Tensor; move-result-object v3 aget-object v4, p1, v2 invoke-virtual {v3, v4}, Lorg/tensorflow/lite/Tensor;->v(Ljava/lang/Object;)V add-int/lit8 v2, v2, 0x1 goto :goto_1 .line 13 :cond_3 invoke-static {}, Ljava/lang/System;->nanoTime()J move-result-wide v2 .line 14 iget-wide v4, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J iget-wide v6, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->a:J invoke-static {v4, v5, v6, v7}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->run(JJ)V .line 15 invoke-static {}, Ljava/lang/System;->nanoTime()J move-result-wide v4 sub-long/2addr v4, v2 if-eqz v1, :cond_5 .line 16 :goto_2 iget-object p1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->h:[Lorg/tensorflow/lite/Tensor; array-length v1, p1 if-ge v0, v1, :cond_5 .line 17 aget-object v1, p1, v0 if-eqz v1, :cond_4 .line 18 aget-object p1, p1, v0 invoke-virtual {p1}, Lorg/tensorflow/lite/Tensor;->u()V :cond_4 add-int/lit8 v0, v0, 0x1 goto :goto_2 .line 19 :cond_5 invoke-interface {p2}, Ljava/util/Map;->entrySet()Ljava/util/Set; move-result-object p1 invoke-interface {p1}, Ljava/util/Set;->iterator()Ljava/util/Iterator; move-result-object p1 :goto_3 invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z move-result p2 if-eqz p2, :cond_6 invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object p2 check-cast p2, Ljava/util/Map$Entry; .line 20 invoke-interface {p2}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/lang/Integer; invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I move-result v0 invoke-virtual {p0, v0}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->G(I)Lorg/tensorflow/lite/Tensor; move-result-object v0 invoke-interface {p2}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object; move-result-object p2 invoke-virtual {v0, p2}, Lorg/tensorflow/lite/Tensor;->f(Ljava/lang/Object;)Ljava/lang/Object; goto :goto_3 .line 21 :cond_6 iput-wide v4, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->inferenceDurationNanoseconds:J return-void .line 22 :cond_7 new-instance p1, Ljava/lang/IllegalArgumentException; const-string p2, "Input error: Outputs should not be null or empty." invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw p1 .line 23 :cond_8 new-instance p1, Ljava/lang/IllegalArgumentException; const-string p2, "Input error: Inputs should not be null or empty." invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw p1 .end method .method public f(I)Lorg/tensorflow/lite/Tensor; .locals 4 if-ltz p1, :cond_1 .line 1 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->g:[Lorg/tensorflow/lite/Tensor; array-length v1, v0 if-ge p1, v1, :cond_1 .line 2 aget-object v1, v0, p1 if-nez v1, :cond_0 .line 3 iget-wide v1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J .line 4 invoke-static {v1, v2, p1}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->getInputTensorIndex(JI)I move-result v3 invoke-static {v1, v2, v3}, Lorg/tensorflow/lite/Tensor;->k(JI)Lorg/tensorflow/lite/Tensor; move-result-object v1 aput-object v1, v0, p1 :cond_0 return-object v1 .line 5 :cond_1 new-instance v0, Ljava/lang/IllegalArgumentException; const-string v1, "Invalid input Tensor index: " invoke-static {v1, p1}, Landroid/support/v4/media/b;->a(Ljava/lang/String;I)Ljava/lang/String; move-result-object p1 invoke-direct {v0, p1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw v0 .end method .method public k()I .locals 1 .line 1 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->g:[Lorg/tensorflow/lite/Tensor; array-length v0, v0 return v0 .end method .method public u()Ljava/lang/Long; .locals 4 .line 1 iget-wide v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->inferenceDurationNanoseconds:J const-wide/16 v2, 0x0 cmp-long v2, v0, v2 if-gez v2, :cond_0 const/4 v0, 0x0 goto :goto_0 :cond_0 invoke-static {v0, v1}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v0 :goto_0 return-object v0 .end method .method public v(Ljava/lang/String;)I .locals 6 .line 1 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f:Ljava/util/Map; const/4 v1, 0x0 if-nez v0, :cond_0 .line 2 iget-wide v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->b:J invoke-static {v2, v3}, Lorg/tensorflow/lite/NativeInterpreterWrapper;->getOutputNames(J)[Ljava/lang/String; move-result-object v0 .line 3 new-instance v2, Ljava/util/HashMap; invoke-direct {v2}, Ljava/util/HashMap;->()V iput-object v2, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f:Ljava/util/Map; if-eqz v0, :cond_0 move v2, v1 .line 4 :goto_0 array-length v3, v0 if-ge v2, v3, :cond_0 .line 5 iget-object v3, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f:Ljava/util/Map; aget-object v4, v0, v2 invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v5 invoke-interface {v3, v4, v5}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; add-int/lit8 v2, v2, 0x1 goto :goto_0 .line 6 :cond_0 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f:Ljava/util/Map; invoke-interface {v0, p1}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_1 .line 7 iget-object v0, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f:Ljava/util/Map; invoke-interface {v0, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/lang/Integer; invoke-virtual {p1}, Ljava/lang/Integer;->intValue()I move-result p1 return p1 .line 8 :cond_1 new-instance v0, Ljava/lang/IllegalArgumentException; const/4 v2, 0x2 new-array v2, v2, [Ljava/lang/Object; aput-object p1, v2, v1 iget-object p1, p0, Lorg/tensorflow/lite/NativeInterpreterWrapper;->f:Ljava/util/Map; .line 9 invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object p1 const/4 v1, 0x1 aput-object p1, v2, v1 const-string p1, "Input error: \'%s\' is not a valid name for any output. Names of outputs and their indexes are %s" .line 10 invoke-static {p1, v2}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 invoke-direct {v0, p1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw v0 .end method