class android.media.MediaCodec$EventHandler extends android.os.Handler
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: android.media.MediaCodec$EventHandler
  super_class: android.os.Handler
{
  private android.media.MediaCodec mCodec;
    descriptor: Landroid/media/MediaCodec;
    flags: (0x0002) ACC_PRIVATE

  final android.media.MediaCodec this$0;
    descriptor: Landroid/media/MediaCodec;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  public void <init>(android.media.MediaCodec, android.media.MediaCodec, android.os.Looper);
    descriptor: (Landroid/media/MediaCodec;Landroid/media/MediaCodec;Landroid/os/Looper;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // android.media.MediaCodec$EventHandler this
        start local 2 // android.media.MediaCodec codec
        start local 3 // android.os.Looper looper
         0: .line 1636
            aload 0 /* this */
            aload 1
            putfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
         1: .line 1637
            aload 0 /* this */
            aload 3 /* looper */
            invokespecial android.os.Handler.<init>:(Landroid/os/Looper;)V
         2: .line 1638
            aload 0 /* this */
            aload 2 /* codec */
            putfield android.media.MediaCodec$EventHandler.mCodec:Landroid/media/MediaCodec;
         3: .line 1639
            return
        end local 3 // android.os.Looper looper
        end local 2 // android.media.MediaCodec codec
        end local 0 // android.media.MediaCodec$EventHandler this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    4     0    this  Landroid/media/MediaCodec$EventHandler;
            0    4     2   codec  Landroid/media/MediaCodec;
            0    4     3  looper  Landroid/os/Looper;
    MethodParameters:
        Name  Flags
      this$0  final
      codec   
      looper  

  public void handleMessage(android.os.Message);
    descriptor: (Landroid/os/Message;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=7, args_size=2
        start local 0 // android.media.MediaCodec$EventHandler this
        start local 1 // android.os.Message msg
         0: .line 1643
            aload 1 /* msg */
            getfield android.os.Message.what:I
            tableswitch { // 1 - 3
                    1: 1
                    2: 3
                    3: 5
              default: 21
          }
         1: .line 1646
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* msg */
            invokevirtual android.media.MediaCodec$EventHandler.handleCallback:(Landroid/os/Message;)V
         2: .line 1647
            goto 21
         3: .line 1651
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            aload 1 /* msg */
            getfield android.os.Message.obj:Ljava/lang/Object;
            checkcast android.media.MediaCodec$Callback
            putfield android.media.MediaCodec.mCallback:Landroid/media/MediaCodec$Callback;
         4: .line 1652
            goto 21
         5: .line 1655
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mListenerLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         6: .line 1656
            aload 1 /* msg */
            getfield android.os.Message.obj:Ljava/lang/Object;
            checkcast java.util.Map
            astore 3 /* map */
        start local 3 // java.util.Map map
         7: .line 1657
            iconst_0
            istore 4 /* i */
        start local 4 // int i
         8: .line 1658
      StackMap locals: java.lang.Object java.util.Map int
      StackMap stack:
            aload 3 /* map */
            new java.lang.StringBuilder
            dup
            iload 4 /* i */
            invokestatic java.lang.String.valueOf:(I)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "-media-time-us"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 5 /* mediaTimeUs */
        start local 5 // java.lang.Object mediaTimeUs
         9: .line 1659
            aload 3 /* map */
            new java.lang.StringBuilder
            dup
            iload 4 /* i */
            invokestatic java.lang.String.valueOf:(I)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "-system-nano"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 6 /* systemNano */
        start local 6 // java.lang.Object systemNano
        10: .line 1660
            aload 5 /* mediaTimeUs */
            ifnull 17
            aload 6 /* systemNano */
            ifnull 17
        11: .line 1661
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mOnFrameRenderedListener:Landroid/media/MediaCodec$OnFrameRenderedListener;
            ifnonnull 13
        12: .line 1662
            goto 17
        13: .line 1664
      StackMap locals: java.lang.Object java.lang.Object
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mOnFrameRenderedListener:Landroid/media/MediaCodec$OnFrameRenderedListener;
        14: .line 1665
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.mCodec:Landroid/media/MediaCodec;
            aload 5 /* mediaTimeUs */
            checkcast java.lang.Long
            invokevirtual java.lang.Long.longValue:()J
            aload 6 /* systemNano */
            checkcast java.lang.Long
            invokevirtual java.lang.Long.longValue:()J
        15: .line 1664
            invokeinterface android.media.MediaCodec$OnFrameRenderedListener.onFrameRendered:(Landroid/media/MediaCodec;JJ)V
        end local 6 // java.lang.Object systemNano
        end local 5 // java.lang.Object mediaTimeUs
        16: .line 1657
            iinc 4 /* i */ 1
            goto 8
        end local 4 // int i
        17: .line 1667
      StackMap locals:
      StackMap stack:
            aload 2
            monitorexit
        18: goto 21
        end local 3 // java.util.Map map
        19: .line 1655
      StackMap locals: android.media.MediaCodec$EventHandler android.os.Message java.lang.Object
      StackMap stack: java.lang.Throwable
            aload 2
            monitorexit
        20: athrow
        21: .line 1674
      StackMap locals:
      StackMap stack:
            return
        end local 1 // android.os.Message msg
        end local 0 // android.media.MediaCodec$EventHandler this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   22     0         this  Landroid/media/MediaCodec$EventHandler;
            0   22     1          msg  Landroid/os/Message;
            7   19     3          map  Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;
            8   17     4            i  I
            9   16     5  mediaTimeUs  Ljava/lang/Object;
           10   16     6   systemNano  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           6    18      19  any
          19    20      19  any
    MethodParameters:
      Name  Flags
      msg   

  private void handleCallback(android.os.Message);
    descriptor: (Landroid/os/Message;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // android.media.MediaCodec$EventHandler this
        start local 1 // android.os.Message msg
         0: .line 1677
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mCallback:Landroid/media/MediaCodec$Callback;
            ifnonnull 2
         1: .line 1678
            return
         2: .line 1681
      StackMap locals:
      StackMap stack:
            aload 1 /* msg */
            getfield android.os.Message.arg1:I
            tableswitch { // 1 - 4
                    1: 3
                    2: 12
                    3: 24
                    4: 26
              default: 30
          }
         3: .line 1684
      StackMap locals:
      StackMap stack:
            aload 1 /* msg */
            getfield android.os.Message.arg2:I
            istore 2 /* index */
        start local 2 // int index
         4: .line 1685
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mBufferLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         5: .line 1686
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mCachedInputBuffers:[Ljava/nio/ByteBuffer;
            iload 2 /* index */
            invokevirtual android.media.MediaCodec.validateInputByteBuffer:([Ljava/nio/ByteBuffer;I)V
         6: .line 1685
            aload 3
            monitorexit
         7: goto 10
      StackMap locals: android.media.MediaCodec$EventHandler android.os.Message int java.lang.Object
      StackMap stack: java.lang.Throwable
         8: aload 3
            monitorexit
         9: athrow
        10: .line 1688
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mCallback:Landroid/media/MediaCodec$Callback;
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.mCodec:Landroid/media/MediaCodec;
            iload 2 /* index */
            invokevirtual android.media.MediaCodec$Callback.onInputBufferAvailable:(Landroid/media/MediaCodec;I)V
        11: .line 1689
            goto 30
        end local 2 // int index
        12: .line 1694
      StackMap locals:
      StackMap stack:
            aload 1 /* msg */
            getfield android.os.Message.arg2:I
            istore 2 /* index */
        start local 2 // int index
        13: .line 1695
            aload 1 /* msg */
            getfield android.os.Message.obj:Ljava/lang/Object;
            checkcast android.media.MediaCodec$BufferInfo
            astore 3 /* info */
        start local 3 // android.media.MediaCodec$BufferInfo info
        14: .line 1696
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mBufferLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
        15: .line 1697
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mCachedOutputBuffers:[Ljava/nio/ByteBuffer;
            iload 2 /* index */
            aload 3 /* info */
            invokevirtual android.media.MediaCodec.validateOutputByteBuffer:([Ljava/nio/ByteBuffer;ILandroid/media/MediaCodec$BufferInfo;)V
        16: .line 1696
            aload 4
            monitorexit
        17: goto 20
      StackMap locals: android.media.MediaCodec$EventHandler android.os.Message int android.media.MediaCodec$BufferInfo java.lang.Object
      StackMap stack: java.lang.Throwable
        18: aload 4
            monitorexit
        19: athrow
        20: .line 1699
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mCallback:Landroid/media/MediaCodec$Callback;
        21: .line 1700
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.mCodec:Landroid/media/MediaCodec;
            iload 2 /* index */
            aload 3 /* info */
        22: .line 1699
            invokevirtual android.media.MediaCodec$Callback.onOutputBufferAvailable:(Landroid/media/MediaCodec;ILandroid/media/MediaCodec$BufferInfo;)V
        23: .line 1701
            goto 30
        end local 3 // android.media.MediaCodec$BufferInfo info
        end local 2 // int index
        24: .line 1706
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mCallback:Landroid/media/MediaCodec$Callback;
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.mCodec:Landroid/media/MediaCodec;
            aload 1 /* msg */
            getfield android.os.Message.obj:Ljava/lang/Object;
            checkcast android.media.MediaCodec$CodecException
            invokevirtual android.media.MediaCodec$Callback.onError:(Landroid/media/MediaCodec;Landroid/media/MediaCodec$CodecException;)V
        25: .line 1707
            goto 30
        26: .line 1712
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.this$0:Landroid/media/MediaCodec;
            getfield android.media.MediaCodec.mCallback:Landroid/media/MediaCodec$Callback;
            aload 0 /* this */
            getfield android.media.MediaCodec$EventHandler.mCodec:Landroid/media/MediaCodec;
        27: .line 1713
            new android.media.MediaFormat
            dup
            aload 1 /* msg */
            getfield android.os.Message.obj:Ljava/lang/Object;
            checkcast java.util.Map
            invokespecial android.media.MediaFormat.<init>:(Ljava/util/Map;)V
        28: .line 1712
            invokevirtual android.media.MediaCodec$Callback.onOutputFormatChanged:(Landroid/media/MediaCodec;Landroid/media/MediaFormat;)V
        29: .line 1714
            goto 30
        30: .line 1722
      StackMap locals:
      StackMap stack:
            return
        end local 1 // android.os.Message msg
        end local 0 // android.media.MediaCodec$EventHandler this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   31     0   this  Landroid/media/MediaCodec$EventHandler;
            0   31     1    msg  Landroid/os/Message;
            4   12     2  index  I
           13   24     2  index  I
           14   24     3   info  Landroid/media/MediaCodec$BufferInfo;
      Exception table:
        from    to  target  type
           5     7       8  any
           8     9       8  any
          15    17      18  any
          18    19      18  any
    MethodParameters:
      Name  Flags
      msg   
}
SourceFile: "MediaCodec.java"
NestHost: android.media.MediaCodec
InnerClasses:
  public final BufferInfo = android.media.MediaCodec$BufferInfo of android.media.MediaCodec
  public abstract Callback = android.media.MediaCodec$Callback of android.media.MediaCodec
  public final CodecException = android.media.MediaCodec$CodecException of android.media.MediaCodec
  private EventHandler = android.media.MediaCodec$EventHandler of android.media.MediaCodec
  public abstract OnFrameRenderedListener = android.media.MediaCodec$OnFrameRenderedListener of android.media.MediaCodec