media/extensions/gvr
andrewlewis 31911ca54a Drain audio processors on reconfiguration
Previously we would get a new AudioTrack and flush all audio processors if any
AudioProcessor needed to be flushed on reconfiguration. This was problematic for
the case of TrimmingAudioProcessor because it could become active or inactive
due to transitioning to a period with gapless metadata or without it (we don't
keep it active all the time because it is wasteful to populate its end buffer
for content that is not gapless).

This change handles the case where we don't need an AudioTrack but
AudioProcessors do need to be flushed. In this case we drain all the audio
processors when next handling data then switch to the new configuration.

This avoids truncation when period transitions change whether
TrimmingAudioProcessor is active but don't require a new AudioTrack, and is also
a step towards draining the AudioTrack when transitioning between periods if we
do need a new AudioTrack.

To do this, it needs to be possible to drain any pending output data from an
AudioProcessor after it's configured to a new format, so this change makes sure
AudioProcessors allow calling playToEndOfStream and getOutput after
reconfiguration and before flush.

PiperOrigin-RevId: 234033552
2019-02-18 17:40:48 +00:00
..
src/main Drain audio processors on reconfiguration 2019-02-18 17:40:48 +00:00
build.gradle Update Robolectric and Truth. 2019-02-18 15:59:32 +00:00
README.md Remove "r" from instructions for extension modules 2018-03-07 15:24:33 +00:00

ExoPlayer GVR extension

The GVR extension wraps the Google VR SDK for Android. It provides a GvrAudioProcessor, which uses GvrAudioSurround to provide binaural rendering of surround sound and ambisonic soundfields.

Getting the extension

The easiest way to use the extension is to add it as a gradle dependency:

implementation 'com.google.android.exoplayer:extension-gvr:2.X.X'

where 2.X.X is the version, which must match the version of the ExoPlayer library being used.

Alternatively, you can clone the ExoPlayer repository and depend on the module locally. Instructions for doing this can be found in ExoPlayer's top level README.

Using the extension

  • If using DefaultRenderersFactory, override DefaultRenderersFactory.buildAudioProcessors to return a GvrAudioProcessor.
  • If constructing renderers directly, pass a GvrAudioProcessor to MediaCodecAudioRenderer's constructor.
  • Javadoc: Classes matching com.google.android.exoplayer2.ext.gvr.* belong to this module.