.class public final Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser; .super Ljava/lang/Object; .source "DefaultImageHeaderParser.java" # interfaces .implements Lcom/bumptech/glide/load/ImageHeaderParser; # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$StreamReader;, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$ByteBufferReader;, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader; } .end annotation # static fields .field private static final BYTES_PER_FORMAT:[I .field static final EXIF_MAGIC_NUMBER:I = 0xffd8 .field static final EXIF_SEGMENT_TYPE:I = 0xe1 .field private static final GIF_HEADER:I = 0x474946 .field private static final INTEL_TIFF_MAGIC_NUMBER:I = 0x4949 .field private static final JPEG_EXIF_SEGMENT_PREAMBLE:Ljava/lang/String; = "Exif\u0000\u0000" .field static final JPEG_EXIF_SEGMENT_PREAMBLE_BYTES:[B .field private static final MARKER_EOI:I = 0xd9 .field private static final MOTOROLA_TIFF_MAGIC_NUMBER:I = 0x4d4d .field private static final ORIENTATION_TAG_TYPE:I = 0x112 .field private static final PNG_HEADER:I = -0x76afb1b9 .field private static final RIFF_HEADER:I = 0x52494646 .field private static final SEGMENT_SOS:I = 0xda .field static final SEGMENT_START_ID:I = 0xff .field private static final TAG:Ljava/lang/String; = "DfltImageHeaderParser" .field private static final VP8_HEADER:I = 0x56503800 .field private static final VP8_HEADER_MASK:I = -0x100 .field private static final VP8_HEADER_TYPE_EXTENDED:I = 0x58 .field private static final VP8_HEADER_TYPE_LOSSLESS:I = 0x4c .field private static final VP8_HEADER_TYPE_MASK:I = 0xff .field private static final WEBP_EXTENDED_ALPHA_FLAG:I = 0x10 .field private static final WEBP_HEADER:I = 0x57454250 .field private static final WEBP_LOSSLESS_ALPHA_FLAG:I = 0x8 # direct methods .method static constructor ()V .registers 2 .line 36 const-string v0, "UTF-8" .line 37 invoke-static {v0}, Ljava/nio/charset/Charset;->forName(Ljava/lang/String;)Ljava/nio/charset/Charset; move-result-object v0 const-string v1, "Exif\u0000\u0000" invoke-virtual {v1, v0}, Ljava/lang/String;->getBytes(Ljava/nio/charset/Charset;)[B move-result-object v0 sput-object v0, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->JPEG_EXIF_SEGMENT_PREAMBLE_BYTES:[B const/16 v0, 0xd .line 43 new-array v0, v0, [I fill-array-data v0, :array_18 sput-object v0, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->BYTES_PER_FORMAT:[I return-void :array_18 .array-data 4 0x0 0x1 0x1 0x2 0x4 0x8 0x1 0x1 0x2 0x4 0x8 0x4 0x8 .end array-data .end method .method public constructor ()V .registers 1 .line 23 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method private static calcTagOffset(II)I .registers 2 add-int/lit8 p0, p0, 0x2 mul-int/lit8 p1, p1, 0xc add-int/2addr p0, p1 return p0 .end method .method private getOrientation(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool;)I .registers 8 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 150 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt16()I move-result v0 .line 152 invoke-static {v0}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->handles(I)Z move-result v1 const/4 v2, 0x3 const/4 v3, -0x1 const-string v4, "DfltImageHeaderParser" if-nez v1, :cond_27 .line 153 invoke-static {v4, v2}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result p1 if-eqz p1, :cond_26 .line 154 new-instance p1, Ljava/lang/StringBuilder; const-string p2, "Parser doesn\'t handle magic number: " invoke-direct {p1, p2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p1, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-static {v4, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_26 return v3 .line 158 :cond_27 invoke-direct {p0, p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->moveToExifSegmentAndGetLength(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;)I move-result v0 if-ne v0, v3, :cond_39 .line 160 invoke-static {v4, v2}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result p1 if-eqz p1, :cond_38 .line 161 const-string p1, "Failed to parse exif segment length, or exif segment not found" invoke-static {v4, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_38 return v3 .line 166 :cond_39 const-class v1, [B invoke-interface {p2, v0, v1}, Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool;->get(ILjava/lang/Class;)Ljava/lang/Object; move-result-object v1 check-cast v1, [B .line 168 :try_start_41 invoke-direct {p0, p1, v1, v0}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->parseExifSegment(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;[BI)I move-result p1 :try_end_45 .catchall {:try_start_41 .. :try_end_45} :catchall_49 .line 170 invoke-interface {p2, v1}, Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool;->put(Ljava/lang/Object;)V return p1 :catchall_49 move-exception p1 invoke-interface {p2, v1}, Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool;->put(Ljava/lang/Object;)V throw p1 .end method .method private getType(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;)Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; .registers 8 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 88 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt16()I move-result v0 const v1, 0xffd8 if-ne v0, v1, :cond_c .line 92 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->JPEG:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; return-object p1 :cond_c shl-int/lit8 v0, v0, 0x10 const/high16 v1, -0x10000 and-int/2addr v0, v1 .line 95 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt16()I move-result v2 const v3, 0xffff and-int/2addr v2, v3 or-int/2addr v0, v2 const v2, -0x76afb1b9 if-ne v0, v2, :cond_31 const-wide/16 v0, 0x15 .line 100 invoke-interface {p1, v0, v1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->skip(J)J .line 101 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getByte()I move-result p1 const/4 v0, 0x3 if-lt p1, v0, :cond_2e .line 103 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->PNG_A:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; goto :goto_30 :cond_2e sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->PNG:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; :goto_30 return-object p1 :cond_31 shr-int/lit8 v2, v0, 0x8 const v4, 0x474946 if-ne v2, v4, :cond_3b .line 108 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->GIF:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; return-object p1 :cond_3b const v2, 0x52494646 if-eq v0, v2, :cond_43 .line 114 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->UNKNOWN:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; return-object p1 :cond_43 const-wide/16 v4, 0x4 .line 117 invoke-interface {p1, v4, v5}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->skip(J)J .line 119 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt16()I move-result v0 shl-int/lit8 v0, v0, 0x10 and-int/2addr v0, v1 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt16()I move-result v2 and-int/2addr v2, v3 or-int/2addr v0, v2 const v2, 0x57454250 if-eq v0, v2, :cond_5d .line 121 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->UNKNOWN:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; return-object p1 .line 124 :cond_5d invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt16()I move-result v0 shl-int/lit8 v0, v0, 0x10 and-int/2addr v0, v1 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt16()I move-result v1 and-int/2addr v1, v3 or-int/2addr v0, v1 and-int/lit16 v1, v0, -0x100 const v2, 0x56503800 if-eq v1, v2, :cond_74 .line 126 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->UNKNOWN:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; return-object p1 :cond_74 and-int/lit16 v0, v0, 0xff const/16 v1, 0x58 if-ne v0, v1, :cond_8b .line 130 invoke-interface {p1, v4, v5}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->skip(J)J .line 131 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getByte()I move-result p1 and-int/lit8 p1, p1, 0x10 if-eqz p1, :cond_88 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->WEBP_A:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; goto :goto_8a :cond_88 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->WEBP:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; :goto_8a return-object p1 :cond_8b const/16 v1, 0x4c if-ne v0, v1, :cond_a0 .line 136 invoke-interface {p1, v4, v5}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->skip(J)J .line 137 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getByte()I move-result p1 and-int/lit8 p1, p1, 0x8 if-eqz p1, :cond_9d sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->WEBP_A:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; goto :goto_9f :cond_9d sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->WEBP:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; :goto_9f return-object p1 .line 139 :cond_a0 sget-object p1, Lcom/bumptech/glide/load/ImageHeaderParser$ImageType;->WEBP:Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; return-object p1 .end method .method private static handles(I)Z .registers 3 const v0, 0xffd8 and-int v1, p0, v0 if-eq v1, v0, :cond_12 const/16 v0, 0x4d4d if-eq p0, v0, :cond_12 const/16 v0, 0x4949 if-ne p0, v0, :cond_10 goto :goto_12 :cond_10 const/4 p0, 0x0 goto :goto_13 :cond_12 :goto_12 const/4 p0, 0x1 :goto_13 return p0 .end method .method private hasJpegExifPreamble([BI)Z .registers 7 const/4 v0, 0x0 if-eqz p1, :cond_a .line 199 sget-object v1, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->JPEG_EXIF_SEGMENT_PREAMBLE_BYTES:[B array-length v1, v1 if-le p2, v1, :cond_a const/4 p2, 0x1 goto :goto_b :cond_a move p2, v0 :goto_b if-eqz p2, :cond_1d move v1, v0 .line 202 :goto_e sget-object v2, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->JPEG_EXIF_SEGMENT_PREAMBLE_BYTES:[B array-length v3, v2 if-ge v1, v3, :cond_1d .line 203 aget-byte v3, p1, v1 aget-byte v2, v2, v1 if-eq v3, v2, :cond_1a goto :goto_1e :cond_1a add-int/lit8 v1, v1, 0x1 goto :goto_e :cond_1d move v0, p2 :goto_1e return v0 .end method .method private moveToExifSegmentAndGetLength(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;)I .registers 11 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 218 :cond_0 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt8()S move-result v0 const/16 v1, 0xff const/4 v2, 0x3 const/4 v3, -0x1 .line 219 const-string v4, "DfltImageHeaderParser" if-eq v0, v1, :cond_25 .line 220 invoke-static {v4, v2}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result p1 if-eqz p1, :cond_24 .line 221 new-instance p1, Ljava/lang/StringBuilder; const-string v1, "Unknown segmentId=" invoke-direct {p1, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p1, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-static {v4, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_24 return v3 .line 226 :cond_25 invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt8()S move-result v0 const/16 v1, 0xda if-ne v0, v1, :cond_2e return v3 :cond_2e const/16 v1, 0xd9 if-ne v0, v1, :cond_3e .line 230 invoke-static {v4, v2}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result p1 if-eqz p1, :cond_3d .line 231 const-string p1, "Found MARKER_EOI in exif segment" invoke-static {v4, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_3d return v3 .line 237 :cond_3e invoke-interface {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->getUInt16()I move-result v1 add-int/lit8 v1, v1, -0x2 const/16 v5, 0xe1 if-eq v0, v5, :cond_7e int-to-long v5, v1 .line 239 invoke-interface {p1, v5, v6}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->skip(J)J move-result-wide v7 cmp-long v5, v7, v5 if-eqz v5, :cond_0 .line 241 invoke-static {v4, v2}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result p1 if-eqz p1, :cond_7d .line 242 new-instance p1, Ljava/lang/StringBuilder; const-string v2, "Unable to skip enough data, type: " invoke-direct {p1, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p1, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object p1 const-string v0, ", wanted to skip: " invoke-virtual {p1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object p1 const-string v0, ", but actually skipped: " invoke-virtual {p1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1, v7, v8}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-static {v4, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_7d return v3 :cond_7e return v1 .end method .method private static parseExifSegment(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;)I .registers 13 .line 256 const-string v0, "Exif\u0000\u0000" invoke-virtual {v0}, Ljava/lang/String;->length()I move-result v0 .line 258 invoke-virtual {p0, v0}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->getInt16(I)S move-result v1 const/16 v2, 0x4949 const/4 v3, 0x3 .line 260 const-string v4, "DfltImageHeaderParser" if-eq v1, v2, :cond_33 const/16 v2, 0x4d4d if-eq v1, v2, :cond_30 .line 268 invoke-static {v4, v3}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result v2 if-eqz v2, :cond_2d .line 269 new-instance v2, Ljava/lang/StringBuilder; const-string v5, "Unknown endianness = " invoke-direct {v2, v5}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-static {v4, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I .line 271 :cond_2d sget-object v1, Ljava/nio/ByteOrder;->BIG_ENDIAN:Ljava/nio/ByteOrder; goto :goto_35 .line 262 :cond_30 sget-object v1, Ljava/nio/ByteOrder;->BIG_ENDIAN:Ljava/nio/ByteOrder; goto :goto_35 .line 265 :cond_33 sget-object v1, Ljava/nio/ByteOrder;->LITTLE_ENDIAN:Ljava/nio/ByteOrder; .line 275 :goto_35 invoke-virtual {p0, v1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->order(Ljava/nio/ByteOrder;)V add-int/lit8 v1, v0, 0x4 .line 277 invoke-virtual {p0, v1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->getInt32(I)I move-result v1 add-int/2addr v1, v0 .line 278 invoke-virtual {p0, v1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->getInt16(I)S move-result v0 const/4 v2, 0x0 :goto_44 if-ge v2, v0, :cond_13f .line 280 invoke-static {v1, v2}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->calcTagOffset(II)I move-result v5 .line 282 invoke-virtual {p0, v5}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->getInt16(I)S move-result v6 const/16 v7, 0x112 if-eq v6, v7, :cond_54 goto/16 :goto_13b :cond_54 add-int/lit8 v7, v5, 0x2 .line 288 invoke-virtual {p0, v7}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->getInt16(I)S move-result v7 const/4 v8, 0x1 if-lt v7, v8, :cond_123 const/16 v8, 0xc if-le v7, v8, :cond_63 goto/16 :goto_123 :cond_63 add-int/lit8 v8, v5, 0x4 .line 297 invoke-virtual {p0, v8}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->getInt32(I)I move-result v8 if-gez v8, :cond_78 .line 299 invoke-static {v4, v3}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result v5 if-eqz v5, :cond_13b .line 300 const-string v5, "Negative tiff component count" invoke-static {v4, v5}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I goto/16 :goto_13b .line 305 :cond_78 invoke-static {v4, v3}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result v9 const-string v10, " tagType=" if-eqz v9, :cond_ae .line 306 new-instance v9, Ljava/lang/StringBuilder; const-string v11, "Got tagIndex=" invoke-direct {v9, v11}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v9, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v9 invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v9 invoke-virtual {v9, v6}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v9 const-string v11, " formatCode=" invoke-virtual {v9, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v9 invoke-virtual {v9, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v9 const-string v11, " componentCount=" invoke-virtual {v9, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v9 invoke-virtual {v9, v8}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v9 invoke-virtual {v9}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v9 invoke-static {v4, v9}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I .line 310 :cond_ae sget-object v9, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->BYTES_PER_FORMAT:[I aget v9, v9, v7 add-int/2addr v8, v9 const/4 v9, 0x4 if-le v8, v9, :cond_cf .line 312 invoke-static {v4, v3}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result v5 if-eqz v5, :cond_13b .line 313 new-instance v5, Ljava/lang/StringBuilder; const-string v6, "Got byte count > 4, not orientation, continuing, formatCode=" invoke-direct {v5, v6}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v5, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v5 invoke-static {v4, v5}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I goto :goto_13b :cond_cf add-int/lit8 v5, v5, 0x8 if-ltz v5, :cond_102 .line 319 invoke-virtual {p0}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->length()I move-result v7 if-le v5, v7, :cond_da goto :goto_102 :cond_da if-ltz v8, :cond_e9 add-int/2addr v8, v5 .line 326 invoke-virtual {p0}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->length()I move-result v7 if-le v8, v7, :cond_e4 goto :goto_e9 .line 334 :cond_e4 invoke-virtual {p0, v5}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->getInt16(I)S move-result p0 return p0 .line 327 :cond_e9 :goto_e9 invoke-static {v4, v3}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result v5 if-eqz v5, :cond_13b .line 328 new-instance v5, Ljava/lang/StringBuilder; const-string v7, "Illegal number of bytes for TI tag data tagType=" invoke-direct {v5, v7}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v5 invoke-static {v4, v5}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I goto :goto_13b .line 320 :cond_102 :goto_102 invoke-static {v4, v3}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result v7 if-eqz v7, :cond_13b .line 321 new-instance v7, Ljava/lang/StringBuilder; const-string v8, "Illegal tagValueOffset=" invoke-direct {v7, v8}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v7, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v5 invoke-static {v4, v5}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I goto :goto_13b .line 291 :cond_123 :goto_123 invoke-static {v4, v3}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result v5 if-eqz v5, :cond_13b .line 292 new-instance v5, Ljava/lang/StringBuilder; const-string v6, "Got invalid format code = " invoke-direct {v5, v6}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v5, v7}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object v5 invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v5 invoke-static {v4, v5}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_13b :goto_13b add-int/lit8 v2, v2, 0x1 goto/16 :goto_44 :cond_13f const/4 p0, -0x1 return p0 .end method .method private parseExifSegment(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;[BI)I .registers 7 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 177 invoke-interface {p1, p2, p3}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;->read([BI)I move-result p1 const/4 v0, -0x1 const/4 v1, 0x3 .line 178 const-string v2, "DfltImageHeaderParser" if-eq p1, p3, :cond_2d .line 179 invoke-static {v2, v1}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result p2 if-eqz p2, :cond_2c .line 180 new-instance p2, Ljava/lang/StringBuilder; const-string v1, "Unable to read exif segment data, length: " invoke-direct {p2, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p2, p3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object p2 const-string p3, ", actually read: " invoke-virtual {p2, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object p2 invoke-virtual {p2, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-static {v2, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_2c return v0 .line 187 :cond_2d invoke-direct {p0, p2, p3}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->hasJpegExifPreamble([BI)Z move-result p1 if-eqz p1, :cond_3d .line 189 new-instance p1, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader; invoke-direct {p1, p2, p3}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;->([BI)V invoke-static {p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->parseExifSegment(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$RandomAccessReader;)I move-result p1 return p1 .line 191 :cond_3d invoke-static {v2, v1}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result p1 if-eqz p1, :cond_48 .line 192 const-string p1, "Missing jpeg exif preamble" invoke-static {v2, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I :cond_48 return v0 .end method # virtual methods .method public getOrientation(Ljava/io/InputStream;Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool;)I .registers 4 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 75 new-instance v0, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$StreamReader; invoke-static {p1}, Lcom/bumptech/glide/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/io/InputStream; invoke-direct {v0, p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$StreamReader;->(Ljava/io/InputStream;)V .line 76 invoke-static {p2}, Lcom/bumptech/glide/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool; .line 75 invoke-direct {p0, v0, p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->getOrientation(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool;)I move-result p1 return p1 .end method .method public getOrientation(Ljava/nio/ByteBuffer;Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool;)I .registers 4 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 82 new-instance v0, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$ByteBufferReader; invoke-static {p1}, Lcom/bumptech/glide/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/nio/ByteBuffer; invoke-direct {v0, p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$ByteBufferReader;->(Ljava/nio/ByteBuffer;)V .line 83 invoke-static {p2}, Lcom/bumptech/glide/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool; .line 82 invoke-direct {p0, v0, p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->getOrientation(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;Lcom/bumptech/glide/load/engine/bitmap_recycle/ArrayPool;)I move-result p1 return p1 .end method .method public getType(Ljava/io/InputStream;)Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; .registers 3 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 63 new-instance v0, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$StreamReader; invoke-static {p1}, Lcom/bumptech/glide/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/io/InputStream; invoke-direct {v0, p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$StreamReader;->(Ljava/io/InputStream;)V invoke-direct {p0, v0}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->getType(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;)Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; move-result-object p1 return-object p1 .end method .method public getType(Ljava/nio/ByteBuffer;)Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; .registers 3 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 69 new-instance v0, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$ByteBufferReader; invoke-static {p1}, Lcom/bumptech/glide/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/nio/ByteBuffer; invoke-direct {v0, p1}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$ByteBufferReader;->(Ljava/nio/ByteBuffer;)V invoke-direct {p0, v0}, Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser;->getType(Lcom/bumptech/glide/load/resource/bitmap/DefaultImageHeaderParser$Reader;)Lcom/bumptech/glide/load/ImageHeaderParser$ImageType; move-result-object p1 return-object p1 .end method