WebpSupportStatus.smali
.class public Lcom/facebook/common/webp/WebpSupportStatus;
.super Ljava/lang/Object;
.source "SourceFile"
# static fields
.field private static final EXTENDED_WEBP_HEADER_LENGTH:I = 0x15
.field private static final SIMPLE_WEBP_HEADER_LENGTH:I = 0x14
.field private static final VP8X_WEBP_BASE64:Ljava/lang/String; = "UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA=="
.field private static final WEBP_NAME_BYTES:[B
.field private static final WEBP_RIFF_BYTES:[B
.field private static final WEBP_VP8L_BYTES:[B
.field private static final WEBP_VP8X_BYTES:[B
.field private static final WEBP_VP8_BYTES:[B
.field public static final sIsExtendedWebpSupported:Z
.field public static final sIsSimpleWebpSupported:Z
.field public static final sIsWebpSupportRequired:Z
.field public static sWebpBitmapFactory:Lcom/facebook/common/webp/WebpBitmapFactory;
.field private static sWebpLibraryChecked:Z
# direct methods
.method static constructor <clinit>()V
.registers 4
.line 17
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/4 v1, 0x1
const/4 v2, 0x0
const/16 v3, 0x11
if-le v0, v3, :cond_11
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v3, 0x1c
if-lt v0, v3, :cond_f
goto :goto_11
:cond_f
const/4 v0, 0x0
goto :goto_12
:cond_11
:goto_11
const/4 v0, 0x1
:goto_12
sput-boolean v0, Lcom/facebook/common/webp/WebpSupportStatus;->sIsWebpSupportRequired:Z
.line 21
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v3, 0xe
if-lt v0, v3, :cond_1b
goto :goto_1c
:cond_1b
const/4 v1, 0x0
:goto_1c
sput-boolean v1, Lcom/facebook/common/webp/WebpSupportStatus;->sIsSimpleWebpSupported:Z
.line 24
invoke-static {}, Lcom/facebook/common/webp/WebpSupportStatus;->isExtendedWebpSupported()Z
move-result v0
sput-boolean v0, Lcom/facebook/common/webp/WebpSupportStatus;->sIsExtendedWebpSupported:Z
const/4 v0, 0x0
.line 26
sput-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->sWebpBitmapFactory:Lcom/facebook/common/webp/WebpBitmapFactory;
.line 28
sput-boolean v2, Lcom/facebook/common/webp/WebpSupportStatus;->sWebpLibraryChecked:Z
const-string v0, "RIFF"
.line 85
invoke-static {v0}, Lcom/facebook/common/webp/WebpSupportStatus;->asciiBytes(Ljava/lang/String;)[B
move-result-object v0
sput-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_RIFF_BYTES:[B
const-string v0, "WEBP"
.line 86
invoke-static {v0}, Lcom/facebook/common/webp/WebpSupportStatus;->asciiBytes(Ljava/lang/String;)[B
move-result-object v0
sput-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_NAME_BYTES:[B
const-string v0, "VP8 "
.line 91
invoke-static {v0}, Lcom/facebook/common/webp/WebpSupportStatus;->asciiBytes(Ljava/lang/String;)[B
move-result-object v0
sput-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_VP8_BYTES:[B
const-string v0, "VP8L"
.line 92
invoke-static {v0}, Lcom/facebook/common/webp/WebpSupportStatus;->asciiBytes(Ljava/lang/String;)[B
move-result-object v0
sput-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_VP8L_BYTES:[B
const-string v0, "VP8X"
.line 93
invoke-static {v0}, Lcom/facebook/common/webp/WebpSupportStatus;->asciiBytes(Ljava/lang/String;)[B
move-result-object v0
sput-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_VP8X_BYTES:[B
return-void
.end method
.method public constructor <init>()V
.registers 1
.line 16
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static asciiBytes(Ljava/lang/String;)[B
.registers 3
:try_start_0
const-string v0, "ASCII"
.line 63
invoke-virtual {p0, v0}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
move-result-object p0
:try_end_6
.catch Ljava/io/UnsupportedEncodingException; {:try_start_0 .. :try_end_6} :catch_7
return-object p0
:catch_7
move-exception p0
.line 66
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 isAnimatedWebpHeader([BI)Z
.registers 5
add-int/lit8 v0, p1, 0xc
.line 149
sget-object v1, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_VP8X_BYTES:[B
invoke-static {p0, v0, v1}, Lcom/facebook/common/webp/WebpSupportStatus;->matchBytePattern([BI[B)Z
move-result v0
add-int/lit8 p1, p1, 0x14
.line 151
aget-byte p0, p0, p1
const/4 p1, 0x2
and-int/2addr p0, p1
const/4 v1, 0x1
const/4 v2, 0x0
if-ne p0, p1, :cond_14
const/4 p0, 0x1
goto :goto_15
:cond_14
const/4 p0, 0x0
:goto_15
if-eqz v0, :cond_1a
if-eqz p0, :cond_1a
return v1
:cond_1a
return v2
.end method
.method public static isExtendedWebpHeader([BII)Z
.registers 4
const/16 v0, 0x15
if-lt p2, v0, :cond_10
add-int/lit8 p1, p1, 0xc
.line 167
sget-object p2, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_VP8X_BYTES:[B
.line 168
invoke-static {p0, p1, p2}, Lcom/facebook/common/webp/WebpSupportStatus;->matchBytePattern([BI[B)Z
move-result p0
if-eqz p0, :cond_10
const/4 p0, 0x1
return p0
:cond_10
const/4 p0, 0x0
return p0
.end method
.method public static isExtendedWebpHeaderWithAlpha([BI)Z
.registers 5
add-int/lit8 v0, p1, 0xc
.line 174
sget-object v1, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_VP8X_BYTES:[B
invoke-static {p0, v0, v1}, Lcom/facebook/common/webp/WebpSupportStatus;->matchBytePattern([BI[B)Z
move-result v0
add-int/lit8 p1, p1, 0x14
.line 176
aget-byte p0, p0, p1
const/16 p1, 0x10
and-int/2addr p0, p1
const/4 v1, 0x1
const/4 v2, 0x0
if-ne p0, p1, :cond_15
const/4 p0, 0x1
goto :goto_16
:cond_15
const/4 p0, 0x0
:goto_16
if-eqz v0, :cond_1b
if-eqz p0, :cond_1b
return v1
:cond_1b
return v2
.end method
.method private static isExtendedWebpSupported()Z
.registers 5
.line 102
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x11
const/4 v2, 0x0
if-ge v0, v1, :cond_8
return v2
.line 106
:cond_8
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/4 v3, 0x1
if-ne v0, v1, :cond_27
const-string v0, "UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA=="
.line 109
invoke-static {v0, v2}, Landroid/util/Base64;->decode(Ljava/lang/String;I)[B
move-result-object v0
.line 110
new-instance v1, Landroid/graphics/BitmapFactory$Options;
invoke-direct {v1}, Landroid/graphics/BitmapFactory$Options;-><init>()V
.line 111
iput-boolean v3, v1, Landroid/graphics/BitmapFactory$Options;->inJustDecodeBounds:Z
.line 112
array-length v4, v0
invoke-static {v0, v2, v4, v1}, Landroid/graphics/BitmapFactory;->decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;
.line 118
iget v0, v1, Landroid/graphics/BitmapFactory$Options;->outHeight:I
if-ne v0, v3, :cond_26
iget v0, v1, Landroid/graphics/BitmapFactory$Options;->outWidth:I
if-eq v0, v3, :cond_27
:cond_26
return v2
:cond_27
return v3
.end method
.method public static isLosslessWebpHeader([BI)Z
.registers 3
add-int/lit8 p1, p1, 0xc
.line 160
sget-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_VP8L_BYTES:[B
invoke-static {p0, p1, v0}, Lcom/facebook/common/webp/WebpSupportStatus;->matchBytePattern([BI[B)Z
move-result p0
return p0
.end method
.method public static isSimpleWebpHeader([BI)Z
.registers 3
add-int/lit8 p1, p1, 0xc
.line 156
sget-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_VP8_BYTES:[B
invoke-static {p0, p1, v0}, Lcom/facebook/common/webp/WebpSupportStatus;->matchBytePattern([BI[B)Z
move-result p0
return p0
.end method
.method public static isWebpHeader([BII)Z
.registers 4
const/16 v0, 0x14
if-lt p2, v0, :cond_18
.line 193
sget-object p2, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_RIFF_BYTES:[B
.line 194
invoke-static {p0, p1, p2}, Lcom/facebook/common/webp/WebpSupportStatus;->matchBytePattern([BI[B)Z
move-result p2
if-eqz p2, :cond_18
add-int/lit8 p1, p1, 0x8
sget-object p2, Lcom/facebook/common/webp/WebpSupportStatus;->WEBP_NAME_BYTES:[B
.line 195
invoke-static {p0, p1, p2}, Lcom/facebook/common/webp/WebpSupportStatus;->matchBytePattern([BI[B)Z
move-result p0
if-eqz p0, :cond_18
const/4 p0, 0x1
return p0
:cond_18
const/4 p0, 0x0
return p0
.end method
.method public static isWebpSupportedByPlatform([BII)Z
.registers 4
.line 130
invoke-static {p0, p1}, Lcom/facebook/common/webp/WebpSupportStatus;->isSimpleWebpHeader([BI)Z
move-result v0
if-eqz v0, :cond_9
.line 131
sget-boolean p0, Lcom/facebook/common/webp/WebpSupportStatus;->sIsSimpleWebpSupported:Z
return p0
.line 134
:cond_9
invoke-static {p0, p1}, Lcom/facebook/common/webp/WebpSupportStatus;->isLosslessWebpHeader([BI)Z
move-result v0
if-eqz v0, :cond_12
.line 135
sget-boolean p0, Lcom/facebook/common/webp/WebpSupportStatus;->sIsExtendedWebpSupported:Z
return p0
.line 138
:cond_12
invoke-static {p0, p1, p2}, Lcom/facebook/common/webp/WebpSupportStatus;->isExtendedWebpHeader([BII)Z
move-result p2
const/4 v0, 0x0
if-eqz p2, :cond_23
.line 139
invoke-static {p0, p1}, Lcom/facebook/common/webp/WebpSupportStatus;->isAnimatedWebpHeader([BI)Z
move-result p0
if-eqz p0, :cond_20
return v0
.line 142
:cond_20
sget-boolean p0, Lcom/facebook/common/webp/WebpSupportStatus;->sIsExtendedWebpSupported:Z
return p0
:cond_23
return v0
.end method
.method public static loadWebpBitmapFactoryIfExists()Lcom/facebook/common/webp/WebpBitmapFactory;
.registers 2
.line 31
sget-boolean v0, Lcom/facebook/common/webp/WebpSupportStatus;->sWebpLibraryChecked:Z
if-eqz v0, :cond_7
.line 32
sget-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->sWebpBitmapFactory:Lcom/facebook/common/webp/WebpBitmapFactory;
return-object v0
:cond_7
const/4 v0, 0x0
:try_start_8
const-string v1, "com.facebook.webpsupport.WebpBitmapFactoryImpl"
.line 37
invoke-static {v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v1
.line 38
invoke-virtual {v1}, Ljava/lang/Class;->newInstance()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/facebook/common/webp/WebpBitmapFactory;
: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 42
sput-boolean v1, Lcom/facebook/common/webp/WebpSupportStatus;->sWebpLibraryChecked:Z
.line 43
sget-object v1, Lcom/facebook/common/webp/WebpSupportStatus;->sWebpBitmapFactory:Lcom/facebook/common/webp/WebpBitmapFactory;
if-nez v1, :cond_20
.line 44
sput-object v0, Lcom/facebook/common/webp/WebpSupportStatus;->sWebpBitmapFactory:Lcom/facebook/common/webp/WebpBitmapFactory;
:cond_20
return-object v0
.end method
.method private static matchBytePattern([BI[B)Z
.registers 7
const/4 v0, 0x0
if-eqz p2, :cond_1e
if-nez p0, :cond_6
goto :goto_1e
.line 205
:cond_6
array-length v1, p2
add-int/2addr v1, p1
array-length v2, p0
if-le v1, v2, :cond_c
return v0
:cond_c
const/4 v1, 0x0
.line 209
:goto_d
array-length v2, p2
if-ge v1, v2, :cond_1c
add-int v2, v1, p1
.line 210
aget-byte v2, p0, v2
aget-byte v3, p2, v1
if-eq v2, v3, :cond_19
return v0
:cond_19
add-int/lit8 v1, v1, 0x1
goto :goto_d
:cond_1c
const/4 p0, 0x1
return p0
:cond_1e
:goto_1e
return v0
.end method