Package com.google.android.exoplayer2.audio

## Class DefaultAudioTrackBufferSizeProvider

- java.lang.Object
- - com.google.android.exoplayer2.audio.DefaultAudioTrackBufferSizeProvider

- All Implemented Interfaces:
    `DefaultAudioSink.AudioTrackBufferSizeProvider`

      public class DefaultAudioTrackBufferSizeProvider
      extends Object
      implements DefaultAudioSink.AudioTrackBufferSizeProvider

  Provide the buffer size to use when creating an `AudioTrack`.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `DefaultAudioTrackBufferSizeProvider.Builder` | A builder to create `DefaultAudioTrackBufferSizeProvider` instances.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `int` | `ac3BufferMultiplicationFactor` | The multiplication factor to apply to AC3 passthrough buffer to avoid underruns on some devices (e.g., Broadcom 7271).
    `protected int` | `maxPcmBufferDurationUs` | The maximum length for PCM `AudioTrack` buffers, in microseconds.
    `protected int` | `minPcmBufferDurationUs` | The minimum length for PCM `AudioTrack` buffers, in microseconds.
    `protected int` | `offloadBufferDurationUs` | The length for offload `AudioTrack` buffers, in microseconds.
    `protected int` | `passthroughBufferDurationUs` | The length for passthrough `AudioTrack` buffers, in microseconds.
    `protected int` | `pcmBufferMultiplicationFactor` | The multiplication factor to apply to the minimum buffer size requested.

    - ### Fields inherited from interface com.google.android.exoplayer2.audio.DefaultAudioSink.AudioTrackBufferSizeProvider

      `DEFAULT`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `DefaultAudioTrackBufferSizeProvider​(DefaultAudioTrackBufferSizeProvider.Builder builder)` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected static int` | `durationUsToBytes​(int durationUs, int samplingRate, int frameSize)` |
    `protected int` | `get1xBufferSizeInBytes​(int minBufferSizeInBytes, int encoding, int outputMode, int pcmFrameSize, int sampleRate, int bitrate)` | Returns the buffer size for playback at 1x speed.
    `int` | `getBufferSizeInBytes​(int minBufferSizeInBytes, @com.google.android.exoplayer2.C.Encoding int encoding, @com.google.android.exoplayer2.audio.DefaultAudioSink.OutputMode int outputMode, int pcmFrameSize, int sampleRate, int bitrate, double maxAudioTrackPlaybackSpeed)` | Returns the buffer size to use when creating an `AudioTrack` for a specific format and output mode.
    `protected static int` | `getMaximumEncodedRateBytesPerSecond​(@com.google.android.exoplayer2.C.Encoding int encoding)` |
    `protected int` | `getOffloadBufferSizeInBytes​(@com.google.android.exoplayer2.C.Encoding int encoding)` | Returns the buffer size for offload playback.
    `protected int` | `getPassthroughBufferSizeInBytes​(@com.google.android.exoplayer2.C.Encoding int encoding, int bitrate)` | Returns the buffer size for passthrough playback.
    `protected int` | `getPcmBufferSizeInBytes​(int minBufferSizeInBytes, int samplingRate, int frameSize)` | Returns the buffer size for PCM playback.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### minPcmBufferDurationUs

          protected final int minPcmBufferDurationUs

      The minimum length for PCM `AudioTrack` buffers, in microseconds.

    - #### maxPcmBufferDurationUs

          protected final int maxPcmBufferDurationUs

      The maximum length for PCM `AudioTrack` buffers, in microseconds.

    - #### pcmBufferMultiplicationFactor

          protected final int pcmBufferMultiplicationFactor

      The multiplication factor to apply to the minimum buffer size requested.

    - #### passthroughBufferDurationUs

          protected final int passthroughBufferDurationUs

      The length for passthrough `AudioTrack` buffers, in microseconds.

    - #### offloadBufferDurationUs

          protected final int offloadBufferDurationUs

      The length for offload `AudioTrack` buffers, in microseconds.

    - #### ac3BufferMultiplicationFactor

          public final int ac3BufferMultiplicationFactor

      The multiplication factor to apply to AC3 passthrough buffer to avoid underruns on some devices (e.g., Broadcom 7271).

  - ### Constructor Detail

    - #### DefaultAudioTrackBufferSizeProvider

          protected DefaultAudioTrackBufferSizeProvider​(DefaultAudioTrackBufferSizeProvider.Builder builder)

  - ### Method Detail

    - #### getBufferSizeInBytes

          public int getBufferSizeInBytes​(int minBufferSizeInBytes,
                                          @com.google.android.exoplayer2.C.Encoding int encoding,
                                          @com.google.android.exoplayer2.audio.DefaultAudioSink.OutputMode int outputMode,
                                          int pcmFrameSize,
                                          int sampleRate,
                                          int bitrate,
                                          double maxAudioTrackPlaybackSpeed)

      Description copied from interface: `DefaultAudioSink.AudioTrackBufferSizeProvider`
      Returns the buffer size to use when creating an `AudioTrack` for a specific format and output mode.
      Specified by:
        `getBufferSizeInBytes` in interface `DefaultAudioSink.AudioTrackBufferSizeProvider`
      Parameters:
        `minBufferSizeInBytes` - The minimum buffer size in bytes required to play this format. See `AudioTrack.getMinBufferSize(int, int, int)`.
        `encoding` - The `C.Encoding` of the format.
        `outputMode` - How the audio will be played. One of the `output modes`.
        `pcmFrameSize` - The size of the PCM frames if the `encoding` is PCM, 1 otherwise, in bytes.
        `sampleRate` - The sample rate of the format, in Hz.
        `bitrate` - The bitrate of the audio stream if the stream is compressed, or `Format.NO_VALUE` if `encoding` is PCM or the bitrate is not known.
        `maxAudioTrackPlaybackSpeed` - The maximum speed the content will be played using `AudioTrack.setPlaybackParams(android.media.PlaybackParams)`. 0.5 is 2x slow motion, 1 is real time, 2 is 2x fast forward, etc. This will be `1` unless `DefaultAudioSink.Builder.setEnableAudioTrackPlaybackParams(boolean)` is enabled.
      Returns:
        The computed buffer size in bytes. It should always be `>= minBufferSizeInBytes`. The computed buffer size must contain an integer number of frames: `bufferSizeInBytes % pcmFrameSize == 0`.

    - #### get1xBufferSizeInBytes

          protected int get1xBufferSizeInBytes​(int minBufferSizeInBytes,
                                               int encoding,
                                               int outputMode,
                                               int pcmFrameSize,
                                               int sampleRate,
                                               int bitrate)

      Returns the buffer size for playback at 1x speed.

    - #### getPcmBufferSizeInBytes

          protected int getPcmBufferSizeInBytes​(int minBufferSizeInBytes,
                                                int samplingRate,
                                                int frameSize)

      Returns the buffer size for PCM playback.

    - #### getPassthroughBufferSizeInBytes

          protected int getPassthroughBufferSizeInBytes​(@com.google.android.exoplayer2.C.Encoding int encoding,
                                                        int bitrate)

      Returns the buffer size for passthrough playback.

    - #### getOffloadBufferSizeInBytes

          protected int getOffloadBufferSizeInBytes​(@com.google.android.exoplayer2.C.Encoding int encoding)

      Returns the buffer size for offload playback.

    - #### durationUsToBytes

          protected static int durationUsToBytes​(int durationUs,
                                                 int samplingRate,
                                                 int frameSize)

    - #### getMaximumEncodedRateBytesPerSecond

          protected static int getMaximumEncodedRateBytesPerSecond​(@com.google.android.exoplayer2.C.Encoding int encoding)