public class android.media.ImageReader implements java.lang.AutoCloseable
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: android.media.ImageReader
  super_class: java.lang.Object
{
  private static final int ACQUIRE_SUCCESS;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int ACQUIRE_NO_BUFS;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final int ACQUIRE_MAX_IMAGES;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final long BUFFER_USAGE_UNKNOWN;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private final int mWidth;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int mHeight;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int mFormat;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int mMaxImages;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int mNumPlanes;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final android.view.Surface mSurface;
    descriptor: Landroid/view/Surface;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private int mEstimatedNativeAllocBytes;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private final java.lang.Object mListenerLock;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.Object mCloseLock;
    descriptor: Ljava/lang/Object;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private boolean mIsReaderValid;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private android.media.ImageReader$OnImageAvailableListener mListener;
    descriptor: Landroid/media/ImageReader$OnImageAvailableListener;
    flags: (0x0002) ACC_PRIVATE

  private android.media.ImageReader$ListenerHandler mListenerHandler;
    descriptor: Landroid/media/ImageReader$ListenerHandler;
    flags: (0x0002) ACC_PRIVATE

  private java.util.List<android.media.Image> mAcquiredImages;
    descriptor: Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/List<Landroid/media/Image;>;

  private long mNativeContext;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 1055
            ldc "media_jni"
            invokestatic java.lang.System.loadLibrary:(Ljava/lang/String;)V
         1: .line 1056
            invokestatic android.media.ImageReader.nativeClassInit:()V
         2: .line 1057
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public static android.media.ImageReader newInstance(int, int, int, int);
    descriptor: (IIII)Landroid/media/ImageReader;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=8, locals=4, args_size=4
        start local 0 // int width
        start local 1 // int height
        start local 2 // int format
        start local 3 // int maxImages
         0: .line 132
            new android.media.ImageReader
            dup
            iload 0 /* width */
            iload 1 /* height */
            iload 2 /* format */
            iload 3 /* maxImages */
            lconst_0
            invokespecial android.media.ImageReader.<init>:(IIIIJ)V
            areturn
        end local 3 // int maxImages
        end local 2 // int format
        end local 1 // int height
        end local 0 // int width
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    1     0      width  I
            0    1     1     height  I
            0    1     2     format  I
            0    1     3  maxImages  I
    MethodParameters:
           Name  Flags
      width      
      height     
      format     
      maxImages  

  public static android.media.ImageReader newInstance(int, int, int, int, long);
    descriptor: (IIIIJ)Landroid/media/ImageReader;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=8, locals=6, args_size=5
        start local 0 // int width
        start local 1 // int height
        start local 2 // int format
        start local 3 // int maxImages
        start local 4 // long usage
         0: .line 219
            iload 2 /* format */
            lload 4 /* usage */
            invokestatic android.media.ImageReader.isFormatUsageCombinationAllowed:(IJ)Z
            ifne 4
         1: .line 220
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Format usage combination is not supported: format = "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         2: .line 221
            iload 2 /* format */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ", usage = "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            lload 4 /* usage */
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         3: .line 220
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 223
      StackMap locals:
      StackMap stack:
            new android.media.ImageReader
            dup
            iload 0 /* width */
            iload 1 /* height */
            iload 2 /* format */
            iload 3 /* maxImages */
            lload 4 /* usage */
            invokespecial android.media.ImageReader.<init>:(IIIIJ)V
            areturn
        end local 4 // long usage
        end local 3 // int maxImages
        end local 2 // int format
        end local 1 // int height
        end local 0 // int width
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0      width  I
            0    5     1     height  I
            0    5     2     format  I
            0    5     3  maxImages  I
            0    5     4      usage  J
    MethodParameters:
           Name  Flags
      width      
      height     
      format     
      maxImages  
      usage      

  protected void <init>(int, int, int, int, long);
    descriptor: (IIIIJ)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=7, args_size=6
        start local 0 // android.media.ImageReader this
         0: .line 28
            new java.lang.Error
            dup
            ldc "Unresolved compilation problems: \n\tThe import dalvik.system cannot be resolved\n\tThe import java.nio.NioUtils cannot be resolved\n\tVMRuntime cannot be resolved\n\tVMRuntime cannot be resolved\n\tNioUtils cannot be resolved\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/ImageReader;
    MethodParameters:
           Name  Flags
      width      
      height     
      format     
      maxImages  
      usage      

  public int getWidth();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 277
            aload 0 /* this */
            getfield android.media.ImageReader.mWidth:I
            ireturn
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/ImageReader;

  public int getHeight();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 290
            aload 0 /* this */
            getfield android.media.ImageReader.mHeight:I
            ireturn
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/ImageReader;

  public int getImageFormat();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 309
            aload 0 /* this */
            getfield android.media.ImageReader.mFormat:I
            ireturn
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/ImageReader;

  public int getMaxImages();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 330
            aload 0 /* this */
            getfield android.media.ImageReader.mMaxImages:I
            ireturn
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/ImageReader;

  public android.view.Surface getSurface();
    descriptor: ()Landroid/view/Surface;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 350
            aload 0 /* this */
            getfield android.media.ImageReader.mSurface:Landroid/view/Surface;
            areturn
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/ImageReader;

  public android.media.Image acquireLatestImage();
    descriptor: ()Landroid/media/Image;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=6, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 386
            aload 0 /* this */
            invokevirtual android.media.ImageReader.acquireNextImage:()Landroid/media/Image;
            astore 1 /* image */
        start local 1 // android.media.Image image
         1: .line 387
            aload 1 /* image */
            ifnonnull 3
         2: .line 388
            aconst_null
            areturn
         3: .line 392
      StackMap locals: android.media.Image
      StackMap stack:
            aload 0 /* this */
            invokevirtual android.media.ImageReader.acquireNextImageNoThrowISE:()Landroid/media/Image;
            astore 2 /* next */
        start local 2 // android.media.Image next
         4: .line 393
            aload 2 /* next */
            ifnonnull 11
         5: .line 394
            aload 1 /* image */
            astore 3 /* result */
        start local 3 // android.media.Image result
         6: .line 395
            aconst_null
            astore 1 /* image */
         7: .line 396
            aload 3 /* result */
            astore 5
         8: .line 402
            aload 1 /* image */
            ifnull 10
         9: .line 403
            aload 1 /* image */
            invokevirtual android.media.Image.close:()V
        10: .line 396
      StackMap locals: android.media.ImageReader android.media.Image android.media.Image android.media.Image top android.media.Image
      StackMap stack:
            aload 5
            areturn
        end local 3 // android.media.Image result
        11: .line 398
      StackMap locals: android.media.ImageReader android.media.Image android.media.Image
      StackMap stack:
            aload 1 /* image */
            invokevirtual android.media.Image.close:()V
        12: .line 399
            aload 2 /* next */
            astore 1 /* image */
        end local 2 // android.media.Image next
        13: .line 391
            goto 3
        14: .line 401
      StackMap locals: android.media.ImageReader android.media.Image
      StackMap stack: java.lang.Throwable
            astore 4
        15: .line 402
            aload 1 /* image */
            ifnull 17
        16: .line 403
            aload 1 /* image */
            invokevirtual android.media.Image.close:()V
        17: .line 405
      StackMap locals: android.media.ImageReader android.media.Image top top java.lang.Throwable
      StackMap stack:
            aload 4
            athrow
        end local 1 // android.media.Image image
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   18     0    this  Landroid/media/ImageReader;
            1   18     1   image  Landroid/media/Image;
            4   13     2    next  Landroid/media/Image;
            6   11     3  result  Landroid/media/Image;
      Exception table:
        from    to  target  type
           3     8      14  any
          11    14      14  any

  public android.media.Image acquireNextImageNoThrowISE();
    descriptor: ()Landroid/media/Image;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 416
            new android.media.ImageReader$SurfaceImage
            dup
            aload 0 /* this */
            aload 0 /* this */
            getfield android.media.ImageReader.mFormat:I
            invokespecial android.media.ImageReader$SurfaceImage.<init>:(Landroid/media/ImageReader;I)V
            astore 1 /* si */
        start local 1 // android.media.ImageReader$SurfaceImage si
         1: .line 417
            aload 0 /* this */
            aload 1 /* si */
            invokevirtual android.media.ImageReader.acquireNextSurfaceImage:(Landroid/media/ImageReader$SurfaceImage;)I
            ifne 2
            aload 1 /* si */
            goto 3
      StackMap locals: android.media.ImageReader$SurfaceImage
      StackMap stack:
         2: aconst_null
      StackMap locals:
      StackMap stack: android.media.ImageReader$SurfaceImage
         3: areturn
        end local 1 // android.media.ImageReader$SurfaceImage si
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Landroid/media/ImageReader;
            1    4     1    si  Landroid/media/ImageReader$SurfaceImage;

  private int acquireNextSurfaceImage(android.media.ImageReader$SurfaceImage);
    descriptor: (Landroid/media/ImageReader$SurfaceImage;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // android.media.ImageReader this
        start local 1 // android.media.ImageReader$SurfaceImage si
         0: .line 435
            aload 0 /* this */
            getfield android.media.ImageReader.mCloseLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 437
            iconst_1
            istore 3 /* status */
        start local 3 // int status
         2: .line 438
            aload 0 /* this */
            getfield android.media.ImageReader.mIsReaderValid:Z
            ifeq 4
         3: .line 439
            aload 0 /* this */
            aload 1 /* si */
            invokevirtual android.media.ImageReader.nativeImageSetup:(Landroid/media/Image;)I
            istore 3 /* status */
         4: .line 442
      StackMap locals: java.lang.Object int
      StackMap stack:
            iload 3 /* status */
            tableswitch { // 0 - 2
                    0: 5
                    1: 6
                    2: 6
              default: 7
          }
         5: .line 444
      StackMap locals:
      StackMap stack:
            aload 1 /* si */
            iconst_1
            putfield android.media.ImageReader$SurfaceImage.mIsImageValid:Z
         6: .line 447
      StackMap locals:
      StackMap stack:
            goto 8
         7: .line 449
      StackMap locals:
      StackMap stack:
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unknown nativeImageSetup return code "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 3 /* status */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         8: .line 454
      StackMap locals:
      StackMap stack:
            iload 3 /* status */
            ifne 10
         9: .line 455
            aload 0 /* this */
            getfield android.media.ImageReader.mAcquiredImages:Ljava/util/List;
            aload 1 /* si */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        10: .line 457
      StackMap locals:
      StackMap stack:
            iload 3 /* status */
            aload 2
            monitorexit
        11: ireturn
        end local 3 // int status
        12: .line 435
      StackMap locals: android.media.ImageReader android.media.ImageReader$SurfaceImage java.lang.Object
      StackMap stack: java.lang.Throwable
            aload 2
            monitorexit
        13: athrow
        end local 1 // android.media.ImageReader$SurfaceImage si
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   14     0    this  Landroid/media/ImageReader;
            0   14     1      si  Landroid/media/ImageReader$SurfaceImage;
            2   12     3  status  I
      Exception table:
        from    to  target  type
           1    11      12  any
          12    13      12  any
    MethodParameters:
      Name  Flags
      si    

  public android.media.Image acquireNextImage();
    descriptor: ()Landroid/media/Image;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=3, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 492
            new android.media.ImageReader$SurfaceImage
            dup
            aload 0 /* this */
            aload 0 /* this */
            getfield android.media.ImageReader.mFormat:I
            invokespecial android.media.ImageReader$SurfaceImage.<init>:(Landroid/media/ImageReader;I)V
            astore 1 /* si */
        start local 1 // android.media.ImageReader$SurfaceImage si
         1: .line 493
            aload 0 /* this */
            aload 1 /* si */
            invokevirtual android.media.ImageReader.acquireNextSurfaceImage:(Landroid/media/ImageReader$SurfaceImage;)I
            istore 2 /* status */
        start local 2 // int status
         2: .line 495
            iload 2 /* status */
            tableswitch { // 0 - 2
                    0: 3
                    1: 4
                    2: 5
              default: 10
          }
         3: .line 497
      StackMap locals: android.media.ImageReader$SurfaceImage int
      StackMap stack:
            aload 1 /* si */
            areturn
         4: .line 499
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
         5: .line 501
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         6: .line 503
            ldc "maxImages (%d) has already been acquired, call #close before acquiring more."
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
         7: .line 504
            aload 0 /* this */
            getfield android.media.ImageReader.mMaxImages:I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
         8: .line 502
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
         9: .line 501
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 506
      StackMap locals:
      StackMap stack:
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unknown nativeImageSetup return code "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 2 /* status */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        end local 2 // int status
        end local 1 // android.media.ImageReader$SurfaceImage si
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   11     0    this  Landroid/media/ImageReader;
            1   11     1      si  Landroid/media/ImageReader$SurfaceImage;
            2   11     2  status  I

  private void releaseImage(android.media.Image);
    descriptor: (Landroid/media/Image;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // android.media.ImageReader this
        start local 1 // android.media.Image i
         0: .line 514
            aload 1 /* i */
            instanceof android.media.ImageReader$SurfaceImage
            ifne 4
         1: .line 515
            new java.lang.IllegalArgumentException
            dup
         2: .line 516
            ldc "This image was not produced by an ImageReader"
         3: .line 515
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 518
      StackMap locals:
      StackMap stack:
            aload 1 /* i */
            checkcast android.media.ImageReader$SurfaceImage
            astore 2 /* si */
        start local 2 // android.media.ImageReader$SurfaceImage si
         5: .line 519
            aload 2 /* si */
            getfield android.media.ImageReader$SurfaceImage.mIsImageValid:Z
            ifne 7
         6: .line 520
            return
         7: .line 523
      StackMap locals: android.media.ImageReader$SurfaceImage
      StackMap stack:
            aload 2 /* si */
            invokevirtual android.media.ImageReader$SurfaceImage.getReader:()Landroid/media/ImageReader;
            aload 0 /* this */
            if_acmpne 8
            aload 0 /* this */
            getfield android.media.ImageReader.mAcquiredImages:Ljava/util/List;
            aload 1 /* i */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifne 11
         8: .line 524
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
         9: .line 525
            ldc "This image was not produced by this ImageReader"
        10: .line 524
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 528
      StackMap locals:
      StackMap stack:
            aload 2 /* si */
            invokevirtual android.media.ImageReader$SurfaceImage.clearSurfacePlanes:()V
        12: .line 529
            aload 0 /* this */
            aload 1 /* i */
            invokevirtual android.media.ImageReader.nativeReleaseImage:(Landroid/media/Image;)V
        13: .line 530
            aload 2 /* si */
            iconst_0
            putfield android.media.ImageReader$SurfaceImage.mIsImageValid:Z
        14: .line 531
            aload 0 /* this */
            getfield android.media.ImageReader.mAcquiredImages:Ljava/util/List;
            aload 1 /* i */
            invokeinterface java.util.List.remove:(Ljava/lang/Object;)Z
            pop
        15: .line 532
            return
        end local 2 // android.media.ImageReader$SurfaceImage si
        end local 1 // android.media.Image i
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   16     0  this  Landroid/media/ImageReader;
            0   16     1     i  Landroid/media/Image;
            5   16     2    si  Landroid/media/ImageReader$SurfaceImage;
    MethodParameters:
      Name  Flags
      i     

  public void setOnImageAvailableListener(android.media.ImageReader$OnImageAvailableListener, android.os.Handler);
    descriptor: (Landroid/media/ImageReader$OnImageAvailableListener;Landroid/os/Handler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // android.media.ImageReader this
        start local 1 // android.media.ImageReader$OnImageAvailableListener listener
        start local 2 // android.os.Handler handler
         0: .line 547
            aload 0 /* this */
            getfield android.media.ImageReader.mListenerLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         1: .line 548
            aload 1 /* listener */
            ifnull 13
         2: .line 549
            aload 2 /* handler */
            ifnull 3
            aload 2 /* handler */
            invokevirtual android.os.Handler.getLooper:()Landroid/os/Looper;
            goto 4
      StackMap locals: java.lang.Object
      StackMap stack:
         3: invokestatic android.os.Looper.myLooper:()Landroid/os/Looper;
      StackMap locals:
      StackMap stack: android.os.Looper
         4: astore 4 /* looper */
        start local 4 // android.os.Looper looper
         5: .line 550
            aload 4 /* looper */
            ifnonnull 9
         6: .line 551
            new java.lang.IllegalArgumentException
            dup
         7: .line 552
            ldc "handler is null but the current thread is not a looper"
         8: .line 551
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 554
      StackMap locals: android.os.Looper
      StackMap stack:
            aload 0 /* this */
            getfield android.media.ImageReader.mListenerHandler:Landroid/media/ImageReader$ListenerHandler;
            ifnull 10
            aload 0 /* this */
            getfield android.media.ImageReader.mListenerHandler:Landroid/media/ImageReader$ListenerHandler;
            invokevirtual android.media.ImageReader$ListenerHandler.getLooper:()Landroid/os/Looper;
            aload 4 /* looper */
            if_acmpeq 11
        10: .line 555
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new android.media.ImageReader$ListenerHandler
            dup
            aload 0 /* this */
            aload 4 /* looper */
            invokespecial android.media.ImageReader$ListenerHandler.<init>:(Landroid/media/ImageReader;Landroid/os/Looper;)V
            putfield android.media.ImageReader.mListenerHandler:Landroid/media/ImageReader$ListenerHandler;
        11: .line 557
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* listener */
            putfield android.media.ImageReader.mListener:Landroid/media/ImageReader$OnImageAvailableListener;
        end local 4 // android.os.Looper looper
        12: .line 558
            goto 15
        13: .line 559
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield android.media.ImageReader.mListener:Landroid/media/ImageReader$OnImageAvailableListener;
        14: .line 560
            aload 0 /* this */
            aconst_null
            putfield android.media.ImageReader.mListenerHandler:Landroid/media/ImageReader$ListenerHandler;
        15: .line 547
      StackMap locals:
      StackMap stack:
            aload 3
            monitorexit
        16: goto 19
      StackMap locals:
      StackMap stack: java.lang.Throwable
        17: aload 3
            monitorexit
        18: athrow
        19: .line 563
      StackMap locals:
      StackMap stack:
            return
        end local 2 // android.os.Handler handler
        end local 1 // android.media.ImageReader$OnImageAvailableListener listener
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   20     0      this  Landroid/media/ImageReader;
            0   20     1  listener  Landroid/media/ImageReader$OnImageAvailableListener;
            0   20     2   handler  Landroid/os/Handler;
            5   12     4    looper  Landroid/os/Looper;
      Exception table:
        from    to  target  type
           1    16      17  any
          17    18      17  any
    MethodParameters:
          Name  Flags
      listener  
      handler   

  public void close();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 620
            new java.lang.Error
            dup
            ldc "Unresolved compilation problem: \n\tVMRuntime cannot be resolved\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/ImageReader;

  public void discardFreeBuffers();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 645
            aload 0 /* this */
            getfield android.media.ImageReader.mCloseLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 646
            aload 0 /* this */
            invokevirtual android.media.ImageReader.nativeDiscardFreeBuffers:()V
         2: .line 645
            aload 1
            monitorexit
         3: goto 6
      StackMap locals: android.media.ImageReader java.lang.Object
      StackMap stack: java.lang.Throwable
         4: aload 1
            monitorexit
         5: athrow
         6: .line 648
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Landroid/media/ImageReader;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any

  protected void finalize();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=2, args_size=1
        start local 0 // android.media.ImageReader this
         0: .line 653
            aload 0 /* this */
            invokevirtual android.media.ImageReader.close:()V
         1: .line 654
            goto 5
      StackMap locals:
      StackMap stack: java.lang.Throwable
         2: astore 1
         3: .line 655
            aload 0 /* this */
            invokespecial java.lang.Object.finalize:()V
         4: .line 656
            aload 1
            athrow
         5: .line 655
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokespecial java.lang.Object.finalize:()V
         6: .line 657
            return
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Landroid/media/ImageReader;
      Exception table:
        from    to  target  type
           0     2       2  any
    Exceptions:
      throws java.lang.Throwable

  void detachImage(android.media.Image);
    descriptor: (Landroid/media/Image;)V
    flags: (0x0000) 
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // android.media.ImageReader this
        start local 1 // android.media.Image image
         0: .line 691
            aload 1 /* image */
            ifnonnull 2
         1: .line 692
            new java.lang.IllegalArgumentException
            dup
            ldc "input image must not be null"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 694
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* image */
            invokevirtual android.media.ImageReader.isImageOwnedbyMe:(Landroid/media/Image;)Z
            ifne 4
         3: .line 695
            new java.lang.IllegalArgumentException
            dup
            ldc "Trying to detach an image that is not owned by this ImageReader"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 699
      StackMap locals:
      StackMap stack:
            aload 1 /* image */
            checkcast android.media.ImageReader$SurfaceImage
            astore 2 /* si */
        start local 2 // android.media.ImageReader$SurfaceImage si
         5: .line 700
            aload 2 /* si */
            invokevirtual android.media.ImageReader$SurfaceImage.throwISEIfImageIsInvalid:()V
         6: .line 702
            aload 2 /* si */
            invokevirtual android.media.ImageReader$SurfaceImage.isAttachable:()Z
            ifeq 8
         7: .line 703
            new java.lang.IllegalStateException
            dup
            ldc "Image was already detached from this ImageReader"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         8: .line 706
      StackMap locals: android.media.ImageReader$SurfaceImage
      StackMap stack:
            aload 0 /* this */
            aload 1 /* image */
            invokevirtual android.media.ImageReader.nativeDetachImage:(Landroid/media/Image;)I
            pop
         9: .line 707
            aload 2 /* si */
            invokevirtual android.media.ImageReader$SurfaceImage.clearSurfacePlanes:()V
        10: .line 708
            aload 2 /* si */
            aconst_null
            putfield android.media.ImageReader$SurfaceImage.mPlanes:[Landroid/media/ImageReader$SurfaceImage$SurfacePlane;
        11: .line 709
            aload 2 /* si */
            iconst_1
            invokevirtual android.media.ImageReader$SurfaceImage.setDetached:(Z)V
        12: .line 710
            return
        end local 2 // android.media.ImageReader$SurfaceImage si
        end local 1 // android.media.Image image
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   13     0   this  Landroid/media/ImageReader;
            0   13     1  image  Landroid/media/Image;
            5   13     2     si  Landroid/media/ImageReader$SurfaceImage;
    MethodParameters:
       Name  Flags
      image  

  private boolean isImageOwnedbyMe(android.media.Image);
    descriptor: (Landroid/media/Image;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // android.media.ImageReader this
        start local 1 // android.media.Image image
         0: .line 713
            aload 1 /* image */
            instanceof android.media.ImageReader$SurfaceImage
            ifne 2
         1: .line 714
            iconst_0
            ireturn
         2: .line 716
      StackMap locals:
      StackMap stack:
            aload 1 /* image */
            checkcast android.media.ImageReader$SurfaceImage
            astore 2 /* si */
        start local 2 // android.media.ImageReader$SurfaceImage si
         3: .line 717
            aload 2 /* si */
            invokevirtual android.media.ImageReader$SurfaceImage.getReader:()Landroid/media/ImageReader;
            aload 0 /* this */
            if_acmpne 4
            iconst_1
            ireturn
      StackMap locals: android.media.ImageReader$SurfaceImage
      StackMap stack:
         4: iconst_0
            ireturn
        end local 2 // android.media.ImageReader$SurfaceImage si
        end local 1 // android.media.Image image
        end local 0 // android.media.ImageReader this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0   this  Landroid/media/ImageReader;
            0    5     1  image  Landroid/media/Image;
            3    5     2     si  Landroid/media/ImageReader$SurfaceImage;
    MethodParameters:
       Name  Flags
      image  

  private static boolean isFormatUsageCombinationAllowed(int, long);
    descriptor: (IJ)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // int format
        start local 1 // long usage
         0: .line 721
            iload 0 /* format */
            invokestatic android.graphics.ImageFormat.isPublicFormat:(I)Z
            ifne 2
            iload 0 /* format */
            invokestatic android.graphics.PixelFormat.isPublicFormat:(I)Z
            ifne 2
         1: .line 722
            iconst_0
            ireturn
         2: .line 726
      StackMap locals:
      StackMap stack:
            lload 1 /* usage */
            lconst_0
            lcmp
            ifne 4
         3: .line 727
            iconst_0
            ireturn
         4: .line 730
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // long usage
        end local 0 // int format
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    5     0  format  I
            0    5     1   usage  J
    MethodParameters:
        Name  Flags
      format  
      usage   

  private static void postEventFromNative(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=5, args_size=1
        start local 0 // java.lang.Object selfRef
         0: .line 741
            aload 0 /* selfRef */
            checkcast java.lang.ref.WeakReference
            astore 1 /* weakSelf */
        start local 1 // java.lang.ref.WeakReference weakSelf
         1: .line 742
            aload 1 /* weakSelf */
            invokevirtual java.lang.ref.WeakReference.get:()Ljava/lang/Object;
            checkcast android.media.ImageReader
            astore 2 /* ir */
        start local 2 // android.media.ImageReader ir
         2: .line 743
            aload 2 /* ir */
            ifnonnull 4
         3: .line 744
            return
         4: .line 748
      StackMap locals: java.lang.ref.WeakReference android.media.ImageReader
      StackMap stack:
            aload 2 /* ir */
            getfield android.media.ImageReader.mListenerLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
         5: .line 749
            aload 2 /* ir */
            getfield android.media.ImageReader.mListenerHandler:Landroid/media/ImageReader$ListenerHandler;
            astore 3 /* handler */
        start local 3 // android.os.Handler handler
         6: .line 748
            aload 4
            monitorexit
         7: goto 10
        end local 3 // android.os.Handler handler
      StackMap locals: java.lang.Object java.lang.ref.WeakReference android.media.ImageReader top java.lang.Object
      StackMap stack: java.lang.Throwable
         8: aload 4
            monitorexit
         9: athrow
        start local 3 // android.os.Handler handler
        10: .line 751
      StackMap locals: java.lang.Object java.lang.ref.WeakReference android.media.ImageReader android.os.Handler
      StackMap stack:
            aload 3 /* handler */
            ifnull 12
        11: .line 752
            aload 3 /* handler */
            iconst_0
            invokevirtual android.os.Handler.sendEmptyMessage:(I)Z
            pop
        12: .line 754
      StackMap locals:
      StackMap stack:
            return
        end local 3 // android.os.Handler handler
        end local 2 // android.media.ImageReader ir
        end local 1 // java.lang.ref.WeakReference weakSelf
        end local 0 // java.lang.Object selfRef
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   13     0   selfRef  Ljava/lang/Object;
            1   13     1  weakSelf  Ljava/lang/ref/WeakReference<Landroid/media/ImageReader;>;
            2   13     2        ir  Landroid/media/ImageReader;
            6    8     3   handler  Landroid/os/Handler;
           10   13     3   handler  Landroid/os/Handler;
      Exception table:
        from    to  target  type
           5     7       8  any
           8     9       8  any
    MethodParameters:
         Name  Flags
      selfRef  

  private synchronized native void nativeInit(java.lang.Object, int, int, int, int, long);
    descriptor: (Ljava/lang/Object;IIIIJ)V
    flags: (0x0122) ACC_PRIVATE, ACC_SYNCHRONIZED, ACC_NATIVE
    MethodParameters:
               Name  Flags
      weakSelf       
      w              
      h              
      fmt            
      maxImgs        
      consumerUsage  

  private synchronized native void nativeClose();
    descriptor: ()V
    flags: (0x0122) ACC_PRIVATE, ACC_SYNCHRONIZED, ACC_NATIVE

  private synchronized native void nativeReleaseImage(android.media.Image);
    descriptor: (Landroid/media/Image;)V
    flags: (0x0122) ACC_PRIVATE, ACC_SYNCHRONIZED, ACC_NATIVE
    MethodParameters:
      Name  Flags
      i     

  private synchronized native android.view.Surface nativeGetSurface();
    descriptor: ()Landroid/view/Surface;
    flags: (0x0122) ACC_PRIVATE, ACC_SYNCHRONIZED, ACC_NATIVE

  private synchronized native int nativeDetachImage(android.media.Image);
    descriptor: (Landroid/media/Image;)I
    flags: (0x0122) ACC_PRIVATE, ACC_SYNCHRONIZED, ACC_NATIVE
    MethodParameters:
      Name  Flags
      i     

  private synchronized native void nativeDiscardFreeBuffers();
    descriptor: ()V
    flags: (0x0122) ACC_PRIVATE, ACC_SYNCHRONIZED, ACC_NATIVE

  private synchronized native int nativeImageSetup(android.media.Image);
    descriptor: (Landroid/media/Image;)I
    flags: (0x0122) ACC_PRIVATE, ACC_SYNCHRONIZED, ACC_NATIVE
    MethodParameters:
      Name  Flags
      i     

  private static native void nativeClassInit();
    descriptor: ()V
    flags: (0x010a) ACC_PRIVATE, ACC_STATIC, ACC_NATIVE
}
SourceFile: "ImageReader.java"
NestMembers:
  android.media.ImageReader$ListenerHandler  android.media.ImageReader$OnImageAvailableListener  android.media.ImageReader$SurfaceImage  android.media.ImageReader$SurfaceImage$SurfacePlane
InnerClasses:
  private final ListenerHandler = android.media.ImageReader$ListenerHandler of android.media.ImageReader
  public abstract OnImageAvailableListener = android.media.ImageReader$OnImageAvailableListener of android.media.ImageReader
  private SurfaceImage = android.media.ImageReader$SurfaceImage of android.media.ImageReader