.class public Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder; .super Ljava/lang/Object; .source "VideoDecoder.java" # interfaces .implements Lcom/bumptech/glide/load/ResourceDecoder; # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$ParcelFileDescriptorInitializer;, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$AssetFileDescriptorInitializer;, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer;, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory; } .end annotation .annotation system Ldalvik/annotation/Signature; value = { "", "Ljava/lang/Object;", "Lcom/bumptech/glide/load/ResourceDecoder<", "TT;", "Landroid/graphics/Bitmap;", ">;" } .end annotation # static fields .field private static final DEFAULT_FACTORY:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory; .field public static final DEFAULT_FRAME:J = -0x1L .field static final DEFAULT_FRAME_OPTION:I = 0x2 .field public static final FRAME_OPTION:Lcom/bumptech/glide/load/Option; .annotation system Ldalvik/annotation/Signature; value = { "Lcom/bumptech/glide/load/Option<", "Ljava/lang/Integer;", ">;" } .end annotation .end field .field private static final TAG:Ljava/lang/String; = "VideoDecoder" .field public static final TARGET_FRAME:Lcom/bumptech/glide/load/Option; .annotation system Ldalvik/annotation/Signature; value = { "Lcom/bumptech/glide/load/Option<", "Ljava/lang/Long;", ">;" } .end annotation .end field # instance fields .field private final bitmapPool:Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool; .field private final factory:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory; .field private final initializer:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer; .annotation system Ldalvik/annotation/Signature; value = { "Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer<", "TT;>;" } .end annotation .end field # direct methods .method static constructor ()V .registers 3 const-wide/16 v0, -0x1 .line 55 invoke-static {v0, v1}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v0 new-instance v1, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$1; invoke-direct {v1}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$1;->()V .line 54 const-string v2, "com.bumptech.glide.load.resource.bitmap.VideoBitmapDecode.TargetFrame" invoke-static {v2, v0, v1}, Lcom/bumptech/glide/load/Option;->disk(Ljava/lang/String;Ljava/lang/Object;Lcom/bumptech/glide/load/Option$CacheKeyUpdater;)Lcom/bumptech/glide/load/Option; move-result-object v0 sput-object v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->TARGET_FRAME:Lcom/bumptech/glide/load/Option; const/4 v0, 0x2 .line 82 invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v0 new-instance v1, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$2; invoke-direct {v1}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$2;->()V .line 80 const-string v2, "com.bumptech.glide.load.resource.bitmap.VideoBitmapDecode.FrameOption" invoke-static {v2, v0, v1}, Lcom/bumptech/glide/load/Option;->disk(Ljava/lang/String;Ljava/lang/Object;Lcom/bumptech/glide/load/Option$CacheKeyUpdater;)Lcom/bumptech/glide/load/Option; move-result-object v0 sput-object v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->FRAME_OPTION:Lcom/bumptech/glide/load/Option; .line 102 new-instance v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory; invoke-direct {v0}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory;->()V sput-object v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->DEFAULT_FACTORY:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory; return-void .end method .method constructor (Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer;)V .registers 4 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;", "Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer<", "TT;>;)V" } .end annotation .line 119 sget-object v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->DEFAULT_FACTORY:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory; invoke-direct {p0, p1, p2, v0}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->(Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer;Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory;)V return-void .end method .method constructor (Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer;Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory;)V .registers 4 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;", "Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer<", "TT;>;", "Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory;", ")V" } .end annotation .line 126 invoke-direct {p0}, Ljava/lang/Object;->()V .line 127 iput-object p1, p0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->bitmapPool:Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool; .line 128 iput-object p2, p0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->initializer:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer; .line 129 iput-object p3, p0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->factory:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory; return-void .end method .method public static asset(Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;)Lcom/bumptech/glide/load/ResourceDecoder; .registers 4 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;", ")", "Lcom/bumptech/glide/load/ResourceDecoder<", "Landroid/content/res/AssetFileDescriptor;", "Landroid/graphics/Bitmap;", ">;" } .end annotation .line 110 new-instance v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder; new-instance v1, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$AssetFileDescriptorInitializer; const/4 v2, 0x0 invoke-direct {v1, v2}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$AssetFileDescriptorInitializer;->(Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$1;)V invoke-direct {v0, p0, v1}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->(Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer;)V return-object v0 .end method .method private static decodeFrame(Landroid/media/MediaMetadataRetriever;JIIILcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy;)Landroid/graphics/Bitmap; .registers 9 .line 196 sget v0, Landroid/os/Build$VERSION;->SDK_INT:I const/16 v1, 0x1b if-lt v0, v1, :cond_15 const/high16 v0, -0x80000000 if-eq p4, v0, :cond_15 if-eq p5, v0, :cond_15 sget-object v0, Lcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy;->NONE:Lcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy; if-eq p6, v0, :cond_15 .line 201 invoke-static/range {p0 .. p6}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->decodeScaledFrame(Landroid/media/MediaMetadataRetriever;JIIILcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy;)Landroid/graphics/Bitmap; move-result-object p4 goto :goto_16 :cond_15 const/4 p4, 0x0 :goto_16 if-nez p4, :cond_1c .line 206 invoke-static {p0, p1, p2, p3}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->decodeOriginalFrame(Landroid/media/MediaMetadataRetriever;JI)Landroid/graphics/Bitmap; move-result-object p4 :cond_1c return-object p4 .end method .method private static decodeOriginalFrame(Landroid/media/MediaMetadataRetriever;JI)Landroid/graphics/Bitmap; .registers 4 .line 266 invoke-virtual {p0, p1, p2, p3}, Landroid/media/MediaMetadataRetriever;->getFrameAtTime(JI)Landroid/graphics/Bitmap; move-result-object p0 return-object p0 .end method .method private static decodeScaledFrame(Landroid/media/MediaMetadataRetriever;JIIILcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy;)Landroid/graphics/Bitmap; .registers 16 const/16 v0, 0x12 .line 223 :try_start_2 invoke-virtual {p0, v0}, Landroid/media/MediaMetadataRetriever;->extractMetadata(I)Ljava/lang/String; move-result-object v0 .line 222 invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 const/16 v1, 0x13 .line 227 invoke-virtual {p0, v1}, Landroid/media/MediaMetadataRetriever;->extractMetadata(I)Ljava/lang/String; move-result-object v1 .line 226 invoke-static {v1}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v1 const/16 v2, 0x18 .line 231 invoke-virtual {p0, v2}, Landroid/media/MediaMetadataRetriever;->extractMetadata(I)Ljava/lang/String; move-result-object v2 .line 230 invoke-static {v2}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v2 const/16 v3, 0x5a if-eq v2, v3, :cond_26 const/16 v3, 0x10e if-ne v2, v3, :cond_29 :cond_26 move v8, v1 move v1, v0 move v0, v8 .line 242 :cond_29 invoke-virtual {p6, v0, v1, p4, p5}, Lcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy;->getScaleFactor(IIII)F move-result p4 int-to-float p5, v0 mul-float/2addr p5, p4 .line 244 invoke-static {p5}, Ljava/lang/Math;->round(F)I move-result v6 int-to-float p5, v1 mul-float/2addr p4, p5 .line 245 invoke-static {p4}, Ljava/lang/Math;->round(F)I move-result v7 move-object v2, p0 move-wide v3, p1 move v5, p3 .line 247 invoke-virtual/range {v2 .. v7}, Landroid/media/MediaMetadataRetriever;->getScaledFrameAtTime(JIII)Landroid/graphics/Bitmap; move-result-object p0 :try_end_40 .catchall {:try_start_2 .. :try_end_40} :catchall_41 return-object p0 :catchall_41 move-exception p0 const/4 p1, 0x3 .line 254 const-string p2, "VideoDecoder" invoke-static {p2, p1}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z move-result p1 if-eqz p1, :cond_50 .line 255 const-string p1, "Exception trying to decode frame on oreo+" invoke-static {p2, p1, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I :cond_50 const/4 p0, 0x0 return-object p0 .end method .method public static parcel(Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;)Lcom/bumptech/glide/load/ResourceDecoder; .registers 3 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;", ")", "Lcom/bumptech/glide/load/ResourceDecoder<", "Landroid/os/ParcelFileDescriptor;", "Landroid/graphics/Bitmap;", ">;" } .end annotation .line 114 new-instance v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder; new-instance v1, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$ParcelFileDescriptorInitializer; invoke-direct {v1}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$ParcelFileDescriptorInitializer;->()V invoke-direct {v0, p0, v1}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->(Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer;)V return-object v0 .end method # virtual methods .method public decode(Ljava/lang/Object;IILcom/bumptech/glide/load/Options;)Lcom/bumptech/glide/load/engine/Resource; .registers 13 .annotation system Ldalvik/annotation/Signature; value = { "(TT;II", "Lcom/bumptech/glide/load/Options;", ")", "Lcom/bumptech/glide/load/engine/Resource<", "Landroid/graphics/Bitmap;", ">;" } .end annotation .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 144 sget-object v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->TARGET_FRAME:Lcom/bumptech/glide/load/Option; invoke-virtual {p4, v0}, Lcom/bumptech/glide/load/Options;->get(Lcom/bumptech/glide/load/Option;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/lang/Long; invoke-virtual {v0}, Ljava/lang/Long;->longValue()J move-result-wide v2 const-wide/16 v0, 0x0 cmp-long v0, v2, v0 if-gez v0, :cond_2e const-wide/16 v0, -0x1 cmp-long v0, v2, v0 if-nez v0, :cond_19 goto :goto_2e .line 146 :cond_19 new-instance p1, Ljava/lang/IllegalArgumentException; new-instance p2, Ljava/lang/StringBuilder; const-string p3, "Requested frame must be non-negative, or DEFAULT_FRAME, given: " invoke-direct {p2, p3}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p2, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; move-result-object p2 invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p2 invoke-direct {p1, p2}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V throw p1 .line 149 :cond_2e :goto_2e sget-object v0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->FRAME_OPTION:Lcom/bumptech/glide/load/Option; invoke-virtual {p4, v0}, Lcom/bumptech/glide/load/Options;->get(Lcom/bumptech/glide/load/Option;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/lang/Integer; if-nez v0, :cond_3d const/4 v0, 0x2 .line 151 invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v0 .line 153 :cond_3d sget-object v1, Lcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy;->OPTION:Lcom/bumptech/glide/load/Option; invoke-virtual {p4, v1}, Lcom/bumptech/glide/load/Options;->get(Lcom/bumptech/glide/load/Option;)Ljava/lang/Object; move-result-object p4 check-cast p4, Lcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy; if-nez p4, :cond_49 .line 155 sget-object p4, Lcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy;->DEFAULT:Lcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy; :cond_49 move-object v7, p4 .line 159 iget-object p4, p0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->factory:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory; invoke-virtual {p4}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverFactory;->build()Landroid/media/MediaMetadataRetriever; move-result-object p4 .line 161 :try_start_50 iget-object v1, p0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->initializer:Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer; invoke-interface {v1, p4, p1}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder$MediaMetadataRetrieverInitializer;->initialize(Landroid/media/MediaMetadataRetriever;Ljava/lang/Object;)V .line 166 invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I move-result v4 move-object v1, p4 move v5, p2 move v6, p3 .line 163 invoke-static/range {v1 .. v7}, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->decodeFrame(Landroid/media/MediaMetadataRetriever;JIIILcom/bumptech/glide/load/resource/bitmap/DownsampleStrategy;)Landroid/graphics/Bitmap; move-result-object p1 :try_end_60 .catch Ljava/lang/RuntimeException; {:try_start_50 .. :try_end_60} :catch_6c .catchall {:try_start_50 .. :try_end_60} :catchall_6a .line 175 invoke-virtual {p4}, Landroid/media/MediaMetadataRetriever;->release()V .line 178 iget-object p2, p0, Lcom/bumptech/glide/load/resource/bitmap/VideoDecoder;->bitmapPool:Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool; invoke-static {p1, p2}, Lcom/bumptech/glide/load/resource/bitmap/BitmapResource;->obtain(Landroid/graphics/Bitmap;Lcom/bumptech/glide/load/engine/bitmap_recycle/BitmapPool;)Lcom/bumptech/glide/load/resource/bitmap/BitmapResource; move-result-object p1 return-object p1 :catchall_6a move-exception p1 goto :goto_73 :catch_6c move-exception p1 .line 173 :try_start_6d new-instance p2, Ljava/io/IOException; invoke-direct {p2, p1}, Ljava/io/IOException;->(Ljava/lang/Throwable;)V throw p2 :try_end_73 .catchall {:try_start_6d .. :try_end_73} :catchall_6a .line 175 :goto_73 invoke-virtual {p4}, Landroid/media/MediaMetadataRetriever;->release()V throw p1 .end method .method public handles(Ljava/lang/Object;Lcom/bumptech/glide/load/Options;)Z .registers 3 .annotation system Ldalvik/annotation/Signature; value = { "(TT;", "Lcom/bumptech/glide/load/Options;", ")Z" } .end annotation const/4 p1, 0x1 return p1 .end method