public final class android.media.MediaSync
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: android.media.MediaSync
  super_class: java.lang.Object
{
  public static final int MEDIASYNC_ERROR_AUDIOTRACK_FAIL;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  public static final int MEDIASYNC_ERROR_SURFACE_FAIL;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final java.lang.String TAG;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "MediaSync"

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

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

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

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

  private android.os.Handler mCallbackHandler;
    descriptor: Landroid/os/Handler;
    flags: (0x0002) ACC_PRIVATE

  private android.media.MediaSync$Callback mCallback;
    descriptor: Landroid/media/MediaSync$Callback;
    flags: (0x0002) ACC_PRIVATE

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

  private android.os.Handler mOnErrorListenerHandler;
    descriptor: Landroid/os/Handler;
    flags: (0x0002) ACC_PRIVATE

  private android.media.MediaSync$OnErrorListener mOnErrorListener;
    descriptor: Landroid/media/MediaSync$OnErrorListener;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.Thread mAudioThread;
    descriptor: Ljava/lang/Thread;
    flags: (0x0002) ACC_PRIVATE

  private android.os.Handler mAudioHandler;
    descriptor: Landroid/os/Handler;
    flags: (0x0002) ACC_PRIVATE

  private android.os.Looper mAudioLooper;
    descriptor: Landroid/os/Looper;
    flags: (0x0002) ACC_PRIVATE

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

  private android.media.AudioTrack mAudioTrack;
    descriptor: Landroid/media/AudioTrack;
    flags: (0x0002) ACC_PRIVATE

  private java.util.List<android.media.MediaSync$AudioBuffer> mAudioBuffers;
    descriptor: Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/List<Landroid/media/MediaSync$AudioBuffer;>;

  private float mPlaybackRate;
    descriptor: F
    flags: (0x0002) ACC_PRIVATE

  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 638
            ldc "media_jni"
            invokestatic java.lang.System.loadLibrary:(Ljava/lang/String;)V
         1: .line 639
            invokestatic android.media.MediaSync.native_init:()V
         2: .line 640
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // android.media.MediaSync this
         0: .line 210
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 185
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.media.MediaSync.mCallbackLock:Ljava/lang/Object;
         2: .line 186
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mCallbackHandler:Landroid/os/Handler;
         3: .line 187
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mCallback:Landroid/media/MediaSync$Callback;
         4: .line 189
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.media.MediaSync.mOnErrorListenerLock:Ljava/lang/Object;
         5: .line 190
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mOnErrorListenerHandler:Landroid/os/Handler;
         6: .line 191
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mOnErrorListener:Landroid/media/MediaSync$OnErrorListener;
         7: .line 193
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mAudioThread:Ljava/lang/Thread;
         8: .line 196
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mAudioHandler:Landroid/os/Handler;
         9: .line 197
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mAudioLooper:Landroid/os/Looper;
        10: .line 199
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.media.MediaSync.mAudioLock:Ljava/lang/Object;
        11: .line 200
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mAudioTrack:Landroid/media/AudioTrack;
        12: .line 201
            aload 0 /* this */
            new java.util.LinkedList
            dup
            invokespecial java.util.LinkedList.<init>:()V
            putfield android.media.MediaSync.mAudioBuffers:Ljava/util/List;
        13: .line 203
            aload 0 /* this */
            fconst_0
            putfield android.media.MediaSync.mPlaybackRate:F
        14: .line 211
            aload 0 /* this */
            invokevirtual android.media.MediaSync.native_setup:()V
        15: .line 212
            return
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   16     0  this  Landroid/media/MediaSync;

  private final native void native_setup();
    descriptor: ()V
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

  protected void finalize();
    descriptor: ()V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.MediaSync this
         0: .line 218
            aload 0 /* this */
            invokevirtual android.media.MediaSync.native_finalize:()V
         1: .line 219
            return
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Landroid/media/MediaSync;

  private final native void native_finalize();
    descriptor: ()V
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

  public final void release();
    descriptor: ()V
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // android.media.MediaSync this
         0: .line 229
            aload 0 /* this */
            invokevirtual android.media.MediaSync.returnAudioBuffers:()V
         1: .line 230
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioThread:Ljava/lang/Thread;
            ifnull 4
         2: .line 231
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLooper:Landroid/os/Looper;
            ifnull 4
         3: .line 232
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLooper:Landroid/os/Looper;
            invokevirtual android.os.Looper.quit:()V
         4: .line 235
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            aconst_null
            invokevirtual android.media.MediaSync.setCallback:(Landroid/media/MediaSync$Callback;Landroid/os/Handler;)V
         5: .line 236
            aload 0 /* this */
            invokevirtual android.media.MediaSync.native_release:()V
         6: .line 237
            return
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Landroid/media/MediaSync;

  private final native void native_release();
    descriptor: ()V
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

  public void setCallback(android.media.MediaSync$Callback, android.os.Handler);
    descriptor: (Landroid/media/MediaSync$Callback;Landroid/os/Handler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // android.media.MediaSync this
        start local 1 // android.media.MediaSync$Callback cb
        start local 2 // android.os.Handler handler
         0: .line 254
            aload 0 /* this */
            getfield android.media.MediaSync.mCallbackLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         1: .line 255
            aload 2 /* handler */
            ifnull 4
         2: .line 256
            aload 0 /* this */
            aload 2 /* handler */
            putfield android.media.MediaSync.mCallbackHandler:Landroid/os/Handler;
         3: .line 257
            goto 11
         4: .line 259
      StackMap locals: java.lang.Object
      StackMap stack:
            invokestatic android.os.Looper.myLooper:()Landroid/os/Looper;
            dup
            astore 4 /* looper */
        start local 4 // android.os.Looper looper
         5: ifnonnull 7
         6: .line 260
            invokestatic android.os.Looper.getMainLooper:()Landroid/os/Looper;
            astore 4 /* looper */
         7: .line 262
      StackMap locals: android.os.Looper
      StackMap stack:
            aload 4 /* looper */
            ifnonnull 10
         8: .line 263
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mCallbackHandler:Landroid/os/Handler;
         9: .line 264
            goto 11
        10: .line 265
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new android.os.Handler
            dup
            aload 4 /* looper */
            invokespecial android.os.Handler.<init>:(Landroid/os/Looper;)V
            putfield android.media.MediaSync.mCallbackHandler:Landroid/os/Handler;
        end local 4 // android.os.Looper looper
        11: .line 269
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* cb */
            putfield android.media.MediaSync.mCallback:Landroid/media/MediaSync$Callback;
        12: .line 254
            aload 3
            monitorexit
        13: goto 16
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: aload 3
            monitorexit
        15: athrow
        16: .line 271
      StackMap locals:
      StackMap stack:
            return
        end local 2 // android.os.Handler handler
        end local 1 // android.media.MediaSync$Callback cb
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   17     0     this  Landroid/media/MediaSync;
            0   17     1       cb  Landroid/media/MediaSync$Callback;
            0   17     2  handler  Landroid/os/Handler;
            5   11     4   looper  Landroid/os/Looper;
      Exception table:
        from    to  target  type
           1    13      14  any
          14    15      14  any
    MethodParameters:
         Name  Flags
      cb       
      handler  

  public void setOnErrorListener(android.media.MediaSync$OnErrorListener, android.os.Handler);
    descriptor: (Landroid/media/MediaSync$OnErrorListener;Landroid/os/Handler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // android.media.MediaSync this
        start local 1 // android.media.MediaSync$OnErrorListener listener
        start local 2 // android.os.Handler handler
         0: .line 287
            aload 0 /* this */
            getfield android.media.MediaSync.mOnErrorListenerLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         1: .line 288
            aload 2 /* handler */
            ifnull 4
         2: .line 289
            aload 0 /* this */
            aload 2 /* handler */
            putfield android.media.MediaSync.mOnErrorListenerHandler:Landroid/os/Handler;
         3: .line 290
            goto 11
         4: .line 292
      StackMap locals: java.lang.Object
      StackMap stack:
            invokestatic android.os.Looper.myLooper:()Landroid/os/Looper;
            dup
            astore 4 /* looper */
        start local 4 // android.os.Looper looper
         5: ifnonnull 7
         6: .line 293
            invokestatic android.os.Looper.getMainLooper:()Landroid/os/Looper;
            astore 4 /* looper */
         7: .line 295
      StackMap locals: android.os.Looper
      StackMap stack:
            aload 4 /* looper */
            ifnonnull 10
         8: .line 296
            aload 0 /* this */
            aconst_null
            putfield android.media.MediaSync.mOnErrorListenerHandler:Landroid/os/Handler;
         9: .line 297
            goto 11
        10: .line 298
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new android.os.Handler
            dup
            aload 4 /* looper */
            invokespecial android.os.Handler.<init>:(Landroid/os/Looper;)V
            putfield android.media.MediaSync.mOnErrorListenerHandler:Landroid/os/Handler;
        end local 4 // android.os.Looper looper
        11: .line 302
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* listener */
            putfield android.media.MediaSync.mOnErrorListener:Landroid/media/MediaSync$OnErrorListener;
        12: .line 287
            aload 3
            monitorexit
        13: goto 16
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: aload 3
            monitorexit
        15: athrow
        16: .line 304
      StackMap locals:
      StackMap stack:
            return
        end local 2 // android.os.Handler handler
        end local 1 // android.media.MediaSync$OnErrorListener listener
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   17     0      this  Landroid/media/MediaSync;
            0   17     1  listener  Landroid/media/MediaSync$OnErrorListener;
            0   17     2   handler  Landroid/os/Handler;
            5   11     4    looper  Landroid/os/Looper;
      Exception table:
        from    to  target  type
           1    13      14  any
          14    15      14  any
    MethodParameters:
          Name  Flags
      listener  
      handler   

  public void setSurface(android.view.Surface);
    descriptor: (Landroid/view/Surface;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // android.media.MediaSync this
        start local 1 // android.view.Surface surface
         0: .line 318
            aload 0 /* this */
            aload 1 /* surface */
            invokevirtual android.media.MediaSync.native_setSurface:(Landroid/view/Surface;)V
         1: .line 319
            return
        end local 1 // android.view.Surface surface
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Landroid/media/MediaSync;
            0    2     1  surface  Landroid/view/Surface;
    MethodParameters:
         Name  Flags
      surface  

  private final native void native_setSurface(android.view.Surface);
    descriptor: (Landroid/view/Surface;)V
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
         Name  Flags
      surface  

  public void setAudioTrack(android.media.AudioTrack);
    descriptor: (Landroid/media/AudioTrack;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // android.media.MediaSync this
        start local 1 // android.media.AudioTrack audioTrack
         0: .line 334
            aload 0 /* this */
            aload 1 /* audioTrack */
            invokevirtual android.media.MediaSync.native_setAudioTrack:(Landroid/media/AudioTrack;)V
         1: .line 335
            aload 0 /* this */
            aload 1 /* audioTrack */
            putfield android.media.MediaSync.mAudioTrack:Landroid/media/AudioTrack;
         2: .line 336
            aload 1 /* audioTrack */
            ifnull 4
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioThread:Ljava/lang/Thread;
            ifnonnull 4
         3: .line 337
            aload 0 /* this */
            invokevirtual android.media.MediaSync.createAudioThread:()V
         4: .line 339
      StackMap locals:
      StackMap stack:
            return
        end local 1 // android.media.AudioTrack audioTrack
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    5     0        this  Landroid/media/MediaSync;
            0    5     1  audioTrack  Landroid/media/AudioTrack;
    MethodParameters:
            Name  Flags
      audioTrack  

  private final native void native_setAudioTrack(android.media.AudioTrack);
    descriptor: (Landroid/media/AudioTrack;)V
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
            Name  Flags
      audioTrack  

  public final native android.view.Surface createInputSurface();
    descriptor: ()Landroid/view/Surface;
    flags: (0x0111) ACC_PUBLIC, ACC_FINAL, ACC_NATIVE

  public void setPlaybackParams(android.media.PlaybackParams);
    descriptor: (Landroid/media/PlaybackParams;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // android.media.MediaSync this
        start local 1 // android.media.PlaybackParams params
         0: .line 376
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 377
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* params */
            invokevirtual android.media.MediaSync.native_setPlaybackParams:(Landroid/media/PlaybackParams;)F
            putfield android.media.MediaSync.mPlaybackRate:F
         2: .line 376
            aload 2
            monitorexit
         3: goto 6
      StackMap locals: android.media.MediaSync android.media.PlaybackParams java.lang.Object
      StackMap stack: java.lang.Throwable
         4: aload 2
            monitorexit
         5: athrow
         6: .line 379
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaSync.mPlaybackRate:F
            f2d
            dconst_0
            dcmpl
            ifeq 8
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioThread:Ljava/lang/Thread;
            ifnull 8
         7: .line 380
            aload 0 /* this */
            lconst_0
            invokevirtual android.media.MediaSync.postRenderAudio:(J)V
         8: .line 382
      StackMap locals:
      StackMap stack:
            return
        end local 1 // android.media.PlaybackParams params
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    9     0    this  Landroid/media/MediaSync;
            0    9     1  params  Landroid/media/PlaybackParams;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    MethodParameters:
        Name  Flags
      params  

  public native android.media.PlaybackParams getPlaybackParams();
    descriptor: ()Landroid/media/PlaybackParams;
    flags: (0x0101) ACC_PUBLIC, ACC_NATIVE

  private native float native_setPlaybackParams(android.media.PlaybackParams);
    descriptor: (Landroid/media/PlaybackParams;)F
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
        Name  Flags
      params  

  public void setSyncParams(android.media.SyncParams);
    descriptor: (Landroid/media/SyncParams;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // android.media.MediaSync this
        start local 1 // android.media.SyncParams params
         0: .line 407
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 408
            aload 0 /* this */
            aload 0 /* this */
            aload 1 /* params */
            invokevirtual android.media.MediaSync.native_setSyncParams:(Landroid/media/SyncParams;)F
            putfield android.media.MediaSync.mPlaybackRate:F
         2: .line 407
            aload 2
            monitorexit
         3: goto 6
      StackMap locals: android.media.MediaSync android.media.SyncParams java.lang.Object
      StackMap stack: java.lang.Throwable
         4: aload 2
            monitorexit
         5: athrow
         6: .line 410
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaSync.mPlaybackRate:F
            f2d
            dconst_0
            dcmpl
            ifeq 8
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioThread:Ljava/lang/Thread;
            ifnull 8
         7: .line 411
            aload 0 /* this */
            lconst_0
            invokevirtual android.media.MediaSync.postRenderAudio:(J)V
         8: .line 413
      StackMap locals:
      StackMap stack:
            return
        end local 1 // android.media.SyncParams params
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    9     0    this  Landroid/media/MediaSync;
            0    9     1  params  Landroid/media/SyncParams;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    MethodParameters:
        Name  Flags
      params  

  private native float native_setSyncParams(android.media.SyncParams);
    descriptor: (Landroid/media/SyncParams;)F
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
        Name  Flags
      params  

  public native android.media.SyncParams getSyncParams();
    descriptor: ()Landroid/media/SyncParams;
    flags: (0x0101) ACC_PUBLIC, ACC_NATIVE

  public void flush();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.media.MediaSync this
         0: .line 442
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 443
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioBuffers:Ljava/util/List;
            invokeinterface java.util.List.clear:()V
         2: .line 444
            aload 0 /* this */
            getfield android.media.MediaSync.mCallbackHandler:Landroid/os/Handler;
            aconst_null
            invokevirtual android.os.Handler.removeCallbacksAndMessages:(Ljava/lang/Object;)V
         3: .line 442
            aload 1
            monitorexit
         4: goto 7
      StackMap locals: android.media.MediaSync java.lang.Object
      StackMap stack: java.lang.Throwable
         5: aload 1
            monitorexit
         6: athrow
         7: .line 446
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioTrack:Landroid/media/AudioTrack;
            ifnull 11
         8: .line 447
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioTrack:Landroid/media/AudioTrack;
            invokevirtual android.media.AudioTrack.pause:()V
         9: .line 448
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioTrack:Landroid/media/AudioTrack;
            invokevirtual android.media.AudioTrack.flush:()V
        10: .line 451
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioTrack:Landroid/media/AudioTrack;
            invokevirtual android.media.AudioTrack.stop:()V
        11: .line 453
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual android.media.MediaSync.native_flush:()V
        12: .line 454
            return
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   13     0  this  Landroid/media/MediaSync;
      Exception table:
        from    to  target  type
           1     4       5  any
           5     6       5  any

  private final native void native_flush();
    descriptor: ()V
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

  public android.media.MediaTimestamp getTimestamp();
    descriptor: ()Landroid/media/MediaTimestamp;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.media.MediaSync this
         0: .line 481
            new android.media.MediaTimestamp
            dup
            invokespecial android.media.MediaTimestamp.<init>:()V
            astore 1 /* timestamp */
        start local 1 // android.media.MediaTimestamp timestamp
         1: .line 482
            aload 0 /* this */
            aload 1 /* timestamp */
            invokevirtual android.media.MediaSync.native_getTimestamp:(Landroid/media/MediaTimestamp;)Z
            ifeq 4
         2: .line 483
            aload 1 /* timestamp */
         3: areturn
         4: .line 485
      StackMap locals: android.media.MediaTimestamp
      StackMap stack:
            aconst_null
            areturn
        end local 1 // android.media.MediaTimestamp timestamp
         5: .line 487
      StackMap locals: android.media.MediaSync
      StackMap stack: java.lang.IllegalStateException
            pop
         6: .line 488
            aconst_null
            areturn
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0       this  Landroid/media/MediaSync;
            1    5     1  timestamp  Landroid/media/MediaTimestamp;
      Exception table:
        from    to  target  type
           0     3       5  Class java.lang.IllegalStateException

  private final native boolean native_getTimestamp(android.media.MediaTimestamp);
    descriptor: (Landroid/media/MediaTimestamp;)Z
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
           Name  Flags
      timestamp  

  public void queueAudio(java.nio.ByteBuffer, int, long);
    descriptor: (Ljava/nio/ByteBuffer;IJ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=6, args_size=4
        start local 0 // android.media.MediaSync this
        start local 1 // java.nio.ByteBuffer audioData
        start local 2 // int bufferId
        start local 3 // long presentationTimeUs
         0: .line 509
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioTrack:Landroid/media/AudioTrack;
            ifnull 1
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioThread:Ljava/lang/Thread;
            ifnonnull 4
         1: .line 510
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
         2: .line 511
            ldc "AudioTrack is NOT set or audio thread is not created"
         3: .line 510
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         4: .line 514
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLock:Ljava/lang/Object;
            dup
            astore 5
            monitorenter
         5: .line 515
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioBuffers:Ljava/util/List;
            new android.media.MediaSync$AudioBuffer
            dup
            aload 1 /* audioData */
            iload 2 /* bufferId */
            lload 3 /* presentationTimeUs */
            invokespecial android.media.MediaSync$AudioBuffer.<init>:(Ljava/nio/ByteBuffer;IJ)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         6: .line 514
            aload 5
            monitorexit
         7: goto 10
      StackMap locals: android.media.MediaSync java.nio.ByteBuffer int long java.lang.Object
      StackMap stack: java.lang.Throwable
         8: aload 5
            monitorexit
         9: athrow
        10: .line 518
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.MediaSync.mPlaybackRate:F
            f2d
            dconst_0
            dcmpl
            ifeq 12
        11: .line 519
            aload 0 /* this */
            lconst_0
            invokevirtual android.media.MediaSync.postRenderAudio:(J)V
        12: .line 521
      StackMap locals:
      StackMap stack:
            return
        end local 3 // long presentationTimeUs
        end local 2 // int bufferId
        end local 1 // java.nio.ByteBuffer audioData
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   13     0                this  Landroid/media/MediaSync;
            0   13     1           audioData  Ljava/nio/ByteBuffer;
            0   13     2            bufferId  I
            0   13     3  presentationTimeUs  J
      Exception table:
        from    to  target  type
           5     7       8  any
           8     9       8  any
    MethodParameters:
                    Name  Flags
      audioData           
      bufferId            
      presentationTimeUs  

  private void postRenderAudio(long);
    descriptor: (J)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // android.media.MediaSync this
        start local 1 // long delayMillis
         0: .line 525
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioHandler:Landroid/os/Handler;
            new android.media.MediaSync$1
            dup
            aload 0 /* this */
            invokespecial android.media.MediaSync$1.<init>:(Landroid/media/MediaSync;)V
         1: .line 571
            lload 1 /* delayMillis */
         2: .line 525
            invokevirtual android.os.Handler.postDelayed:(Ljava/lang/Runnable;J)Z
            pop
         3: .line 572
            return
        end local 1 // long delayMillis
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0         this  Landroid/media/MediaSync;
            0    4     1  delayMillis  J
    MethodParameters:
             Name  Flags
      delayMillis  

  private final native void native_updateQueuedAudioData(int, long);
    descriptor: (IJ)V
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
                    Name  Flags
      sizeInBytes         
      presentationTimeUs  

  private final native long native_getPlayTimeForPendingAudioFrames();
    descriptor: ()J
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

  private final void postReturnByteBuffer(android.media.MediaSync$AudioBuffer);
    descriptor: (Landroid/media/MediaSync$AudioBuffer;)V
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Code:
      stack=6, locals=4, args_size=2
        start local 0 // android.media.MediaSync this
        start local 1 // android.media.MediaSync$AudioBuffer audioBuffer
         0: .line 580
            aload 0 /* this */
            getfield android.media.MediaSync.mCallbackLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         1: .line 581
            aload 0 /* this */
            getfield android.media.MediaSync.mCallbackHandler:Landroid/os/Handler;
            ifnull 4
         2: .line 582
            aload 0 /* this */
            astore 3 /* sync */
        start local 3 // android.media.MediaSync sync
         3: .line 583
            aload 0 /* this */
            getfield android.media.MediaSync.mCallbackHandler:Landroid/os/Handler;
            new android.media.MediaSync$2
            dup
            aload 0 /* this */
            aload 3 /* sync */
            aload 1 /* audioBuffer */
            invokespecial android.media.MediaSync$2.<init>:(Landroid/media/MediaSync;Landroid/media/MediaSync;Landroid/media/MediaSync$AudioBuffer;)V
            invokevirtual android.os.Handler.post:(Ljava/lang/Runnable;)Z
            pop
        end local 3 // android.media.MediaSync sync
         4: .line 580
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 2
            monitorexit
         5: goto 8
      StackMap locals:
      StackMap stack: java.lang.Throwable
         6: aload 2
            monitorexit
         7: athrow
         8: .line 603
      StackMap locals:
      StackMap stack:
            return
        end local 1 // android.media.MediaSync$AudioBuffer audioBuffer
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    9     0         this  Landroid/media/MediaSync;
            0    9     1  audioBuffer  Landroid/media/MediaSync$AudioBuffer;
            3    4     3         sync  Landroid/media/MediaSync;
      Exception table:
        from    to  target  type
           1     5       6  any
           6     7       6  any
    MethodParameters:
             Name  Flags
      audioBuffer  final

  private final void returnAudioBuffers();
    descriptor: ()V
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // android.media.MediaSync this
         0: .line 606
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 607
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioBuffers:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 4
      StackMap locals: android.media.MediaSync java.lang.Object top java.util.Iterator
      StackMap stack:
         2: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast android.media.MediaSync$AudioBuffer
            astore 2 /* audioBuffer */
        start local 2 // android.media.MediaSync$AudioBuffer audioBuffer
         3: .line 608
            aload 0 /* this */
            aload 2 /* audioBuffer */
            invokevirtual android.media.MediaSync.postReturnByteBuffer:(Landroid/media/MediaSync$AudioBuffer;)V
        end local 2 // android.media.MediaSync$AudioBuffer audioBuffer
         4: .line 607
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 610
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioBuffers:Ljava/util/List;
            invokeinterface java.util.List.clear:()V
         6: .line 606
            aload 1
            monitorexit
         7: goto 10
      StackMap locals: android.media.MediaSync java.lang.Object
      StackMap stack: java.lang.Throwable
         8: aload 1
            monitorexit
         9: athrow
        10: .line 612
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   11     0         this  Landroid/media/MediaSync;
            3    4     2  audioBuffer  Landroid/media/MediaSync$AudioBuffer;
      Exception table:
        from    to  target  type
           1     7       8  any
           8     9       8  any

  private void createAudioThread();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=1
        start local 0 // android.media.MediaSync this
         0: .line 615
            aload 0 /* this */
            new android.media.MediaSync$3
            dup
            aload 0 /* this */
            invokespecial android.media.MediaSync$3.<init>:(Landroid/media/MediaSync;)V
            putfield android.media.MediaSync.mAudioThread:Ljava/lang/Thread;
         1: .line 627
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioThread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.start:()V
         2: .line 629
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         3: .line 631
            aload 0 /* this */
            getfield android.media.MediaSync.mAudioLock:Ljava/lang/Object;
            invokevirtual java.lang.Object.wait:()V
         4: .line 632
            goto 6
      StackMap locals: android.media.MediaSync java.lang.Object
      StackMap stack: java.lang.InterruptedException
         5: pop
         6: .line 629
      StackMap locals:
      StackMap stack:
            aload 1
            monitorexit
         7: goto 10
      StackMap locals:
      StackMap stack: java.lang.Throwable
         8: aload 1
            monitorexit
         9: athrow
        10: .line 635
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.media.MediaSync this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Landroid/media/MediaSync;
      Exception table:
        from    to  target  type
           3     4       5  Class java.lang.InterruptedException
           3     7       8  any
           8     9       8  any

  private static final native void native_init();
    descriptor: ()V
    flags: (0x011a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL, ACC_NATIVE
}
SourceFile: "MediaSync.java"
NestMembers:
  android.media.MediaSync$1  android.media.MediaSync$2  android.media.MediaSync$3  android.media.MediaSync$AudioBuffer  android.media.MediaSync$Callback  android.media.MediaSync$OnErrorListener
InnerClasses:
  android.media.MediaSync$1
  android.media.MediaSync$2
  android.media.MediaSync$3
  private AudioBuffer = android.media.MediaSync$AudioBuffer of android.media.MediaSync
  public abstract Callback = android.media.MediaSync$Callback of android.media.MediaSync
  public abstract OnErrorListener = android.media.MediaSync$OnErrorListener of android.media.MediaSync