public class android.media.AudioRecord implements android.media.AudioRouting
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: android.media.AudioRecord
  super_class: java.lang.Object
{
  public static final int STATE_UNINITIALIZED;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

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

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

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

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

  public static final int ERROR;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: -1

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

  public static final int ERROR_INVALID_OPERATION;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: -3

  public static final int ERROR_DEAD_OBJECT;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: -6

  private static final int AUDIORECORD_ERROR_SETUP_ZEROFRAMECOUNT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: -16

  private static final int AUDIORECORD_ERROR_SETUP_INVALIDCHANNELMASK;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: -17

  private static final int AUDIORECORD_ERROR_SETUP_INVALIDFORMAT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: -18

  private static final int AUDIORECORD_ERROR_SETUP_INVALIDSOURCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: -19

  private static final int AUDIORECORD_ERROR_SETUP_NATIVEINITFAILED;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: -20

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

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

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

  public static final java.lang.String SUBMIX_FIXED_VOLUME;
    descriptor: Ljava/lang/String;
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: "fixedVolume"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  private android.media.AudioRecord$OnRecordPositionUpdateListener mPositionListener;
    descriptor: Landroid/media/AudioRecord$OnRecordPositionUpdateListener;
    flags: (0x0002) ACC_PRIVATE

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

  private android.media.AudioRecord$NativeEventHandler mEventHandler;
    descriptor: Landroid/media/AudioRecord$NativeEventHandler;
    flags: (0x0002) ACC_PRIVATE

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

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

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

  private android.media.AudioAttributes mAudioAttributes;
    descriptor: Landroid/media/AudioAttributes;
    flags: (0x0002) ACC_PRIVATE

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

  private final android.os.IBinder mICallBack;
    descriptor: Landroid/os/IBinder;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private android.util.ArrayMap<android.media.AudioRouting$OnRoutingChangedListener, android.media.NativeRoutingEventHandlerDelegate> mRoutingChangeListeners;
    descriptor: Landroid/util/ArrayMap;
    flags: (0x0002) ACC_PRIVATE
    Signature: Landroid/util/ArrayMap<Landroid/media/AudioRouting$OnRoutingChangedListener;Landroid/media/NativeRoutingEventHandlerDelegate;>;
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "mRoutingChangeListeners")

  private android.media.AudioDeviceInfo mPreferredDevice;
    descriptor: Landroid/media/AudioDeviceInfo;
    flags: (0x0002) ACC_PRIVATE

  public void <init>(int, int, int, int, int);
    descriptor: (IIIII)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=6
        start local 0 // android.media.AudioRecord this
        start local 1 // int audioSource
        start local 2 // int sampleRateInHz
        start local 3 // int channelConfig
        start local 4 // int audioFormat
        start local 5 // int bufferSizeInBytes
         0: .line 284
            aload 0 /* this */
            new android.media.AudioAttributes$Builder
            dup
            invokespecial android.media.AudioAttributes$Builder.<init>:()V
         1: .line 285
            iload 1 /* audioSource */
            invokevirtual android.media.AudioAttributes$Builder.setInternalCapturePreset:(I)Landroid/media/AudioAttributes$Builder;
         2: .line 286
            invokevirtual android.media.AudioAttributes$Builder.build:()Landroid/media/AudioAttributes;
         3: .line 287
            new android.media.AudioFormat$Builder
            dup
            invokespecial android.media.AudioFormat$Builder.<init>:()V
         4: .line 288
            iload 3 /* channelConfig */
         5: .line 289
            iconst_1
         6: .line 288
            invokestatic android.media.AudioRecord.getChannelMaskFromLegacyConfig:(IZ)I
            invokevirtual android.media.AudioFormat$Builder.setChannelMask:(I)Landroid/media/AudioFormat$Builder;
         7: .line 290
            iload 4 /* audioFormat */
            invokevirtual android.media.AudioFormat$Builder.setEncoding:(I)Landroid/media/AudioFormat$Builder;
         8: .line 291
            iload 2 /* sampleRateInHz */
            invokevirtual android.media.AudioFormat$Builder.setSampleRate:(I)Landroid/media/AudioFormat$Builder;
         9: .line 292
            invokevirtual android.media.AudioFormat$Builder.build:()Landroid/media/AudioFormat;
        10: .line 293
            iload 5 /* bufferSizeInBytes */
        11: .line 294
            iconst_0
            invokespecial android.media.AudioRecord.<init>:(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;II)V
        12: .line 295
            return
        end local 5 // int bufferSizeInBytes
        end local 4 // int audioFormat
        end local 3 // int channelConfig
        end local 2 // int sampleRateInHz
        end local 1 // int audioSource
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   13     0               this  Landroid/media/AudioRecord;
            0   13     1        audioSource  I
            0   13     2     sampleRateInHz  I
            0   13     3      channelConfig  I
            0   13     4        audioFormat  I
            0   13     5  bufferSizeInBytes  I
    Exceptions:
      throws java.lang.IllegalArgumentException
    MethodParameters:
                   Name  Flags
      audioSource        
      sampleRateInHz     
      channelConfig      
      audioFormat        
      bufferSizeInBytes  

  public void <init>(android.media.AudioAttributes, android.media.AudioFormat, int, int);
    descriptor: (Landroid/media/AudioAttributes;Landroid/media/AudioFormat;II)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=12, locals=10, args_size=5
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioAttributes attributes
        start local 2 // android.media.AudioFormat format
        start local 3 // int bufferSizeInBytes
        start local 4 // int sessionId
         0: .line 318
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 209
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mState:I
         2: .line 213
            aload 0 /* this */
            iconst_1
            putfield android.media.AudioRecord.mRecordingState:I
         3: .line 217
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.media.AudioRecord.mRecordingStateLock:Ljava/lang/Object;
         4: .line 224
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mPositionListener:Landroid/media/AudioRecord$OnRecordPositionUpdateListener;
         5: .line 228
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.media.AudioRecord.mPositionListenerLock:Ljava/lang/Object;
         6: .line 232
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mEventHandler:Landroid/media/AudioRecord$NativeEventHandler;
         7: .line 236
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mInitializationLooper:Landroid/os/Looper;
         8: .line 240
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mNativeBufferSizeInBytes:I
         9: .line 244
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mSessionId:I
        10: .line 249
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mIsSubmixFullVolume:Z
        11: .line 1037
            aload 0 /* this */
            new android.os.Binder
            dup
            invokespecial android.os.Binder.<init>:()V
            putfield android.media.AudioRecord.mICallBack:Landroid/os/IBinder;
        12: .line 1447
            aload 0 /* this */
            new android.util.ArrayMap
            dup
            invokespecial android.util.ArrayMap.<init>:()V
            putfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
        13: .line 1573
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mPreferredDevice:Landroid/media/AudioDeviceInfo;
        14: .line 320
            aload 0 /* this */
            iconst_1
            putfield android.media.AudioRecord.mRecordingState:I
        15: .line 322
            aload 1 /* attributes */
            ifnonnull 17
        16: .line 323
            new java.lang.IllegalArgumentException
            dup
            ldc "Illegal null AudioAttributes"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        17: .line 325
      StackMap locals: android.media.AudioRecord android.media.AudioAttributes android.media.AudioFormat int int
      StackMap stack:
            aload 2 /* format */
            ifnonnull 19
        18: .line 326
            new java.lang.IllegalArgumentException
            dup
            ldc "Illegal null AudioFormat"
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        19: .line 330
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokestatic android.os.Looper.myLooper:()Landroid/os/Looper;
            dup_x1
            putfield android.media.AudioRecord.mInitializationLooper:Landroid/os/Looper;
            ifnonnull 21
        20: .line 331
            aload 0 /* this */
            invokestatic android.os.Looper.getMainLooper:()Landroid/os/Looper;
            putfield android.media.AudioRecord.mInitializationLooper:Landroid/os/Looper;
        21: .line 335
      StackMap locals:
      StackMap stack:
            aload 1 /* attributes */
            invokevirtual android.media.AudioAttributes.getCapturePreset:()I
            bipush 8
            if_icmpne 35
        22: .line 336
            new android.media.AudioAttributes$Builder
            dup
            invokespecial android.media.AudioAttributes$Builder.<init>:()V
            astore 5 /* filteredAttr */
        start local 5 // android.media.AudioAttributes$Builder filteredAttr
        23: .line 337
            aload 1 /* attributes */
            invokevirtual android.media.AudioAttributes.getTags:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 6 /* tagsIter */
        start local 6 // java.util.Iterator tagsIter
        24: .line 338
            goto 31
        25: .line 339
      StackMap locals: android.media.AudioAttributes$Builder java.util.Iterator
      StackMap stack:
            aload 6 /* tagsIter */
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 7 /* tag */
        start local 7 // java.lang.String tag
        26: .line 340
            aload 7 /* tag */
            ldc "fixedVolume"
            invokevirtual java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z
            ifeq 30
        27: .line 341
            aload 0 /* this */
            iconst_1
            putfield android.media.AudioRecord.mIsSubmixFullVolume:Z
        28: .line 342
            ldc "android.media.AudioRecord"
            ldc "Will record from REMOTE_SUBMIX at full fixed volume"
            invokestatic android.util.Log.v:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        29: .line 343
            goto 31
        30: .line 344
      StackMap locals: java.lang.String
      StackMap stack:
            aload 5 /* filteredAttr */
            aload 7 /* tag */
            invokevirtual android.media.AudioAttributes$Builder.addTag:(Ljava/lang/String;)Landroid/media/AudioAttributes$Builder;
            pop
        end local 7 // java.lang.String tag
        31: .line 338
      StackMap locals:
      StackMap stack:
            aload 6 /* tagsIter */
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 25
        32: .line 347
            aload 5 /* filteredAttr */
            aload 1 /* attributes */
            invokevirtual android.media.AudioAttributes.getCapturePreset:()I
            invokevirtual android.media.AudioAttributes$Builder.setInternalCapturePreset:(I)Landroid/media/AudioAttributes$Builder;
            pop
        33: .line 348
            aload 0 /* this */
            aload 5 /* filteredAttr */
            invokevirtual android.media.AudioAttributes$Builder.build:()Landroid/media/AudioAttributes;
            putfield android.media.AudioRecord.mAudioAttributes:Landroid/media/AudioAttributes;
        end local 6 // java.util.Iterator tagsIter
        end local 5 // android.media.AudioAttributes$Builder filteredAttr
        34: .line 349
            goto 36
        35: .line 350
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* attributes */
            putfield android.media.AudioRecord.mAudioAttributes:Landroid/media/AudioAttributes;
        36: .line 353
      StackMap locals:
      StackMap stack:
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getSampleRate:()I
            istore 5 /* rate */
        start local 5 // int rate
        37: .line 354
            iload 5 /* rate */
            ifne 39
        38: .line 355
            iconst_0
            istore 5 /* rate */
        39: .line 358
      StackMap locals: int
      StackMap stack:
            iconst_1
            istore 6 /* encoding */
        start local 6 // int encoding
        40: .line 359
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getPropertySetMask:()I
            iconst_1
            iand
            ifeq 42
        41: .line 361
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getEncoding:()I
            istore 6 /* encoding */
        42: .line 364
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* attributes */
            invokevirtual android.media.AudioAttributes.getCapturePreset:()I
            iload 5 /* rate */
            iload 6 /* encoding */
            invokevirtual android.media.AudioRecord.audioParamCheck:(III)V
        43: .line 366
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getPropertySetMask:()I
        44: .line 367
            bipush 8
        45: .line 366
            iand
            ifeq 48
        46: .line 368
            aload 0 /* this */
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getChannelIndexMask:()I
            putfield android.media.AudioRecord.mChannelIndexMask:I
        47: .line 369
            aload 0 /* this */
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getChannelCount:()I
            putfield android.media.AudioRecord.mChannelCount:I
        48: .line 371
      StackMap locals:
      StackMap stack:
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getPropertySetMask:()I
        49: .line 372
            iconst_4
        50: .line 371
            iand
            ifeq 54
        51: .line 373
            aload 0 /* this */
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getChannelMask:()I
            iconst_0
            invokestatic android.media.AudioRecord.getChannelMaskFromLegacyConfig:(IZ)I
            putfield android.media.AudioRecord.mChannelMask:I
        52: .line 374
            aload 0 /* this */
            aload 2 /* format */
            invokevirtual android.media.AudioFormat.getChannelCount:()I
            putfield android.media.AudioRecord.mChannelCount:I
        53: .line 375
            goto 57
      StackMap locals:
      StackMap stack:
        54: aload 0 /* this */
            getfield android.media.AudioRecord.mChannelIndexMask:I
            ifne 57
        55: .line 376
            aload 0 /* this */
            iconst_1
            iconst_0
            invokestatic android.media.AudioRecord.getChannelMaskFromLegacyConfig:(IZ)I
            putfield android.media.AudioRecord.mChannelMask:I
        56: .line 377
            aload 0 /* this */
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelMask:I
            invokestatic android.media.AudioFormat.channelCountFromInChannelMask:(I)I
            putfield android.media.AudioRecord.mChannelCount:I
        57: .line 380
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 3 /* bufferSizeInBytes */
            invokevirtual android.media.AudioRecord.audioBuffSizeCheck:(I)V
        58: .line 382
            iconst_1
            newarray 10
            dup
            iconst_0
            aload 0 /* this */
            getfield android.media.AudioRecord.mSampleRate:I
            iastore
            astore 7 /* sampleRate */
        start local 7 // int[] sampleRate
        59: .line 383
            iconst_1
            newarray 10
            astore 8 /* session */
        start local 8 // int[] session
        60: .line 384
            aload 8 /* session */
            iconst_0
            iload 4 /* sessionId */
            iastore
        61: .line 387
            aload 0 /* this */
            new java.lang.ref.WeakReference
            dup
            aload 0 /* this */
            invokespecial java.lang.ref.WeakReference.<init>:(Ljava/lang/Object;)V
        62: .line 388
            aload 0 /* this */
            getfield android.media.AudioRecord.mAudioAttributes:Landroid/media/AudioAttributes;
            aload 7 /* sampleRate */
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelMask:I
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelIndexMask:I
        63: .line 389
            aload 0 /* this */
            getfield android.media.AudioRecord.mAudioFormat:I
            aload 0 /* this */
            getfield android.media.AudioRecord.mNativeBufferSizeInBytes:I
        64: .line 390
            aload 8 /* session */
            invokestatic android.app.ActivityThread.currentOpPackageName:()Ljava/lang/String;
            lconst_0
        65: .line 387
            invokevirtual android.media.AudioRecord.native_setup:(Ljava/lang/Object;Ljava/lang/Object;[IIIII[ILjava/lang/String;J)I
            istore 9 /* initResult */
        start local 9 // int initResult
        66: .line 391
            iload 9 /* initResult */
            ifeq 69
        67: .line 392
            new java.lang.StringBuilder
            dup
            ldc "Error code "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 9 /* initResult */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " when initializing native AudioRecord object."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic android.media.AudioRecord.loge:(Ljava/lang/String;)V
        68: .line 393
            return
        69: .line 396
      StackMap locals: int[] int[] int
      StackMap stack:
            aload 0 /* this */
            aload 7 /* sampleRate */
            iconst_0
            iaload
            putfield android.media.AudioRecord.mSampleRate:I
        70: .line 397
            aload 0 /* this */
            aload 8 /* session */
            iconst_0
            iaload
            putfield android.media.AudioRecord.mSessionId:I
        71: .line 399
            aload 0 /* this */
            iconst_1
            putfield android.media.AudioRecord.mState:I
        72: .line 400
            return
        end local 9 // int initResult
        end local 8 // int[] session
        end local 7 // int[] sampleRate
        end local 6 // int encoding
        end local 5 // int rate
        end local 4 // int sessionId
        end local 3 // int bufferSizeInBytes
        end local 2 // android.media.AudioFormat format
        end local 1 // android.media.AudioAttributes attributes
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   73     0               this  Landroid/media/AudioRecord;
            0   73     1         attributes  Landroid/media/AudioAttributes;
            0   73     2             format  Landroid/media/AudioFormat;
            0   73     3  bufferSizeInBytes  I
            0   73     4          sessionId  I
           23   34     5       filteredAttr  Landroid/media/AudioAttributes$Builder;
           24   34     6           tagsIter  Ljava/util/Iterator<Ljava/lang/String;>;
           26   31     7                tag  Ljava/lang/String;
           37   73     5               rate  I
           40   73     6           encoding  I
           59   73     7         sampleRate  [I
           60   73     8            session  [I
           66   73     9         initResult  I
    Exceptions:
      throws java.lang.IllegalArgumentException
    RuntimeVisibleAnnotations: 
      android.annotation.SystemApi()
    MethodParameters:
                   Name  Flags
      attributes         
      format             
      bufferSizeInBytes  
      sessionId          

  void <init>(long);
    descriptor: (J)V
    flags: (0x0000) 
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // long nativeRecordInJavaObj
         0: .line 409
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 209
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mState:I
         2: .line 213
            aload 0 /* this */
            iconst_1
            putfield android.media.AudioRecord.mRecordingState:I
         3: .line 217
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.media.AudioRecord.mRecordingStateLock:Ljava/lang/Object;
         4: .line 224
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mPositionListener:Landroid/media/AudioRecord$OnRecordPositionUpdateListener;
         5: .line 228
            aload 0 /* this */
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putfield android.media.AudioRecord.mPositionListenerLock:Ljava/lang/Object;
         6: .line 232
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mEventHandler:Landroid/media/AudioRecord$NativeEventHandler;
         7: .line 236
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mInitializationLooper:Landroid/os/Looper;
         8: .line 240
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mNativeBufferSizeInBytes:I
         9: .line 244
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mSessionId:I
        10: .line 249
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mIsSubmixFullVolume:Z
        11: .line 1037
            aload 0 /* this */
            new android.os.Binder
            dup
            invokespecial android.os.Binder.<init>:()V
            putfield android.media.AudioRecord.mICallBack:Landroid/os/IBinder;
        12: .line 1447
            aload 0 /* this */
            new android.util.ArrayMap
            dup
            invokespecial android.util.ArrayMap.<init>:()V
            putfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
        13: .line 1573
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mPreferredDevice:Landroid/media/AudioDeviceInfo;
        14: .line 410
            aload 0 /* this */
            lconst_0
            putfield android.media.AudioRecord.mNativeRecorderInJavaObj:J
        15: .line 411
            aload 0 /* this */
            lconst_0
            putfield android.media.AudioRecord.mNativeCallbackCookie:J
        16: .line 412
            aload 0 /* this */
            lconst_0
            putfield android.media.AudioRecord.mNativeDeviceCallback:J
        17: .line 415
            lload 1 /* nativeRecordInJavaObj */
            lconst_0
            lcmp
            ifeq 20
        18: .line 416
            aload 0 /* this */
            lload 1 /* nativeRecordInJavaObj */
            invokevirtual android.media.AudioRecord.deferred_connect:(J)V
        19: .line 417
            goto 21
        20: .line 418
      StackMap locals: android.media.AudioRecord long
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mState:I
        21: .line 420
      StackMap locals:
      StackMap stack:
            return
        end local 1 // long nativeRecordInJavaObj
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   22     0                   this  Landroid/media/AudioRecord;
            0   22     1  nativeRecordInJavaObj  J
    MethodParameters:
                       Name  Flags
      nativeRecordInJavaObj  

  void deferred_connect(long);
    descriptor: (J)V
    flags: (0x0000) 
    Code:
      stack=12, locals=6, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // long nativeRecordInJavaObj
         0: .line 426
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            iconst_1
            if_icmpeq 19
         1: .line 427
            iconst_1
            newarray 10
            astore 3 /* session */
        start local 3 // int[] session
         2: .line 428
            iconst_1
            newarray 10
            astore 4 /* rates */
        start local 4 // int[] rates
         3: .line 433
            aload 0 /* this */
            new java.lang.ref.WeakReference
            dup
            aload 0 /* this */
            invokespecial java.lang.ref.WeakReference.<init>:(Ljava/lang/Object;)V
         4: .line 434
            aconst_null
         5: .line 435
            aload 4 /* rates */
         6: .line 436
            iconst_0
         7: .line 437
            iconst_0
         8: .line 438
            iconst_0
         9: .line 439
            iconst_0
        10: .line 440
            aload 3 /* session */
        11: .line 441
            invokestatic android.app.ActivityThread.currentOpPackageName:()Ljava/lang/String;
        12: .line 442
            lload 1 /* nativeRecordInJavaObj */
        13: .line 433
            invokevirtual android.media.AudioRecord.native_setup:(Ljava/lang/Object;Ljava/lang/Object;[IIIII[ILjava/lang/String;J)I
            istore 5 /* initResult */
        start local 5 // int initResult
        14: .line 443
            iload 5 /* initResult */
            ifeq 17
        15: .line 444
            new java.lang.StringBuilder
            dup
            ldc "Error code "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 5 /* initResult */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " when initializing native AudioRecord object."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic android.media.AudioRecord.loge:(Ljava/lang/String;)V
        16: .line 445
            return
        17: .line 448
      StackMap locals: int[] int[] int
      StackMap stack:
            aload 0 /* this */
            aload 3 /* session */
            iconst_0
            iaload
            putfield android.media.AudioRecord.mSessionId:I
        18: .line 450
            aload 0 /* this */
            iconst_1
            putfield android.media.AudioRecord.mState:I
        end local 5 // int initResult
        end local 4 // int[] rates
        end local 3 // int[] session
        19: .line 452
      StackMap locals:
      StackMap stack:
            return
        end local 1 // long nativeRecordInJavaObj
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   20     0                   this  Landroid/media/AudioRecord;
            0   20     1  nativeRecordInJavaObj  J
            2   19     3                session  [I
            3   19     4                  rates  [I
           14   19     5             initResult  I
    MethodParameters:
                       Name  Flags
      nativeRecordInJavaObj  

  private static int getChannelMaskFromLegacyConfig(int, boolean);
    descriptor: (IZ)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // int inChannelConfig
        start local 1 // boolean allowLegacyConfig
         0: .line 647
            iload 0 /* inChannelConfig */
            lookupswitch { // 6
                    1: 1
                    2: 1
                    3: 3
                   12: 3
                   16: 1
                   48: 5
              default: 7
          }
         1: .line 651
      StackMap locals:
      StackMap stack:
            bipush 16
            istore 2 /* mask */
        start local 2 // int mask
         2: .line 652
            goto 8
        end local 2 // int mask
         3: .line 655
      StackMap locals:
      StackMap stack:
            bipush 12
            istore 2 /* mask */
        start local 2 // int mask
         4: .line 656
            goto 8
        end local 2 // int mask
         5: .line 658
      StackMap locals:
      StackMap stack:
            iload 0 /* inChannelConfig */
            istore 2 /* mask */
        start local 2 // int mask
         6: .line 659
            goto 8
        end local 2 // int mask
         7: .line 661
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "Unsupported channel configuration."
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        start local 2 // int mask
         8: .line 664
      StackMap locals: int
      StackMap stack:
            iload 1 /* allowLegacyConfig */
            ifne 11
            iload 0 /* inChannelConfig */
            iconst_2
            if_icmpeq 10
         9: .line 665
            iload 0 /* inChannelConfig */
            iconst_3
            if_icmpne 11
        10: .line 667
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            ldc "Unsupported deprecated configuration."
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        11: .line 670
      StackMap locals:
      StackMap stack:
            iload 2 /* mask */
            ireturn
        end local 2 // int mask
        end local 1 // boolean allowLegacyConfig
        end local 0 // int inChannelConfig
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   12     0    inChannelConfig  I
            0   12     1  allowLegacyConfig  Z
            2    3     2               mask  I
            4    5     2               mask  I
            6    7     2               mask  I
            8   12     2               mask  I
    MethodParameters:
                   Name  Flags
      inChannelConfig    
      allowLegacyConfig  

  private void audioParamCheck(int, int, int);
    descriptor: (III)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // android.media.AudioRecord this
        start local 1 // int audioSource
        start local 2 // int sampleRateInHz
        start local 3 // int audioFormat
         0: .line 682
            iload 1 /* audioSource */
            iflt 4
         1: .line 683
            iload 1 /* audioSource */
            invokestatic android.media.MediaRecorder.getAudioSourceMax:()I
            if_icmple 5
         2: .line 684
            iload 1 /* audioSource */
            sipush 1998
            if_icmpeq 5
         3: .line 685
            iload 1 /* audioSource */
            sipush 1999
            if_icmpeq 5
         4: .line 686
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Invalid audio source "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 1 /* audioSource */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 688
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* audioSource */
            putfield android.media.AudioRecord.mRecordSource:I
         6: .line 692
            iload 2 /* sampleRateInHz */
            sipush 4000
            if_icmplt 8
         7: .line 693
            iload 2 /* sampleRateInHz */
            ldc 192000
            if_icmple 12
         8: .line 694
      StackMap locals:
      StackMap stack:
            iload 2 /* sampleRateInHz */
            ifeq 12
         9: .line 695
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            iload 2 /* sampleRateInHz */
            invokestatic java.lang.String.valueOf:(I)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        10: .line 696
            ldc "Hz is not a supported sample rate."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        11: .line 695
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        12: .line 698
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 2 /* sampleRateInHz */
            putfield android.media.AudioRecord.mSampleRate:I
        13: .line 702
            iload 3 /* audioFormat */
            tableswitch { // 1 - 4
                    1: 14
                    2: 16
                    3: 16
                    4: 16
              default: 18
          }
        14: .line 704
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_2
            putfield android.media.AudioRecord.mAudioFormat:I
        15: .line 705
            goto 21
        16: .line 709
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 3 /* audioFormat */
            putfield android.media.AudioRecord.mAudioFormat:I
        17: .line 710
            goto 21
        18: .line 712
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unsupported sample encoding "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 3 /* audioFormat */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
        19: .line 713
            ldc ". Should be ENCODING_PCM_8BIT, ENCODING_PCM_16BIT, or ENCODING_PCM_FLOAT."
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        20: .line 712
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        21: .line 715
      StackMap locals:
      StackMap stack:
            return
        end local 3 // int audioFormat
        end local 2 // int sampleRateInHz
        end local 1 // int audioSource
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   22     0            this  Landroid/media/AudioRecord;
            0   22     1     audioSource  I
            0   22     2  sampleRateInHz  I
            0   22     3     audioFormat  I
    Exceptions:
      throws java.lang.IllegalArgumentException
    MethodParameters:
                Name  Flags
      audioSource     
      sampleRateInHz  
      audioFormat     

  private void audioBuffSizeCheck(int);
    descriptor: (I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // int audioBufferSize
         0: .line 728
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelCount:I
         1: .line 729
            aload 0 /* this */
            getfield android.media.AudioRecord.mAudioFormat:I
            invokestatic android.media.AudioFormat.getBytesPerSample:(I)I
         2: .line 728
            imul
            istore 2 /* frameSizeInBytes */
        start local 2 // int frameSizeInBytes
         3: .line 730
            iload 1 /* audioBufferSize */
            iload 2 /* frameSizeInBytes */
            irem
            ifne 4
            iload 1 /* audioBufferSize */
            iconst_1
            if_icmpge 7
         4: .line 731
      StackMap locals: int
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Invalid audio buffer size "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 1 /* audioBufferSize */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
         5: .line 732
            ldc " (frame size "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            iload 2 /* frameSizeInBytes */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc ")"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         6: .line 731
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 735
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* audioBufferSize */
            putfield android.media.AudioRecord.mNativeBufferSizeInBytes:I
         8: .line 736
            return
        end local 2 // int frameSizeInBytes
        end local 1 // int audioBufferSize
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    9     0              this  Landroid/media/AudioRecord;
            0    9     1   audioBufferSize  I
            3    9     2  frameSizeInBytes  I
    Exceptions:
      throws java.lang.IllegalArgumentException
    MethodParameters:
                 Name  Flags
      audioBufferSize  

  public void release();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 747
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.stop:()V
         1: .line 748
            goto 3
      StackMap locals:
      StackMap stack: java.lang.IllegalStateException
         2: pop
         3: .line 751
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_release:()V
         4: .line 752
            aload 0 /* this */
            iconst_0
            putfield android.media.AudioRecord.mState:I
         5: .line 753
            return
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Landroid/media/AudioRecord;
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.IllegalStateException

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

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

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

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

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

  public android.media.AudioFormat getFormat();
    descriptor: ()Landroid/media/AudioFormat;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 812
            new android.media.AudioFormat$Builder
            dup
            invokespecial android.media.AudioFormat$Builder.<init>:()V
         1: .line 813
            aload 0 /* this */
            getfield android.media.AudioRecord.mSampleRate:I
            invokevirtual android.media.AudioFormat$Builder.setSampleRate:(I)Landroid/media/AudioFormat$Builder;
         2: .line 814
            aload 0 /* this */
            getfield android.media.AudioRecord.mAudioFormat:I
            invokevirtual android.media.AudioFormat$Builder.setEncoding:(I)Landroid/media/AudioFormat$Builder;
         3: .line 812
            astore 1 /* builder */
        start local 1 // android.media.AudioFormat$Builder builder
         4: .line 815
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelMask:I
            ifeq 6
         5: .line 816
            aload 1 /* builder */
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelMask:I
            invokevirtual android.media.AudioFormat$Builder.setChannelMask:(I)Landroid/media/AudioFormat$Builder;
            pop
         6: .line 818
      StackMap locals: android.media.AudioFormat$Builder
      StackMap stack:
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelIndexMask:I
            ifeq 8
         7: .line 819
            aload 1 /* builder */
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelIndexMask:I
            invokevirtual android.media.AudioFormat$Builder.setChannelIndexMask:(I)Landroid/media/AudioFormat$Builder;
            pop
         8: .line 821
      StackMap locals:
      StackMap stack:
            aload 1 /* builder */
            invokevirtual android.media.AudioFormat$Builder.build:()Landroid/media/AudioFormat;
            areturn
        end local 1 // android.media.AudioFormat$Builder builder
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Landroid/media/AudioRecord;
            4    9     1  builder  Landroid/media/AudioFormat$Builder;

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

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

  public int getRecordingState();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 849
            aload 0 /* this */
            getfield android.media.AudioRecord.mRecordingStateLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 850
            aload 0 /* this */
            getfield android.media.AudioRecord.mRecordingState:I
            aload 1
            monitorexit
         2: ireturn
         3: .line 849
      StackMap locals: android.media.AudioRecord java.lang.Object
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         4: athrow
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Landroid/media/AudioRecord;
      Exception table:
        from    to  target  type
           1     2       3  any
           3     4       3  any

  public int getBufferSizeInFrames();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 865
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_get_buffer_size_in_frames:()I
            ireturn
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/AudioRecord;

  public int getNotificationMarkerPosition();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 872
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_get_marker_pos:()I
            ireturn
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/AudioRecord;

  public int getPositionNotificationPeriod();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 879
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_get_pos_update_period:()I
            ireturn
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/media/AudioRecord;

  public int getTimestamp(android.media.AudioTimestamp, int);
    descriptor: (Landroid/media/AudioTimestamp;I)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioTimestamp outTimestamp
        start local 2 // int timebase
         0: .line 903
            aload 1 /* outTimestamp */
            ifnull 3
         1: .line 904
            iload 2 /* timebase */
            iconst_1
            if_icmpeq 4
         2: .line 905
            iload 2 /* timebase */
            ifeq 4
         3: .line 906
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalArgumentException
            dup
            invokespecial java.lang.IllegalArgumentException.<init>:()V
            athrow
         4: .line 908
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* outTimestamp */
            iload 2 /* timebase */
            invokevirtual android.media.AudioRecord.native_get_timestamp:(Landroid/media/AudioTimestamp;I)I
            ireturn
        end local 2 // int timebase
        end local 1 // android.media.AudioTimestamp outTimestamp
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    5     0          this  Landroid/media/AudioRecord;
            0    5     1  outTimestamp  Landroid/media/AudioTimestamp;
            0    5     2      timebase  I
    MethodParameters:
              Name  Flags
      outTimestamp  
      timebase      

  public static int getMinBufferSize(int, int, int);
    descriptor: (III)I
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // int sampleRateInHz
        start local 1 // int channelConfig
        start local 2 // int audioFormat
         0: .line 934
            iconst_0
            istore 3 /* channelCount */
        start local 3 // int channelCount
         1: .line 935
            iload 1 /* channelConfig */
            lookupswitch { // 7
                    0: 6
                    1: 2
                    2: 2
                    3: 4
                   12: 4
                   16: 2
                   48: 4
              default: 6
          }
         2: .line 939
      StackMap locals: int
      StackMap stack:
            iconst_1
            istore 3 /* channelCount */
         3: .line 940
            goto 8
         4: .line 944
      StackMap locals:
      StackMap stack:
            iconst_2
            istore 3 /* channelCount */
         5: .line 945
            goto 8
         6: .line 948
      StackMap locals:
      StackMap stack:
            ldc "getMinBufferSize(): Invalid channel configuration."
            invokestatic android.media.AudioRecord.loge:(Ljava/lang/String;)V
         7: .line 949
            bipush -2
            ireturn
         8: .line 952
      StackMap locals:
      StackMap stack:
            iload 0 /* sampleRateInHz */
            iload 3 /* channelCount */
            iload 2 /* audioFormat */
            invokestatic android.media.AudioRecord.native_get_min_buff_size:(III)I
            istore 4 /* size */
        start local 4 // int size
         9: .line 953
            iload 4 /* size */
            ifne 11
        10: .line 954
            bipush -2
            ireturn
        11: .line 956
      StackMap locals: int
      StackMap stack:
            iload 4 /* size */
            iconst_m1
            if_icmpne 13
        12: .line 957
            iconst_m1
            ireturn
        13: .line 960
      StackMap locals:
      StackMap stack:
            iload 4 /* size */
            ireturn
        end local 4 // int size
        end local 3 // int channelCount
        end local 2 // int audioFormat
        end local 1 // int channelConfig
        end local 0 // int sampleRateInHz
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   14     0  sampleRateInHz  I
            0   14     1   channelConfig  I
            0   14     2     audioFormat  I
            1   14     3    channelCount  I
            9   14     4            size  I
    MethodParameters:
                Name  Flags
      sampleRateInHz  
      channelConfig   
      audioFormat     

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

  public void startRecording();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 982
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            iconst_1
            if_icmpeq 2
         1: .line 983
            new java.lang.IllegalStateException
            dup
            ldc "startRecording() called on an uninitialized AudioRecord."
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 988
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.AudioRecord.mRecordingStateLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         3: .line 989
            aload 0 /* this */
            iconst_0
            iconst_0
            invokevirtual android.media.AudioRecord.native_start:(II)I
            ifne 6
         4: .line 990
            aload 0 /* this */
            iconst_1
            invokevirtual android.media.AudioRecord.handleFullVolumeRec:(Z)V
         5: .line 991
            aload 0 /* this */
            iconst_3
            putfield android.media.AudioRecord.mRecordingState:I
         6: .line 988
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 1
            monitorexit
         7: goto 10
      StackMap locals:
      StackMap stack: java.lang.Throwable
         8: aload 1
            monitorexit
         9: athrow
        10: .line 994
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Landroid/media/AudioRecord;
      Exception table:
        from    to  target  type
           3     7       8  any
           8     9       8  any
    Exceptions:
      throws java.lang.IllegalStateException

  public void startRecording(android.media.MediaSyncEvent);
    descriptor: (Landroid/media/MediaSyncEvent;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.MediaSyncEvent syncEvent
         0: .line 1005
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            iconst_1
            if_icmpeq 2
         1: .line 1006
            new java.lang.IllegalStateException
            dup
            ldc "startRecording() called on an uninitialized AudioRecord."
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 1011
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.AudioRecord.mRecordingStateLock:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         3: .line 1012
            aload 0 /* this */
            aload 1 /* syncEvent */
            invokevirtual android.media.MediaSyncEvent.getType:()I
            aload 1 /* syncEvent */
            invokevirtual android.media.MediaSyncEvent.getAudioSessionId:()I
            invokevirtual android.media.AudioRecord.native_start:(II)I
            ifne 6
         4: .line 1013
            aload 0 /* this */
            iconst_1
            invokevirtual android.media.AudioRecord.handleFullVolumeRec:(Z)V
         5: .line 1014
            aload 0 /* this */
            iconst_3
            putfield android.media.AudioRecord.mRecordingState:I
         6: .line 1011
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 2
            monitorexit
         7: goto 10
      StackMap locals:
      StackMap stack: java.lang.Throwable
         8: aload 2
            monitorexit
         9: athrow
        10: .line 1017
      StackMap locals:
      StackMap stack:
            return
        end local 1 // android.media.MediaSyncEvent syncEvent
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   11     0       this  Landroid/media/AudioRecord;
            0   11     1  syncEvent  Landroid/media/MediaSyncEvent;
      Exception table:
        from    to  target  type
           3     7       8  any
           8     9       8  any
    Exceptions:
      throws java.lang.IllegalStateException
    MethodParameters:
           Name  Flags
      syncEvent  

  public void stop();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 1025
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            iconst_1
            if_icmpeq 2
         1: .line 1026
            new java.lang.IllegalStateException
            dup
            ldc "stop() called on an uninitialized AudioRecord."
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 1030
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.AudioRecord.mRecordingStateLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         3: .line 1031
            aload 0 /* this */
            iconst_0
            invokevirtual android.media.AudioRecord.handleFullVolumeRec:(Z)V
         4: .line 1032
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_stop:()V
         5: .line 1033
            aload 0 /* this */
            iconst_1
            putfield android.media.AudioRecord.mRecordingState:I
         6: .line 1030
            aload 1
            monitorexit
         7: goto 10
      StackMap locals: android.media.AudioRecord java.lang.Object
      StackMap stack: java.lang.Throwable
         8: aload 1
            monitorexit
         9: athrow
        10: .line 1035
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  this  Landroid/media/AudioRecord;
      Exception table:
        from    to  target  type
           3     7       8  any
           8     9       8  any
    Exceptions:
      throws java.lang.IllegalStateException

  private void handleFullVolumeRec(boolean);
    descriptor: (Z)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // boolean starting
         0: .line 1039
            aload 0 /* this */
            getfield android.media.AudioRecord.mIsSubmixFullVolume:Z
            ifne 2
         1: .line 1040
            return
         2: .line 1042
      StackMap locals:
      StackMap stack:
            ldc "audio"
            invokestatic android.os.ServiceManager.getService:(Ljava/lang/String;)Landroid/os/IBinder;
            astore 2 /* b */
        start local 2 // android.os.IBinder b
         3: .line 1043
            aload 2 /* b */
            invokestatic android.media.IAudioService$Stub.asInterface:(Landroid/os/IBinder;)Landroid/media/IAudioService;
            astore 3 /* ias */
        start local 3 // android.media.IAudioService ias
         4: .line 1045
            aload 3 /* ias */
            iload 1 /* starting */
            aload 0 /* this */
            getfield android.media.AudioRecord.mICallBack:Landroid/os/IBinder;
            invokeinterface android.media.IAudioService.forceRemoteSubmixFullVolume:(ZLandroid/os/IBinder;)V
         5: .line 1046
            goto 8
      StackMap locals: android.media.AudioRecord int android.os.IBinder android.media.IAudioService
      StackMap stack: android.os.RemoteException
         6: astore 4 /* e */
        start local 4 // android.os.RemoteException e
         7: .line 1047
            ldc "android.media.AudioRecord"
            ldc "Error talking to AudioService when handling full submix volume"
            aload 4 /* e */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        end local 4 // android.os.RemoteException e
         8: .line 1049
      StackMap locals:
      StackMap stack:
            return
        end local 3 // android.media.IAudioService ias
        end local 2 // android.os.IBinder b
        end local 1 // boolean starting
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0      this  Landroid/media/AudioRecord;
            0    9     1  starting  Z
            3    9     2         b  Landroid/os/IBinder;
            4    9     3       ias  Landroid/media/IAudioService;
            7    8     4         e  Landroid/os/RemoteException;
      Exception table:
        from    to  target  type
           4     5       6  Class android.os.RemoteException
    MethodParameters:
          Name  Flags
      starting  

  public int read(byte[], int, int);
    descriptor: ([BII)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // android.media.AudioRecord this
        start local 1 // byte[] audioData
        start local 2 // int offsetInBytes
        start local 3 // int sizeInBytes
         0: .line 1073
            aload 0 /* this */
            aload 1 /* audioData */
            iload 2 /* offsetInBytes */
            iload 3 /* sizeInBytes */
            iconst_0
            invokevirtual android.media.AudioRecord.read:([BIII)I
            ireturn
        end local 3 // int sizeInBytes
        end local 2 // int offsetInBytes
        end local 1 // byte[] audioData
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0           this  Landroid/media/AudioRecord;
            0    1     1      audioData  [B
            0    1     2  offsetInBytes  I
            0    1     3    sizeInBytes  I
    MethodParameters:
               Name  Flags
      audioData      
      offsetInBytes  
      sizeInBytes    

  public int read(byte[], int, int, int);
    descriptor: ([BIII)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // android.media.AudioRecord this
        start local 1 // byte[] audioData
        start local 2 // int offsetInBytes
        start local 3 // int sizeInBytes
        start local 4 // int readMode
         0: .line 1105
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            iconst_1
            if_icmpne 1
            aload 0 /* this */
            getfield android.media.AudioRecord.mAudioFormat:I
            iconst_4
            if_icmpne 2
         1: .line 1106
      StackMap locals:
      StackMap stack:
            bipush -3
            ireturn
         2: .line 1109
      StackMap locals:
      StackMap stack:
            iload 4 /* readMode */
            ifeq 5
            iload 4 /* readMode */
            iconst_1
            if_icmpeq 5
         3: .line 1110
            ldc "android.media.AudioRecord"
            ldc "AudioRecord.read() called with invalid blocking mode"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         4: .line 1111
            bipush -2
            ireturn
         5: .line 1114
      StackMap locals:
      StackMap stack:
            aload 1 /* audioData */
            ifnull 8
            iload 2 /* offsetInBytes */
            iflt 8
            iload 3 /* sizeInBytes */
            iflt 8
         6: .line 1115
            iload 2 /* offsetInBytes */
            iload 3 /* sizeInBytes */
            iadd
            iflt 8
         7: .line 1116
            iload 2 /* offsetInBytes */
            iload 3 /* sizeInBytes */
            iadd
            aload 1 /* audioData */
            arraylength
            if_icmple 9
         8: .line 1117
      StackMap locals:
      StackMap stack:
            bipush -2
            ireturn
         9: .line 1120
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* audioData */
            iload 2 /* offsetInBytes */
            iload 3 /* sizeInBytes */
        10: .line 1121
            iload 4 /* readMode */
            ifne 11
            iconst_1
            goto 12
      StackMap locals: android.media.AudioRecord byte[] int int int
      StackMap stack: android.media.AudioRecord byte[] int int
        11: iconst_0
        12: .line 1120
      StackMap locals: android.media.AudioRecord byte[] int int int
      StackMap stack: android.media.AudioRecord byte[] int int int
            invokevirtual android.media.AudioRecord.native_read_in_byte_array:([BIIZ)I
            ireturn
        end local 4 // int readMode
        end local 3 // int sizeInBytes
        end local 2 // int offsetInBytes
        end local 1 // byte[] audioData
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   13     0           this  Landroid/media/AudioRecord;
            0   13     1      audioData  [B
            0   13     2  offsetInBytes  I
            0   13     3    sizeInBytes  I
            0   13     4       readMode  I
    MethodParameters:
               Name  Flags
      audioData      
      offsetInBytes  
      sizeInBytes    
      readMode       

  public int read(short[], int, int);
    descriptor: ([SII)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // android.media.AudioRecord this
        start local 1 // short[] audioData
        start local 2 // int offsetInShorts
        start local 3 // int sizeInShorts
         0: .line 1146
            aload 0 /* this */
            aload 1 /* audioData */
            iload 2 /* offsetInShorts */
            iload 3 /* sizeInShorts */
            iconst_0
            invokevirtual android.media.AudioRecord.read:([SIII)I
            ireturn
        end local 3 // int sizeInShorts
        end local 2 // int offsetInShorts
        end local 1 // short[] audioData
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0            this  Landroid/media/AudioRecord;
            0    1     1       audioData  [S
            0    1     2  offsetInShorts  I
            0    1     3    sizeInShorts  I
    MethodParameters:
                Name  Flags
      audioData       
      offsetInShorts  
      sizeInShorts    

  public int read(short[], int, int, int);
    descriptor: ([SIII)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // android.media.AudioRecord this
        start local 1 // short[] audioData
        start local 2 // int offsetInShorts
        start local 3 // int sizeInShorts
        start local 4 // int readMode
         0: .line 1177
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            iconst_1
            if_icmpne 1
            aload 0 /* this */
            getfield android.media.AudioRecord.mAudioFormat:I
            iconst_4
            if_icmpne 2
         1: .line 1178
      StackMap locals:
      StackMap stack:
            bipush -3
            ireturn
         2: .line 1181
      StackMap locals:
      StackMap stack:
            iload 4 /* readMode */
            ifeq 5
            iload 4 /* readMode */
            iconst_1
            if_icmpeq 5
         3: .line 1182
            ldc "android.media.AudioRecord"
            ldc "AudioRecord.read() called with invalid blocking mode"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         4: .line 1183
            bipush -2
            ireturn
         5: .line 1186
      StackMap locals:
      StackMap stack:
            aload 1 /* audioData */
            ifnull 8
            iload 2 /* offsetInShorts */
            iflt 8
            iload 3 /* sizeInShorts */
            iflt 8
         6: .line 1187
            iload 2 /* offsetInShorts */
            iload 3 /* sizeInShorts */
            iadd
            iflt 8
         7: .line 1188
            iload 2 /* offsetInShorts */
            iload 3 /* sizeInShorts */
            iadd
            aload 1 /* audioData */
            arraylength
            if_icmple 9
         8: .line 1189
      StackMap locals:
      StackMap stack:
            bipush -2
            ireturn
         9: .line 1192
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* audioData */
            iload 2 /* offsetInShorts */
            iload 3 /* sizeInShorts */
        10: .line 1193
            iload 4 /* readMode */
            ifne 11
            iconst_1
            goto 12
      StackMap locals: android.media.AudioRecord short[] int int int
      StackMap stack: android.media.AudioRecord short[] int int
        11: iconst_0
        12: .line 1192
      StackMap locals: android.media.AudioRecord short[] int int int
      StackMap stack: android.media.AudioRecord short[] int int int
            invokevirtual android.media.AudioRecord.native_read_in_short_array:([SIIZ)I
            ireturn
        end local 4 // int readMode
        end local 3 // int sizeInShorts
        end local 2 // int offsetInShorts
        end local 1 // short[] audioData
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   13     0            this  Landroid/media/AudioRecord;
            0   13     1       audioData  [S
            0   13     2  offsetInShorts  I
            0   13     3    sizeInShorts  I
            0   13     4        readMode  I
    MethodParameters:
                Name  Flags
      audioData       
      offsetInShorts  
      sizeInShorts    
      readMode        

  public int read(float[], int, int, int);
    descriptor: ([FIII)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // android.media.AudioRecord this
        start local 1 // float[] audioData
        start local 2 // int offsetInFloats
        start local 3 // int sizeInFloats
        start local 4 // int readMode
         0: .line 1224
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            ifne 3
         1: .line 1225
            ldc "android.media.AudioRecord"
            ldc "AudioRecord.read() called in invalid state STATE_UNINITIALIZED"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         2: .line 1226
            bipush -3
            ireturn
         3: .line 1229
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.media.AudioRecord.mAudioFormat:I
            iconst_4
            if_icmpeq 6
         4: .line 1230
            ldc "android.media.AudioRecord"
            ldc "AudioRecord.read(float[] ...) requires format ENCODING_PCM_FLOAT"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         5: .line 1231
            bipush -3
            ireturn
         6: .line 1234
      StackMap locals:
      StackMap stack:
            iload 4 /* readMode */
            ifeq 9
            iload 4 /* readMode */
            iconst_1
            if_icmpeq 9
         7: .line 1235
            ldc "android.media.AudioRecord"
            ldc "AudioRecord.read() called with invalid blocking mode"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         8: .line 1236
            bipush -2
            ireturn
         9: .line 1239
      StackMap locals:
      StackMap stack:
            aload 1 /* audioData */
            ifnull 12
            iload 2 /* offsetInFloats */
            iflt 12
            iload 3 /* sizeInFloats */
            iflt 12
        10: .line 1240
            iload 2 /* offsetInFloats */
            iload 3 /* sizeInFloats */
            iadd
            iflt 12
        11: .line 1241
            iload 2 /* offsetInFloats */
            iload 3 /* sizeInFloats */
            iadd
            aload 1 /* audioData */
            arraylength
            if_icmple 13
        12: .line 1242
      StackMap locals:
      StackMap stack:
            bipush -2
            ireturn
        13: .line 1245
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* audioData */
            iload 2 /* offsetInFloats */
            iload 3 /* sizeInFloats */
        14: .line 1246
            iload 4 /* readMode */
            ifne 15
            iconst_1
            goto 16
      StackMap locals: android.media.AudioRecord float[] int int int
      StackMap stack: android.media.AudioRecord float[] int int
        15: iconst_0
        16: .line 1245
      StackMap locals: android.media.AudioRecord float[] int int int
      StackMap stack: android.media.AudioRecord float[] int int int
            invokevirtual android.media.AudioRecord.native_read_in_float_array:([FIIZ)I
            ireturn
        end local 4 // int readMode
        end local 3 // int sizeInFloats
        end local 2 // int offsetInFloats
        end local 1 // float[] audioData
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   17     0            this  Landroid/media/AudioRecord;
            0   17     1       audioData  [F
            0   17     2  offsetInFloats  I
            0   17     3    sizeInFloats  I
            0   17     4        readMode  I
    MethodParameters:
                Name  Flags
      audioData       
      offsetInFloats  
      sizeInFloats    
      readMode        

  public int read(java.nio.ByteBuffer, int);
    descriptor: (Ljava/nio/ByteBuffer;I)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // android.media.AudioRecord this
        start local 1 // java.nio.ByteBuffer audioBuffer
        start local 2 // int sizeInBytes
         0: .line 1274
            aload 0 /* this */
            aload 1 /* audioBuffer */
            iload 2 /* sizeInBytes */
            iconst_0
            invokevirtual android.media.AudioRecord.read:(Ljava/nio/ByteBuffer;II)I
            ireturn
        end local 2 // int sizeInBytes
        end local 1 // java.nio.ByteBuffer audioBuffer
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0         this  Landroid/media/AudioRecord;
            0    1     1  audioBuffer  Ljava/nio/ByteBuffer;
            0    1     2  sizeInBytes  I
    MethodParameters:
             Name  Flags
      audioBuffer  
      sizeInBytes  

  public int read(java.nio.ByteBuffer, int, int);
    descriptor: (Ljava/nio/ByteBuffer;II)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // android.media.AudioRecord this
        start local 1 // java.nio.ByteBuffer audioBuffer
        start local 2 // int sizeInBytes
        start local 3 // int readMode
         0: .line 1307
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            iconst_1
            if_icmpeq 2
         1: .line 1308
            bipush -3
            ireturn
         2: .line 1311
      StackMap locals:
      StackMap stack:
            iload 3 /* readMode */
            ifeq 5
            iload 3 /* readMode */
            iconst_1
            if_icmpeq 5
         3: .line 1312
            ldc "android.media.AudioRecord"
            ldc "AudioRecord.read() called with invalid blocking mode"
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         4: .line 1313
            bipush -2
            ireturn
         5: .line 1316
      StackMap locals:
      StackMap stack:
            aload 1 /* audioBuffer */
            ifnull 6
            iload 2 /* sizeInBytes */
            ifge 7
         6: .line 1317
      StackMap locals:
      StackMap stack:
            bipush -2
            ireturn
         7: .line 1320
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* audioBuffer */
            iload 2 /* sizeInBytes */
            iload 3 /* readMode */
            ifne 8
            iconst_1
            goto 9
      StackMap locals: android.media.AudioRecord java.nio.ByteBuffer int int
      StackMap stack: android.media.AudioRecord java.nio.ByteBuffer int
         8: iconst_0
      StackMap locals: android.media.AudioRecord java.nio.ByteBuffer int int
      StackMap stack: android.media.AudioRecord java.nio.ByteBuffer int int
         9: invokevirtual android.media.AudioRecord.native_read_in_direct_buffer:(Ljava/lang/Object;IZ)I
            ireturn
        end local 3 // int readMode
        end local 2 // int sizeInBytes
        end local 1 // java.nio.ByteBuffer audioBuffer
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   10     0         this  Landroid/media/AudioRecord;
            0   10     1  audioBuffer  Ljava/nio/ByteBuffer;
            0   10     2  sizeInBytes  I
            0   10     3     readMode  I
    MethodParameters:
             Name  Flags
      audioBuffer  
      sizeInBytes  
      readMode     

  public android.os.PersistableBundle getMetrics();
    descriptor: ()Landroid/os/PersistableBundle;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 1334
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_getMetrics:()Landroid/os/PersistableBundle;
            astore 1 /* bundle */
        start local 1 // android.os.PersistableBundle bundle
         1: .line 1335
            aload 1 /* bundle */
            areturn
        end local 1 // android.os.PersistableBundle bundle
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Landroid/media/AudioRecord;
            1    2     1  bundle  Landroid/os/PersistableBundle;

  private native android.os.PersistableBundle native_getMetrics();
    descriptor: ()Landroid/os/PersistableBundle;
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE

  public void setRecordPositionUpdateListener(android.media.AudioRecord$OnRecordPositionUpdateListener);
    descriptor: (Landroid/media/AudioRecord$OnRecordPositionUpdateListener;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioRecord$OnRecordPositionUpdateListener listener
         0: .line 1349
            aload 0 /* this */
            aload 1 /* listener */
            aconst_null
            invokevirtual android.media.AudioRecord.setRecordPositionUpdateListener:(Landroid/media/AudioRecord$OnRecordPositionUpdateListener;Landroid/os/Handler;)V
         1: .line 1350
            return
        end local 1 // android.media.AudioRecord$OnRecordPositionUpdateListener listener
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Landroid/media/AudioRecord;
            0    2     1  listener  Landroid/media/AudioRecord$OnRecordPositionUpdateListener;
    MethodParameters:
          Name  Flags
      listener  

  public void setRecordPositionUpdateListener(android.media.AudioRecord$OnRecordPositionUpdateListener, android.os.Handler);
    descriptor: (Landroid/media/AudioRecord$OnRecordPositionUpdateListener;Landroid/os/Handler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioRecord$OnRecordPositionUpdateListener listener
        start local 2 // android.os.Handler handler
         0: .line 1362
            aload 0 /* this */
            getfield android.media.AudioRecord.mPositionListenerLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         1: .line 1364
            aload 0 /* this */
            aload 1 /* listener */
            putfield android.media.AudioRecord.mPositionListener:Landroid/media/AudioRecord$OnRecordPositionUpdateListener;
         2: .line 1366
            aload 1 /* listener */
            ifnull 8
         3: .line 1367
            aload 2 /* handler */
            ifnull 6
         4: .line 1368
            aload 0 /* this */
            new android.media.AudioRecord$NativeEventHandler
            dup
            aload 0 /* this */
            aload 0 /* this */
            aload 2 /* handler */
            invokevirtual android.os.Handler.getLooper:()Landroid/os/Looper;
            invokespecial android.media.AudioRecord$NativeEventHandler.<init>:(Landroid/media/AudioRecord;Landroid/media/AudioRecord;Landroid/os/Looper;)V
            putfield android.media.AudioRecord.mEventHandler:Landroid/media/AudioRecord$NativeEventHandler;
         5: .line 1369
            goto 9
         6: .line 1371
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            new android.media.AudioRecord$NativeEventHandler
            dup
            aload 0 /* this */
            aload 0 /* this */
            aload 0 /* this */
            getfield android.media.AudioRecord.mInitializationLooper:Landroid/os/Looper;
            invokespecial android.media.AudioRecord$NativeEventHandler.<init>:(Landroid/media/AudioRecord;Landroid/media/AudioRecord;Landroid/os/Looper;)V
            putfield android.media.AudioRecord.mEventHandler:Landroid/media/AudioRecord$NativeEventHandler;
         7: .line 1373
            goto 9
         8: .line 1374
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aconst_null
            putfield android.media.AudioRecord.mEventHandler:Landroid/media/AudioRecord$NativeEventHandler;
         9: .line 1362
      StackMap locals:
      StackMap stack:
            aload 3
            monitorexit
        10: goto 13
      StackMap locals:
      StackMap stack: java.lang.Throwable
        11: aload 3
            monitorexit
        12: athrow
        13: .line 1378
      StackMap locals:
      StackMap stack:
            return
        end local 2 // android.os.Handler handler
        end local 1 // android.media.AudioRecord$OnRecordPositionUpdateListener listener
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   14     0      this  Landroid/media/AudioRecord;
            0   14     1  listener  Landroid/media/AudioRecord$OnRecordPositionUpdateListener;
            0   14     2   handler  Landroid/os/Handler;
      Exception table:
        from    to  target  type
           1    10      11  any
          11    12      11  any
    MethodParameters:
          Name  Flags
      listener  
      handler   

  public int setNotificationMarkerPosition(int);
    descriptor: (I)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // int markerInFrames
         0: .line 1390
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            ifne 2
         1: .line 1391
            bipush -3
            ireturn
         2: .line 1393
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* markerInFrames */
            invokevirtual android.media.AudioRecord.native_set_marker_pos:(I)I
            ireturn
        end local 1 // int markerInFrames
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    3     0            this  Landroid/media/AudioRecord;
            0    3     1  markerInFrames  I
    MethodParameters:
                Name  Flags
      markerInFrames  

  public android.media.AudioDeviceInfo getRoutedDevice();
    descriptor: ()Landroid/media/AudioDeviceInfo;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 1403
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_getRoutedDeviceId:()I
            istore 1 /* deviceId */
        start local 1 // int deviceId
         1: .line 1404
            iload 1 /* deviceId */
            ifne 3
         2: .line 1405
            aconst_null
            areturn
         3: .line 1408
      StackMap locals: int
      StackMap stack:
            iconst_1
            invokestatic android.media.AudioManager.getDevicesStatic:(I)[Landroid/media/AudioDeviceInfo;
         4: .line 1407
            astore 2 /* devices */
        start local 2 // android.media.AudioDeviceInfo[] devices
         5: .line 1409
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         6: goto 10
         7: .line 1410
      StackMap locals: android.media.AudioDeviceInfo[] int
      StackMap stack:
            aload 2 /* devices */
            iload 3 /* i */
            aaload
            invokevirtual android.media.AudioDeviceInfo.getId:()I
            iload 1 /* deviceId */
            if_icmpne 9
         8: .line 1411
            aload 2 /* devices */
            iload 3 /* i */
            aaload
            areturn
         9: .line 1409
      StackMap locals:
      StackMap stack:
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        10: iload 3 /* i */
            aload 2 /* devices */
            arraylength
            if_icmplt 7
        end local 3 // int i
        11: .line 1414
            aconst_null
            areturn
        end local 2 // android.media.AudioDeviceInfo[] devices
        end local 1 // int deviceId
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   12     0      this  Landroid/media/AudioRecord;
            1   12     1  deviceId  I
            5   12     2   devices  [Landroid/media/AudioDeviceInfo;
            6   11     3         i  I

  private void testEnableNativeRoutingCallbacksLocked();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 1422
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            invokevirtual android.util.ArrayMap.size:()I
            ifne 2
         1: .line 1423
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_enableDeviceCallback:()V
         2: .line 1425
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Landroid/media/AudioRecord;
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "mRoutingChangeListeners")

  private void testDisableNativeRoutingCallbacksLocked();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 1432
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            invokevirtual android.util.ArrayMap.size:()I
            ifne 2
         1: .line 1433
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.native_disableDeviceCallback:()V
         2: .line 1435
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Landroid/media/AudioRecord;
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "mRoutingChangeListeners")

  public void addOnRoutingChangedListener(android.media.AudioRouting$OnRoutingChangedListener, android.os.Handler);
    descriptor: (Landroid/media/AudioRouting$OnRoutingChangedListener;Landroid/os/Handler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=9, locals=4, args_size=3
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioRouting$OnRoutingChangedListener listener
        start local 2 // android.os.Handler handler
         0: .line 1461
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            dup
            astore 3
            monitorenter
         1: .line 1462
            aload 1 /* listener */
            ifnull 10
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            aload 1 /* listener */
            invokevirtual android.util.ArrayMap.containsKey:(Ljava/lang/Object;)Z
            ifne 10
         2: .line 1463
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.testEnableNativeRoutingCallbacksLocked:()V
         3: .line 1464
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
         4: .line 1465
            aload 1 /* listener */
         5: new android.media.NativeRoutingEventHandlerDelegate
            dup
            aload 0 /* this */
            aload 1 /* listener */
         6: .line 1466
            aload 2 /* handler */
            ifnull 7
            aload 2 /* handler */
            goto 8
      StackMap locals: android.media.AudioRecord android.media.AudioRouting$OnRoutingChangedListener android.os.Handler android.util.ArrayMap
      StackMap stack: android.util.ArrayMap android.media.AudioRouting$OnRoutingChangedListener new 5 new 5 android.media.AudioRecord android.media.AudioRouting$OnRoutingChangedListener
         7: new android.os.Handler
            dup
            aload 0 /* this */
            getfield android.media.AudioRecord.mInitializationLooper:Landroid/os/Looper;
            invokespecial android.os.Handler.<init>:(Landroid/os/Looper;)V
      StackMap locals: android.media.AudioRecord android.media.AudioRouting$OnRoutingChangedListener android.os.Handler android.util.ArrayMap
      StackMap stack: android.util.ArrayMap android.media.AudioRouting$OnRoutingChangedListener new 5 new 5 android.media.AudioRecord android.media.AudioRouting$OnRoutingChangedListener android.os.Handler
         8: invokespecial android.media.NativeRoutingEventHandlerDelegate.<init>:(Landroid/media/AudioRouting;Landroid/media/AudioRouting$OnRoutingChangedListener;Landroid/os/Handler;)V
         9: .line 1464
            invokevirtual android.util.ArrayMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        10: .line 1461
      StackMap locals:
      StackMap stack:
            aload 3
            monitorexit
        11: goto 14
      StackMap locals:
      StackMap stack: java.lang.Throwable
        12: aload 3
            monitorexit
        13: athrow
        14: .line 1469
      StackMap locals:
      StackMap stack:
            return
        end local 2 // android.os.Handler handler
        end local 1 // android.media.AudioRouting$OnRoutingChangedListener listener
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   15     0      this  Landroid/media/AudioRecord;
            0   15     1  listener  Landroid/media/AudioRouting$OnRoutingChangedListener;
            0   15     2   handler  Landroid/os/Handler;
      Exception table:
        from    to  target  type
           1    11      12  any
          12    13      12  any
    MethodParameters:
          Name  Flags
      listener  
      handler   

  public void removeOnRoutingChangedListener(android.media.AudioRouting$OnRoutingChangedListener);
    descriptor: (Landroid/media/AudioRouting$OnRoutingChangedListener;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioRouting$OnRoutingChangedListener listener
         0: .line 1479
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            dup
            astore 2
            monitorenter
         1: .line 1480
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            aload 1 /* listener */
            invokevirtual android.util.ArrayMap.containsKey:(Ljava/lang/Object;)Z
            ifeq 4
         2: .line 1481
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            aload 1 /* listener */
            invokevirtual android.util.ArrayMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         3: .line 1482
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.testDisableNativeRoutingCallbacksLocked:()V
         4: .line 1479
      StackMap locals: android.util.ArrayMap
      StackMap stack:
            aload 2
            monitorexit
         5: goto 8
      StackMap locals:
      StackMap stack: java.lang.Throwable
         6: aload 2
            monitorexit
         7: athrow
         8: .line 1485
      StackMap locals:
      StackMap stack:
            return
        end local 1 // android.media.AudioRouting$OnRoutingChangedListener listener
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    9     0      this  Landroid/media/AudioRecord;
            0    9     1  listener  Landroid/media/AudioRouting$OnRoutingChangedListener;
      Exception table:
        from    to  target  type
           1     5       6  any
           6     7       6  any
    MethodParameters:
          Name  Flags
      listener  

  public void addOnRoutingChangedListener(android.media.AudioRecord$OnRoutingChangedListener, android.os.Handler);
    descriptor: (Landroid/media/AudioRecord$OnRoutingChangedListener;Landroid/os/Handler;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioRecord$OnRoutingChangedListener listener
        start local 2 // android.os.Handler handler
         0: .line 1528
            aload 0 /* this */
            aload 1 /* listener */
            aload 2 /* handler */
            invokevirtual android.media.AudioRecord.addOnRoutingChangedListener:(Landroid/media/AudioRouting$OnRoutingChangedListener;Landroid/os/Handler;)V
         1: .line 1529
            return
        end local 2 // android.os.Handler handler
        end local 1 // android.media.AudioRecord$OnRoutingChangedListener listener
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Landroid/media/AudioRecord;
            0    2     1  listener  Landroid/media/AudioRecord$OnRoutingChangedListener;
            0    2     2   handler  Landroid/os/Handler;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
          Name  Flags
      listener  
      handler   

  public void removeOnRoutingChangedListener(android.media.AudioRecord$OnRoutingChangedListener);
    descriptor: (Landroid/media/AudioRecord$OnRoutingChangedListener;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioRecord$OnRoutingChangedListener listener
         0: .line 1540
            aload 0 /* this */
            aload 1 /* listener */
            invokevirtual android.media.AudioRecord.removeOnRoutingChangedListener:(Landroid/media/AudioRouting$OnRoutingChangedListener;)V
         1: .line 1541
            return
        end local 1 // android.media.AudioRecord$OnRoutingChangedListener listener
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Landroid/media/AudioRecord;
            0    2     1  listener  Landroid/media/AudioRecord$OnRoutingChangedListener;
    RuntimeVisibleAnnotations: 
      java.lang.Deprecated()
    MethodParameters:
          Name  Flags
      listener  

  private void broadcastRoutingChange();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 1547
            invokestatic android.media.AudioManager.resetAudioPortGeneration:()I
            pop
         1: .line 1548
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            dup
            astore 1
            monitorenter
         2: .line 1549
            aload 0 /* this */
            getfield android.media.AudioRecord.mRoutingChangeListeners:Landroid/util/ArrayMap;
            invokevirtual android.util.ArrayMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 3
            goto 5
      StackMap locals: android.media.AudioRecord android.util.ArrayMap top java.util.Iterator
      StackMap stack:
         3: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast android.media.NativeRoutingEventHandlerDelegate
            astore 2 /* delegate */
        start local 2 // android.media.NativeRoutingEventHandlerDelegate delegate
         4: .line 1550
            aload 2 /* delegate */
            invokevirtual android.media.NativeRoutingEventHandlerDelegate.notifyClient:()V
        end local 2 // android.media.NativeRoutingEventHandlerDelegate delegate
         5: .line 1549
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 1548
            aload 1
            monitorexit
         7: goto 10
      StackMap locals: android.media.AudioRecord android.util.ArrayMap
      StackMap stack: java.lang.Throwable
         8: aload 1
            monitorexit
         9: athrow
        10: .line 1553
      StackMap locals:
      StackMap stack:
            return
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   11     0      this  Landroid/media/AudioRecord;
            4    5     2  delegate  Landroid/media/NativeRoutingEventHandlerDelegate;
      Exception table:
        from    to  target  type
           2     7       8  any
           8     9       8  any

  public int setPositionNotificationPeriod(int);
    descriptor: (I)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // int periodInFrames
         0: .line 1564
            aload 0 /* this */
            getfield android.media.AudioRecord.mState:I
            ifne 2
         1: .line 1565
            bipush -3
            ireturn
         2: .line 1567
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 1 /* periodInFrames */
            invokevirtual android.media.AudioRecord.native_set_pos_update_period:(I)I
            ireturn
        end local 1 // int periodInFrames
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    3     0            this  Landroid/media/AudioRecord;
            0    3     1  periodInFrames  I
    MethodParameters:
                Name  Flags
      periodInFrames  

  public boolean setPreferredDevice(android.media.AudioDeviceInfo);
    descriptor: (Landroid/media/AudioDeviceInfo;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=5, args_size=2
        start local 0 // android.media.AudioRecord this
        start local 1 // android.media.AudioDeviceInfo deviceInfo
         0: .line 1586
            aload 1 /* deviceInfo */
            ifnull 2
            aload 1 /* deviceInfo */
            invokevirtual android.media.AudioDeviceInfo.isSource:()Z
            ifne 2
         1: .line 1587
            iconst_0
            ireturn
         2: .line 1590
      StackMap locals:
      StackMap stack:
            aload 1 /* deviceInfo */
            ifnull 3
            aload 1 /* deviceInfo */
            invokevirtual android.media.AudioDeviceInfo.getId:()I
            goto 4
      StackMap locals:
      StackMap stack:
         3: iconst_0
      StackMap locals:
      StackMap stack: int
         4: istore 2 /* preferredDeviceId */
        start local 2 // int preferredDeviceId
         5: .line 1591
            aload 0 /* this */
            iload 2 /* preferredDeviceId */
            invokevirtual android.media.AudioRecord.native_setInputDevice:(I)Z
            istore 3 /* status */
        start local 3 // boolean status
         6: .line 1592
            iload 3 /* status */
            ifeq 13
         7: .line 1593
            aload 0 /* this */
            dup
            astore 4
            monitorenter
         8: .line 1594
            aload 0 /* this */
            aload 1 /* deviceInfo */
            putfield android.media.AudioRecord.mPreferredDevice:Landroid/media/AudioDeviceInfo;
         9: .line 1593
            aload 4
            monitorexit
        10: goto 13
      StackMap locals: android.media.AudioRecord android.media.AudioDeviceInfo int int android.media.AudioRecord
      StackMap stack: java.lang.Throwable
        11: aload 4
            monitorexit
        12: athrow
        13: .line 1597
      StackMap locals:
      StackMap stack:
            iload 3 /* status */
            ireturn
        end local 3 // boolean status
        end local 2 // int preferredDeviceId
        end local 1 // android.media.AudioDeviceInfo deviceInfo
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   14     0               this  Landroid/media/AudioRecord;
            0   14     1         deviceInfo  Landroid/media/AudioDeviceInfo;
            5   14     2  preferredDeviceId  I
            6   14     3             status  Z
      Exception table:
        from    to  target  type
           8    10      11  any
          11    12      11  any
    MethodParameters:
            Name  Flags
      deviceInfo  

  public android.media.AudioDeviceInfo getPreferredDevice();
    descriptor: ()Landroid/media/AudioDeviceInfo;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 1606
            aload 0 /* this */
            dup
            astore 1
            monitorenter
         1: .line 1607
            aload 0 /* this */
            getfield android.media.AudioRecord.mPreferredDevice:Landroid/media/AudioDeviceInfo;
            aload 1
            monitorexit
         2: areturn
         3: .line 1606
      StackMap locals: android.media.AudioRecord android.media.AudioRecord
      StackMap stack: java.lang.Throwable
            aload 1
            monitorexit
         4: athrow
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Landroid/media/AudioRecord;
      Exception table:
        from    to  target  type
           1     2       3  any
           3     4       3  any

  public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones();
    descriptor: ()Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=1
        start local 0 // android.media.AudioRecord this
         0: .line 1627
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* activeMicrophones */
        start local 1 // java.util.ArrayList activeMicrophones
         1: .line 1628
            aload 0 /* this */
            aload 1 /* activeMicrophones */
            invokevirtual android.media.AudioRecord.native_get_active_microphones:(Ljava/util/ArrayList;)I
            istore 2 /* status */
        start local 2 // int status
         2: .line 1629
            iload 2 /* status */
            ifeq 6
         3: .line 1630
            iload 2 /* status */
            bipush -3
            if_icmpeq 5
         4: .line 1631
            ldc "android.media.AudioRecord"
            new java.lang.StringBuilder
            dup
            ldc "getActiveMicrophones failed:"
            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;
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         5: .line 1633
      StackMap locals: java.util.ArrayList int
      StackMap stack:
            ldc "android.media.AudioRecord"
            ldc "getActiveMicrophones failed, fallback on routed device info"
            invokestatic android.util.Log.i:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         6: .line 1635
      StackMap locals:
      StackMap stack:
            aload 1 /* activeMicrophones */
            invokestatic android.media.AudioManager.setPortIdForMicrophones:(Ljava/util/ArrayList;)V
         7: .line 1638
            aload 1 /* activeMicrophones */
            invokevirtual java.util.ArrayList.size:()I
            ifne 19
         8: .line 1639
            aload 0 /* this */
            invokevirtual android.media.AudioRecord.getRoutedDevice:()Landroid/media/AudioDeviceInfo;
            astore 3 /* device */
        start local 3 // android.media.AudioDeviceInfo device
         9: .line 1640
            aload 3 /* device */
            ifnull 19
        10: .line 1641
            aload 3 /* device */
            invokestatic android.media.AudioManager.microphoneInfoFromAudioDeviceInfo:(Landroid/media/AudioDeviceInfo;)Landroid/media/MicrophoneInfo;
            astore 4 /* microphone */
        start local 4 // android.media.MicrophoneInfo microphone
        11: .line 1642
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 5 /* channelMapping */
        start local 5 // java.util.ArrayList channelMapping
        12: .line 1643
            iconst_0
            istore 6 /* i */
        start local 6 // int i
        13: goto 16
        14: .line 1644
      StackMap locals: android.media.AudioRecord java.util.ArrayList int android.media.AudioDeviceInfo android.media.MicrophoneInfo java.util.ArrayList int
      StackMap stack:
            aload 5 /* channelMapping */
            new android.util.Pair
            dup
            iload 6 /* i */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            iconst_1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokespecial android.util.Pair.<init>:(Ljava/lang/Object;Ljava/lang/Object;)V
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        15: .line 1643
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        16: iload 6 /* i */
            aload 0 /* this */
            getfield android.media.AudioRecord.mChannelCount:I
            if_icmplt 14
        end local 6 // int i
        17: .line 1646
            aload 4 /* microphone */
            aload 5 /* channelMapping */
            invokevirtual android.media.MicrophoneInfo.setChannelMapping:(Ljava/util/List;)V
        18: .line 1647
            aload 1 /* activeMicrophones */
            aload 4 /* microphone */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 5 // java.util.ArrayList channelMapping
        end local 4 // android.media.MicrophoneInfo microphone
        end local 3 // android.media.AudioDeviceInfo device
        19: .line 1650
      StackMap locals: android.media.AudioRecord java.util.ArrayList int
      StackMap stack:
            aload 1 /* activeMicrophones */
            areturn
        end local 2 // int status
        end local 1 // java.util.ArrayList activeMicrophones
        end local 0 // android.media.AudioRecord this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   20     0               this  Landroid/media/AudioRecord;
            1   20     1  activeMicrophones  Ljava/util/ArrayList<Landroid/media/MicrophoneInfo;>;
            2   20     2             status  I
            9   19     3             device  Landroid/media/AudioDeviceInfo;
           11   19     4         microphone  Landroid/media/MicrophoneInfo;
           12   19     5     channelMapping  Ljava/util/ArrayList<Landroid/util/Pair<Ljava/lang/Integer;Ljava/lang/Integer;>;>;
           13   17     6                  i  I
    Exceptions:
      throws java.io.IOException
    Signature: ()Ljava/util/List<Landroid/media/MicrophoneInfo;>;

  private static void postEventFromNative(java.lang.Object, int, int, int, java.lang.Object);
    descriptor: (Ljava/lang/Object;IIILjava/lang/Object;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=5
        start local 0 // java.lang.Object audiorecord_ref
        start local 1 // int what
        start local 2 // int arg1
        start local 3 // int arg2
        start local 4 // java.lang.Object obj
         0: .line 1726
            aload 0 /* audiorecord_ref */
            checkcast java.lang.ref.WeakReference
            invokevirtual java.lang.ref.WeakReference.get:()Ljava/lang/Object;
            checkcast android.media.AudioRecord
            astore 5 /* recorder */
        start local 5 // android.media.AudioRecord recorder
         1: .line 1727
            aload 5 /* recorder */
            ifnonnull 3
         2: .line 1728
            return
         3: .line 1731
      StackMap locals: android.media.AudioRecord
      StackMap stack:
            iload 1 /* what */
            sipush 1000
            if_icmpne 6
         4: .line 1732
            aload 5 /* recorder */
            invokevirtual android.media.AudioRecord.broadcastRoutingChange:()V
         5: .line 1733
            return
         6: .line 1736
      StackMap locals:
      StackMap stack:
            aload 5 /* recorder */
            getfield android.media.AudioRecord.mEventHandler:Landroid/media/AudioRecord$NativeEventHandler;
            ifnull 10
         7: .line 1738
            aload 5 /* recorder */
            getfield android.media.AudioRecord.mEventHandler:Landroid/media/AudioRecord$NativeEventHandler;
            iload 1 /* what */
            iload 2 /* arg1 */
            iload 3 /* arg2 */
            aload 4 /* obj */
            invokevirtual android.media.AudioRecord$NativeEventHandler.obtainMessage:(IIILjava/lang/Object;)Landroid/os/Message;
         8: .line 1737
            astore 6 /* m */
        start local 6 // android.os.Message m
         9: .line 1739
            aload 5 /* recorder */
            getfield android.media.AudioRecord.mEventHandler:Landroid/media/AudioRecord$NativeEventHandler;
            aload 6 /* m */
            invokevirtual android.media.AudioRecord$NativeEventHandler.sendMessage:(Landroid/os/Message;)Z
            pop
        end local 6 // android.os.Message m
        10: .line 1742
      StackMap locals:
      StackMap stack:
            return
        end local 5 // android.media.AudioRecord recorder
        end local 4 // java.lang.Object obj
        end local 3 // int arg2
        end local 2 // int arg1
        end local 1 // int what
        end local 0 // java.lang.Object audiorecord_ref
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   11     0  audiorecord_ref  Ljava/lang/Object;
            0   11     1             what  I
            0   11     2             arg1  I
            0   11     3             arg2  I
            0   11     4              obj  Ljava/lang/Object;
            1   11     5         recorder  Landroid/media/AudioRecord;
            9   10     6                m  Landroid/os/Message;
    MethodParameters:
                 Name  Flags
      audiorecord_ref  
      what             
      arg1             
      arg2             
      obj              

  private final native int native_setup(java.lang.Object, java.lang.Object, int[], int, int, int, int, int[], java.lang.String, long);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;[IIIII[ILjava/lang/String;J)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
                       Name  Flags
      audiorecord_this       
      attributes             
      sampleRate             
      channelMask            
      channelIndexMask       
      audioFormat            
      buffSizeInBytes        
      sessionId              
      opPackageName          
      nativeRecordInJavaObj  

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

  public final native void native_release();
    descriptor: ()V
    flags: (0x0111) ACC_PUBLIC, ACC_FINAL, ACC_NATIVE

  private final native int native_start(int, int);
    descriptor: (II)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
           Name  Flags
      syncEvent  
      sessionId  

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

  private final native int native_read_in_byte_array(byte[], int, int, boolean);
    descriptor: ([BIIZ)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
               Name  Flags
      audioData      
      offsetInBytes  
      sizeInBytes    
      isBlocking     

  private final native int native_read_in_short_array(short[], int, int, boolean);
    descriptor: ([SIIZ)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
                Name  Flags
      audioData       
      offsetInShorts  
      sizeInShorts    
      isBlocking      

  private final native int native_read_in_float_array(float[], int, int, boolean);
    descriptor: ([FIIZ)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
                Name  Flags
      audioData       
      offsetInFloats  
      sizeInFloats    
      isBlocking      

  private final native int native_read_in_direct_buffer(java.lang.Object, int, boolean);
    descriptor: (Ljava/lang/Object;IZ)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
             Name  Flags
      jBuffer      
      sizeInBytes  
      isBlocking   

  private final native int native_get_buffer_size_in_frames();
    descriptor: ()I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

  private final native int native_set_marker_pos(int);
    descriptor: (I)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
        Name  Flags
      marker  

  private final native int native_get_marker_pos();
    descriptor: ()I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

  private final native int native_set_pos_update_period(int);
    descriptor: (I)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
              Name  Flags
      updatePeriod  

  private final native int native_get_pos_update_period();
    descriptor: ()I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

  private static final native int native_get_min_buff_size(int, int, int);
    descriptor: (III)I
    flags: (0x011a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL, ACC_NATIVE
    MethodParameters:
                Name  Flags
      sampleRateInHz  
      channelCount    
      audioFormat     

  private final native boolean native_setInputDevice(int);
    descriptor: (I)Z
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
          Name  Flags
      deviceId  

  private final native int native_getRoutedDeviceId();
    descriptor: ()I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE

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

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

  private final native int native_get_timestamp(android.media.AudioTimestamp, int);
    descriptor: (Landroid/media/AudioTimestamp;I)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    MethodParameters:
              Name  Flags
      outTimestamp  
      timebase      

  private final native int native_get_active_microphones(java.util.ArrayList<android.media.MicrophoneInfo>);
    descriptor: (Ljava/util/ArrayList;)I
    flags: (0x0112) ACC_PRIVATE, ACC_FINAL, ACC_NATIVE
    Signature: (Ljava/util/ArrayList<Landroid/media/MicrophoneInfo;>;)I
    MethodParameters:
                   Name  Flags
      activeMicrophones  

  private static void logd(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String msg
         0: .line 1806
            ldc "android.media.AudioRecord"
            aload 0 /* msg */
            invokestatic android.util.Log.d:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         1: .line 1807
            return
        end local 0 // java.lang.String msg
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0   msg  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      msg   

  private static void loge(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String msg
         0: .line 1810
            ldc "android.media.AudioRecord"
            aload 0 /* msg */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
         1: .line 1811
            return
        end local 0 // java.lang.String msg
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0   msg  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      msg   
}
SourceFile: "AudioRecord.java"
NestMembers:
  android.media.AudioRecord$Builder  android.media.AudioRecord$MetricsConstants  android.media.AudioRecord$NativeEventHandler  android.media.AudioRecord$OnRecordPositionUpdateListener  android.media.AudioRecord$OnRoutingChangedListener  android.media.AudioRecord$ReadMode
InnerClasses:
  public Builder = android.media.AudioAttributes$Builder of android.media.AudioAttributes
  public Builder = android.media.AudioFormat$Builder of android.media.AudioFormat
  public Builder = android.media.AudioRecord$Builder of android.media.AudioRecord
  public final MetricsConstants = android.media.AudioRecord$MetricsConstants of android.media.AudioRecord
  private NativeEventHandler = android.media.AudioRecord$NativeEventHandler of android.media.AudioRecord
  public abstract OnRecordPositionUpdateListener = android.media.AudioRecord$OnRecordPositionUpdateListener of android.media.AudioRecord
  public abstract OnRoutingChangedListener = android.media.AudioRecord$OnRoutingChangedListener of android.media.AudioRecord
  public abstract ReadMode = android.media.AudioRecord$ReadMode of android.media.AudioRecord
  public abstract OnRoutingChangedListener = android.media.AudioRouting$OnRoutingChangedListener of android.media.AudioRouting
  public abstract Stub = android.media.IAudioService$Stub of android.media.IAudioService