HeifSupportStatus.smali
.class public Lcom/facebook/common/heif/HeifSupportStatus;
.super Ljava/lang/Object;
.source "SourceFile"
# static fields
.field public static final HEIF_HEADER_LENGTH:I
.field private static final HEIF_HEADER_PREFIX:Ljava/lang/String; = "ftyp"
.field private static final HEIF_HEADER_SUFFIXES:[Ljava/lang/String;
.field private static sHeifBitmapFactory:Lcom/facebook/common/heif/HeifBitmapFactory;
.field private static sHeifLibraryChecked:Z
# direct methods
.method static constructor <clinit>()V
.registers 6
const-string v0, "mif1"
const-string v1, "msf1"
const-string v2, "heic"
const-string v3, "heix"
const-string v4, "hevc"
const-string v5, "hevx"
.line 16
filled-new-array/range {v0 .. v5}, [Ljava/lang/String;
move-result-object v0
sput-object v0, Lcom/facebook/common/heif/HeifSupportStatus;->HEIF_HEADER_SUFFIXES:[Ljava/lang/String;
.line 18
new-instance v0, Ljava/lang/StringBuilder;
const-string v1, "ftyp"
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
sget-object v1, Lcom/facebook/common/heif/HeifSupportStatus;->HEIF_HEADER_SUFFIXES:[Ljava/lang/String;
const/4 v2, 0x0
aget-object v1, v1, v2
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
.line 19
invoke-static {v0}, Lcom/facebook/common/heif/HeifSupportStatus;->asciiBytes(Ljava/lang/String;)[B
move-result-object v0
array-length v0, v0
sput v0, Lcom/facebook/common/heif/HeifSupportStatus;->HEIF_HEADER_LENGTH:I
.line 21
sput-boolean v2, Lcom/facebook/common/heif/HeifSupportStatus;->sHeifLibraryChecked:Z
const/4 v0, 0x0
.line 22
sput-object v0, Lcom/facebook/common/heif/HeifSupportStatus;->sHeifBitmapFactory:Lcom/facebook/common/heif/HeifBitmapFactory;
return-void
.end method
.method public constructor <init>()V
.registers 1
.line 12
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static asciiBytes(Ljava/lang/String;)[B
.registers 3
.line 25
invoke-static {p0}, Lcom/facebook/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
:try_start_3
const-string v0, "ASCII"
.line 27
invoke-virtual {p0, v0}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
move-result-object p0
:try_end_9
.catch Ljava/io/UnsupportedEncodingException; {:try_start_3 .. :try_end_9} :catch_a
return-object p0
:catch_a
move-exception p0
.line 30
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "ASCII not found!"
invoke-direct {v0, v1, p0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v0
.end method
.method public static indexOfPattern([BII[BI)I
.registers 13
.line 88
invoke-static {p0}, Lcom/facebook/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 89
invoke-static {p3}, Lcom/facebook/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
const/4 v0, -0x1
if-le p4, p1, :cond_a
return v0
:cond_a
const/4 v1, 0x0
.line 94
aget-byte v2, p3, v1
sub-int/2addr p1, p4
:goto_e
if-gt v1, p1, :cond_3c
add-int v3, p2, v1
.line 99
aget-byte v3, p0, v3
const/4 v4, 0x1
if-eq v3, v2, :cond_20
:cond_17
add-int/2addr v1, v4
if-gt v1, p1, :cond_20
add-int v3, p2, v1
.line 100
aget-byte v3, p0, v3
if-ne v3, v2, :cond_17
:cond_20
if-gt v1, p1, :cond_39
add-int/lit8 v3, v1, 0x1
add-int v5, v3, p4
sub-int/2addr v5, v4
:goto_27
if-ge v3, v5, :cond_36
add-int v6, p2, v3
.line 108
aget-byte v6, p0, v6
aget-byte v7, p3, v4
if-ne v6, v7, :cond_36
add-int/lit8 v3, v3, 0x1
add-int/lit8 v4, v4, 0x1
goto :goto_27
:cond_36
if-ne v3, v5, :cond_39
return v1
:cond_39
add-int/lit8 v1, v1, 0x1
goto :goto_e
:cond_3c
return v0
.end method
.method public static isHeifHeader([BII)Z
.registers 9
.line 57
sget v0, Lcom/facebook/common/heif/HeifSupportStatus;->HEIF_HEADER_LENGTH:I
const/4 v1, 0x0
if-ge p2, v0, :cond_6
return v1
:cond_6
add-int/lit8 p2, p1, 0x3
.line 61
aget-byte p2, p0, p2
const/16 v0, 0x8
if-ge p2, v0, :cond_f
return v1
.line 66
:cond_f
sget-object p2, Lcom/facebook/common/heif/HeifSupportStatus;->HEIF_HEADER_SUFFIXES:[Ljava/lang/String;
array-length v0, p2
const/4 v2, 0x0
:goto_13
if-ge v2, v0, :cond_34
aget-object v3, p2, v2
.line 67
array-length v4, p0
sub-int/2addr v4, p1
invoke-static {v3}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
const-string v5, "ftyp"
invoke-virtual {v5, v3}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v3
.line 72
invoke-static {v3}, Lcom/facebook/common/heif/HeifSupportStatus;->asciiBytes(Ljava/lang/String;)[B
move-result-object v3
sget v5, Lcom/facebook/common/heif/HeifSupportStatus;->HEIF_HEADER_LENGTH:I
.line 68
invoke-static {p0, v4, p1, v3, v5}, Lcom/facebook/common/heif/HeifSupportStatus;->indexOfPattern([BII[BI)I
move-result v3
if-ltz v3, :cond_31
const/4 p0, 0x1
return p0
:cond_31
add-int/lit8 v2, v2, 0x1
goto :goto_13
:cond_34
return v1
.end method
.method public static loadHeifBitmapFactoryIfExists()Lcom/facebook/common/heif/HeifBitmapFactory;
.registers 2
.line 35
sget-boolean v0, Lcom/facebook/common/heif/HeifSupportStatus;->sHeifLibraryChecked:Z
if-eqz v0, :cond_7
.line 36
sget-object v0, Lcom/facebook/common/heif/HeifSupportStatus;->sHeifBitmapFactory:Lcom/facebook/common/heif/HeifBitmapFactory;
return-object v0
:cond_7
const/4 v0, 0x0
:try_start_8
const-string v1, "com.facebook.support.HeifBitmapFactoryImpl"
.line 41
invoke-static {v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v1
.line 42
invoke-virtual {v1}, Ljava/lang/Class;->newInstance()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/facebook/common/heif/HeifBitmapFactory;
:try_end_14
.catchall {:try_start_8 .. :try_end_14} :catchall_16
move-object v0, v1
goto :goto_17
:catchall_16
nop
:goto_17
const/4 v1, 0x1
.line 46
sput-boolean v1, Lcom/facebook/common/heif/HeifSupportStatus;->sHeifLibraryChecked:Z
.line 47
sget-object v1, Lcom/facebook/common/heif/HeifSupportStatus;->sHeifBitmapFactory:Lcom/facebook/common/heif/HeifBitmapFactory;
if-nez v1, :cond_20
.line 48
sput-object v0, Lcom/facebook/common/heif/HeifSupportStatus;->sHeifBitmapFactory:Lcom/facebook/common/heif/HeifBitmapFactory;
:cond_20
return-object v0
.end method