public class android.graphics.YuvImage
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: android.graphics.YuvImage
  super_class: java.lang.Object
{
  private static final int WORKING_COMPRESS_STORAGE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4096

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

  private byte[] mData;
    descriptor: [B
    flags: (0x0002) ACC_PRIVATE

  private int[] mStrides;
    descriptor: [I
    flags: (0x0002) ACC_PRIVATE

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

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

  public void <init>(byte[], int, int, int, int[]);
    descriptor: ([BIII[I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=6
        start local 0 // android.graphics.YuvImage this
        start local 1 // byte[] yuv
        start local 2 // int format
        start local 3 // int width
        start local 4 // int height
        start local 5 // int[] strides
         0: .line 79
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 80
            iload 2 /* format */
            bipush 17
            if_icmpeq 6
         2: .line 81
            iload 2 /* format */
            bipush 20
            if_icmpeq 6
         3: .line 82
            new java.lang.IllegalArgumentException
            dup
         4: .line 83
            ldc "only support ImageFormat.NV21 and ImageFormat.YUY2 for now"
         5: .line 82
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 87
      StackMap locals: android.graphics.YuvImage byte[] int int int int[]
      StackMap stack:
            iload 3 /* width */
            ifle 7
            iload 4 /* height */
            ifgt 10
         7: .line 88
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
         8: .line 89
            ldc "width and height must large than 0"
         9: .line 88
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 92
      StackMap locals:
      StackMap stack:
            aload 1 /* yuv */
            ifnonnull 12
        11: .line 93
            new java.lang.IllegalArgumentException
            dup
            ldc "yuv cannot be null"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        12: .line 96
      StackMap locals:
      StackMap stack:
            aload 5 /* strides */
            ifnonnull 15
        13: .line 97
            aload 0 /* this */
            aload 0 /* this */
            iload 3 /* width */
            iload 2 /* format */
            invokevirtual android.graphics.YuvImage.calculateStrides:(II)[I
            putfield android.graphics.YuvImage.mStrides:[I
        14: .line 98
            goto 16
        15: .line 99
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 5 /* strides */
            putfield android.graphics.YuvImage.mStrides:[I
        16: .line 102
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* yuv */
            putfield android.graphics.YuvImage.mData:[B
        17: .line 103
            aload 0 /* this */
            iload 2 /* format */
            putfield android.graphics.YuvImage.mFormat:I
        18: .line 104
            aload 0 /* this */
            iload 3 /* width */
            putfield android.graphics.YuvImage.mWidth:I
        19: .line 105
            aload 0 /* this */
            iload 4 /* height */
            putfield android.graphics.YuvImage.mHeight:I
        20: .line 106
            return
        end local 5 // int[] strides
        end local 4 // int height
        end local 3 // int width
        end local 2 // int format
        end local 1 // byte[] yuv
        end local 0 // android.graphics.YuvImage this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   21     0     this  Landroid/graphics/YuvImage;
            0   21     1      yuv  [B
            0   21     2   format  I
            0   21     3    width  I
            0   21     4   height  I
            0   21     5  strides  [I
    MethodParameters:
         Name  Flags
      yuv      
      format   
      width    
      height   
      strides  

  public boolean compressToJpeg(android.graphics.Rect, int, java.io.OutputStream);
    descriptor: (Landroid/graphics/Rect;ILjava/io/OutputStream;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=9, locals=6, args_size=4
        start local 0 // android.graphics.YuvImage this
        start local 1 // android.graphics.Rect rectangle
        start local 2 // int quality
        start local 3 // java.io.OutputStream stream
         0: .line 124
            new android.graphics.Rect
            dup
            iconst_0
            iconst_0
            aload 0 /* this */
            getfield android.graphics.YuvImage.mWidth:I
            aload 0 /* this */
            getfield android.graphics.YuvImage.mHeight:I
            invokespecial android.graphics.Rect.<init>:(IIII)V
            astore 4 /* wholeImage */
        start local 4 // android.graphics.Rect wholeImage
         1: .line 125
            aload 4 /* wholeImage */
            aload 1 /* rectangle */
            invokevirtual android.graphics.Rect.contains:(Landroid/graphics/Rect;)Z
            ifne 5
         2: .line 126
            new java.lang.IllegalArgumentException
            dup
         3: .line 127
            ldc "rectangle is not inside the image"
         4: .line 126
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 130
      StackMap locals: android.graphics.Rect
      StackMap stack:
            iload 2 /* quality */
            iflt 6
            iload 2 /* quality */
            bipush 100
            if_icmple 7
         6: .line 131
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "quality must be 0..100"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 134
      StackMap locals:
      StackMap stack:
            aload 3 /* stream */
            ifnonnull 9
         8: .line 135
            new java.lang.IllegalArgumentException
            dup
            ldc "stream cannot be null"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 138
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* rectangle */
            invokevirtual android.graphics.YuvImage.adjustRectangle:(Landroid/graphics/Rect;)V
        10: .line 139
            aload 0 /* this */
            aload 1 /* rectangle */
            getfield android.graphics.Rect.left:I
            aload 1 /* rectangle */
            getfield android.graphics.Rect.top:I
            invokevirtual android.graphics.YuvImage.calculateOffsets:(II)[I
            astore 5 /* offsets */
        start local 5 // int[] offsets
        11: .line 141
            aload 0 /* this */
            getfield android.graphics.YuvImage.mData:[B
            aload 0 /* this */
            getfield android.graphics.YuvImage.mFormat:I
            aload 1 /* rectangle */
            invokevirtual android.graphics.Rect.width:()I
        12: .line 142
            aload 1 /* rectangle */
            invokevirtual android.graphics.Rect.height:()I
            aload 5 /* offsets */
            aload 0 /* this */
            getfield android.graphics.YuvImage.mStrides:[I
            iload 2 /* quality */
            aload 3 /* stream */
        13: .line 143
            sipush 4096
            newarray 8
        14: .line 141
            invokestatic android.graphics.YuvImage.nativeCompressToJpeg:([BIII[I[IILjava/io/OutputStream;[B)Z
            ireturn
        end local 5 // int[] offsets
        end local 4 // android.graphics.Rect wholeImage
        end local 3 // java.io.OutputStream stream
        end local 2 // int quality
        end local 1 // android.graphics.Rect rectangle
        end local 0 // android.graphics.YuvImage this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   15     0        this  Landroid/graphics/YuvImage;
            0   15     1   rectangle  Landroid/graphics/Rect;
            0   15     2     quality  I
            0   15     3      stream  Ljava/io/OutputStream;
            1   15     4  wholeImage  Landroid/graphics/Rect;
           11   15     5     offsets  [I
    MethodParameters:
           Name  Flags
      rectangle  
      quality    
      stream     

  public byte[] getYuvData();
    descriptor: ()[B
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.graphics.YuvImage this
         0: .line 151
            aload 0 /* this */
            getfield android.graphics.YuvImage.mData:[B
            areturn
        end local 0 // android.graphics.YuvImage this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/graphics/YuvImage;

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

  public int[] getStrides();
    descriptor: ()[I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.graphics.YuvImage this
         0: .line 165
            aload 0 /* this */
            getfield android.graphics.YuvImage.mStrides:[I
            areturn
        end local 0 // android.graphics.YuvImage this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/graphics/YuvImage;

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

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

  int[] calculateOffsets(int, int);
    descriptor: (II)[I
    flags: (0x0000) 
    Code:
      stack=7, locals=4, args_size=3
        start local 0 // android.graphics.YuvImage this
        start local 1 // int left
        start local 2 // int top
         0: .line 183
            aconst_null
            astore 3 /* offsets */
        start local 3 // int[] offsets
         1: .line 184
            aload 0 /* this */
            getfield android.graphics.YuvImage.mFormat:I
            bipush 17
            if_icmpne 8
         2: .line 185
            iconst_2
            newarray 10
            dup
            iconst_0
            iload 2 /* top */
            aload 0 /* this */
            getfield android.graphics.YuvImage.mStrides:[I
            iconst_0
            iaload
            imul
            iload 1 /* left */
            iadd
            iastore
            dup
            iconst_1
         3: .line 186
            aload 0 /* this */
            getfield android.graphics.YuvImage.mHeight:I
            aload 0 /* this */
            getfield android.graphics.YuvImage.mStrides:[I
            iconst_0
            iaload
            imul
            iload 2 /* top */
            iconst_2
            idiv
            aload 0 /* this */
            getfield android.graphics.YuvImage.mStrides:[I
            iconst_1
            iaload
            imul
            iadd
         4: .line 187
            iload 1 /* left */
            iconst_2
            idiv
            iconst_2
            imul
         5: .line 186
            iadd
            iastore
         6: .line 185
            astore 3 /* offsets */
         7: .line 188
            aload 3 /* offsets */
            areturn
         8: .line 191
      StackMap locals: int[]
      StackMap stack:
            aload 0 /* this */
            getfield android.graphics.YuvImage.mFormat:I
            bipush 20
            if_icmpne 11
         9: .line 192
            iconst_1
            newarray 10
            dup
            iconst_0
            iload 2 /* top */
            aload 0 /* this */
            getfield android.graphics.YuvImage.mStrides:[I
            iconst_0
            iaload
            imul
            iload 1 /* left */
            iconst_2
            idiv
            iconst_4
            imul
            iadd
            iastore
            astore 3 /* offsets */
        10: .line 193
            aload 3 /* offsets */
            areturn
        11: .line 196
      StackMap locals:
      StackMap stack:
            aload 3 /* offsets */
            areturn
        end local 3 // int[] offsets
        end local 2 // int top
        end local 1 // int left
        end local 0 // android.graphics.YuvImage this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   12     0     this  Landroid/graphics/YuvImage;
            0   12     1     left  I
            0   12     2      top  I
            1   12     3  offsets  [I
    MethodParameters:
      Name  Flags
      left  
      top   

  private int[] calculateStrides(int, int);
    descriptor: (II)[I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=3
        start local 0 // android.graphics.YuvImage this
        start local 1 // int width
        start local 2 // int format
         0: .line 200
            aconst_null
            astore 3 /* strides */
        start local 3 // int[] strides
         1: .line 201
            iload 2 /* format */
            bipush 17
            if_icmpne 4
         2: .line 202
            iconst_2
            newarray 10
            dup
            iconst_0
            iload 1 /* width */
            iastore
            dup
            iconst_1
            iload 1 /* width */
            iastore
            astore 3 /* strides */
         3: .line 203
            aload 3 /* strides */
            areturn
         4: .line 206
      StackMap locals: int[]
      StackMap stack:
            iload 2 /* format */
            bipush 20
            if_icmpne 7
         5: .line 207
            iconst_1
            newarray 10
            dup
            iconst_0
            iload 1 /* width */
            iconst_2
            imul
            iastore
            astore 3 /* strides */
         6: .line 208
            aload 3 /* strides */
            areturn
         7: .line 211
      StackMap locals:
      StackMap stack:
            aload 3 /* strides */
            areturn
        end local 3 // int[] strides
        end local 2 // int format
        end local 1 // int width
        end local 0 // android.graphics.YuvImage this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0     this  Landroid/graphics/YuvImage;
            0    8     1    width  I
            0    8     2   format  I
            1    8     3  strides  [I
    MethodParameters:
        Name  Flags
      width   
      format  

  private void adjustRectangle(android.graphics.Rect);
    descriptor: (Landroid/graphics/Rect;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // android.graphics.YuvImage this
        start local 1 // android.graphics.Rect rect
         0: .line 215
            aload 1 /* rect */
            invokevirtual android.graphics.Rect.width:()I
            istore 2 /* width */
        start local 2 // int width
         1: .line 216
            aload 1 /* rect */
            invokevirtual android.graphics.Rect.height:()I
            istore 3 /* height */
        start local 3 // int height
         2: .line 217
            aload 0 /* this */
            getfield android.graphics.YuvImage.mFormat:I
            bipush 17
            if_icmpne 9
         3: .line 219
            iload 2 /* width */
            bipush -2
            iand
            istore 2 /* width */
         4: .line 220
            iload 3 /* height */
            bipush -2
            iand
            istore 3 /* height */
         5: .line 221
            aload 1 /* rect */
            dup
            getfield android.graphics.Rect.left:I
            bipush -2
            iand
            putfield android.graphics.Rect.left:I
         6: .line 222
            aload 1 /* rect */
            dup
            getfield android.graphics.Rect.top:I
            bipush -2
            iand
            putfield android.graphics.Rect.top:I
         7: .line 223
            aload 1 /* rect */
            aload 1 /* rect */
            getfield android.graphics.Rect.left:I
            iload 2 /* width */
            iadd
            putfield android.graphics.Rect.right:I
         8: .line 224
            aload 1 /* rect */
            aload 1 /* rect */
            getfield android.graphics.Rect.top:I
            iload 3 /* height */
            iadd
            putfield android.graphics.Rect.bottom:I
         9: .line 227
      StackMap locals: int int
      StackMap stack:
            aload 0 /* this */
            getfield android.graphics.YuvImage.mFormat:I
            bipush 20
            if_icmpne 13
        10: .line 229
            iload 2 /* width */
            bipush -2
            iand
            istore 2 /* width */
        11: .line 230
            aload 1 /* rect */
            dup
            getfield android.graphics.Rect.left:I
            bipush -2
            iand
            putfield android.graphics.Rect.left:I
        12: .line 231
            aload 1 /* rect */
            aload 1 /* rect */
            getfield android.graphics.Rect.left:I
            iload 2 /* width */
            iadd
            putfield android.graphics.Rect.right:I
        13: .line 233
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int height
        end local 2 // int width
        end local 1 // android.graphics.Rect rect
        end local 0 // android.graphics.YuvImage this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   14     0    this  Landroid/graphics/YuvImage;
            0   14     1    rect  Landroid/graphics/Rect;
            1   14     2   width  I
            2   14     3  height  I
    MethodParameters:
      Name  Flags
      rect  

  private static native boolean nativeCompressToJpeg(byte[], int, int, int, int[], int[], int, java.io.OutputStream, byte[]);
    descriptor: ([BIII[I[IILjava/io/OutputStream;[B)Z
    flags: (0x010a) ACC_PRIVATE, ACC_STATIC, ACC_NATIVE
    MethodParameters:
             Name  Flags
      oriYuv       
      format       
      width        
      height       
      offsets      
      strides      
      quality      
      stream       
      tempStorage  
}
SourceFile: "YuvImage.java"