GifImage.smali
.class public Lcom/facebook/animated/gif/GifImage;
.super Ljava/lang/Object;
.source "GifImage.java"
# interfaces
.implements Lcom/facebook/imagepipeline/animated/base/AnimatedImage;
.implements Lcom/facebook/imagepipeline/animated/factory/AnimatedImageDecoder;
# static fields
.field private static final LOOP_COUNT_FOREVER:I = 0x0
.field private static final LOOP_COUNT_MISSING:I = -0x1
.field private static volatile sInitialized:Z
# instance fields
.field private mDecodeBitmapConfig:Landroid/graphics/Bitmap$Config;
.annotation runtime Ljavax/annotation/Nullable;
.end annotation
.end field
.field private mNativeContext:J
# direct methods
.method public constructor <init>()V
.registers 2
.line 131
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, 0x0
.line 43
iput-object v0, p0, Lcom/facebook/animated/gif/GifImage;->mDecodeBitmapConfig:Landroid/graphics/Bitmap$Config;
return-void
.end method
.method constructor <init>(J)V
.registers 4
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"nativeContext"
}
.end annotation
.line 139
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, 0x0
.line 43
iput-object v0, p0, Lcom/facebook/animated/gif/GifImage;->mDecodeBitmapConfig:Landroid/graphics/Bitmap$Config;
.line 140
iput-wide p1, p0, Lcom/facebook/animated/gif/GifImage;->mNativeContext:J
return-void
.end method
.method public static createFromByteArray([B)Lcom/facebook/animated/gif/GifImage;
.registers 2
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"source"
}
.end annotation
.line 59
invoke-static {p0}, Lcom/facebook/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
.line 61
array-length v0, p0
invoke-static {v0}, Ljava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;
move-result-object v0
.line 62
invoke-virtual {v0, p0}, Ljava/nio/ByteBuffer;->put([B)Ljava/nio/ByteBuffer;
.line 63
invoke-virtual {v0}, Ljava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
.line 65
invoke-static {}, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->defaults()Lcom/facebook/imagepipeline/common/ImageDecodeOptions;
move-result-object p0
invoke-static {v0, p0}, Lcom/facebook/animated/gif/GifImage;->createFromByteBuffer(Ljava/nio/ByteBuffer;Lcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/animated/gif/GifImage;
move-result-object p0
return-object p0
.end method
.method public static createFromByteBuffer(Ljava/nio/ByteBuffer;)Lcom/facebook/animated/gif/GifImage;
.registers 2
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"byteBuffer"
}
.end annotation
.line 75
invoke-static {}, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->defaults()Lcom/facebook/imagepipeline/common/ImageDecodeOptions;
move-result-object v0
invoke-static {p0, v0}, Lcom/facebook/animated/gif/GifImage;->createFromByteBuffer(Ljava/nio/ByteBuffer;Lcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/animated/gif/GifImage;
move-result-object p0
return-object p0
.end method
.method public static createFromByteBuffer(Ljava/nio/ByteBuffer;Lcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/animated/gif/GifImage;
.registers 4
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x0
}
names = {
"byteBuffer",
"options"
}
.end annotation
.line 85
invoke-static {}, Lcom/facebook/animated/gif/GifImage;->ensure()V
.line 86
invoke-virtual {p0}, Ljava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
.line 88
iget v0, p1, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->maxDimensionPx:I
iget-boolean v1, p1, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->forceStaticImage:Z
.line 89
invoke-static {p0, v0, v1}, Lcom/facebook/animated/gif/GifImage;->nativeCreateFromDirectByteBuffer(Ljava/nio/ByteBuffer;IZ)Lcom/facebook/animated/gif/GifImage;
move-result-object p0
.line 91
iget-object p1, p1, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->animatedBitmapConfig:Landroid/graphics/Bitmap$Config;
iput-object p1, p0, Lcom/facebook/animated/gif/GifImage;->mDecodeBitmapConfig:Landroid/graphics/Bitmap$Config;
return-object p0
.end method
.method public static createFromFileDescriptor(ILcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/animated/gif/GifImage;
.registers 3
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x0
}
names = {
"fileDescriptor",
"options"
}
.end annotation
.line 113
invoke-static {}, Lcom/facebook/animated/gif/GifImage;->ensure()V
.line 115
iget v0, p1, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->maxDimensionPx:I
iget-boolean p1, p1, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->forceStaticImage:Z
invoke-static {p0, v0, p1}, Lcom/facebook/animated/gif/GifImage;->nativeCreateFromFileDescriptor(IIZ)Lcom/facebook/animated/gif/GifImage;
move-result-object p0
return-object p0
.end method
.method public static createFromNativeMemory(JILcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/animated/gif/GifImage;
.registers 6
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x0,
0x0
}
names = {
"nativePtr",
"sizeInBytes",
"options"
}
.end annotation
.line 97
invoke-static {}, Lcom/facebook/animated/gif/GifImage;->ensure()V
const-wide/16 v0, 0x0
cmp-long v0, p0, v0
if-eqz v0, :cond_b
const/4 v0, 0x1
goto :goto_c
:cond_b
const/4 v0, 0x0
.line 98
:goto_c
invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object v0
invoke-static {v0}, Lcom/facebook/common/internal/Preconditions;->checkArgument(Ljava/lang/Boolean;)V
.line 99
iget v0, p3, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->maxDimensionPx:I
iget-boolean v1, p3, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->forceStaticImage:Z
.line 100
invoke-static {p0, p1, p2, v0, v1}, Lcom/facebook/animated/gif/GifImage;->nativeCreateFromNativeMemory(JIIZ)Lcom/facebook/animated/gif/GifImage;
move-result-object p0
.line 102
iget-object p1, p3, Lcom/facebook/imagepipeline/common/ImageDecodeOptions;->animatedBitmapConfig:Landroid/graphics/Bitmap$Config;
iput-object p1, p0, Lcom/facebook/animated/gif/GifImage;->mDecodeBitmapConfig:Landroid/graphics/Bitmap$Config;
return-object p0
.end method
.method private static declared-synchronized ensure()V
.registers 2
const-class v0, Lcom/facebook/animated/gif/GifImage;
monitor-enter v0
.line 46
:try_start_3
sget-boolean v1, Lcom/facebook/animated/gif/GifImage;->sInitialized:Z
if-nez v1, :cond_f
const/4 v1, 0x1
.line 47
sput-boolean v1, Lcom/facebook/animated/gif/GifImage;->sInitialized:Z
const-string v1, "gifimage"
.line 48
invoke-static {v1}, Lcom/facebook/soloader/nativeloader/NativeLoader;->loadLibrary(Ljava/lang/String;)Z
:try_end_f
.catchall {:try_start_3 .. :try_end_f} :catchall_11
.line 50
:cond_f
monitor-exit v0
return-void
:catchall_11
move-exception v1
monitor-exit v0
throw v1
.end method
.method private static fromGifDisposalMethod(I)Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;
.registers 2
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"disposalMode"
}
.end annotation
if-nez p0, :cond_5
.line 240
sget-object p0, Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;->DISPOSE_DO_NOT:Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;
return-object p0
:cond_5
const/4 v0, 0x1
if-ne p0, v0, :cond_b
.line 242
sget-object p0, Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;->DISPOSE_DO_NOT:Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;
return-object p0
:cond_b
const/4 v0, 0x2
if-ne p0, v0, :cond_11
.line 244
sget-object p0, Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;->DISPOSE_TO_BACKGROUND:Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;
return-object p0
:cond_11
const/4 v0, 0x3
if-ne p0, v0, :cond_17
.line 246
sget-object p0, Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;->DISPOSE_TO_PREVIOUS:Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;
return-object p0
.line 248
:cond_17
sget-object p0, Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;->DISPOSE_DO_NOT:Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;
return-object p0
.end method
.method private static native nativeCreateFromDirectByteBuffer(Ljava/nio/ByteBuffer;IZ)Lcom/facebook/animated/gif/GifImage;
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x0,
0x0
}
names = {
"buffer",
"maxDimension",
"forceStatic"
}
.end annotation
.end method
.method private static native nativeCreateFromFileDescriptor(IIZ)Lcom/facebook/animated/gif/GifImage;
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x0,
0x0
}
names = {
"fileDescriptor",
"maxDimension",
"forceStatic"
}
.end annotation
.end method
.method private static native nativeCreateFromNativeMemory(JIIZ)Lcom/facebook/animated/gif/GifImage;
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x0,
0x0,
0x0
}
names = {
"nativePtr",
"sizeInBytes",
"maxDimension",
"forceStatic"
}
.end annotation
.end method
.method private native nativeDispose()V
.end method
.method private native nativeFinalize()V
.end method
.method private native nativeGetDuration()I
.end method
.method private native nativeGetFrame(I)Lcom/facebook/animated/gif/GifFrame;
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"frameNumber"
}
.end annotation
.end method
.method private native nativeGetFrameCount()I
.end method
.method private native nativeGetFrameDurations()[I
.end method
.method private native nativeGetHeight()I
.end method
.method private native nativeGetLoopCount()I
.end method
.method private native nativeGetSizeInBytes()I
.end method
.method private native nativeGetWidth()I
.end method
.method private native nativeIsAnimated()Z
.end method
# virtual methods
.method public decodeFromByteBuffer(Ljava/nio/ByteBuffer;Lcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/imagepipeline/animated/base/AnimatedImage;
.registers 3
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x0
}
names = {
"byteBuffer",
"options"
}
.end annotation
.line 127
invoke-static {p1, p2}, Lcom/facebook/animated/gif/GifImage;->createFromByteBuffer(Ljava/nio/ByteBuffer;Lcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/animated/gif/GifImage;
move-result-object p1
return-object p1
.end method
.method public decodeFromNativeMemory(JILcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/imagepipeline/animated/base/AnimatedImage;
.registers 5
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0,
0x0,
0x0
}
names = {
"nativePtr",
"sizeInBytes",
"options"
}
.end annotation
.line 122
invoke-static {p1, p2, p3, p4}, Lcom/facebook/animated/gif/GifImage;->createFromNativeMemory(JILcom/facebook/imagepipeline/common/ImageDecodeOptions;)Lcom/facebook/animated/gif/GifImage;
move-result-object p1
return-object p1
.end method
.method public dispose()V
.registers 1
.line 150
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeDispose()V
return-void
.end method
.method public doesRenderSupportScaling()Z
.registers 2
const/4 v0, 0x0
return v0
.end method
.method protected finalize()V
.registers 1
.line 145
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeFinalize()V
return-void
.end method
.method public getAnimatedBitmapConfig()Landroid/graphics/Bitmap$Config;
.registers 2
.annotation runtime Ljavax/annotation/Nullable;
.end annotation
.line 235
iget-object v0, p0, Lcom/facebook/animated/gif/GifImage;->mDecodeBitmapConfig:Landroid/graphics/Bitmap$Config;
return-object v0
.end method
.method public getDuration()I
.registers 2
.line 170
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeGetDuration()I
move-result v0
return v0
.end method
.method public getFrame(I)Lcom/facebook/animated/gif/GifFrame;
.registers 2
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"frameNumber"
}
.end annotation
.line 198
invoke-direct {p0, p1}, Lcom/facebook/animated/gif/GifImage;->nativeGetFrame(I)Lcom/facebook/animated/gif/GifFrame;
move-result-object p1
return-object p1
.end method
.method public bridge synthetic getFrame(I)Lcom/facebook/imagepipeline/animated/base/AnimatedImageFrame;
.registers 2
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x1000
}
names = {
"frameNumber"
}
.end annotation
.line 28
invoke-virtual {p0, p1}, Lcom/facebook/animated/gif/GifImage;->getFrame(I)Lcom/facebook/animated/gif/GifFrame;
move-result-object p1
return-object p1
.end method
.method public getFrameCount()I
.registers 2
.line 165
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeGetFrameCount()I
move-result v0
return v0
.end method
.method public getFrameDurations()[I
.registers 2
.line 175
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeGetFrameDurations()[I
move-result-object v0
return-object v0
.end method
.method public getFrameInfo(I)Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo;
.registers 12
.annotation system Ldalvik/annotation/MethodParameters;
accessFlags = {
0x0
}
names = {
"frameNumber"
}
.end annotation
.line 217
invoke-virtual {p0, p1}, Lcom/facebook/animated/gif/GifImage;->getFrame(I)Lcom/facebook/animated/gif/GifFrame;
move-result-object v0
.line 219
:try_start_4
new-instance v9, Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo;
.line 221
invoke-virtual {v0}, Lcom/facebook/animated/gif/GifFrame;->getXOffset()I
move-result v3
.line 222
invoke-virtual {v0}, Lcom/facebook/animated/gif/GifFrame;->getYOffset()I
move-result v4
.line 223
invoke-virtual {v0}, Lcom/facebook/animated/gif/GifFrame;->getWidth()I
move-result v5
.line 224
invoke-virtual {v0}, Lcom/facebook/animated/gif/GifFrame;->getHeight()I
move-result v6
sget-object v7, Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$BlendOperation;->BLEND_WITH_PREVIOUS:Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$BlendOperation;
.line 226
invoke-virtual {v0}, Lcom/facebook/animated/gif/GifFrame;->getDisposalMode()I
move-result v1
invoke-static {v1}, Lcom/facebook/animated/gif/GifImage;->fromGifDisposalMethod(I)Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;
move-result-object v8
move-object v1, v9
move v2, p1
invoke-direct/range {v1 .. v8}, Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo;-><init>(IIIIILcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$BlendOperation;Lcom/facebook/imagepipeline/animated/base/AnimatedDrawableFrameInfo$DisposalMethod;)V
:try_end_25
.catchall {:try_start_4 .. :try_end_25} :catchall_29
.line 228
invoke-virtual {v0}, Lcom/facebook/animated/gif/GifFrame;->dispose()V
return-object v9
:catchall_29
move-exception p1
invoke-virtual {v0}, Lcom/facebook/animated/gif/GifFrame;->dispose()V
.line 229
throw p1
.end method
.method public getHeight()I
.registers 2
.line 160
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeGetHeight()I
move-result v0
return v0
.end method
.method public getLoopCount()I
.registers 4
.line 183
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeGetLoopCount()I
move-result v0
const/4 v1, -0x1
const/4 v2, 0x1
if-eq v0, v1, :cond_e
if-eqz v0, :cond_c
add-int/2addr v0, v2
return v0
:cond_c
const/4 v0, 0x0
return v0
:cond_e
return v2
.end method
.method public getSizeInBytes()I
.registers 2
.line 208
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeGetSizeInBytes()I
move-result v0
return v0
.end method
.method public getWidth()I
.registers 2
.line 155
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeGetWidth()I
move-result v0
return v0
.end method
.method public isAnimated()Z
.registers 2
.line 212
invoke-direct {p0}, Lcom/facebook/animated/gif/GifImage;->nativeIsAnimated()Z
move-result v0
return v0
.end method