mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Introduce an offload option to DefaultRederersFactory
This introduces an option to turn on offload in the audio sink. #exo-offload PiperOrigin-RevId: 314907088
This commit is contained in:
parent
97a80ac624
commit
8dedbbbfb4
1 changed files with 24 additions and 1 deletions
|
|
@ -24,6 +24,7 @@ import com.google.android.exoplayer2.audio.AudioCapabilities;
|
||||||
import com.google.android.exoplayer2.audio.AudioProcessor;
|
import com.google.android.exoplayer2.audio.AudioProcessor;
|
||||||
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
|
import com.google.android.exoplayer2.audio.AudioRendererEventListener;
|
||||||
import com.google.android.exoplayer2.audio.DefaultAudioSink;
|
import com.google.android.exoplayer2.audio.DefaultAudioSink;
|
||||||
|
import com.google.android.exoplayer2.audio.DefaultAudioSink.DefaultAudioProcessorChain;
|
||||||
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer;
|
import com.google.android.exoplayer2.audio.MediaCodecAudioRenderer;
|
||||||
import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer;
|
import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer;
|
||||||
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
|
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
|
||||||
|
|
@ -90,6 +91,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
private boolean enableDecoderFallback;
|
private boolean enableDecoderFallback;
|
||||||
private MediaCodecSelector mediaCodecSelector;
|
private MediaCodecSelector mediaCodecSelector;
|
||||||
private @MediaCodecRenderer.MediaCodecOperationMode int mediaCodecOperationMode;
|
private @MediaCodecRenderer.MediaCodecOperationMode int mediaCodecOperationMode;
|
||||||
|
private boolean enableOffload;
|
||||||
|
|
||||||
/** @param context A {@link Context}. */
|
/** @param context A {@link Context}. */
|
||||||
public DefaultRenderersFactory(Context context) {
|
public DefaultRenderersFactory(Context context) {
|
||||||
|
|
@ -183,6 +185,20 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether audio should be played using the offload path. Audio offload disables audio
|
||||||
|
* processors (for example speed adjustment).
|
||||||
|
*
|
||||||
|
* <p>The default value is {@code false}.
|
||||||
|
*
|
||||||
|
* @param enableOffload If audio offload should be used.
|
||||||
|
* @return This factory, for convenience.
|
||||||
|
*/
|
||||||
|
public DefaultRenderersFactory setEnableAudioOffload(boolean enableOffload) {
|
||||||
|
this.enableOffload = enableOffload;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the maximum duration for which video renderers can attempt to seamlessly join an ongoing
|
* Sets the maximum duration for which video renderers can attempt to seamlessly join an ongoing
|
||||||
* playback.
|
* playback.
|
||||||
|
|
@ -223,6 +239,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
buildAudioProcessors(),
|
buildAudioProcessors(),
|
||||||
eventHandler,
|
eventHandler,
|
||||||
audioRendererEventListener,
|
audioRendererEventListener,
|
||||||
|
enableOffload,
|
||||||
renderersList);
|
renderersList);
|
||||||
buildTextRenderers(context, textRendererOutput, eventHandler.getLooper(),
|
buildTextRenderers(context, textRendererOutput, eventHandler.getLooper(),
|
||||||
extensionRendererMode, renderersList);
|
extensionRendererMode, renderersList);
|
||||||
|
|
@ -373,6 +390,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
* before output. May be empty.
|
* before output. May be empty.
|
||||||
* @param eventHandler A handler to use when invoking event listeners and outputs.
|
* @param eventHandler A handler to use when invoking event listeners and outputs.
|
||||||
* @param eventListener An event listener.
|
* @param eventListener An event listener.
|
||||||
|
* @param enableOffload If the renderer should use audio offload for all supported formats.
|
||||||
* @param out An array to which the built renderers should be appended.
|
* @param out An array to which the built renderers should be appended.
|
||||||
*/
|
*/
|
||||||
protected void buildAudioRenderers(
|
protected void buildAudioRenderers(
|
||||||
|
|
@ -383,6 +401,7 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
AudioProcessor[] audioProcessors,
|
AudioProcessor[] audioProcessors,
|
||||||
Handler eventHandler,
|
Handler eventHandler,
|
||||||
AudioRendererEventListener eventListener,
|
AudioRendererEventListener eventListener,
|
||||||
|
boolean enableOffload,
|
||||||
ArrayList<Renderer> out) {
|
ArrayList<Renderer> out) {
|
||||||
MediaCodecAudioRenderer audioRenderer =
|
MediaCodecAudioRenderer audioRenderer =
|
||||||
new MediaCodecAudioRenderer(
|
new MediaCodecAudioRenderer(
|
||||||
|
|
@ -391,7 +410,11 @@ public class DefaultRenderersFactory implements RenderersFactory {
|
||||||
enableDecoderFallback,
|
enableDecoderFallback,
|
||||||
eventHandler,
|
eventHandler,
|
||||||
eventListener,
|
eventListener,
|
||||||
new DefaultAudioSink(AudioCapabilities.getCapabilities(context), audioProcessors));
|
new DefaultAudioSink(
|
||||||
|
AudioCapabilities.getCapabilities(context),
|
||||||
|
new DefaultAudioProcessorChain(audioProcessors),
|
||||||
|
/* enableFloatOutput= */ false,
|
||||||
|
enableOffload));
|
||||||
audioRenderer.experimental_setMediaCodecOperationMode(mediaCodecOperationMode);
|
audioRenderer.experimental_setMediaCodecOperationMode(mediaCodecOperationMode);
|
||||||
out.add(audioRenderer);
|
out.add(audioRenderer);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue