trimRange = trimRangeSlider.getValues();
+ trimStartMs = Math.round(1000 * trimRange.get(0));
+ trimEndMs = Math.round(1000 * trimRange.get(1));
})
.create()
.show();
}
- @RequiresNonNull("selectedFileTextView")
- private void selectFileInDialog(DialogInterface dialog, int which) {
- inputUriPosition = which;
- selectedFileTextView.setText(URI_DESCRIPTIONS[inputUriPosition]);
- }
-
@RequiresNonNull("demoEffectsSelections")
private void selectDemoEffect(DialogInterface dialog, int which, boolean isChecked) {
demoEffectsSelections[which] = isChecked;
- if (!isChecked || which != PERIODIC_VIGNETTE_INDEX) {
+ if (!isChecked) {
return;
}
+ switch (which) {
+ case COLOR_FILTERS_INDEX:
+ controlColorFiltersSettings();
+ break;
+ case RGB_ADJUSTMENTS_INDEX:
+ controlRgbAdjustmentsScale();
+ break;
+ case CONTRAST_INDEX:
+ controlContrastSettings();
+ break;
+ case HSL_ADJUSTMENT_INDEX:
+ controlHslAdjustmentSettings();
+ break;
+ case PERIODIC_VIGNETTE_INDEX:
+ controlPeriodicVignetteSettings();
+ break;
+ }
+ }
+
+ private void controlColorFiltersSettings() {
+ new AlertDialog.Builder(/* context= */ this)
+ .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> dialogInterface.dismiss())
+ .setSingleChoiceItems(
+ this.getResources().getStringArray(R.array.color_filter_options),
+ colorFilterSelection,
+ (DialogInterface dialogInterface, int i) -> {
+ checkState(
+ i == COLOR_FILTER_GRAYSCALE
+ || i == COLOR_FILTER_INVERTED
+ || i == COLOR_FILTER_SEPIA);
+ colorFilterSelection = i;
+ dialogInterface.dismiss();
+ })
+ .create()
+ .show();
+ }
+
+ private void controlRgbAdjustmentsScale() {
+ View dialogView =
+ getLayoutInflater().inflate(R.layout.rgb_adjustment_options, /* root= */ null);
+ Slider redScaleSlider = checkNotNull(dialogView.findViewById(R.id.rgb_adjustment_red_scale));
+ Slider greenScaleSlider =
+ checkNotNull(dialogView.findViewById(R.id.rgb_adjustment_green_scale));
+ Slider blueScaleSlider = checkNotNull(dialogView.findViewById(R.id.rgb_adjustment_blue_scale));
+ new AlertDialog.Builder(/* context= */ this)
+ .setTitle(R.string.rgb_adjustment_options)
+ .setView(dialogView)
+ .setPositiveButton(
+ android.R.string.ok,
+ (DialogInterface dialogInterface, int i) -> {
+ rgbAdjustmentRedScale = redScaleSlider.getValue();
+ rgbAdjustmentGreenScale = greenScaleSlider.getValue();
+ rgbAdjustmentBlueScale = blueScaleSlider.getValue();
+ })
+ .create()
+ .show();
+ }
+
+ private void controlContrastSettings() {
+ View dialogView = getLayoutInflater().inflate(R.layout.contrast_options, /* root= */ null);
+ Slider contrastSlider = checkNotNull(dialogView.findViewById(R.id.contrast_slider));
+ new AlertDialog.Builder(/* context= */ this)
+ .setView(dialogView)
+ .setPositiveButton(
+ android.R.string.ok,
+ (DialogInterface dialogInterface, int i) -> contrastValue = contrastSlider.getValue())
+ .create()
+ .show();
+ }
+
+ private void controlHslAdjustmentSettings() {
+ View dialogView =
+ getLayoutInflater().inflate(R.layout.hsl_adjustment_options, /* root= */ null);
+ Slider hueAdjustmentSlider = checkNotNull(dialogView.findViewById(R.id.hsl_adjustments_hue));
+ Slider saturationAdjustmentSlider =
+ checkNotNull(dialogView.findViewById(R.id.hsl_adjustments_saturation));
+ Slider lightnessAdjustmentSlider =
+ checkNotNull(dialogView.findViewById(R.id.hsl_adjustment_lightness));
+ new AlertDialog.Builder(/* context= */ this)
+ .setTitle(R.string.hsl_adjustment_options)
+ .setView(dialogView)
+ .setPositiveButton(
+ android.R.string.ok,
+ (DialogInterface dialogInterface, int i) -> {
+ hueAdjustment = hueAdjustmentSlider.getValue();
+ saturationAdjustment = saturationAdjustmentSlider.getValue();
+ lightnessAdjustment = lightnessAdjustmentSlider.getValue();
+ })
+ .create()
+ .show();
+ }
+
+ private void controlPeriodicVignetteSettings() {
View dialogView =
getLayoutInflater().inflate(R.layout.periodic_vignette_options, /* root= */ null);
Slider centerXSlider =
@@ -377,7 +590,9 @@ private void selectDemoEffect(DialogInterface dialog, int which, boolean isCheck
"resolutionHeightSpinner",
"scaleSpinner",
"rotateSpinner",
+ "enableDebugPreviewCheckBox",
"enableRequestSdrToneMappingCheckBox",
+ "forceInterpretHdrVideoAsSdrCheckBox",
"enableHdrEditingCheckBox",
"selectDemoEffectsButton"
})
@@ -397,7 +612,9 @@ private void onRemoveAudio(View view) {
"resolutionHeightSpinner",
"scaleSpinner",
"rotateSpinner",
+ "enableDebugPreviewCheckBox",
"enableRequestSdrToneMappingCheckBox",
+ "forceInterpretHdrVideoAsSdrCheckBox",
"enableHdrEditingCheckBox",
"selectDemoEffectsButton"
})
@@ -416,7 +633,9 @@ private void onRemoveVideo(View view) {
"resolutionHeightSpinner",
"scaleSpinner",
"rotateSpinner",
+ "enableDebugPreviewCheckBox",
"enableRequestSdrToneMappingCheckBox",
+ "forceInterpretHdrVideoAsSdrCheckBox",
"enableHdrEditingCheckBox",
"selectDemoEffectsButton"
})
@@ -426,8 +645,10 @@ private void enableTrackSpecificOptions(boolean isAudioEnabled, boolean isVideoE
resolutionHeightSpinner.setEnabled(isVideoEnabled);
scaleSpinner.setEnabled(isVideoEnabled);
rotateSpinner.setEnabled(isVideoEnabled);
+ enableDebugPreviewCheckBox.setEnabled(isVideoEnabled);
enableRequestSdrToneMappingCheckBox.setEnabled(
isRequestSdrToneMappingSupported() && isVideoEnabled);
+ forceInterpretHdrVideoAsSdrCheckBox.setEnabled(isVideoEnabled);
enableHdrEditingCheckBox.setEnabled(isVideoEnabled);
selectDemoEffectsButton.setEnabled(isVideoEnabled);
@@ -438,6 +659,7 @@ private void enableTrackSpecificOptions(boolean isAudioEnabled, boolean isVideoE
findViewById(R.id.rotate).setEnabled(isVideoEnabled);
findViewById(R.id.request_sdr_tone_mapping)
.setEnabled(isRequestSdrToneMappingSupported() && isVideoEnabled);
+ findViewById(R.id.force_interpret_hdr_video_as_sdr).setEnabled(isVideoEnabled);
findViewById(R.id.hdr_editing).setEnabled(isVideoEnabled);
}
diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/MatrixTransformationFactory.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/MatrixTransformationFactory.java
index 93a993c812a..042dd88c756 100644
--- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/MatrixTransformationFactory.java
+++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/MatrixTransformationFactory.java
@@ -17,8 +17,8 @@
import android.graphics.Matrix;
import com.google.android.exoplayer2.C;
-import com.google.android.exoplayer2.transformer.GlMatrixTransformation;
-import com.google.android.exoplayer2.transformer.MatrixTransformation;
+import com.google.android.exoplayer2.effect.GlMatrixTransformation;
+import com.google.android.exoplayer2.effect.MatrixTransformation;
import com.google.android.exoplayer2.util.Util;
/**
diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/PeriodicVignetteProcessor.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/PeriodicVignetteProcessor.java
index 3ea704ae513..57209af87c8 100644
--- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/PeriodicVignetteProcessor.java
+++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/PeriodicVignetteProcessor.java
@@ -16,39 +16,29 @@
package com.google.android.exoplayer2.transformerdemo;
import static com.google.android.exoplayer2.util.Assertions.checkArgument;
-import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull;
import android.content.Context;
import android.opengl.GLES20;
-import android.util.Size;
-import com.google.android.exoplayer2.transformer.FrameProcessingException;
-import com.google.android.exoplayer2.transformer.SingleFrameGlTextureProcessor;
+import android.util.Pair;
+import com.google.android.exoplayer2.effect.SingleFrameGlTextureProcessor;
+import com.google.android.exoplayer2.util.FrameProcessingException;
import com.google.android.exoplayer2.util.GlProgram;
import com.google.android.exoplayer2.util.GlUtil;
import java.io.IOException;
-import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/**
* A {@link SingleFrameGlTextureProcessor} that periodically dims the frames such that pixels are
* darker the further they are away from the frame center.
*/
-/* package */ final class PeriodicVignetteProcessor implements SingleFrameGlTextureProcessor {
- static {
- GlUtil.glAssertionsEnabled = true;
- }
+/* package */ final class PeriodicVignetteProcessor extends SingleFrameGlTextureProcessor {
private static final String VERTEX_SHADER_PATH = "vertex_shader_copy_es2.glsl";
private static final String FRAGMENT_SHADER_PATH = "fragment_shader_vignette_es2.glsl";
private static final float DIMMING_PERIOD_US = 5_600_000f;
- private float centerX;
- private float centerY;
- private float minInnerRadius;
- private float deltaInnerRadius;
- private float outerRadius;
-
- private @MonotonicNonNull Size outputSize;
- private @MonotonicNonNull GlProgram glProgram;
+ private final GlProgram glProgram;
+ private final float minInnerRadius;
+ private final float deltaInnerRadius;
/**
* Creates a new instance.
@@ -61,29 +51,35 @@
*
* The parameters are given in normalized texture coordinates from 0 to 1.
*
+ * @param context The {@link Context}.
+ * @param useHdr Whether input textures come from an HDR source. If {@code true}, colors will be
+ * in linear RGB BT.2020. If {@code false}, colors will be in linear RGB BT.709.
* @param centerX The x-coordinate of the center of the effect.
* @param centerY The y-coordinate of the center of the effect.
* @param minInnerRadius The lower bound of the radius that is unaffected by the effect.
* @param maxInnerRadius The upper bound of the radius that is unaffected by the effect.
* @param outerRadius The radius after which all pixels are black.
+ * @throws FrameProcessingException If a problem occurs while reading shader files.
*/
public PeriodicVignetteProcessor(
- float centerX, float centerY, float minInnerRadius, float maxInnerRadius, float outerRadius) {
+ Context context,
+ boolean useHdr,
+ float centerX,
+ float centerY,
+ float minInnerRadius,
+ float maxInnerRadius,
+ float outerRadius)
+ throws FrameProcessingException {
+ super(useHdr);
checkArgument(minInnerRadius <= maxInnerRadius);
checkArgument(maxInnerRadius <= outerRadius);
- this.centerX = centerX;
- this.centerY = centerY;
this.minInnerRadius = minInnerRadius;
this.deltaInnerRadius = maxInnerRadius - minInnerRadius;
- this.outerRadius = outerRadius;
- }
-
- @Override
- public void initialize(Context context, int inputTexId, int inputWidth, int inputHeight)
- throws IOException {
- outputSize = new Size(inputWidth, inputHeight);
- glProgram = new GlProgram(context, VERTEX_SHADER_PATH, FRAGMENT_SHADER_PATH);
- glProgram.setSamplerTexIdUniform("uTexSampler", inputTexId, /* texUnitIndex= */ 0);
+ try {
+ glProgram = new GlProgram(context, VERTEX_SHADER_PATH, FRAGMENT_SHADER_PATH);
+ } catch (IOException | GlUtil.GlException e) {
+ throw new FrameProcessingException(e);
+ }
glProgram.setFloatsUniform("uCenter", new float[] {centerX, centerY});
glProgram.setFloatsUniform("uOuterRadius", new float[] {outerRadius});
// Draw the frame on the entire normalized device coordinate space, from -1 to 1, for x and y.
@@ -94,14 +90,15 @@ public void initialize(Context context, int inputTexId, int inputWidth, int inpu
}
@Override
- public Size getOutputSize() {
- return checkStateNotNull(outputSize);
+ public Pair configure(int inputWidth, int inputHeight) {
+ return Pair.create(inputWidth, inputHeight);
}
@Override
- public void drawFrame(long presentationTimeUs) throws FrameProcessingException {
+ public void drawFrame(int inputTexId, long presentationTimeUs) throws FrameProcessingException {
try {
- checkStateNotNull(glProgram).use();
+ glProgram.use();
+ glProgram.setSamplerTexIdUniform("uTexSampler", inputTexId, /* texUnitIndex= */ 0);
double theta = presentationTimeUs * 2 * Math.PI / DIMMING_PERIOD_US;
float innerRadius =
minInnerRadius + deltaInnerRadius * (0.5f - 0.5f * (float) Math.cos(theta));
@@ -110,14 +107,17 @@ public void drawFrame(long presentationTimeUs) throws FrameProcessingException {
// The four-vertex triangle strip forms a quad.
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, /* first= */ 0, /* count= */ 4);
} catch (GlUtil.GlException e) {
- throw new FrameProcessingException(e);
+ throw new FrameProcessingException(e, presentationTimeUs);
}
}
@Override
- public void release() {
- if (glProgram != null) {
+ public void release() throws FrameProcessingException {
+ super.release();
+ try {
glProgram.delete();
+ } catch (GlUtil.GlException e) {
+ throw new FrameProcessingException(e);
}
}
}
diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java
index 2e4d6512012..a742c66aaaf 100644
--- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java
+++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java
@@ -17,10 +17,13 @@
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
+import static com.google.android.exoplayer2.util.Assertions.checkState;
import android.app.Activity;
+import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -28,6 +31,7 @@
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
@@ -36,11 +40,16 @@
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
+import com.google.android.exoplayer2.effect.Contrast;
+import com.google.android.exoplayer2.effect.GlEffect;
+import com.google.android.exoplayer2.effect.GlTextureProcessor;
+import com.google.android.exoplayer2.effect.HslAdjustment;
+import com.google.android.exoplayer2.effect.RgbAdjustment;
+import com.google.android.exoplayer2.effect.RgbFilter;
+import com.google.android.exoplayer2.effect.RgbMatrix;
+import com.google.android.exoplayer2.effect.SingleColorLut;
import com.google.android.exoplayer2.transformer.DefaultEncoderFactory;
-import com.google.android.exoplayer2.transformer.EncoderSelector;
-import com.google.android.exoplayer2.transformer.GlEffect;
import com.google.android.exoplayer2.transformer.ProgressHolder;
-import com.google.android.exoplayer2.transformer.SingleFrameGlTextureProcessor;
import com.google.android.exoplayer2.transformer.TransformationException;
import com.google.android.exoplayer2.transformer.TransformationRequest;
import com.google.android.exoplayer2.transformer.TransformationResult;
@@ -48,8 +57,11 @@
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout;
import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.exoplayer2.util.DebugTextViewHelper;
+import com.google.android.exoplayer2.util.DebugViewProvider;
+import com.google.android.exoplayer2.util.Effect;
import com.google.android.exoplayer2.util.Log;
import com.google.android.exoplayer2.util.Util;
+import com.google.android.material.card.MaterialCardView;
import com.google.android.material.progressindicator.LinearProgressIndicator;
import com.google.common.base.Stopwatch;
import com.google.common.base.Ticker;
@@ -66,7 +78,10 @@
public final class TransformerActivity extends AppCompatActivity {
private static final String TAG = "TransformerActivity";
- private @MonotonicNonNull StyledPlayerView playerView;
+ private @MonotonicNonNull Button displayInputButton;
+ private @MonotonicNonNull MaterialCardView inputCardView;
+ private @MonotonicNonNull StyledPlayerView inputPlayerView;
+ private @MonotonicNonNull StyledPlayerView outputPlayerView;
private @MonotonicNonNull TextView debugTextView;
private @MonotonicNonNull TextView informationTextView;
private @MonotonicNonNull ViewGroup progressViewGroup;
@@ -75,7 +90,8 @@ public final class TransformerActivity extends AppCompatActivity {
private @MonotonicNonNull AspectRatioFrameLayout debugFrame;
@Nullable private DebugTextViewHelper debugTextViewHelper;
- @Nullable private ExoPlayer player;
+ @Nullable private ExoPlayer inputPlayer;
+ @Nullable private ExoPlayer outputPlayer;
@Nullable private Transformer transformer;
@Nullable private File externalCacheFile;
@@ -84,16 +100,21 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.transformer_activity);
- playerView = findViewById(R.id.player_view);
+ inputCardView = findViewById(R.id.input_card_view);
+ inputPlayerView = findViewById(R.id.input_player_view);
+ outputPlayerView = findViewById(R.id.output_player_view);
debugTextView = findViewById(R.id.debug_text_view);
informationTextView = findViewById(R.id.information_text_view);
progressViewGroup = findViewById(R.id.progress_view_group);
progressIndicator = findViewById(R.id.progress_indicator);
debugFrame = findViewById(R.id.debug_aspect_ratio_frame_layout);
+ displayInputButton = findViewById(R.id.display_input_button);
+ displayInputButton.setOnClickListener(this::toggleInputVideoDisplay);
transformationStopwatch =
Stopwatch.createUnstarted(
new Ticker() {
+ @Override
public long read() {
return android.os.SystemClock.elapsedRealtimeNanos();
}
@@ -107,13 +128,17 @@ protected void onStart() {
checkNotNull(progressIndicator);
checkNotNull(informationTextView);
checkNotNull(transformationStopwatch);
- checkNotNull(playerView);
+ checkNotNull(inputCardView);
+ checkNotNull(inputPlayerView);
+ checkNotNull(outputPlayerView);
checkNotNull(debugTextView);
checkNotNull(progressViewGroup);
checkNotNull(debugFrame);
+ checkNotNull(displayInputButton);
startTransformation();
- playerView.onResume();
+ inputPlayerView.onResume();
+ outputPlayerView.onResume();
}
@Override
@@ -127,7 +152,8 @@ protected void onStop() {
// stop watch to be stopped in a transformer callback.
checkNotNull(transformationStopwatch).reset();
- checkNotNull(playerView).onPause();
+ checkNotNull(inputPlayerView).onPause();
+ checkNotNull(outputPlayerView).onPause();
releasePlayer();
checkNotNull(externalCacheFile).delete();
@@ -135,7 +161,10 @@ protected void onStop() {
}
@RequiresNonNull({
- "playerView",
+ "inputCardView",
+ "inputPlayerView",
+ "outputPlayerView",
+ "displayInputButton",
"debugTextView",
"informationTextView",
"progressIndicator",
@@ -161,7 +190,8 @@ private void startTransformation() {
throw new IllegalStateException(e);
}
informationTextView.setText(R.string.transformation_started);
- playerView.setVisibility(View.GONE);
+ inputCardView.setVisibility(View.GONE);
+ outputPlayerView.setVisibility(View.GONE);
Handler mainHandler = new Handler(getMainLooper());
ProgressHolder progressHolder = new ProgressHolder();
mainHandler.post(
@@ -200,20 +230,11 @@ private MediaItem createMediaItem(@Nullable Bundle bundle, Uri uri) {
return mediaItemBuilder.build();
}
- // Create a cache file, resetting it if it already exists.
- private File createExternalCacheFile(String fileName) throws IOException {
- File file = new File(getExternalCacheDir(), fileName);
- if (file.exists() && !file.delete()) {
- throw new IllegalStateException("Could not delete the previous transformer output file");
- }
- if (!file.createNewFile()) {
- throw new IllegalStateException("Could not create the transformer output file");
- }
- return file;
- }
-
@RequiresNonNull({
- "playerView",
+ "inputCardView",
+ "inputPlayerView",
+ "outputPlayerView",
+ "displayInputButton",
"debugTextView",
"informationTextView",
"transformationStopwatch",
@@ -251,6 +272,8 @@ private Transformer createTransformer(@Nullable Bundle bundle, String filePath)
requestBuilder.setEnableRequestSdrToneMapping(
bundle.getBoolean(ConfigurationActivity.ENABLE_REQUEST_SDR_TONE_MAPPING));
+ requestBuilder.experimental_setForceInterpretHdrVideoAsSdr(
+ bundle.getBoolean(ConfigurationActivity.FORCE_INTERPRET_HDR_VIDEO_AS_SDR));
requestBuilder.experimental_setEnableHdrEditing(
bundle.getBoolean(ConfigurationActivity.ENABLE_HDR_EDITING));
transformerBuilder
@@ -258,30 +281,79 @@ private Transformer createTransformer(@Nullable Bundle bundle, String filePath)
.setRemoveAudio(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_AUDIO))
.setRemoveVideo(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_VIDEO))
.setEncoderFactory(
- new DefaultEncoderFactory(
- EncoderSelector.DEFAULT,
- /* enableFallback= */ bundle.getBoolean(ConfigurationActivity.ENABLE_FALLBACK)));
-
- ImmutableList.Builder effects = new ImmutableList.Builder<>();
- @Nullable
- boolean[] selectedEffects =
- bundle.getBooleanArray(ConfigurationActivity.DEMO_EFFECTS_SELECTIONS);
- if (selectedEffects != null) {
- if (selectedEffects[0]) {
- effects.add(MatrixTransformationFactory.createDizzyCropEffect());
- }
- if (selectedEffects[1]) {
- try {
- Class> clazz =
- Class.forName("com.google.android.exoplayer2.transformerdemo.MediaPipeProcessor");
- Constructor> constructor =
- clazz.getConstructor(String.class, String.class, String.class);
- effects.add(
- () -> {
+ new DefaultEncoderFactory.Builder(this.getApplicationContext())
+ .setEnableFallback(bundle.getBoolean(ConfigurationActivity.ENABLE_FALLBACK))
+ .build());
+
+ transformerBuilder.setVideoEffects(createVideoEffectsListFromBundle(bundle));
+
+ if (bundle.getBoolean(ConfigurationActivity.ENABLE_DEBUG_PREVIEW)) {
+ transformerBuilder.setDebugViewProvider(new DemoDebugViewProvider());
+ }
+ }
+ return transformerBuilder
+ .addListener(
+ new Transformer.Listener() {
+ @Override
+ public void onTransformationCompleted(
+ MediaItem mediaItem, TransformationResult transformationResult) {
+ TransformerActivity.this.onTransformationCompleted(filePath, mediaItem);
+ }
+
+ @Override
+ public void onTransformationError(
+ MediaItem mediaItem, TransformationException exception) {
+ TransformerActivity.this.onTransformationError(exception);
+ }
+ })
+ .build();
+ }
+
+ /** Creates a cache file, resetting it if it already exists. */
+ private File createExternalCacheFile(String fileName) throws IOException {
+ File file = new File(getExternalCacheDir(), fileName);
+ if (file.exists() && !file.delete()) {
+ throw new IllegalStateException("Could not delete the previous transformer output file");
+ }
+ if (!file.createNewFile()) {
+ throw new IllegalStateException("Could not create the transformer output file");
+ }
+ return file;
+ }
+
+ private ImmutableList createVideoEffectsListFromBundle(Bundle bundle) {
+ @Nullable
+ boolean[] selectedEffects =
+ bundle.getBooleanArray(ConfigurationActivity.DEMO_EFFECTS_SELECTIONS);
+ if (selectedEffects == null) {
+ return ImmutableList.of();
+ }
+ ImmutableList.Builder effects = new ImmutableList.Builder<>();
+ if (selectedEffects[0]) {
+ effects.add(MatrixTransformationFactory.createDizzyCropEffect());
+ }
+ if (selectedEffects[1]) {
+ try {
+ Class> clazz =
+ Class.forName("com.google.android.exoplayer2.transformerdemo.MediaPipeProcessor");
+ Constructor> constructor =
+ clazz.getConstructor(
+ Context.class,
+ boolean.class,
+ String.class,
+ boolean.class,
+ String.class,
+ String.class);
+ effects.add(
+ (GlEffect)
+ (Context context, boolean useHdr) -> {
try {
- return (SingleFrameGlTextureProcessor)
+ return (GlTextureProcessor)
constructor.newInstance(
+ context,
+ useHdr,
/* graphName= */ "edge_detector_mediapipe_graph.binarypb",
+ /* isSingleFrameGraph= */ true,
/* inputStreamName= */ "input_video",
/* outputStreamName= */ "output_video");
} catch (Exception e) {
@@ -289,14 +361,77 @@ private Transformer createTransformer(@Nullable Bundle bundle, String filePath)
throw new RuntimeException("Failed to load MediaPipe processor", e);
}
});
- } catch (Exception e) {
- showToast(R.string.no_media_pipe_error);
+ } catch (Exception e) {
+ showToast(R.string.no_media_pipe_error);
+ }
+ }
+ if (selectedEffects[2]) {
+ switch (bundle.getInt(ConfigurationActivity.COLOR_FILTER_SELECTION)) {
+ case ConfigurationActivity.COLOR_FILTER_GRAYSCALE:
+ effects.add(RgbFilter.createGrayscaleFilter());
+ break;
+ case ConfigurationActivity.COLOR_FILTER_INVERTED:
+ effects.add(RgbFilter.createInvertedFilter());
+ break;
+ case ConfigurationActivity.COLOR_FILTER_SEPIA:
+ // W3C Sepia RGBA matrix with sRGB as a target color space:
+ // https://www.w3.org/TR/filter-effects-1/#sepiaEquivalent
+ // The matrix is defined for the sRGB color space and the Transformer library
+ // uses a linear RGB color space internally. Meaning this is only for demonstration
+ // purposes and it does not display a correct sepia frame.
+ float[] sepiaMatrix = {
+ 0.393f, 0.349f, 0.272f, 0, 0.769f, 0.686f, 0.534f, 0, 0.189f, 0.168f, 0.131f, 0, 0, 0,
+ 0, 1
+ };
+ effects.add((RgbMatrix) (presentationTimeUs, useHdr) -> sepiaMatrix);
+ break;
+ default:
+ throw new IllegalStateException(
+ "Unexpected color filter "
+ + bundle.getInt(ConfigurationActivity.COLOR_FILTER_SELECTION));
+ }
+ }
+ if (selectedEffects[3]) {
+ int length = 3;
+ int[][][] mapWhiteToGreenLut = new int[length][length][length];
+ int scale = 255 / (length - 1);
+ for (int r = 0; r < length; r++) {
+ for (int g = 0; g < length; g++) {
+ for (int b = 0; b < length; b++) {
+ mapWhiteToGreenLut[r][g][b] =
+ Color.rgb(/* red= */ r * scale, /* green= */ g * scale, /* blue= */ b * scale);
}
}
- if (selectedEffects[2]) {
- effects.add(
- () ->
+ }
+ mapWhiteToGreenLut[length - 1][length - 1][length - 1] = Color.GREEN;
+ effects.add(SingleColorLut.createFromCube(mapWhiteToGreenLut));
+ }
+ if (selectedEffects[4]) {
+ effects.add(
+ new RgbAdjustment.Builder()
+ .setRedScale(bundle.getFloat(ConfigurationActivity.RGB_ADJUSTMENT_RED_SCALE))
+ .setGreenScale(bundle.getFloat(ConfigurationActivity.RGB_ADJUSTMENT_GREEN_SCALE))
+ .setBlueScale(bundle.getFloat(ConfigurationActivity.RGB_ADJUSTMENT_BLUE_SCALE))
+ .build());
+ }
+ if (selectedEffects[5]) {
+ effects.add(
+ new HslAdjustment.Builder()
+ .adjustHue(bundle.getFloat(ConfigurationActivity.HSL_ADJUSTMENTS_HUE))
+ .adjustSaturation(bundle.getFloat(ConfigurationActivity.HSL_ADJUSTMENTS_SATURATION))
+ .adjustLightness(bundle.getFloat(ConfigurationActivity.HSL_ADJUSTMENTS_LIGHTNESS))
+ .build());
+ }
+ if (selectedEffects[6]) {
+ effects.add(new Contrast(bundle.getFloat(ConfigurationActivity.CONTRAST_VALUE)));
+ }
+ if (selectedEffects[7]) {
+ effects.add(
+ (GlEffect)
+ (Context context, boolean useHdr) ->
new PeriodicVignetteProcessor(
+ context,
+ useHdr,
bundle.getFloat(ConfigurationActivity.PERIODIC_VIGNETTE_CENTER_X),
bundle.getFloat(ConfigurationActivity.PERIODIC_VIGNETTE_CENTER_Y),
/* minInnerRadius= */ bundle.getFloat(
@@ -304,36 +439,17 @@ private Transformer createTransformer(@Nullable Bundle bundle, String filePath)
/* maxInnerRadius= */ bundle.getFloat(
ConfigurationActivity.PERIODIC_VIGNETTE_OUTER_RADIUS),
bundle.getFloat(ConfigurationActivity.PERIODIC_VIGNETTE_OUTER_RADIUS)));
- }
- if (selectedEffects[3]) {
- effects.add(MatrixTransformationFactory.createSpin3dEffect());
- }
- if (selectedEffects[4]) {
- effects.add(BitmapOverlayProcessor::new);
- }
- if (selectedEffects[5]) {
- effects.add(MatrixTransformationFactory.createZoomInTransition());
- }
- transformerBuilder.setVideoFrameEffects(effects.build());
- }
}
- return transformerBuilder
- .addListener(
- new Transformer.Listener() {
- @Override
- public void onTransformationCompleted(
- MediaItem mediaItem, TransformationResult transformationResult) {
- TransformerActivity.this.onTransformationCompleted(filePath);
- }
-
- @Override
- public void onTransformationError(
- MediaItem mediaItem, TransformationException exception) {
- TransformerActivity.this.onTransformationError(exception);
- }
- })
- .setDebugViewProvider(new DemoDebugViewProvider())
- .build();
+ if (selectedEffects[8]) {
+ effects.add(MatrixTransformationFactory.createSpin3dEffect());
+ }
+ if (selectedEffects[9]) {
+ effects.add((GlEffect) BitmapOverlayProcessor::new);
+ }
+ if (selectedEffects[10]) {
+ effects.add(MatrixTransformationFactory.createZoomInTransition());
+ }
+ return effects.build();
}
@RequiresNonNull({
@@ -347,44 +463,66 @@ private void onTransformationError(TransformationException exception) {
informationTextView.setText(R.string.transformation_error);
progressViewGroup.setVisibility(View.GONE);
debugFrame.removeAllViews();
- Toast.makeText(
- TransformerActivity.this, "Transformation error: " + exception, Toast.LENGTH_LONG)
+ Toast.makeText(getApplicationContext(), "Transformation error: " + exception, Toast.LENGTH_LONG)
.show();
Log.e(TAG, "Transformation error", exception);
}
@RequiresNonNull({
- "playerView",
+ "inputCardView",
+ "inputPlayerView",
+ "outputPlayerView",
+ "displayInputButton",
"debugTextView",
"informationTextView",
"progressViewGroup",
"debugFrame",
"transformationStopwatch",
})
- private void onTransformationCompleted(String filePath) {
+ private void onTransformationCompleted(String filePath, MediaItem inputMediaItem) {
transformationStopwatch.stop();
informationTextView.setText(
getString(
R.string.transformation_completed, transformationStopwatch.elapsed(TimeUnit.SECONDS)));
progressViewGroup.setVisibility(View.GONE);
debugFrame.removeAllViews();
- playerView.setVisibility(View.VISIBLE);
- playMediaItem(MediaItem.fromUri("file://" + filePath));
+ inputCardView.setVisibility(View.VISIBLE);
+ outputPlayerView.setVisibility(View.VISIBLE);
+ displayInputButton.setVisibility(View.VISIBLE);
+ playMediaItems(inputMediaItem, MediaItem.fromUri("file://" + filePath));
Log.d(TAG, "Output file path: file://" + filePath);
}
- @RequiresNonNull({"playerView", "debugTextView"})
- private void playMediaItem(MediaItem mediaItem) {
- playerView.setPlayer(null);
+ @RequiresNonNull({
+ "inputCardView",
+ "inputPlayerView",
+ "outputPlayerView",
+ "debugTextView",
+ })
+ private void playMediaItems(MediaItem inputMediaItem, MediaItem outputMediaItem) {
+ inputPlayerView.setPlayer(null);
+ outputPlayerView.setPlayer(null);
releasePlayer();
- ExoPlayer player = new ExoPlayer.Builder(/* context= */ this).build();
- playerView.setPlayer(player);
- player.setMediaItem(mediaItem);
- player.play();
- player.prepare();
- this.player = player;
- debugTextViewHelper = new DebugTextViewHelper(player, debugTextView);
+ ExoPlayer inputPlayer = new ExoPlayer.Builder(/* context= */ this).build();
+ inputPlayerView.setPlayer(inputPlayer);
+ inputPlayerView.setControllerAutoShow(false);
+ inputPlayer.setMediaItem(inputMediaItem);
+ inputPlayer.prepare();
+ this.inputPlayer = inputPlayer;
+ inputPlayer.setVolume(0f);
+
+ ExoPlayer outputPlayer = new ExoPlayer.Builder(/* context= */ this).build();
+ outputPlayerView.setPlayer(outputPlayer);
+ outputPlayerView.setControllerAutoShow(false);
+ outputPlayer.setMediaItem(outputMediaItem);
+ outputPlayer.prepare();
+ this.outputPlayer = outputPlayer;
+
+ inputPlayer.play();
+ outputPlayer.play();
+
+ debugTextViewHelper = new DebugTextViewHelper(outputPlayer, debugTextView);
debugTextViewHelper.start();
}
@@ -393,9 +531,13 @@ private void releasePlayer() {
debugTextViewHelper.stop();
debugTextViewHelper = null;
}
- if (player != null) {
- player.release();
- player = null;
+ if (inputPlayer != null) {
+ inputPlayer.release();
+ inputPlayer = null;
+ }
+ if (outputPlayer != null) {
+ outputPlayer.release();
+ outputPlayer = null;
}
}
@@ -412,11 +554,45 @@ private void showToast(@StringRes int messageResource) {
Toast.makeText(getApplicationContext(), getString(messageResource), Toast.LENGTH_LONG).show();
}
- private final class DemoDebugViewProvider implements Transformer.DebugViewProvider {
+ @RequiresNonNull({
+ "inputCardView",
+ "displayInputButton",
+ })
+ private void toggleInputVideoDisplay(View view) {
+ if (inputCardView.getVisibility() == View.GONE) {
+ inputCardView.setVisibility(View.VISIBLE);
+ displayInputButton.setText(getString(R.string.hide_input_video));
+ } else if (inputCardView.getVisibility() == View.VISIBLE) {
+ checkNotNull(inputPlayer).pause();
+ inputCardView.setVisibility(View.GONE);
+ displayInputButton.setText(getString(R.string.show_input_video));
+ }
+ }
+
+ private final class DemoDebugViewProvider implements DebugViewProvider {
+
+ private @MonotonicNonNull SurfaceView surfaceView;
+ private int width;
+ private int height;
+
+ public DemoDebugViewProvider() {
+ width = C.LENGTH_UNSET;
+ height = C.LENGTH_UNSET;
+ }
@Nullable
@Override
public SurfaceView getDebugPreviewSurfaceView(int width, int height) {
+ checkState(
+ surfaceView == null || (this.width == width && this.height == height),
+ "Transformer should not change the output size mid-transformation.");
+ if (surfaceView != null) {
+ return surfaceView;
+ }
+
+ this.width = width;
+ this.height = height;
+
// Update the UI on the main thread and wait for the output surface to be available.
CountDownLatch surfaceCreatedCountDownLatch = new CountDownLatch(1);
SurfaceView surfaceView = new SurfaceView(/* context= */ TransformerActivity.this);
@@ -453,6 +629,7 @@ public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
Thread.currentThread().interrupt();
return null;
}
+ this.surfaceView = surfaceView;
return surfaceView;
}
}
diff --git a/demos/transformer/src/main/res/layout/configuration_activity.xml b/demos/transformer/src/main/res/layout/configuration_activity.xml
index 2879d6a637a..2a481bea698 100644
--- a/demos/transformer/src/main/res/layout/configuration_activity.xml
+++ b/demos/transformer/src/main/res/layout/configuration_activity.xml
@@ -34,16 +34,26 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+ app:layout_constraintTop_toBottomOf="@+id/configuration_text_view" />
+ app:layout_constraintTop_toBottomOf="@+id/select_preset_file_button" />
+ android:layout_weight="1">
+ android:layout_gravity="end"
+ android:id="@+id/remove_audio_checkbox"/>
-
+
+ android:layout_gravity="end" />
+ android:layout_weight="1">
+ android:layout_gravity="end" />
+ android:layout_weight="1">
+ android:layout_gravity="end" />
+ android:layout_weight="1">
+ android:layout_weight="1">
+
+
+
+
+ android:layout_gravity="end" />
+ android:layout_weight="1">
+ android:layout_gravity="end" />
+
+
+
+
diff --git a/demos/transformer/src/main/res/layout/contrast_options.xml b/demos/transformer/src/main/res/layout/contrast_options.xml
new file mode 100644
index 00000000000..4ccfdc0db5f
--- /dev/null
+++ b/demos/transformer/src/main/res/layout/contrast_options.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/transformer/src/main/res/layout/hsl_adjustment_options.xml b/demos/transformer/src/main/res/layout/hsl_adjustment_options.xml
new file mode 100644
index 00000000000..7b847ad8711
--- /dev/null
+++ b/demos/transformer/src/main/res/layout/hsl_adjustment_options.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/transformer/src/main/res/layout/rgb_adjustment_options.xml b/demos/transformer/src/main/res/layout/rgb_adjustment_options.xml
new file mode 100644
index 00000000000..c87e8fad179
--- /dev/null
+++ b/demos/transformer/src/main/res/layout/rgb_adjustment_options.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demos/transformer/src/main/res/layout/transformer_activity.xml b/demos/transformer/src/main/res/layout/transformer_activity.xml
index 67db6f107cc..1f4c110cfe6 100644
--- a/demos/transformer/src/main/res/layout/transformer_activity.xml
+++ b/demos/transformer/src/main/res/layout/transformer_activity.xml
@@ -29,42 +29,113 @@
app:cardElevation="2dp"
android:gravity="center_vertical" >
-
+ android:layout_height="wrap_content">
+
+
+
+
+
+
+
-
+
+
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="8dp"
+ android:padding="8dp"
+ android:text="@string/input_video" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+ android:layout_height="wrap_content" />
@@ -96,5 +167,9 @@
+
+
+
+
diff --git a/demos/transformer/src/main/res/values/strings.xml b/demos/transformer/src/main/res/values/strings.xml
index 50ac310080e..6f26949a591 100644
--- a/demos/transformer/src/main/res/values/strings.xml
+++ b/demos/transformer/src/main/res/values/strings.xml
@@ -17,7 +17,8 @@
Transformer Demo
Configuration
- Choose file
+ Choose preset file
+ Choose local file
Remove audio
Remove video
Flatten for slow motion
@@ -27,9 +28,11 @@
Scale video
Rotate video (degrees)
Enable fallback
+ Enable debug preview
Trim
Request SDR tone-mapping (API 31+)
- [Experimental] HDR editing
+ [Experimental] Force interpret HDR video as SDR (API 29+)
+ [Experimental] HDR editing (API 31+)
Add demo effects
Periodic vignette options
Failed to load MediaPipe processor. Check the README for instructions.
@@ -40,8 +43,27 @@
Transformation started %d seconds ago.
Transformation completed in %d seconds.
Transformation error
+ Bounds in seconds
+
+ - Grayscale
+ - Inverted
+ - Sepia
+
+ Contrast value
+ Scale RGB Channels individually
+ Scale red
+ Scale green
+ Scale blue
Center X
Center Y
Radius range
- Bounds in seconds
+ HSL adjustment options
+ Hue adjustment
+ Saturation adjustment
+ Lightness adjustment
+ Input video:
+ Output video:
+ Permission Denied
+ Hide input video
+ Show input video
diff --git a/demos/transformer/src/withMediaPipe/java/androidx/media3/demo/transformer/MediaPipeProcessor.java b/demos/transformer/src/withMediaPipe/java/androidx/media3/demo/transformer/MediaPipeProcessor.java
index 76b594354e6..9e919a68e27 100644
--- a/demos/transformer/src/withMediaPipe/java/androidx/media3/demo/transformer/MediaPipeProcessor.java
+++ b/demos/transformer/src/withMediaPipe/java/androidx/media3/demo/transformer/MediaPipeProcessor.java
@@ -15,32 +15,37 @@
*/
package com.google.android.exoplayer2.transformerdemo;
+import static com.google.android.exoplayer2.util.Assertions.checkArgument;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
import android.content.Context;
import android.opengl.EGL14;
-import android.opengl.GLES20;
-import android.util.Size;
-import com.google.android.exoplayer2.transformer.FrameProcessingException;
-import com.google.android.exoplayer2.transformer.SingleFrameGlTextureProcessor;
-import com.google.android.exoplayer2.util.ConditionVariable;
-import com.google.android.exoplayer2.util.GlProgram;
-import com.google.android.exoplayer2.util.GlUtil;
+import androidx.annotation.Nullable;
+import com.google.android.exoplayer2.C;
+import com.google.android.exoplayer2.effect.GlTextureProcessor;
+import com.google.android.exoplayer2.effect.TextureInfo;
+import com.google.android.exoplayer2.util.FrameProcessingException;
import com.google.android.exoplayer2.util.LibraryLoader;
+import com.google.android.exoplayer2.util.Util;
import com.google.mediapipe.components.FrameProcessor;
-import com.google.mediapipe.framework.AndroidAssetUtil;
import com.google.mediapipe.framework.AppTextureFrame;
import com.google.mediapipe.framework.TextureFrame;
import com.google.mediapipe.glutil.EglManager;
-import java.io.IOException;
-import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
-/**
- * Runs a MediaPipe graph on input frames. The implementation is currently limited to graphs that
- * can immediately produce one output frame per input frame.
- */
-/* package */ final class MediaPipeProcessor implements SingleFrameGlTextureProcessor {
+/** Runs a MediaPipe graph on input frames. */
+/* package */ final class MediaPipeProcessor implements GlTextureProcessor {
+
+ private static final String THREAD_NAME = "Demo:MediaPipeProcessor";
+ private static final long RELEASE_WAIT_TIME_MS = 100;
+ private static final long RETRY_WAIT_TIME_MS = 1;
private static final LibraryLoader LOADER =
new LibraryLoader("mediapipe_jni") {
@@ -60,116 +65,218 @@ protected void loadLibrary(String name) {
}
}
- private static final String COPY_VERTEX_SHADER_NAME = "vertex_shader_copy_es2.glsl";
- private static final String COPY_FRAGMENT_SHADER_NAME = "shaders/fragment_shader_copy_es2.glsl";
-
- private final String graphName;
- private final String inputStreamName;
- private final String outputStreamName;
- private final ConditionVariable frameProcessorConditionVariable;
+ private final FrameProcessor frameProcessor;
+ private final ConcurrentHashMap outputFrames;
+ private final boolean isSingleFrameGraph;
+ @Nullable private final ExecutorService singleThreadExecutorService;
+ private final Queue> futures;
- private @MonotonicNonNull FrameProcessor frameProcessor;
- private int inputWidth;
- private int inputHeight;
- private int inputTexId;
- private @MonotonicNonNull GlProgram glProgram;
- private @MonotonicNonNull TextureFrame outputFrame;
- private @MonotonicNonNull RuntimeException frameProcessorPendingError;
+ private InputListener inputListener;
+ private OutputListener outputListener;
+ private ErrorListener errorListener;
+ private boolean acceptedFrame;
/**
* Creates a new texture processor that wraps a MediaPipe graph.
*
+ * If {@code isSingleFrameGraph} is {@code false}, the {@code MediaPipeProcessor} may waste CPU
+ * time by continuously attempting to queue input frames to MediaPipe until they are accepted or
+ * waste memory if MediaPipe accepts and stores many frames internally.
+ *
+ * @param context The {@link Context}.
+ * @param useHdr Whether input textures come from an HDR source. If {@code true}, colors will be
+ * in linear RGB BT.2020. If {@code false}, colors will be in linear RGB BT.709.
* @param graphName Name of a MediaPipe graph asset to load.
+ * @param isSingleFrameGraph Whether the MediaPipe graph will eventually produce one output frame
+ * each time an input frame (and no other input) has been queued.
* @param inputStreamName Name of the input video stream in the graph.
* @param outputStreamName Name of the input video stream in the graph.
*/
- public MediaPipeProcessor(String graphName, String inputStreamName, String outputStreamName) {
+ public MediaPipeProcessor(
+ Context context,
+ boolean useHdr,
+ String graphName,
+ boolean isSingleFrameGraph,
+ String inputStreamName,
+ String outputStreamName) {
checkState(LOADER.isAvailable());
- this.graphName = graphName;
- this.inputStreamName = inputStreamName;
- this.outputStreamName = outputStreamName;
- frameProcessorConditionVariable = new ConditionVariable();
- }
-
- @Override
- public void initialize(Context context, int inputTexId, int inputWidth, int inputHeight)
- throws IOException {
- this.inputTexId = inputTexId;
- this.inputWidth = inputWidth;
- this.inputHeight = inputHeight;
- glProgram = new GlProgram(context, COPY_VERTEX_SHADER_NAME, COPY_FRAGMENT_SHADER_NAME);
-
- AndroidAssetUtil.initializeNativeAssetManager(context);
+ // TODO(b/227624622): Confirm whether MediaPipeProcessor could support HDR colors.
+ checkArgument(!useHdr, "MediaPipeProcessor does not support HDR colors.");
+ this.isSingleFrameGraph = isSingleFrameGraph;
+ singleThreadExecutorService =
+ isSingleFrameGraph ? null : Util.newSingleThreadExecutor(THREAD_NAME);
+ futures = new ArrayDeque<>();
+ inputListener = new InputListener() {};
+ outputListener = new OutputListener() {};
+ errorListener = (frameProcessingException) -> {};
EglManager eglManager = new EglManager(EGL14.eglGetCurrentContext());
frameProcessor =
new FrameProcessor(
context, eglManager.getNativeContext(), graphName, inputStreamName, outputStreamName);
+ outputFrames = new ConcurrentHashMap<>();
+ // OnWillAddFrameListener is called on the same thread as frameProcessor.onNewFrame(...), so no
+ // synchronization is needed for acceptedFrame.
+ frameProcessor.setOnWillAddFrameListener((long timestamp) -> acceptedFrame = true);
+ }
- // Unblock drawFrame when there is an output frame or an error.
+ @Override
+ public void setInputListener(InputListener inputListener) {
+ this.inputListener = inputListener;
+ if (!isSingleFrameGraph || outputFrames.isEmpty()) {
+ inputListener.onReadyToAcceptInputFrame();
+ }
+ }
+
+ @Override
+ public void setOutputListener(OutputListener outputListener) {
+ this.outputListener = outputListener;
frameProcessor.setConsumer(
frame -> {
- outputFrame = frame;
- frameProcessorConditionVariable.open();
- });
- frameProcessor.setAsynchronousErrorListener(
- error -> {
- frameProcessorPendingError = error;
- frameProcessorConditionVariable.open();
+ TextureInfo texture =
+ new TextureInfo(
+ frame.getTextureName(),
+ /* fboId= */ C.INDEX_UNSET,
+ frame.getWidth(),
+ frame.getHeight());
+ outputFrames.put(texture, frame);
+ outputListener.onOutputFrameAvailable(texture, frame.getTimestamp());
});
}
@Override
- public Size getOutputSize() {
- return new Size(inputWidth, inputHeight);
+ public void setErrorListener(ErrorListener errorListener) {
+ this.errorListener = errorListener;
+ frameProcessor.setAsynchronousErrorListener(
+ error -> errorListener.onFrameProcessingError(new FrameProcessingException(error)));
}
@Override
- public void drawFrame(long presentationTimeUs) throws FrameProcessingException {
- frameProcessorConditionVariable.close();
-
- // Pass the input frame to MediaPipe.
- AppTextureFrame appTextureFrame = new AppTextureFrame(inputTexId, inputWidth, inputHeight);
+ public void queueInputFrame(TextureInfo inputTexture, long presentationTimeUs) {
+ AppTextureFrame appTextureFrame =
+ new AppTextureFrame(inputTexture.texId, inputTexture.width, inputTexture.height);
+ // TODO(b/238302213): Handle timestamps restarting from 0 when applying effects to a playlist.
+ // MediaPipe will fail if the timestamps are not monotonically increasing.
+ // Also make sure that a MediaPipe graph producing additional frames only starts producing
+ // frames for the next MediaItem after receiving the first frame of that MediaItem as input
+ // to avoid MediaPipe producing extra frames after the last MediaItem has ended.
appTextureFrame.setTimestamp(presentationTimeUs);
- checkStateNotNull(frameProcessor).onNewFrame(appTextureFrame);
+ if (isSingleFrameGraph) {
+ boolean acceptedFrame = maybeQueueInputFrameSynchronous(appTextureFrame, inputTexture);
+ checkState(
+ acceptedFrame,
+ "queueInputFrame must only be called when a new input frame can be accepted");
+ return;
+ }
- // Wait for output to be passed to the consumer.
+ // TODO(b/241782273): Avoid retrying continuously until the frame is accepted by using a
+ // currently non-existent MediaPipe API to be notified when MediaPipe has capacity to accept a
+ // new frame.
+ queueInputFrameAsynchronous(appTextureFrame, inputTexture);
+ }
+
+ private boolean maybeQueueInputFrameSynchronous(
+ AppTextureFrame appTextureFrame, TextureInfo inputTexture) {
+ acceptedFrame = false;
+ frameProcessor.onNewFrame(appTextureFrame);
try {
- frameProcessorConditionVariable.block();
+ appTextureFrame.waitUntilReleasedWithGpuSync();
} catch (InterruptedException e) {
- // Propagate the interrupted flag so the next blocking operation will throw.
- // TODO(b/230469581): The next processor that runs will not have valid input due to returning
- // early here. This could be fixed by checking for interruption in the outer loop that runs
- // through the texture processors.
Thread.currentThread().interrupt();
- return;
+ errorListener.onFrameProcessingError(new FrameProcessingException(e));
}
+ if (acceptedFrame) {
+ inputListener.onInputFrameProcessed(inputTexture);
+ }
+ return acceptedFrame;
+ }
+
+ private void queueInputFrameAsynchronous(
+ AppTextureFrame appTextureFrame, TextureInfo inputTexture) {
+ removeFinishedFutures();
+ futures.add(
+ checkStateNotNull(singleThreadExecutorService)
+ .submit(
+ () -> {
+ while (!maybeQueueInputFrameSynchronous(appTextureFrame, inputTexture)) {
+ try {
+ Thread.sleep(RETRY_WAIT_TIME_MS);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ if (errorListener != null) {
+ errorListener.onFrameProcessingError(new FrameProcessingException(e));
+ }
+ }
+ }
+ inputListener.onReadyToAcceptInputFrame();
+ }));
+ }
- if (frameProcessorPendingError != null) {
- throw new FrameProcessingException(frameProcessorPendingError);
+ @Override
+ public void releaseOutputFrame(TextureInfo outputTexture) {
+ checkStateNotNull(outputFrames.get(outputTexture)).release();
+ if (isSingleFrameGraph) {
+ inputListener.onReadyToAcceptInputFrame();
+ }
+ }
+
+ @Override
+ public void release() {
+ if (isSingleFrameGraph) {
+ frameProcessor.close();
+ return;
}
- // Copy from MediaPipe's output texture to the current output.
+ Queue> futures = checkStateNotNull(this.futures);
+ while (!futures.isEmpty()) {
+ futures.remove().cancel(/* mayInterruptIfRunning= */ false);
+ }
+ ExecutorService singleThreadExecutorService =
+ checkStateNotNull(this.singleThreadExecutorService);
+ singleThreadExecutorService.shutdown();
try {
- checkStateNotNull(glProgram).use();
- glProgram.setSamplerTexIdUniform(
- "uTexSampler", checkStateNotNull(outputFrame).getTextureName(), /* texUnitIndex= */ 0);
- glProgram.setBufferAttribute(
- "aFramePosition",
- GlUtil.getNormalizedCoordinateBounds(),
- GlUtil.HOMOGENEOUS_COORDINATE_VECTOR_SIZE);
- glProgram.bindAttributesAndUniforms();
- GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, /* first= */ 0, /* count= */ 4);
- GlUtil.checkGlError();
- } catch (GlUtil.GlException e) {
- throw new FrameProcessingException(e);
- } finally {
- checkStateNotNull(outputFrame).release();
+ if (!singleThreadExecutorService.awaitTermination(RELEASE_WAIT_TIME_MS, MILLISECONDS)) {
+ errorListener.onFrameProcessingError(new FrameProcessingException("Release timed out"));
+ }
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ errorListener.onFrameProcessingError(new FrameProcessingException(e));
}
+
+ frameProcessor.close();
}
@Override
- public void release() {
- checkStateNotNull(frameProcessor).close();
+ public final void signalEndOfCurrentInputStream() {
+ if (isSingleFrameGraph) {
+ frameProcessor.waitUntilIdle();
+ outputListener.onCurrentOutputStreamEnded();
+ return;
+ }
+
+ removeFinishedFutures();
+ futures.add(
+ checkStateNotNull(singleThreadExecutorService)
+ .submit(
+ () -> {
+ frameProcessor.waitUntilIdle();
+ outputListener.onCurrentOutputStreamEnded();
+ }));
+ }
+
+ private void removeFinishedFutures() {
+ while (!futures.isEmpty()) {
+ if (!futures.element().isDone()) {
+ return;
+ }
+ try {
+ futures.remove().get();
+ } catch (ExecutionException e) {
+ errorListener.onFrameProcessingError(new FrameProcessingException(e));
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ errorListener.onFrameProcessingError(new FrameProcessingException(e));
+ }
+ }
}
}
diff --git a/docs/doc/reference/allclasses-index.html b/docs/doc/reference/allclasses-index.html
index cc64866b939..f89fe5717b2 100644
--- a/docs/doc/reference/allclasses-index.html
+++ b/docs/doc/reference/allclasses-index.html
@@ -25,7 +25,7 @@
catch(err) {
}
//-->
-var data = {"i0":2,"i1":32,"i2":2,"i3":2,"i4":2,"i5":2,"i6":2,"i7":2,"i8":32,"i9":2,"i10":2,"i11":2,"i12":2,"i13":2,"i14":2,"i15":2,"i16":2,"i17":2,"i18":2,"i19":2,"i20":2,"i21":2,"i22":2,"i23":2,"i24":2,"i25":2,"i26":2,"i27":2,"i28":2,"i29":2,"i30":2,"i31":2,"i32":2,"i33":2,"i34":2,"i35":2,"i36":2,"i37":2,"i38":2,"i39":2,"i40":2,"i41":2,"i42":2,"i43":2,"i44":2,"i45":2,"i46":1,"i47":2,"i48":2,"i49":1,"i50":2,"i51":2,"i52":2,"i53":2,"i54":2,"i55":2,"i56":2,"i57":32,"i58":2,"i59":2,"i60":32,"i61":1,"i62":1,"i63":1,"i64":2,"i65":8,"i66":32,"i67":2,"i68":32,"i69":2,"i70":1,"i71":2,"i72":2,"i73":2,"i74":2,"i75":1,"i76":1,"i77":2,"i78":32,"i79":1,"i80":1,"i81":32,"i82":2,"i83":2,"i84":2,"i85":2,"i86":2,"i87":2,"i88":1,"i89":32,"i90":2,"i91":2,"i92":2,"i93":8,"i94":2,"i95":2,"i96":2,"i97":2,"i98":2,"i99":2,"i100":1,"i101":1,"i102":2,"i103":8,"i104":1,"i105":2,"i106":1,"i107":8,"i108":8,"i109":1,"i110":32,"i111":8,"i112":8,"i113":2,"i114":2,"i115":2,"i116":1,"i117":1,"i118":2,"i119":2,"i120":2,"i121":2,"i122":2,"i123":2,"i124":2,"i125":2,"i126":2,"i127":2,"i128":2,"i129":2,"i130":8,"i131":2,"i132":2,"i133":2,"i134":2,"i135":2,"i136":1,"i137":2,"i138":1,"i139":2,"i140":1,"i141":1,"i142":2,"i143":2,"i144":2,"i145":2,"i146":2,"i147":2,"i148":2,"i149":2,"i150":2,"i151":32,"i152":32,"i153":32,"i154":32,"i155":32,"i156":32,"i157":32,"i158":32,"i159":32,"i160":32,"i161":32,"i162":32,"i163":32,"i164":32,"i165":32,"i166":32,"i167":32,"i168":32,"i169":32,"i170":32,"i171":32,"i172":32,"i173":32,"i174":32,"i175":32,"i176":32,"i177":32,"i178":32,"i179":1,"i180":8,"i181":1,"i182":2,"i183":2,"i184":2,"i185":8,"i186":2,"i187":2,"i188":32,"i189":1,"i190":2,"i191":32,"i192":2,"i193":1,"i194":1,"i195":2,"i196":2,"i197":1,"i198":1,"i199":2,"i200":2,"i201":32,"i202":2,"i203":2,"i204":2,"i205":2,"i206":2,"i207":2,"i208":2,"i209":2,"i210":2,"i211":1,"i212":1,"i213":1,"i214":2,"i215":2,"i216":2,"i217":1,"i218":1,"i219":2,"i220":2,"i221":8,"i222":32,"i223":1,"i224":1,"i225":1,"i226":1,"i227":2,"i228":2,"i229":2,"i230":2,"i231":2,"i232":2,"i233":1,"i234":2,"i235":2,"i236":2,"i237":1,"i238":2,"i239":2,"i240":8,"i241":1,"i242":2,"i243":2,"i244":2,"i245":2,"i246":8,"i247":2,"i248":2,"i249":2,"i250":1,"i251":8,"i252":2,"i253":2,"i254":32,"i255":2,"i256":32,"i257":32,"i258":32,"i259":2,"i260":2,"i261":2,"i262":1,"i263":1,"i264":2,"i265":2,"i266":2,"i267":2,"i268":8,"i269":2,"i270":2,"i271":1,"i272":2,"i273":2,"i274":8,"i275":1,"i276":2,"i277":1,"i278":2,"i279":1,"i280":1,"i281":1,"i282":1,"i283":2,"i284":2,"i285":2,"i286":2,"i287":8,"i288":2,"i289":2,"i290":2,"i291":2,"i292":32,"i293":32,"i294":2,"i295":1,"i296":2,"i297":2,"i298":2,"i299":8,"i300":2,"i301":32,"i302":8,"i303":2,"i304":1,"i305":2,"i306":32,"i307":32,"i308":2,"i309":2,"i310":2,"i311":2,"i312":1,"i313":2,"i314":2,"i315":8,"i316":32,"i317":32,"i318":2,"i319":2,"i320":2,"i321":2,"i322":2,"i323":2,"i324":2,"i325":2,"i326":2,"i327":2,"i328":2,"i329":2,"i330":2,"i331":2,"i332":2,"i333":2,"i334":2,"i335":2,"i336":2,"i337":2,"i338":8,"i339":32,"i340":2,"i341":2,"i342":2,"i343":2,"i344":2,"i345":2,"i346":2,"i347":2,"i348":2,"i349":2,"i350":2,"i351":2,"i352":2,"i353":2,"i354":2,"i355":2,"i356":2,"i357":2,"i358":2,"i359":2,"i360":1,"i361":2,"i362":2,"i363":32,"i364":2,"i365":2,"i366":2,"i367":2,"i368":2,"i369":2,"i370":2,"i371":2,"i372":2,"i373":2,"i374":32,"i375":2,"i376":2,"i377":32,"i378":2,"i379":2,"i380":32,"i381":2,"i382":2,"i383":32,"i384":32,"i385":2,"i386":1,"i387":1,"i388":1,"i389":1,"i390":8,"i391":2,"i392":1,"i393":8,"i394":1,"i395":2,"i396":1,"i397":2,"i398":2,"i399":2,"i400":2,"i401":8,"i402":2,"i403":2,"i404":2,"i405":1,"i406":8,"i407":32,"i408":1,"i409":2,"i410":1,"i411":1,"i412":1,"i413":2,"i414":32,"i415":2,"i416":2,"i417":2,"i418":2,"i419":2,"i420":1,"i421":2,"i422":2,"i423":2,"i424":1,"i425":2,"i426":2,"i427":2,"i428":1,"i429":32,"i430":2,"i431":8,"i432":32,"i433":1,"i434":1,"i435":2,"i436":1,"i437":2,"i438":1,"i439":2,"i440":2,"i441":2,"i442":2,"i443":2,"i444":2,"i445":2,"i446":2,"i447":1,"i448":2,"i449":2,"i450":32,"i451":2,"i452":1,"i453":1,"i454":1,"i455":1,"i456":2,"i457":8,"i458":32,"i459":1,"i460":1,"i461":1,"i462":2,"i463":1,"i464":1,"i465":1,"i466":2,"i467":2,"i468":2,"i469":2,"i470":8,"i471":32,"i472":1,"i473":2,"i474":1,"i475":1,"i476":32,"i477":2,"i478":2,"i479":2,"i480":1,"i481":2,"i482":1,"i483":1,"i484":1,"i485":2,"i486":2,"i487":2,"i488":2,"i489":2,"i490":2,"i491":2,"i492":2,"i493":2,"i494":2,"i495":2,"i496":2,"i497":2,"i498":2,"i499":2,"i500":2,"i501":2,"i502":2,"i503":2,"i504":2,"i505":2,"i506":2,"i507":2,"i508":8,"i509":2,"i510":2,"i511":2,"i512":2,"i513":2,"i514":1,"i515":2,"i516":2,"i517":2,"i518":2,"i519":2,"i520":2,"i521":2,"i522":2,"i523":2,"i524":2,"i525":2,"i526":1,"i527":2,"i528":2,"i529":2,"i530":2,"i531":8,"i532":2,"i533":2,"i534":2,"i535":8,"i536":2,"i537":32,"i538":1,"i539":2,"i540":2,"i541":2,"i542":2,"i543":2,"i544":8,"i545":2,"i546":2,"i547":32,"i548":32,"i549":2,"i550":2,"i551":2,"i552":2,"i553":2,"i554":2,"i555":2,"i556":2,"i557":2,"i558":2,"i559":2,"i560":2,"i561":2,"i562":2,"i563":2,"i564":2,"i565":2,"i566":2,"i567":2,"i568":32,"i569":8,"i570":2,"i571":2,"i572":2,"i573":2,"i574":8,"i575":2,"i576":2,"i577":1,"i578":1,"i579":2,"i580":2,"i581":8,"i582":2,"i583":2,"i584":2,"i585":2,"i586":1,"i587":1,"i588":2,"i589":2,"i590":1,"i591":2,"i592":1,"i593":2,"i594":2,"i595":1,"i596":2,"i597":2,"i598":2,"i599":32,"i600":2,"i601":2,"i602":2,"i603":2,"i604":2,"i605":2,"i606":32,"i607":2,"i608":2,"i609":2,"i610":2,"i611":2,"i612":8,"i613":1,"i614":1,"i615":1,"i616":1,"i617":8,"i618":8,"i619":1,"i620":2,"i621":2,"i622":2,"i623":2,"i624":1,"i625":1,"i626":2,"i627":8,"i628":1,"i629":8,"i630":32,"i631":8,"i632":8,"i633":2,"i634":2,"i635":2,"i636":2,"i637":2,"i638":2,"i639":2,"i640":2,"i641":1,"i642":2,"i643":2,"i644":2,"i645":8,"i646":2,"i647":2,"i648":2,"i649":2,"i650":2,"i651":2,"i652":2,"i653":2,"i654":2,"i655":2,"i656":2,"i657":2,"i658":2,"i659":8,"i660":1,"i661":2,"i662":2,"i663":2,"i664":2,"i665":2,"i666":2,"i667":2,"i668":2,"i669":2,"i670":1,"i671":1,"i672":1,"i673":1,"i674":2,"i675":1,"i676":1,"i677":2,"i678":1,"i679":8,"i680":1,"i681":2,"i682":1,"i683":2,"i684":2,"i685":32,"i686":2,"i687":2,"i688":2,"i689":2,"i690":1,"i691":32,"i692":2,"i693":2,"i694":2,"i695":2,"i696":32,"i697":2,"i698":1,"i699":2,"i700":2,"i701":1,"i702":2,"i703":32,"i704":2,"i705":2,"i706":2,"i707":1,"i708":1,"i709":1,"i710":2,"i711":1,"i712":1,"i713":2,"i714":8,"i715":2,"i716":2,"i717":8,"i718":1,"i719":2,"i720":8,"i721":8,"i722":2,"i723":2,"i724":1,"i725":8,"i726":2,"i727":2,"i728":2,"i729":2,"i730":2,"i731":2,"i732":2,"i733":2,"i734":2,"i735":2,"i736":2,"i737":2,"i738":2,"i739":2,"i740":2,"i741":2,"i742":2,"i743":2,"i744":2,"i745":1,"i746":1,"i747":2,"i748":2,"i749":2,"i750":32,"i751":32,"i752":2,"i753":2,"i754":2,"i755":2,"i756":2,"i757":1,"i758":1,"i759":2,"i760":1,"i761":2,"i762":2,"i763":1,"i764":1,"i765":1,"i766":2,"i767":1,"i768":1,"i769":32,"i770":1,"i771":1,"i772":1,"i773":1,"i774":1,"i775":1,"i776":2,"i777":1,"i778":1,"i779":2,"i780":1,"i781":2,"i782":2,"i783":8,"i784":32,"i785":2,"i786":1,"i787":1,"i788":1,"i789":2,"i790":1,"i791":2,"i792":2,"i793":2,"i794":2,"i795":2,"i796":2,"i797":32,"i798":2,"i799":32,"i800":2,"i801":2,"i802":2,"i803":2,"i804":2,"i805":2,"i806":2,"i807":2,"i808":2,"i809":1,"i810":32,"i811":2,"i812":2,"i813":2,"i814":32,"i815":2,"i816":2,"i817":2,"i818":2,"i819":2,"i820":2,"i821":8,"i822":2,"i823":2,"i824":2,"i825":2,"i826":2,"i827":2,"i828":8,"i829":2,"i830":1,"i831":2,"i832":2,"i833":2,"i834":2,"i835":2,"i836":2,"i837":2,"i838":2,"i839":2,"i840":2,"i841":8,"i842":32,"i843":2,"i844":2,"i845":1,"i846":1,"i847":2,"i848":2,"i849":2,"i850":2,"i851":2,"i852":1,"i853":1,"i854":32,"i855":2,"i856":2,"i857":32,"i858":32,"i859":2,"i860":1,"i861":32,"i862":32,"i863":32,"i864":2,"i865":32,"i866":32,"i867":32,"i868":2,"i869":1,"i870":1,"i871":2,"i872":1,"i873":2,"i874":2,"i875":1,"i876":1,"i877":2,"i878":2,"i879":1,"i880":1,"i881":1,"i882":32,"i883":32,"i884":2,"i885":32,"i886":2,"i887":2,"i888":2,"i889":32,"i890":2,"i891":2,"i892":2,"i893":2,"i894":8,"i895":2,"i896":2,"i897":2,"i898":2,"i899":2,"i900":1,"i901":1,"i902":2,"i903":2,"i904":2,"i905":2,"i906":2,"i907":2,"i908":2,"i909":2,"i910":2,"i911":2,"i912":8,"i913":1,"i914":32,"i915":32,"i916":1,"i917":1,"i918":32,"i919":32,"i920":32,"i921":32,"i922":32,"i923":32,"i924":2,"i925":1,"i926":2,"i927":2,"i928":32,"i929":2,"i930":2,"i931":2,"i932":2,"i933":32,"i934":2,"i935":1,"i936":2,"i937":2,"i938":1,"i939":2,"i940":2,"i941":2,"i942":2,"i943":2,"i944":2,"i945":2,"i946":2,"i947":1,"i948":1,"i949":2,"i950":2,"i951":2,"i952":2,"i953":8,"i954":2,"i955":2,"i956":2,"i957":1,"i958":8,"i959":1,"i960":32,"i961":32,"i962":2,"i963":2,"i964":1,"i965":1,"i966":2,"i967":1,"i968":2,"i969":2,"i970":2,"i971":2,"i972":2,"i973":2,"i974":2,"i975":2,"i976":2,"i977":2,"i978":2,"i979":2,"i980":2,"i981":1,"i982":1,"i983":2,"i984":1,"i985":2,"i986":2,"i987":1,"i988":2,"i989":1,"i990":1,"i991":2,"i992":1,"i993":2,"i994":1,"i995":1,"i996":1,"i997":1,"i998":2,"i999":2,"i1000":1,"i1001":2,"i1002":2,"i1003":2,"i1004":2,"i1005":2,"i1006":2,"i1007":2,"i1008":2,"i1009":2,"i1010":2,"i1011":2,"i1012":2,"i1013":1,"i1014":2,"i1015":2,"i1016":2,"i1017":2,"i1018":2,"i1019":2,"i1020":2,"i1021":2,"i1022":2,"i1023":2,"i1024":1,"i1025":2,"i1026":2,"i1027":1,"i1028":1,"i1029":1,"i1030":1,"i1031":1,"i1032":1,"i1033":1,"i1034":1,"i1035":1,"i1036":2,"i1037":2,"i1038":1,"i1039":2,"i1040":2,"i1041":2,"i1042":2,"i1043":2,"i1044":2,"i1045":2,"i1046":2,"i1047":2,"i1048":1,"i1049":1,"i1050":2,"i1051":2,"i1052":2,"i1053":2,"i1054":2,"i1055":8,"i1056":2,"i1057":2,"i1058":2,"i1059":2,"i1060":2,"i1061":2,"i1062":2,"i1063":2,"i1064":2,"i1065":2,"i1066":2,"i1067":1,"i1068":1,"i1069":1,"i1070":2,"i1071":1,"i1072":1,"i1073":32,"i1074":2,"i1075":1,"i1076":1,"i1077":8,"i1078":1,"i1079":2,"i1080":2,"i1081":2,"i1082":2,"i1083":32,"i1084":2,"i1085":2,"i1086":2,"i1087":2,"i1088":1,"i1089":2,"i1090":2,"i1091":2,"i1092":2,"i1093":2,"i1094":2,"i1095":2,"i1096":32,"i1097":2,"i1098":32,"i1099":32,"i1100":2,"i1101":1,"i1102":2,"i1103":2,"i1104":1,"i1105":1,"i1106":2,"i1107":2,"i1108":2,"i1109":2,"i1110":2,"i1111":2,"i1112":2,"i1113":1,"i1114":2,"i1115":1,"i1116":2,"i1117":2,"i1118":2,"i1119":2,"i1120":1,"i1121":2,"i1122":2,"i1123":32,"i1124":2,"i1125":2,"i1126":2,"i1127":1,"i1128":1,"i1129":2,"i1130":32,"i1131":2,"i1132":2,"i1133":1,"i1134":32,"i1135":2,"i1136":2,"i1137":1,"i1138":2,"i1139":2,"i1140":2,"i1141":2,"i1142":1,"i1143":2,"i1144":1,"i1145":2,"i1146":1,"i1147":2,"i1148":1,"i1149":8,"i1150":32,"i1151":2,"i1152":2,"i1153":2,"i1154":2,"i1155":2,"i1156":2,"i1157":1,"i1158":1,"i1159":32,"i1160":2,"i1161":2,"i1162":32,"i1163":1,"i1164":2,"i1165":2,"i1166":1,"i1167":32,"i1168":2,"i1169":2,"i1170":2,"i1171":2,"i1172":2,"i1173":8,"i1174":32,"i1175":8,"i1176":8,"i1177":32,"i1178":2,"i1179":2,"i1180":2,"i1181":2,"i1182":2,"i1183":2,"i1184":2,"i1185":2,"i1186":1,"i1187":2,"i1188":32,"i1189":2,"i1190":1,"i1191":2,"i1192":1,"i1193":2,"i1194":2,"i1195":2,"i1196":2,"i1197":2,"i1198":2,"i1199":2,"i1200":2,"i1201":2,"i1202":2,"i1203":8,"i1204":2,"i1205":2,"i1206":2,"i1207":2,"i1208":2,"i1209":2,"i1210":2,"i1211":32,"i1212":32,"i1213":2,"i1214":2,"i1215":2,"i1216":2,"i1217":2,"i1218":2,"i1219":2,"i1220":2,"i1221":1,"i1222":2};
+var data = {"i0":2,"i1":32,"i2":2,"i3":2,"i4":2,"i5":2,"i6":2,"i7":2,"i8":32,"i9":2,"i10":2,"i11":2,"i12":2,"i13":2,"i14":2,"i15":2,"i16":2,"i17":2,"i18":2,"i19":2,"i20":2,"i21":2,"i22":2,"i23":2,"i24":2,"i25":2,"i26":2,"i27":2,"i28":2,"i29":2,"i30":2,"i31":2,"i32":2,"i33":2,"i34":2,"i35":2,"i36":2,"i37":2,"i38":2,"i39":2,"i40":2,"i41":2,"i42":2,"i43":2,"i44":2,"i45":2,"i46":1,"i47":2,"i48":2,"i49":1,"i50":2,"i51":2,"i52":2,"i53":2,"i54":2,"i55":2,"i56":2,"i57":32,"i58":2,"i59":2,"i60":32,"i61":1,"i62":1,"i63":1,"i64":2,"i65":8,"i66":32,"i67":2,"i68":32,"i69":2,"i70":1,"i71":2,"i72":2,"i73":2,"i74":2,"i75":1,"i76":1,"i77":2,"i78":32,"i79":1,"i80":1,"i81":32,"i82":2,"i83":2,"i84":2,"i85":2,"i86":2,"i87":2,"i88":1,"i89":32,"i90":2,"i91":2,"i92":2,"i93":8,"i94":2,"i95":2,"i96":2,"i97":2,"i98":2,"i99":2,"i100":1,"i101":1,"i102":2,"i103":8,"i104":1,"i105":1,"i106":2,"i107":1,"i108":8,"i109":8,"i110":1,"i111":32,"i112":8,"i113":8,"i114":2,"i115":2,"i116":2,"i117":1,"i118":1,"i119":2,"i120":2,"i121":2,"i122":2,"i123":2,"i124":2,"i125":2,"i126":2,"i127":2,"i128":2,"i129":2,"i130":2,"i131":8,"i132":2,"i133":2,"i134":2,"i135":2,"i136":2,"i137":1,"i138":2,"i139":1,"i140":2,"i141":1,"i142":1,"i143":2,"i144":2,"i145":2,"i146":2,"i147":2,"i148":2,"i149":2,"i150":2,"i151":2,"i152":32,"i153":32,"i154":32,"i155":32,"i156":32,"i157":32,"i158":32,"i159":32,"i160":32,"i161":32,"i162":32,"i163":32,"i164":32,"i165":32,"i166":32,"i167":32,"i168":32,"i169":32,"i170":32,"i171":32,"i172":32,"i173":32,"i174":32,"i175":32,"i176":32,"i177":32,"i178":32,"i179":32,"i180":1,"i181":8,"i182":1,"i183":2,"i184":2,"i185":2,"i186":8,"i187":2,"i188":2,"i189":32,"i190":1,"i191":2,"i192":32,"i193":2,"i194":1,"i195":1,"i196":2,"i197":2,"i198":1,"i199":1,"i200":2,"i201":2,"i202":32,"i203":2,"i204":2,"i205":2,"i206":2,"i207":2,"i208":2,"i209":2,"i210":2,"i211":2,"i212":1,"i213":1,"i214":1,"i215":2,"i216":2,"i217":2,"i218":1,"i219":1,"i220":2,"i221":2,"i222":8,"i223":32,"i224":1,"i225":1,"i226":1,"i227":1,"i228":2,"i229":2,"i230":1,"i231":2,"i232":2,"i233":2,"i234":2,"i235":1,"i236":2,"i237":2,"i238":2,"i239":1,"i240":2,"i241":2,"i242":8,"i243":1,"i244":2,"i245":2,"i246":2,"i247":2,"i248":2,"i249":8,"i250":2,"i251":2,"i252":2,"i253":2,"i254":1,"i255":8,"i256":2,"i257":2,"i258":32,"i259":2,"i260":32,"i261":32,"i262":32,"i263":2,"i264":2,"i265":2,"i266":1,"i267":1,"i268":2,"i269":2,"i270":2,"i271":2,"i272":8,"i273":2,"i274":2,"i275":1,"i276":2,"i277":2,"i278":8,"i279":1,"i280":2,"i281":1,"i282":2,"i283":1,"i284":1,"i285":1,"i286":1,"i287":2,"i288":2,"i289":2,"i290":2,"i291":8,"i292":2,"i293":2,"i294":2,"i295":2,"i296":32,"i297":32,"i298":2,"i299":1,"i300":2,"i301":1,"i302":1,"i303":2,"i304":2,"i305":2,"i306":8,"i307":2,"i308":32,"i309":8,"i310":2,"i311":1,"i312":2,"i313":32,"i314":32,"i315":2,"i316":2,"i317":2,"i318":2,"i319":1,"i320":1,"i321":2,"i322":2,"i323":8,"i324":32,"i325":32,"i326":2,"i327":2,"i328":2,"i329":2,"i330":2,"i331":2,"i332":2,"i333":2,"i334":2,"i335":2,"i336":2,"i337":2,"i338":2,"i339":2,"i340":2,"i341":2,"i342":2,"i343":2,"i344":2,"i345":2,"i346":8,"i347":32,"i348":2,"i349":2,"i350":2,"i351":2,"i352":2,"i353":2,"i354":2,"i355":2,"i356":2,"i357":2,"i358":2,"i359":2,"i360":2,"i361":2,"i362":2,"i363":2,"i364":2,"i365":2,"i366":2,"i367":2,"i368":2,"i369":1,"i370":2,"i371":2,"i372":2,"i373":2,"i374":32,"i375":2,"i376":2,"i377":2,"i378":2,"i379":2,"i380":2,"i381":2,"i382":2,"i383":2,"i384":2,"i385":32,"i386":2,"i387":2,"i388":32,"i389":2,"i390":2,"i391":32,"i392":2,"i393":2,"i394":2,"i395":32,"i396":32,"i397":2,"i398":1,"i399":1,"i400":1,"i401":1,"i402":8,"i403":2,"i404":1,"i405":8,"i406":1,"i407":2,"i408":1,"i409":2,"i410":2,"i411":2,"i412":2,"i413":8,"i414":2,"i415":2,"i416":2,"i417":1,"i418":8,"i419":32,"i420":1,"i421":2,"i422":1,"i423":1,"i424":1,"i425":2,"i426":32,"i427":2,"i428":2,"i429":2,"i430":2,"i431":2,"i432":1,"i433":2,"i434":2,"i435":2,"i436":1,"i437":2,"i438":2,"i439":2,"i440":1,"i441":32,"i442":1,"i443":2,"i444":32,"i445":1,"i446":1,"i447":2,"i448":1,"i449":1,"i450":2,"i451":1,"i452":2,"i453":2,"i454":2,"i455":2,"i456":2,"i457":2,"i458":2,"i459":2,"i460":1,"i461":2,"i462":2,"i463":32,"i464":2,"i465":1,"i466":1,"i467":1,"i468":1,"i469":2,"i470":8,"i471":32,"i472":1,"i473":1,"i474":1,"i475":2,"i476":1,"i477":1,"i478":1,"i479":2,"i480":2,"i481":2,"i482":2,"i483":8,"i484":32,"i485":1,"i486":2,"i487":1,"i488":1,"i489":32,"i490":2,"i491":2,"i492":2,"i493":1,"i494":2,"i495":1,"i496":1,"i497":1,"i498":2,"i499":2,"i500":2,"i501":2,"i502":2,"i503":2,"i504":2,"i505":2,"i506":2,"i507":2,"i508":2,"i509":2,"i510":2,"i511":2,"i512":2,"i513":2,"i514":2,"i515":2,"i516":2,"i517":2,"i518":2,"i519":2,"i520":2,"i521":8,"i522":2,"i523":2,"i524":2,"i525":2,"i526":2,"i527":1,"i528":2,"i529":2,"i530":2,"i531":2,"i532":2,"i533":2,"i534":2,"i535":2,"i536":2,"i537":2,"i538":2,"i539":1,"i540":2,"i541":2,"i542":2,"i543":2,"i544":8,"i545":2,"i546":2,"i547":2,"i548":8,"i549":2,"i550":32,"i551":1,"i552":2,"i553":2,"i554":2,"i555":2,"i556":2,"i557":8,"i558":2,"i559":2,"i560":32,"i561":32,"i562":2,"i563":2,"i564":2,"i565":2,"i566":2,"i567":2,"i568":2,"i569":2,"i570":2,"i571":2,"i572":2,"i573":2,"i574":2,"i575":2,"i576":2,"i577":2,"i578":2,"i579":2,"i580":2,"i581":32,"i582":2,"i583":8,"i584":1,"i585":1,"i586":1,"i587":2,"i588":2,"i589":2,"i590":2,"i591":8,"i592":2,"i593":2,"i594":1,"i595":2,"i596":2,"i597":1,"i598":2,"i599":1,"i600":1,"i601":1,"i602":1,"i603":2,"i604":8,"i605":2,"i606":2,"i607":2,"i608":2,"i609":1,"i610":1,"i611":2,"i612":2,"i613":1,"i614":2,"i615":1,"i616":2,"i617":2,"i618":1,"i619":2,"i620":2,"i621":2,"i622":32,"i623":2,"i624":2,"i625":2,"i626":2,"i627":2,"i628":2,"i629":32,"i630":2,"i631":2,"i632":2,"i633":2,"i634":2,"i635":8,"i636":1,"i637":1,"i638":1,"i639":1,"i640":8,"i641":8,"i642":1,"i643":2,"i644":2,"i645":2,"i646":2,"i647":1,"i648":2,"i649":2,"i650":1,"i651":2,"i652":8,"i653":1,"i654":8,"i655":32,"i656":8,"i657":8,"i658":2,"i659":2,"i660":2,"i661":2,"i662":2,"i663":2,"i664":2,"i665":2,"i666":1,"i667":2,"i668":2,"i669":2,"i670":8,"i671":2,"i672":2,"i673":2,"i674":2,"i675":2,"i676":2,"i677":2,"i678":2,"i679":2,"i680":2,"i681":2,"i682":2,"i683":2,"i684":8,"i685":1,"i686":2,"i687":2,"i688":2,"i689":2,"i690":2,"i691":2,"i692":2,"i693":2,"i694":2,"i695":2,"i696":1,"i697":1,"i698":1,"i699":1,"i700":2,"i701":1,"i702":1,"i703":2,"i704":1,"i705":8,"i706":1,"i707":2,"i708":1,"i709":2,"i710":2,"i711":32,"i712":2,"i713":2,"i714":2,"i715":2,"i716":1,"i717":32,"i718":2,"i719":2,"i720":2,"i721":2,"i722":32,"i723":2,"i724":1,"i725":2,"i726":2,"i727":1,"i728":2,"i729":32,"i730":2,"i731":2,"i732":2,"i733":1,"i734":1,"i735":1,"i736":2,"i737":1,"i738":1,"i739":2,"i740":8,"i741":2,"i742":2,"i743":8,"i744":1,"i745":2,"i746":8,"i747":8,"i748":2,"i749":2,"i750":1,"i751":8,"i752":2,"i753":2,"i754":2,"i755":2,"i756":2,"i757":2,"i758":2,"i759":2,"i760":2,"i761":2,"i762":2,"i763":2,"i764":2,"i765":2,"i766":2,"i767":2,"i768":2,"i769":2,"i770":2,"i771":1,"i772":1,"i773":2,"i774":2,"i775":2,"i776":32,"i777":32,"i778":2,"i779":2,"i780":2,"i781":2,"i782":2,"i783":1,"i784":1,"i785":2,"i786":1,"i787":2,"i788":2,"i789":1,"i790":1,"i791":1,"i792":2,"i793":1,"i794":1,"i795":32,"i796":1,"i797":1,"i798":1,"i799":1,"i800":1,"i801":1,"i802":2,"i803":1,"i804":1,"i805":2,"i806":1,"i807":2,"i808":2,"i809":8,"i810":32,"i811":2,"i812":1,"i813":1,"i814":1,"i815":2,"i816":1,"i817":2,"i818":2,"i819":2,"i820":2,"i821":2,"i822":2,"i823":32,"i824":2,"i825":32,"i826":2,"i827":2,"i828":2,"i829":2,"i830":1,"i831":1,"i832":8,"i833":2,"i834":2,"i835":2,"i836":2,"i837":2,"i838":1,"i839":32,"i840":2,"i841":2,"i842":2,"i843":32,"i844":2,"i845":2,"i846":2,"i847":2,"i848":2,"i849":2,"i850":8,"i851":2,"i852":2,"i853":2,"i854":2,"i855":2,"i856":2,"i857":8,"i858":2,"i859":1,"i860":2,"i861":2,"i862":2,"i863":2,"i864":2,"i865":2,"i866":2,"i867":2,"i868":2,"i869":2,"i870":8,"i871":32,"i872":2,"i873":2,"i874":1,"i875":1,"i876":2,"i877":2,"i878":2,"i879":2,"i880":2,"i881":1,"i882":1,"i883":32,"i884":2,"i885":2,"i886":32,"i887":32,"i888":2,"i889":1,"i890":32,"i891":32,"i892":32,"i893":2,"i894":32,"i895":32,"i896":32,"i897":2,"i898":1,"i899":1,"i900":2,"i901":1,"i902":2,"i903":2,"i904":1,"i905":1,"i906":2,"i907":2,"i908":1,"i909":1,"i910":1,"i911":32,"i912":32,"i913":2,"i914":32,"i915":2,"i916":2,"i917":32,"i918":2,"i919":2,"i920":2,"i921":2,"i922":8,"i923":2,"i924":2,"i925":2,"i926":2,"i927":2,"i928":1,"i929":1,"i930":2,"i931":2,"i932":2,"i933":2,"i934":2,"i935":2,"i936":2,"i937":2,"i938":2,"i939":2,"i940":8,"i941":1,"i942":32,"i943":32,"i944":1,"i945":1,"i946":32,"i947":32,"i948":32,"i949":32,"i950":32,"i951":32,"i952":2,"i953":1,"i954":2,"i955":2,"i956":32,"i957":2,"i958":2,"i959":2,"i960":2,"i961":32,"i962":2,"i963":1,"i964":2,"i965":2,"i966":1,"i967":2,"i968":2,"i969":2,"i970":1,"i971":2,"i972":2,"i973":2,"i974":2,"i975":2,"i976":2,"i977":2,"i978":2,"i979":1,"i980":1,"i981":2,"i982":2,"i983":2,"i984":2,"i985":8,"i986":2,"i987":2,"i988":2,"i989":1,"i990":8,"i991":1,"i992":32,"i993":32,"i994":2,"i995":2,"i996":1,"i997":1,"i998":2,"i999":1,"i1000":2,"i1001":2,"i1002":2,"i1003":2,"i1004":2,"i1005":2,"i1006":2,"i1007":2,"i1008":2,"i1009":2,"i1010":2,"i1011":2,"i1012":2,"i1013":1,"i1014":1,"i1015":2,"i1016":1,"i1017":2,"i1018":2,"i1019":1,"i1020":2,"i1021":1,"i1022":1,"i1023":2,"i1024":1,"i1025":2,"i1026":1,"i1027":1,"i1028":1,"i1029":1,"i1030":2,"i1031":2,"i1032":1,"i1033":2,"i1034":2,"i1035":2,"i1036":2,"i1037":2,"i1038":2,"i1039":2,"i1040":2,"i1041":2,"i1042":2,"i1043":2,"i1044":2,"i1045":2,"i1046":2,"i1047":2,"i1048":2,"i1049":2,"i1050":2,"i1051":2,"i1052":2,"i1053":2,"i1054":2,"i1055":2,"i1056":2,"i1057":2,"i1058":2,"i1059":2,"i1060":2,"i1061":1,"i1062":2,"i1063":2,"i1064":1,"i1065":1,"i1066":1,"i1067":1,"i1068":1,"i1069":1,"i1070":1,"i1071":1,"i1072":1,"i1073":2,"i1074":2,"i1075":1,"i1076":2,"i1077":2,"i1078":2,"i1079":2,"i1080":2,"i1081":2,"i1082":2,"i1083":2,"i1084":2,"i1085":1,"i1086":1,"i1087":2,"i1088":2,"i1089":2,"i1090":2,"i1091":2,"i1092":8,"i1093":2,"i1094":2,"i1095":2,"i1096":2,"i1097":2,"i1098":2,"i1099":2,"i1100":2,"i1101":2,"i1102":2,"i1103":2,"i1104":1,"i1105":1,"i1106":1,"i1107":2,"i1108":1,"i1109":1,"i1110":32,"i1111":2,"i1112":1,"i1113":1,"i1114":8,"i1115":1,"i1116":2,"i1117":2,"i1118":2,"i1119":2,"i1120":32,"i1121":2,"i1122":2,"i1123":2,"i1124":2,"i1125":2,"i1126":1,"i1127":2,"i1128":2,"i1129":2,"i1130":2,"i1131":2,"i1132":2,"i1133":2,"i1134":32,"i1135":2,"i1136":32,"i1137":32,"i1138":2,"i1139":1,"i1140":2,"i1141":2,"i1142":2,"i1143":1,"i1144":1,"i1145":2,"i1146":2,"i1147":2,"i1148":2,"i1149":2,"i1150":2,"i1151":2,"i1152":1,"i1153":2,"i1154":1,"i1155":2,"i1156":2,"i1157":2,"i1158":2,"i1159":1,"i1160":2,"i1161":2,"i1162":32,"i1163":2,"i1164":2,"i1165":2,"i1166":1,"i1167":1,"i1168":2,"i1169":32,"i1170":2,"i1171":2,"i1172":1,"i1173":32,"i1174":2,"i1175":2,"i1176":1,"i1177":2,"i1178":2,"i1179":2,"i1180":2,"i1181":1,"i1182":2,"i1183":1,"i1184":2,"i1185":1,"i1186":2,"i1187":1,"i1188":8,"i1189":32,"i1190":2,"i1191":2,"i1192":2,"i1193":2,"i1194":2,"i1195":2,"i1196":1,"i1197":32,"i1198":2,"i1199":2,"i1200":32,"i1201":1,"i1202":2,"i1203":2,"i1204":1,"i1205":32,"i1206":2,"i1207":2,"i1208":2,"i1209":2,"i1210":2,"i1211":8,"i1212":32,"i1213":8,"i1214":8,"i1215":32,"i1216":2,"i1217":2,"i1218":2,"i1219":2,"i1220":2,"i1221":2,"i1222":2,"i1223":2,"i1224":1,"i1225":2,"i1226":32,"i1227":2,"i1228":1,"i1229":2,"i1230":1,"i1231":2,"i1232":2,"i1233":2,"i1234":2,"i1235":2,"i1236":2,"i1237":2,"i1238":2,"i1239":2,"i1240":2,"i1241":8,"i1242":2,"i1243":2,"i1244":2,"i1245":2,"i1246":2,"i1247":2,"i1248":2,"i1249":32,"i1250":32,"i1251":2,"i1252":2,"i1253":2,"i1254":2,"i1255":2,"i1256":2,"i1257":2,"i1258":2,"i1259":2,"i1260":1,"i1261":2};
var tabs = {65535:["t0","All Classes"],1:["t1","Interface Summary"],2:["t2","Class Summary"],8:["t4","Exception Summary"],32:["t6","Annotation Types Summary"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -742,228 +742,235 @@ All Classes
+AudioProcessorChain
+
+Provides a chain of audio processors, which are used for any user-defined processing and applying
+ playback parameters (if supported).
+
+
+
AudioRendererEventListener
-
+
AudioRendererEventListener.EventDispatcher
-
+
AudioSink
A sink that consumes audio data.
-
+
AudioSink.ConfigurationException
Thrown when a failure occurs configuring the sink.
-
+
AudioSink.InitializationException
Thrown when a failure occurs initializing the sink.
-
+
AudioSink.Listener
Listener for audio sink events.
-
+
AudioSink.SinkFormatSupport
The level of support the sink provides for a format.
-
+
AudioSink.UnexpectedDiscontinuityException
Thrown when the sink encounters an unexpected timestamp discontinuity.
-
+
AudioSink.WriteException
Thrown when a failure occurs writing to the sink.
-
+
AuxEffectInfo
Represents auxiliary effect information, which can be used to attach an auxiliary effect to an
underlying
AudioTrack
.
-
+
AvcConfig
AVC configuration data.
-
+
AviExtractor
Extracts data from the AVI container format.
-
+
BandwidthMeter
Provides estimates of the currently available bandwidth.
-
+
BandwidthMeter.EventListener
-
+
BandwidthMeter.EventListener.EventDispatcher
Event dispatcher which allows listener registration.
-
+
BaseAudioProcessor
Base class for audio processors that keep an output buffer and an internal buffer that is reused
whenever input is queued.
-
+
BaseDataSource
-
+
BaseMediaChunk
-
+
BaseMediaChunkIterator
-
+
BaseMediaChunkOutput
-
+
BaseMediaSource
-
+
BasePlayer
Abstract base
Player
which implements common implementation independent methods.
-
+
BaseRenderer
An abstract base class suitable for most
Renderer
implementations.
-
+
BaseTrackSelection
-
+
BaseUrl
A base URL, as defined by ISO 23009-1, 2nd edition, 5.6.
-
+
BaseUrlExclusionList
Holds the state of
excluded
base URLs to be used to
select
a base URL based on these exclusions.
-
+
BehindLiveWindowException
Thrown when a live playback falls behind the available media window.
-
+
BinaryFrame
Binary ID3 frame.
-
+
BinarySearchSeeker
A seeker that supports seeking within a stream by searching for the target frame using binary
search.
-
+
BinarySearchSeeker.BinarySearchSeekMap
-
+
BinarySearchSeeker.DefaultSeekTimestampConverter
-
+
BinarySearchSeeker.SeekOperationParams
-
+
BinarySearchSeeker.SeekTimestampConverter
A converter that converts seek time in stream time into target timestamp for the
BinarySearchSeeker
.
-
+
BinarySearchSeeker.TimestampSearchResult
-
+
BinarySearchSeeker.TimestampSeeker
A seeker that looks for a given timestamp from an input.
-
+
Buffer
Base class for buffers with flags.
-
+
Bundleable
-
+
Bundleable.Creator <T extends Bundleable >
Interface for the static
CREATOR
field of
Bundleable
classes.
-
+
BundleableUtil
-
+
BundledChunkExtractor
-
+
BundledExtractorsAdapter
-
+
BundledHlsMediaChunkExtractor
-
+
BundleListRetriever
A
Binder
to transfer a list of
Bundles
across processes by splitting the
list into multiple transactions.
-
+
BundleUtil
-
+
ByteArrayDataSink
-
+
ByteArrayDataSource
-
+
C
Defines constants used by the library.
-
+
C.AudioAllowedCapturePolicy
Capture policies for audio attributes.
-
+
C.AudioContentType
Content types for audio attributes.
-
+
C.AudioFlags
Flags for audio attributes.
-
+
C.AudioUsage
Usage types for audio attributes.
-
+
C.BufferFlags
Flags which can apply to a buffer containing a media sample.
-
+
C.ColorRange
Video color range.
-
+
C.ColorSpace
Video colorspaces.
-
+
C.ColorTransfer
Video color transfer characteristics.
-
+
C.ContentType
Represents a streaming or other media type.
-
+
C.CryptoMode
Crypto modes for a codec.
-
+
C.CryptoType
Types of crypto implementation.
-
+
C.DataType
Represents a type of data.
-
+
C.Encoding
Represents an audio encoding, or an invalid or unset value.
-
+
C.FormatSupport
Level of renderer support for a format.
-
+
C.NetworkType
Network connection type.
-
+
C.PcmEncoding
Represents a PCM audio encoding, or an invalid or unset value.
-
+
C.Projection
Video projection types.
-
+
C.RoleFlags
Track role flags.
-
+
C.SelectionFlags
Track selection flags.
-
+
C.SelectionReason
Represents a reason for selection.
-
+
C.SpatializationBehavior
Represents the behavior affecting whether spatialization will be used.
-
+
C.StereoMode
The stereo mode for 360/3D/VR videos.
-
+
C.StreamType
-
+
C.TrackType
Represents a type of media track.
-
+
C.VideoChangeFrameRateStrategy
-
+
C.VideoOutputMode
Video decoder output modes.
-
+
C.VideoScalingMode
Video scaling modes for
MediaCodec
-based renderers.
-
+
C.WakeMode
Mode specifying whether the player should hold a WakeLock and a WifiLock.
-
+
Cache
A cache that supports partial caching of resources.
-
+
Cache.CacheException
Thrown when an error is encountered when writing data.
-
+
Cache.Listener
Listener of
Cache
events.
-
+
CacheAsserts
Assertion methods for
Cache
.
-
+
CacheAsserts.RequestSet
Defines a set of data requests.
-
+
CacheDataSink
Writes data into a cache.
-
+
CacheDataSink.CacheDataSinkException
Thrown when an
IOException
is encountered when writing data to the sink.
-
+
CacheDataSink.Factory
-
+
CacheDataSource
-
+
CacheDataSource.CacheIgnoredReason
Reasons the cache may be ignored.
-
+
CacheDataSource.EventListener
-
+
CacheDataSource.Factory
-
+
CacheDataSource.Flags
Flags controlling the CacheDataSource's behavior.
-
+
CachedRegionTracker
Utility class for efficiently tracking regions of data that are stored in a
Cache
for a
given cache key.
-
+
CacheEvictor
Evicts data from a
Cache
.
-
+
CacheKeyFactory
Factory for cache keys.
-
+
CacheSpan
Defines a span of data that may or may not be cached (as indicated by
CacheSpan.isCached
).
-
+
CacheWriter
Caching related utility methods.
-
+
CacheWriter.ProgressListener
Receives progress updates during cache operations.
-
+
CameraMotionListener
Listens camera motion.
-
+
CameraMotionRenderer
A
Renderer
that parses the camera motion track.
-
+
CaptionStyleCompat
-
+
CaptionStyleCompat.EdgeType
The type of edge, which may be none.
-
+
CapturingAudioSink
-
+
CapturingRenderersFactory
-
+
CastPlayer
Player
implementation that communicates with a Cast receiver app.
-
+
Cea608Decoder
A
SubtitleDecoder
for CEA-608 (also known as "line 21 captions" and "EIA-608").
-
+
Cea708Decoder
-
+
CeaUtil
Utility methods for handling CEA-608/708 messages.
-
+
ChapterFrame
Chapter information ID3 frame.
-
+
ChapterTocFrame
Chapter table of contents ID3 frame.
-
+
Chunk
An abstract base class for
Loader.Loadable
implementations that load chunks of data required for
the playback of streams.
-
+
ChunkExtractor
Extracts samples and track
Formats
from chunks.
-
+
ChunkExtractor.Factory
-
+
ChunkExtractor.TrackOutputProvider
Provides
TrackOutput
instances to be written to during extraction.
-
+
ChunkHolder
Holds a chunk or an indication that the end of the stream has been reached.
-
+
ChunkIndex
Defines chunks of samples within a media stream.
-
+
ChunkSampleStream <T extends ChunkSource >
-
+
ChunkSampleStream.ReleaseCallback <T extends ChunkSource >
A callback to be notified when a sample stream has finished being released.
-
+
ChunkSource
-
+
ClippingMediaPeriod
-
+
ClippingMediaSource
MediaSource
that wraps a source and clips its timeline based on specified start/end
positions.
-
+
ClippingMediaSource.IllegalClippingException
-
+
ClippingMediaSource.IllegalClippingException.Reason
The reason clipping failed.
-
+
Clock
An interface through which system clocks can be read and
HandlerWrapper
s created.
-
+
Codec
Provides a layer of abstraction for interacting with decoders and encoders.
-
+
Codec.DecoderFactory
-
+
Codec.EncoderFactory
-
+
CodecSpecificDataUtil
Provides utilities for handling various types of codec-specific data.
-
+
ColorInfo
Stores color info.
-
-ColorParser
+
+ColorLut
-Parser for color expressions found in styling formats, e.g.
+Specifies color transformations using color lookup tables to apply to each frame in the fragment
+ shader.
-
+
+ColorParser
+
+Parser for color expressions found in styling formats, e.g.
+
+
+
CommentFrame
Comment ID3 frame.
-
+
CompositeMediaSource <T >
Composite
MediaSource
consisting of multiple child sources.
-
+
CompositeSequenceableLoader
-
+
CompositeSequenceableLoaderFactory
-
+
ConcatenatingMediaSource
-
+
ConditionVariable
An interruptible condition variable.
-
+
ConstantBitrateSeekMap
A
SeekMap
implementation that assumes the stream has a constant bitrate and consists of
multiple independent frames of the same size.
-
+
Consumer <T >
Represents an operation that accepts a single input argument and returns no result.
-
+
ContainerMediaChunk
-
+
ContentDataSource
-
+
ContentDataSource.ContentDataSourceException
Thrown when an
IOException
is encountered reading from a content URI.
-
+
ContentMetadata
Interface for an immutable snapshot of keyed metadata.
-
+
ContentMetadataMutations
Defines multiple mutations on metadata value which are applied atomically.
-
+
+Contrast
+
+A
GlEffect
to control the contrast of video frames.
+
+
+
CopyOnWriteMultiset <E >
An unordered collection of elements that allows duplicates, but also allows access to a set of
unique elements.
-
+
CronetDataSource
DataSource without intermediate buffer based on Cronet API set using UrlRequest.
-
+
CronetDataSource.Factory
-
+
CronetDataSource.OpenException
-
+
CronetDataSourceFactory
Deprecated.
-
+
CronetEngineWrapper
Deprecated.
-
+
CronetUtil
Cronet utility methods.
-
+
+Crop
+
+Specifies a crop to apply in the vertex shader.
+
+
+
CryptoConfig
Configuration for a decoder to allow it to decode encrypted media data.
-
+
CryptoException
Thrown when a non-platform component fails to decrypt data.
-
+
CryptoInfo
Metadata describing the structure of an encrypted input sample.
-
+
Cue
Contains information about a specific cue, including textual content and formatting data.
-
+
Cue.AnchorType
The type of anchor, which may be unset.
-
+
Cue.Builder
A builder for
Cue
objects.
-
+
Cue.LineType
The type of line, which may be unset.
-
+
Cue.TextSizeType
The type of default text size for this cue, which may be unset.
-
+
Cue.VerticalType
The type of vertical layout for this cue, which may be unset (i.e.
-
+
CueDecoder
-
+
CueEncoder
-
+
CueGroup
Class to represent the state of active
Cues
at a particular time.
-
+
DashChunkSource
-
+
DashChunkSource.Factory
-
+
DashDownloader
A downloader for DASH streams.
-
+
DashManifest
Represents a DASH media presentation description (mpd), as defined by ISO/IEC 23009-1:2014
Section 5.3.1.2.
-
+
DashManifestParser
A parser of media presentation description files.
-
+
DashManifestParser.RepresentationInfo
A parsed Representation element.
-
+
DashManifestStaleException
Thrown when a live playback's manifest is stale and a new manifest could not be loaded.
-
+
DashMediaSource
-
+
DashMediaSource.Factory
-
+
DashSegmentIndex
Indexes the segments within a media stream.
-
+
DashUtil
Utility methods for DASH streams.
-
+
DashWrappingSegmentIndex
-
+
DatabaseIOException
-
+
DatabaseProvider
-
+
DataChunk
A base class for
Chunk
implementations where the data should be loaded into a
byte[]
before being consumed.
-
+
DataReader
Reads bytes from a data stream.
-
+
DataSchemeDataSource
A
DataSource
for reading data URLs, as defined by RFC 2397.
-
+
DataSink
A component to which streams of data can be written.
-
+
DataSink.Factory
-
+
DataSource
Reads data from URI-identified resources.
-
+
DataSource.Factory
-
+
DataSourceContractTest
A collection of contract tests for
DataSource
implementations.
-
+
DataSourceContractTest.FakeTransferListener
-
+
DataSourceContractTest.TestResource
Information about a resource that can be used to test the
DataSource
instance.
-
+
DataSourceContractTest.TestResource.Builder
-
+
DataSourceException
Used to specify reason of a DataSource error.
-
+
DataSourceInputStream
-
+
DataSourceUtil
-
+
DataSpec
Defines a region of data in a resource.
-
+
DataSpec.Builder
-
+
DataSpec.Flags
The flags that apply to any request for data.
-
+
DataSpec.HttpMethod
-
+
DebugTextViewHelper
A helper class for periodically updating a
TextView
with debug information obtained from
an
ExoPlayer
.
-
+
+DebugViewProvider
+
+Provider for views to show diagnostic information during a transformation, for debugging.
+
+
+
+DecodeOneFrameUtil
+
+Utilities for decoding a frame for tests.
+
+
+
+DecodeOneFrameUtil.Listener
+
+Listener for decoding events.
+
+
+
Decoder <I ,O ,E extends DecoderException >
A media decoder.
-
+
DecoderAudioRenderer <T extends Decoder <DecoderInputBuffer ,? extends SimpleDecoderOutputBuffer ,? extends DecoderException >>
Decodes and renders audio using a
Decoder
.
-
+
DecoderCounters
Maintains decoder event counts, for debugging purposes only.
-
+
DecoderCountersUtil
-
+
DecoderException
Thrown when a
Decoder
error occurs.
-
+
DecoderInputBuffer
Holds input for a decoder.
-
+
DecoderInputBuffer.BufferReplacementMode
The buffer replacement mode.
-
+
DecoderInputBuffer.InsufficientCapacityException
-
+
DecoderOutputBuffer
Output buffer decoded by a
Decoder
.
-
+
DecoderOutputBuffer.Owner <S extends DecoderOutputBuffer >
Buffer owner.
-
+
DecoderReuseEvaluation
The result of an evaluation to determine whether a decoder can be reused for a new input format.
-
+
DecoderReuseEvaluation.DecoderDiscardReasons
Possible reasons why reuse is not possible.
-
+
DecoderReuseEvaluation.DecoderReuseResult
Possible outcomes of the evaluation.
-
+
DecoderVideoRenderer
Decodes and renders video using a
Decoder
.
-
+
DefaultAllocator
-
+
DefaultAnalyticsCollector
-
+
DefaultAudioSink
Plays audio data.
-
+
DefaultAudioSink.AudioProcessorChain
+Deprecated.
+
+
+
+
+DefaultAudioSink.AudioTrackBufferSizeProvider
-Provides a chain of audio processors, which are used for any user-defined processing and
- applying playback parameters (if supported).
+Provides the buffer size to use when creating an
AudioTrack
.
-
+
DefaultAudioSink.Builder
-
+
DefaultAudioSink.DefaultAudioProcessorChain
-
+
DefaultAudioSink.InvalidAudioTrackTimestampException
-
+
DefaultAudioSink.OffloadMode
Audio offload mode configuration.
-
+
DefaultAudioSink.OutputMode
Output mode of the audio sink.
-
+
DefaultAudioTrackBufferSizeProvider
Provide the buffer size to use when creating an
AudioTrack
.
-
+
DefaultAudioTrackBufferSizeProvider.Builder
-
+
DefaultBandwidthMeter
Estimates bandwidth by listening to data transfers.
-
+
DefaultBandwidthMeter.Builder
Builder for a bandwidth meter.
-
+
DefaultCastOptionsProvider
A convenience OptionsProvider
to target the default cast receiver app.
-
+
DefaultCodec
-
+
DefaultCompositeSequenceableLoaderFactory
-
+
DefaultContentMetadata
-
+
DefaultDashChunkSource
-
+
DefaultDashChunkSource.Factory
-
+
DefaultDashChunkSource.RepresentationHolder
-
+
DefaultDashChunkSource.RepresentationSegmentIterator
-
+
DefaultDatabaseProvider
-
+
DefaultDataSource
-
+
DefaultDataSource.Factory
-
+
DefaultDataSourceFactory
Deprecated.
-
+
DefaultDownloaderFactory
Default
DownloaderFactory
, supporting creation of progressive, DASH, HLS and
SmoothStreaming downloaders.
-
+
DefaultDownloadIndex
-
+
DefaultDrmSessionManager
-
+
DefaultDrmSessionManager.Builder
-
+
DefaultDrmSessionManager.MissingSchemeDataException
-
+
DefaultDrmSessionManager.Mode
Determines the action to be done after a session acquired.
-
+
DefaultDrmSessionManagerProvider
-
+
DefaultEncoderFactory
-
-DefaultExtractorInput
+
+DefaultEncoderFactory.Builder
+
+
+
+
+
+DefaultExtractorInput
-
+
DefaultExtractorsFactory
An
ExtractorsFactory
that provides an array of extractors for the following formats:
@@ -2225,1754 +2280,1851 @@
All Classes
com.google.android.exoplayer2.ext.flac.FlacExtractor is used.
-
+
DefaultHlsDataSourceFactory
-
+
DefaultHlsExtractorFactory
-
+
DefaultHlsPlaylistParserFactory
-
+
DefaultHlsPlaylistTracker
-
+
DefaultHttpDataSource
-
+
DefaultHttpDataSource.Factory
-
+
DefaultLivePlaybackSpeedControl
-
+
DefaultLivePlaybackSpeedControl.Builder
-
+
DefaultLoadControl
-
+
DefaultLoadControl.Builder
-
+
DefaultLoadErrorHandlingPolicy
-
+
DefaultMediaCodecAdapterFactory
-
+
DefaultMediaDescriptionAdapter
-
+
DefaultMediaItemConverter
-
+
DefaultMediaItemConverter
-
+
DefaultMediaSourceFactory
-
+
DefaultMediaSourceFactory.AdsLoaderProvider
Deprecated.
-
+
+DefaultMuxer
+
+A default
Muxer
implementation.
+
+
+
+DefaultMuxer.Factory
+
+
+
+
+
DefaultPlaybackSessionManager
Default
PlaybackSessionManager
which instantiates a new session for each window in the
timeline and also for each ad within the windows.
-
+
DefaultRenderersFactory
-
+
DefaultRenderersFactory.ExtensionRendererMode
Modes for using extension renderers.
-
+
DefaultRenderersFactoryAsserts
-
+
DefaultRtpPayloadReaderFactory
-
+
DefaultSsChunkSource
-
+
DefaultSsChunkSource.Factory
-
+
DefaultTimeBar
A time bar that shows a current position, buffered position, duration and ad markers.
-
+
DefaultTrackNameProvider
-
+
DefaultTrackSelector
-
+
DefaultTrackSelector.Parameters
-
+
DefaultTrackSelector.Parameters.Builder
-
+
DefaultTrackSelector.ParametersBuilder
Deprecated.
-
+
DefaultTrackSelector.SelectionEligibility
The extent to which tracks are eligible for selection.
-
+
DefaultTrackSelector.SelectionOverride
A track selection override.
-
+
DefaultTsPayloadReaderFactory
-
+
DefaultTsPayloadReaderFactory.Flags
Flags controlling elementary stream readers' behavior.
-
+
Descriptor
A descriptor, as defined by ISO 23009-1, 2nd edition, 5.8.2.
-
+
DeviceInfo
Information about the playback device.
-
+
DeviceInfo.PlaybackType
Types of playback.
-
+
+DeviceMappedEncoderBitrateProvider
+
+Provides encoder bitrates that should target 0.95 SSIM or higher, accounting for device used.
+
+
+
DolbyVisionConfig
Dolby Vision configuration data.
-
+
Download
Represents state of a download.
-
+
Download.FailureReason
Failure reasons.
-
+
Download.State
Download states.
-
+
DownloadBuilder
-
+
DownloadCursor
Provides random read-write access to the result set returned by a database query.
-
+
Downloader
Downloads and removes a piece of content.
-
+
Downloader.ProgressListener
Receives progress updates during download operations.
-
+
DownloaderFactory
-
+
DownloadException
Thrown on an error during downloading.
-
+
DownloadHelper
A helper for initializing and removing downloads.
-
+
DownloadHelper.Callback
-
+
DownloadHelper.LiveContentUnsupportedException
Thrown at an attempt to download live content.
-
+
DownloadIndex
-
+
DownloadManager
Manages downloads.
-
+
DownloadManager.Listener
-
+
DownloadNotificationHelper
Helper for creating download notifications.
-
+
DownloadProgress
-
+
DownloadRequest
Defines content to be downloaded.
-
+
DownloadRequest.Builder
A builder for download requests.
-
+
DownloadRequest.UnsupportedRequestException
Thrown when the encoded request data belongs to an unsupported request type.
-
+
DownloadService
-
+
DrmInitData
Initialization data for one or more DRM schemes.
-
+
DrmInitData.SchemeData
Scheme initialization data.
-
+
DrmSession
A DRM session.
-
+
DrmSession.DrmSessionException
Wraps the throwable which is the cause of the error state.
-
+
DrmSession.State
The state of the DRM session.
-
+
DrmSessionEventListener
-
+
DrmSessionEventListener.EventDispatcher
-
+
DrmSessionManager
Manages a DRM session.
-
+
DrmSessionManager.DrmSessionReference
Represents a single reference count of a
DrmSession
, while deliberately not giving
access to the underlying session.
-
+
DrmSessionManagerProvider
-
+
DrmUtil
DRM-related utility methods.
-
+
DrmUtil.ErrorSource
Identifies the operation which caused a DRM-related error.
-
+
DtsReader
Parses a continuous DTS byte stream and extracts individual samples.
-
+
DtsUtil
Utility methods for parsing DTS frames.
-
+
DummyExoMediaDrm
An
ExoMediaDrm
that does not support any protection schemes.
-
+
DummyExtractorOutput
-
+
DummyMainThread
Helper class to simulate main/UI thread in tests.
-
+
DummyMainThread.TestRunnable
Runnable
variant which can throw a checked exception.
-
+
DummyTrackOutput
-
+
DumpableFormat
Wraps a
Format
to allow dumping it.
-
+
Dumper
Helper utility to dump field values.
-
+
Dumper.Dumpable
Provides custom dump method.
-
+
DumpFileAsserts
Helper class to enable assertions based on golden-data dump files.
-
+
DvbDecoder
-
+
DvbSubtitleReader
Parses DVB subtitle data and extracts individual frames.
-
+
EbmlProcessor
Defines EBML element IDs/types and processes events.
-
+
EbmlProcessor.ElementType
EBML element types.
-
-EGLSurfaceTexture
+
+Effect
-
+Marker interface for a video frame effect.
-
-EGLSurfaceTexture.GlException
+
+EGLSurfaceTexture
-A runtime exception to be thrown if some EGL operations failed.
+
-
+
EGLSurfaceTexture.SecureMode
Secure mode to be used by the EGL surface and context.
-
+
EGLSurfaceTexture.TextureImageListener
Listener to be called when the texture image on
SurfaceTexture
has been updated.
-
+
ElementaryStreamReader
Extracts individual samples from an elementary media stream, preserving original order.
-
+
EmptySampleStream
-
+
+EncoderBitrateProvider
+
+Provides bitrates for encoders to use as a target.
+
+
+
EncoderSelector
-
+
EncoderUtil
-
+
ErrorMessageProvider <T extends Throwable >
Converts throwables into error codes and user readable error messages.
-
+
ErrorStateDrmSession
-
+
EventLogger
Logs events from
Player
and other core components using
Log
.
-
+
EventMessage
An Event Message (emsg) as defined in ISO 23009-1.
-
+
EventMessageDecoder
-
+
EventMessageEncoder
-
+
EventStream
A DASH in-MPD EventStream element, as defined by ISO/IEC 23009-1, 2nd edition, section 5.10.
-
+
ExoDatabaseProvider
Deprecated.
-
+
ExoHostedTest
-
+
ExoMediaDrm
Used to obtain keys for decrypting protected media streams.
-
+
ExoMediaDrm.AppManagedProvider
-
+
ExoMediaDrm.KeyRequest
Contains data used to request keys from a license server.
-
+
ExoMediaDrm.KeyRequest.RequestType
Key request types.
-
+
ExoMediaDrm.KeyStatus
Defines the status of a key.
-
+
ExoMediaDrm.OnEventListener
Called when a DRM event occurs.
-
+
ExoMediaDrm.OnExpirationUpdateListener
Called when a session expiration update occurs.
-
+
ExoMediaDrm.OnKeyStatusChangeListener
Called when the keys in a DRM session change state.
-
+
ExoMediaDrm.Provider
-
+
ExoMediaDrm.ProvisionRequest
Contains data to request a certificate from a provisioning server.
-
+
ExoPlaybackException
Thrown when a non locally recoverable playback failure occurs.
-
+
ExoPlaybackException.Type
The type of source that produced the error.
-
+
ExoPlayer
-
+
ExoPlayer.AudioComponent
Deprecated.
-
+
ExoPlayer.AudioOffloadListener
A listener for audio offload events.
-
+
ExoPlayer.Builder
-
+
ExoPlayer.DeviceComponent
Deprecated.
-
+
ExoPlayer.TextComponent
Deprecated.
-
+
ExoPlayer.VideoComponent
Deprecated.
-
+
ExoplayerCuesDecoder
-
+
ExoPlayerLibraryInfo
Information about the media libraries.
-
+
ExoPlayerTestRunner
Helper class to run an ExoPlayer test.
-
+
ExoPlayerTestRunner.Builder
-
+
ExoTimeoutException
A timeout of an operation on the ExoPlayer playback thread.
-
+
ExoTimeoutException.TimeoutOperation
The operation which produced the timeout error.
-
+
ExoTrackSelection
-
+
ExoTrackSelection.Definition
Contains of a subset of selected tracks belonging to a
TrackGroup
.
-
+
ExoTrackSelection.Factory
-
+
Extractor
Extracts media data from a container format.
-
+
Extractor.ReadResult
-
+
ExtractorAsserts
-
+
ExtractorAsserts.AssertionConfig
A config for the assertions made (e.g.
-
+
ExtractorAsserts.AssertionConfig.Builder
-
+
ExtractorAsserts.ExtractorFactory
-
+
ExtractorAsserts.SimulationConfig
A config of different environments to simulate and extractor behaviours to test.
-
+
ExtractorInput
Provides data to be consumed by an
Extractor
.
-
+
ExtractorOutput
Receives stream level data extracted by an
Extractor
.
-
+
ExtractorsFactory
-
+
ExtractorUtil
Extractor related utility methods.
-
+
FailOnCloseDataSink
-
+
FailOnCloseDataSink.Factory
-
+
FakeAdaptiveDataSet
Fake data set emulating the data of an adaptive media source.
-
+
FakeAdaptiveDataSet.Factory
-
+
FakeAdaptiveDataSet.Iterator
-
+
FakeAdaptiveMediaPeriod
-
+
FakeAdaptiveMediaSource
-
+
FakeAudioRenderer
-
+
FakeChunkSource
Fake
ChunkSource
with adaptive media chunks of a given duration.
-
+
FakeChunkSource.Factory
-
+
FakeClock
-
+
FakeCryptoConfig
-
+
FakeDataSet
-
+
FakeDataSet.FakeData
-
+
FakeDataSet.FakeData.Segment
-
+
FakeDataSource
A fake
DataSource
capable of simulating various scenarios.
-
+
FakeDataSource.Factory
-
+
FakeExoMediaDrm
-
+
FakeExoMediaDrm.Builder
-
+
FakeExoMediaDrm.LicenseServer
-
+
FakeExtractorInput
-
+
FakeExtractorInput.Builder
-
+
FakeExtractorInput.SimulatedIOException
-
+
FakeExtractorOutput
-
+
FakeMediaChunk
-
+
FakeMediaChunkIterator
-
+
FakeMediaClockRenderer
-
+
FakeMediaPeriod
-
+
FakeMediaPeriod.TrackDataFactory
A factory to create the test data for a particular track.
-
+
FakeMediaSource
-
+
FakeMediaSource.InitialTimeline
A forwarding timeline to provide an initial timeline for fake multi window sources.
-
+
FakeMediaSourceFactory
-
+
FakeMetadataEntry
-
+
FakeRenderer
Fake
Renderer
that supports any format with the matching track type.
-
+
FakeSampleStream
-
+
FakeSampleStream.FakeSampleStreamItem
-
+
FakeShuffleOrder
-
+
FakeTimeline
-
+
FakeTimeline.TimelineWindowDefinition
-
+
FakeTrackOutput
-
+
FakeTrackOutput.Factory
-
+
FakeTrackSelection
A fake
ExoTrackSelection
that only returns 1 fixed track, and allows querying the number
of calls to its methods.
-
+
FakeTrackSelector
-
+
FakeVideoRenderer
-
+
FfmpegAudioRenderer
Decodes and renders audio using FFmpeg.
-
+
FfmpegDecoderException
Thrown when an FFmpeg decoder error occurs.
-
+
FfmpegLibrary
Configures and queries the underlying native library.
-
+
FileDataSource
-
+
FileDataSource.Factory
-
+
FileDataSource.FileDataSourceException
-
+
FileTypes
Defines common file type constants and helper methods.
-
+
FileTypes.Type
File types.
-
+
FilterableManifest <T >
A manifest that can generate copies of itself including only the streams specified by the given
keys.
-
+
FilteringHlsPlaylistParserFactory
-
+
FilteringManifestParser <T extends FilterableManifest <T >>
A manifest parser that includes only the streams identified by the given stream keys.
-
+
FixedTrackSelection
-
+
FlacConstants
Defines constants used by the FLAC extractor.
-
+
FlacDecoder
Flac decoder.
-
+
FlacDecoderException
Thrown when an Flac decoder error occurs.
-
+
FlacExtractor
Facilitates the extraction of data from the FLAC container format.
-
+
FlacExtractor
Extracts data from FLAC container format.
-
+
FlacExtractor.Flags
Flags controlling the behavior of the extractor.
-
+
FlacExtractor.Flags
Flags controlling the behavior of the extractor.
-
+
FlacFrameReader
-
+
FlacFrameReader.SampleNumberHolder
Holds a sample number.
-
+
FlacLibrary
Configures and queries the underlying native library.
-
+
FlacMetadataReader
-
+
FlacMetadataReader.FlacStreamMetadataHolder
-
+
FlacSeekTableSeekMap
-
+
FlacStreamMetadata
Holder for FLAC metadata.
-
+
FlacStreamMetadata.SeekTable
A FLAC seek table.
-
+
FlagSet
A set of integer flags.
-
+
FlagSet.Builder
-
+
FlvExtractor
Extracts data from the FLV container format.
-
+
Format
Represents a media format.
-
+
Format.Builder
-
+
FormatHolder
-
+
ForwardingAudioSink
An overridable
AudioSink
implementation forwarding all methods to another sink.
-
+
ForwardingExtractorInput
An overridable
ExtractorInput
implementation forwarding all methods to another input.
-
+
ForwardingPlayer
-
+
ForwardingTimeline
An overridable
Timeline
implementation forwarding all methods to another timeline.
-
+
FragmentedMp4Extractor
Extracts data from the FMP4 container format.
-
+
FragmentedMp4Extractor.Flags
Flags controlling the behavior of the extractor.
-
-FrameProcessingException
+
+FrameInfo
+
+Value class specifying information about a decoded video frame.
+
+
+
+FrameProcessingException
Thrown when an exception occurs while applying effects to video frames.
-
+
+FrameProcessor
+
+Interface for a frame processor that applies changes to individual video frames.
+
+
+
+FrameProcessor.Factory
+
+
+
+
+
+FrameProcessor.Listener
+
+Listener for asynchronous frame processing events.
+
+
+
FrameworkCryptoConfig
-
+
FrameworkMediaDrm
-
+
GaplessInfoHolder
Holder for gapless playback information.
-
+
Gav1Decoder
Gav1 decoder.
-
+
Gav1DecoderException
Thrown when a libgav1 decoder error occurs.
-
+
Gav1Library
Configures and queries the underlying native library.
-
+
GeobFrame
GEOB (General Encapsulated Object) ID3 frame.
-
-GlEffect
+
+GlEffect
-
+
-
-GlMatrixTransformation
+
+GlEffectsFrameProcessor
+
+
+
+
+
+GlEffectsFrameProcessor.Factory
+
+
+
+
+
+GlMatrixTransformation
Specifies a 4x4 transformation
Matrix
to apply in the vertex shader for each frame.
-
+
GlProgram
Represents a GLSL shader program.
-
+
+GlTextureProcessor
+
+Processes frames from one OpenGL 2D texture to another.
+
+
+
+GlTextureProcessor.ErrorListener
+
+Listener for frame processing errors.
+
+
+
+GlTextureProcessor.InputListener
+
+Listener for input-related frame processing events.
+
+
+
+GlTextureProcessor.OutputListener
+
+Listener for output-related frame processing events.
+
+
+
GlUtil
OpenGL ES utilities.
-
+
GlUtil.GlException
-
+Thrown when an OpenGL error occurs.
-
+
H262Reader
Parses a continuous H262 byte stream and extracts individual frames.
-
+
H263Reader
Parses an ISO/IEC 14496-2 (MPEG-4 Part 2) or ITU-T Recommendation H.263 byte stream and extracts
individual frames.
-
+
H264Reader
Parses a continuous H264 byte stream and extracts individual frames.
-
+
H265Reader
Parses a continuous H.265 byte stream and extracts individual frames.
-
+
HandlerWrapper
An interface to call through to a
Handler
.
-
+
HandlerWrapper.Message
A message obtained from the handler.
-
+
HeartRating
A rating expressed as "heart" or "no heart".
-
+
HevcConfig
HEVC configuration data.
-
+
HlsDataSourceFactory
Creates
DataSource
s for HLS playlists, encryption and media chunks.
-
+
HlsDownloader
A downloader for HLS streams.
-
+
HlsExtractorFactory
Factory for HLS media chunk extractors.
-
+
HlsManifest
Holds a multivariant playlist along with a snapshot of one of its media playlists.
-
+
HlsMasterPlaylist
Deprecated.
-
+
HlsMediaChunkExtractor
Extracts samples and track
Formats
from
HlsMediaChunks
.
-
+
HlsMediaPeriod
-
+
HlsMediaPlaylist
Represents an HLS media playlist.
-
+
HlsMediaPlaylist.Part
A media part.
-
+
HlsMediaPlaylist.PlaylistType
Type of the playlist, as defined by #EXT-X-PLAYLIST-TYPE.
-
+
HlsMediaPlaylist.RenditionReport
A rendition report for an alternative rendition defined in another media playlist.
-
+
HlsMediaPlaylist.Segment
Media segment reference.
-
+
HlsMediaPlaylist.SegmentBase
-
+
HlsMediaPlaylist.ServerControl
Server control attributes.
-
+
HlsMediaSource
-
+
HlsMediaSource.Factory
-
+
HlsMediaSource.MetadataType
The types of metadata that can be extracted from HLS streams.
-
+
HlsMultivariantPlaylist
Represents an HLS multivariant playlist.
-
+
HlsMultivariantPlaylist.Rendition
A rendition (i.e.
-
+
HlsMultivariantPlaylist.Variant
A variant (i.e.
-
+
HlsPlaylist
Represents an HLS playlist.
-
+
HlsPlaylistParser
HLS playlists parsing logic.
-
+
HlsPlaylistParser.DeltaUpdateException
Exception thrown when merging a delta update fails.
-
+
HlsPlaylistParserFactory
-
+
HlsPlaylistTracker
Tracks playlists associated to an HLS stream and provides snapshots.
-
+
HlsPlaylistTracker.Factory
-
+
HlsPlaylistTracker.PlaylistEventListener
Called on playlist loading events.
-
+
HlsPlaylistTracker.PlaylistResetException
Thrown when the media sequence of a new snapshot indicates the server has reset.
-
+
HlsPlaylistTracker.PlaylistStuckException
Thrown when a playlist is considered to be stuck due to a server side error.
-
+
HlsPlaylistTracker.PrimaryPlaylistListener
Listener for primary playlist changes.
-
+
HlsTrackMetadataEntry
Holds metadata associated to an HLS media track.
-
+
HlsTrackMetadataEntry.VariantInfo
Holds attributes defined in an EXT-X-STREAM-INF tag.
-
+
HorizontalTextInVerticalContextSpan
A styling span for horizontal text in a vertical context.
-
+
HostActivity
A host activity for performing playback tests.
-
+
HostActivity.HostedTest
-
+
+HslAdjustment
+
+Adjusts the HSL (Hue, Saturation, and Lightness) of a frame.
+
+
+
+HslAdjustment.Builder
+
+A builder for HslAdjustment
instances.
+
+
+
HttpDataSource
-
+
HttpDataSource.BaseFactory
-
+
HttpDataSource.CleartextNotPermittedException
Thrown when cleartext HTTP traffic is not permitted.
-
+
HttpDataSource.Factory
-
+
HttpDataSource.HttpDataSourceException
Thrown when an error is encountered when trying to read from a
HttpDataSource
.
-
+
HttpDataSource.HttpDataSourceException.Type
The type of operation that produced the error.
-
+
HttpDataSource.InvalidContentTypeException
Thrown when the content type is invalid.
-
+
HttpDataSource.InvalidResponseCodeException
Thrown when an attempt to open a connection results in a response code not in the 2xx range.
-
+
HttpDataSource.RequestProperties
Stores HTTP request properties (aka HTTP headers) and provides methods to modify the headers in
@@ -3980,373 +4132,379 @@
All Classes
state.
-
+
HttpDataSourceTestEnv
A JUnit
Rule
that creates test resources for
HttpDataSource
contract tests.
-
+
HttpMediaDrmCallback
-
+
HttpUtil
Utility methods for HTTP.
-
+
IcyDecoder
Decodes ICY stream information.
-
+
IcyHeaders
ICY headers.
-
+
IcyInfo
ICY in-stream information.
-
+
Id3Decoder
Decodes ID3 tags.
-
+
Id3Decoder.FramePredicate
A predicate for determining whether individual frames should be decoded.
-
+
Id3Frame
Base class for ID3 frames.
-
+
Id3Peeker
Peeks data from the beginning of an
ExtractorInput
to determine if there is any ID3 tag.
-
+
Id3Reader
Parses ID3 data and extracts individual text information frames.
-
+
IllegalSeekPositionException
Thrown when an attempt is made to seek to a position that does not exist in the player's
Timeline
.
-
+
ImaAdsLoader
-
+
ImaAdsLoader.Builder
-
+
ImaServerSideAdInsertionMediaSource
MediaSource for IMA server side inserted ad streams.
-
+
ImaServerSideAdInsertionMediaSource.AdsLoader
An ads loader for IMA server side ad insertion streams.
-
+
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
-
+
ImaServerSideAdInsertionMediaSource.AdsLoader.State
-
+
ImaServerSideAdInsertionMediaSource.Factory
-
+
ImaServerSideAdInsertionUriBuilder
Builder for URI for IMA DAI streams.
-
+
IndexSeekMap
A
SeekMap
implementation based on a mapping between times and positions in the input
stream.
-
+
InitializationChunk
A
Chunk
that uses an
Extractor
to decode initialization data for single track.
-
+
InputReaderAdapterV30
-
+
InternalFrame
Internal ID3 frame that is intended for use by the player.
-
+
JpegExtractor
Extracts JPEG image using the Exif format.
-
+
KeysExpiredException
Thrown when the drm keys loaded into an open session expire.
-
+
LanguageFeatureSpan
Marker interface for span classes that carry language features rather than style information.
-
+
LatmReader
Parses and extracts samples from an AAC/LATM elementary stream.
-
+
LeanbackPlayerAdapter
Leanback
PlayerAdapter
implementation for
Player
.
-
+
LeastRecentlyUsedCacheEvictor
Evicts least recently used cache files first.
-
+
+LegacyMediaPlayerWrapper
+
+
+
+
+
LibflacAudioRenderer
Decodes and renders audio using the native Flac decoder.
-
+
Libgav1VideoRenderer
Decodes and renders video using libgav1 decoder.
-
+
LibopusAudioRenderer
Decodes and renders audio using the native Opus decoder.
-
+
LibraryLoader
Configurable loader for native libraries.
-
+
LibvpxVideoRenderer
Decodes and renders video using the native VP9 decoder.
-
+
ListenerSet <T extends @NonNull Object >
A set of listeners.
-
+
ListenerSet.Event <T >
An event sent to a listener.
-
+
ListenerSet.IterationFinishedEvent <T >
An event sent to a listener when all other events sent during one
Looper
message queue
iteration were handled by the listener.
-
+
LivePlaybackSpeedControl
Controls the playback speed while playing live content in order to maintain a steady target live
offset.
-
+
LoadControl
Controls buffering of media.
-
+
Loader
-
+
Loader.Callback <T extends Loader.Loadable >
A callback to be notified of
Loader
events.
-
+
Loader.Loadable
An object that can be loaded using a
Loader
.
-
+
Loader.LoadErrorAction
-
+
Loader.ReleaseCallback
A callback to be notified when a
Loader
has finished being released.
-
+
Loader.UnexpectedLoaderException
Thrown when an unexpected exception or error is encountered during loading.
-
+
LoaderErrorThrower
Conditionally throws errors affecting a
Loader
.
-
+
LoaderErrorThrower.Dummy
-
+
LoadErrorHandlingPolicy
A policy that defines how load errors are handled.
-
+
LoadErrorHandlingPolicy.FallbackOptions
Holds information about the available fallback options.
-
+
LoadErrorHandlingPolicy.FallbackSelection
A selected fallback option.
-
+
LoadErrorHandlingPolicy.FallbackType
Fallback type.
-
+
LoadErrorHandlingPolicy.LoadErrorInfo
Holds information about a load task error.
-
+
LoadEventInfo
-
+
LocalMediaDrmCallback
-
+
Log
Wrapper around
Log
which allows to set the log level and to specify a custom
log output.
-
+
Log.Logger
Interface for a logger that can output messages with a tag.
-
+
Log.LogLevel
Log level for ExoPlayer logcat logging.
-
+
LongArray
An append-only, auto-growing long[]
.
-
+
LoopingMediaSource
Deprecated.
-
+
MappingTrackSelector
Base class for
TrackSelector
s that first establish a mapping between
TrackGroup
s
@@ -4354,1795 +4512,1831 @@
All Classes
renderer.
-
+
MappingTrackSelector.MappedTrackInfo
Provides mapped track information for each renderer.
-
+
MappingTrackSelector.MappedTrackInfo.RendererSupport
Levels of renderer support.
-
+
MaskingMediaPeriod
-
+
MaskingMediaPeriod.PrepareListener
Listener for preparation events.
-
+
MaskingMediaSource
A
MediaSource
that masks the
Timeline
with a placeholder until the actual media
structure is known.
-
+
MaskingMediaSource.PlaceholderTimeline
A timeline with one dynamic window with a period of indeterminate duration.
-
-MatrixTransformation
+
+MatrixTransformation
Specifies a 3x3 transformation
Matrix
to apply in the vertex shader for each frame.
-
+
MatroskaExtractor
Extracts data from the Matroska and WebM container formats.
-
+
MatroskaExtractor.Flags
Flags controlling the behavior of the extractor.
-
+
MatroskaExtractor.Track
Holds data corresponding to a single track.
-
+
MdtaMetadataEntry
Stores extensible metadata with handler type 'mdta'.
-
+
MediaChunk
An abstract base class for
Chunk
s that contain media samples.
-
+
MediaChunkIterator
Iterator for media chunk sequences.
-
+
MediaClock
Tracks the progression of media time.
-
+
MediaCodecAdapter
-
+
MediaCodecAdapter.Configuration
-
+
MediaCodecAdapter.Factory
-
+
MediaCodecAdapter.OnFrameRenderedListener
Listener to be called when an output frame has rendered on the output surface.
-
+
MediaCodecAudioRenderer
-
+
MediaCodecDecoderException
Thrown when a failure occurs in a
MediaCodec
decoder.
-
+
MediaCodecInfo
Information about a
MediaCodec
for a given mime type.
-
+
MediaCodecRenderer
An abstract renderer that uses
MediaCodec
to decode samples for rendering.
-
+
MediaCodecRenderer.DecoderInitializationException
Thrown when a failure occurs instantiating a decoder.
-
+
MediaCodecSelector
-
+
MediaCodecUtil
A utility class for querying the available codecs.
-
+
MediaCodecUtil.DecoderQueryException
Thrown when an error occurs querying the device for its underlying media capabilities.
-
+
MediaCodecVideoDecoderException
Thrown when a failure occurs in a
MediaCodec
video decoder.
-
+
MediaCodecVideoRenderer
-
+
MediaCodecVideoRenderer.CodecMaxValues
-
+
MediaDrmCallback
-
+
MediaDrmCallbackException
Thrown when an error occurs while executing a DRM
key
or
provisioning
request.
-
+
MediaFormatUtil
Helper class containing utility methods for managing
MediaFormat
instances.
-
+
MediaItem
Representation of a media item.
-
+
MediaItem.AdsConfiguration
Configuration for playing back linear ads with a media item.
-
+
MediaItem.AdsConfiguration.Builder
-
+
MediaItem.Builder
-
+
MediaItem.ClippingConfiguration
Optionally clips the media item to a custom start and end position.
-
+
MediaItem.ClippingConfiguration.Builder
-
+
MediaItem.ClippingProperties
Deprecated.
-
+
MediaItem.DrmConfiguration
DRM configuration for a media item.
-
+
MediaItem.DrmConfiguration.Builder
-
+
MediaItem.LiveConfiguration
Live playback configuration.
-
+
MediaItem.LiveConfiguration.Builder
-
+
MediaItem.LocalConfiguration
Properties for local playback.
-
+
MediaItem.PlaybackProperties
Deprecated.
-
+
MediaItem.RequestMetadata
Metadata that helps the player to understand a playback request represented by a
MediaItem
.
-
+
MediaItem.RequestMetadata.Builder
-
+
MediaItem.Subtitle
Deprecated.
-
+
MediaItem.SubtitleConfiguration
Properties for a text track.
-
+
MediaItem.SubtitleConfiguration.Builder
-
+
MediaItemConverter
Converts between
MediaItem
and the Cast SDK's
MediaQueueItem
.
-
+
MediaItemConverter
-
+
MediaLoadData
Descriptor for data being loaded or selected by a
MediaSource
.
-
+
MediaMetadata
-
+
MediaMetadata.Builder
-
+
MediaMetadata.FolderType
The folder type of the media item.
-
+
MediaMetadata.PictureType
The picture type of the artwork.
-
+
MediaMetricsListener
-
+
MediaParserChunkExtractor
-
+
MediaParserExtractorAdapter
-
+
MediaParserHlsMediaChunkExtractor
-
+
MediaParserUtil
Miscellaneous constants and utility methods related to the
MediaParser
integration.
-
+
MediaPeriod
Loads media corresponding to a
Timeline.Period
, and allows that media to be read.
-
+
MediaPeriod.Callback
-
+
MediaPeriodAsserts
-
+
MediaPeriodAsserts.FilterableManifestMediaPeriodFactory <T extends FilterableManifest <T >>
-
+
MediaPeriodId
-
+
MediaSessionConnector
Connects a
MediaSessionCompat
to a
Player
.
-
+
MediaSessionConnector.CaptionCallback
Handles requests for enabling or disabling captions.
-
+
MediaSessionConnector.CommandReceiver
Receiver of media commands sent by a media controller.
-
+
MediaSessionConnector.CustomActionProvider
Provides a PlaybackStateCompat.CustomAction
to be published and handles the action when
sent by a media controller.
-
+
MediaSessionConnector.DefaultMediaMetadataProvider
Provides a default MediaMetadataCompat
with properties and extras taken from the MediaDescriptionCompat
of the MediaSessionCompat.QueueItem
of the active queue item.
-
+
MediaSessionConnector.MediaButtonEventHandler
Handles a media button event.
-
+
MediaSessionConnector.MediaMetadataProvider
Provides a MediaMetadataCompat
for a given player state.
-
+
MediaSessionConnector.PlaybackActions
Playback actions supported by the connector.
-
+
MediaSessionConnector.PlaybackPreparer
Interface to which playback preparation and play actions are delegated.
-
+
MediaSessionConnector.QueueEditor
Handles media session queue edits.
-
+
MediaSessionConnector.QueueNavigator
Handles queue navigation actions, and updates the media session queue by calling
MediaSessionCompat.setQueue()
.
-
+
MediaSessionConnector.RatingCallback
Callback receiving a user rating for the active media item.
-
+
MediaSource
Defines and provides media to be played by an
ExoPlayer
.
-
+
MediaSource.Factory
-
+
MediaSource.MediaPeriodId
-
+
MediaSource.MediaSourceCaller
A caller of media sources, which will be notified of source events.
-
+
MediaSourceEventListener
Interface for callbacks to be notified of
MediaSource
events.
-
+
MediaSourceEventListener.EventDispatcher
-
+
MediaSourceFactory
Deprecated.
-
+
MediaSourceTestRunner
-
+
MergingMediaSource
-
+
MergingMediaSource.IllegalMergeException
-
+
MergingMediaSource.IllegalMergeException.Reason
The reason the merge failed.
-
+
Metadata
A collection of metadata entries.
-
+
Metadata.Entry
A metadata entry.
-
+
MetadataDecoder
Decodes metadata from binary data.
-
+
MetadataDecoderFactory
-
+
MetadataInputBuffer
-
+
MetadataOutput
Receives metadata output.
-
+
MetadataRenderer
A renderer for metadata.
-
+
MetadataRetriever
-
+
MimeTypes
Defines common MIME types and helper methods.
-
+
MlltFrame
MPEG location lookup table frame.
-
+
MotionPhotoMetadata
Metadata of a motion photo file.
-
+
Mp3Extractor
Extracts data from the MP3 container format.
-
+
Mp3Extractor.Flags
Flags controlling the behavior of the extractor.
-
+
Mp4Extractor
Extracts data from the MP4 container format.
-
+
Mp4Extractor.Flags
Flags controlling the behavior of the extractor.
-
+
Mp4WebvttDecoder
-
+
MpegAudioReader
Parses a continuous MPEG Audio byte stream and extracts individual frames.
-
+
MpegAudioUtil
Utility methods for handling MPEG audio streams.
-
+
MpegAudioUtil.Header
Stores the metadata for an MPEG audio frame.
-
+
+Muxer
+
+Abstracts media muxing operations.
+
+
+
+Muxer.Factory
+
+Factory for muxers.
+
+
+
+Muxer.MuxerException
+
+Thrown when a muxing failure occurs.
+
+
+
NalUnitUtil
Utility methods for handling H.264/AVC and H.265/HEVC NAL units.
-
+
NalUnitUtil.H265SpsData
Holds data parsed from a H.265 sequence parameter set NAL unit.
-
+
NalUnitUtil.PpsData
Holds data parsed from a picture parameter set NAL unit.
-
+
NalUnitUtil.SpsData
Holds data parsed from a H.264 sequence parameter set NAL unit.
-
+
NetworkTypeObserver
Observer for network type changes.
-
+
NetworkTypeObserver.Listener
A listener for network type changes.
-
+
NonNullApi
Annotation to declare all type usages in the annotated instance as Nonnull
, unless
explicitly marked with a nullable annotation.
-
+
NoOpCacheEvictor
Evictor that doesn't ever evict cache files.
-
+
NoSampleRenderer
-
+
NotificationUtil
-
+
NotificationUtil.Importance
Notification channel importance levels.
-
+
OfflineLicenseHelper
Helper class to download, renew and release offline licenses.
-
+
OggExtractor
Extracts data from the Ogg container format.
-
+
OkHttpDataSource
-
+
OkHttpDataSource.Factory
-
+
OkHttpDataSourceFactory
Deprecated.
-
+
OpusDecoder
Opus decoder.
-
+
OpusDecoderException
Thrown when an Opus decoder error occurs.
-
+
OpusLibrary
Configures and queries the underlying native library.
-
+
OpusUtil
Utility methods for handling Opus audio streams.
-
+
OutputConsumerAdapterV30
-
+
ParsableBitArray
Wraps a byte array, providing methods that allow it to be read as a bitstream.
-
+
ParsableByteArray
Wraps a byte array, providing a set of methods for parsing data from it.
-
+
ParsableNalUnitBitArray
Wraps a byte array, providing methods that allow it to be read as a NAL unit bitstream.
-
+
ParserException
Thrown when an error occurs parsing media data and metadata.
-
+
ParsingLoadable <T >
-
+
ParsingLoadable.Parser <T >
Parses an object from loaded data.
-
+
PassthroughSectionPayloadReader
-
+
PercentageRating
A rating expressed as a percentage.
-
+
Period
Encapsulates media content components over a contiguous period of time.
-
+
PesReader
Parses PES packet data and extracts samples.
-
+
PgsDecoder
-
+
PictureFrame
A picture parsed from a Vorbis Comment or a FLAC picture block.
-
+
PlaceholderDataSource
A DataSource which provides no data.
-
+
PlaceholderSurface
-
+
PlatformScheduler
-
+
PlatformScheduler.PlatformSchedulerService
A
JobService
that starts the target service if the requirements are met.
-
+
PlaybackException
Thrown when a non locally recoverable playback failure occurs.
-
+
PlaybackException.ErrorCode
Codes that identify causes of player errors.
-
+
PlaybackOutput
Class to capture output from a playback test.
-
+
PlaybackParameters
Parameters that apply to playback, including speed setting.
-
+
PlaybackSessionManager
Manager for active playback sessions.
-
+
PlaybackSessionManager.Listener
A listener for session updates.
-
+
PlaybackStats
Statistics about playbacks.
-
+
PlaybackStats.EventTimeAndException
Stores an exception with the event time at which it occurred.
-
+
PlaybackStats.EventTimeAndFormat
Stores a format with the event time at which it started being used, or null
to indicate
that no format was used.
-
+
PlaybackStats.EventTimeAndPlaybackState
Stores a playback state with the event time at which it became active.
-
+
PlaybackStatsListener
-
+
PlaybackStatsListener.Callback
-
+
Player
A media player interface defining traditional high-level functionality, such as the ability to
play, pause, seek and query properties of the currently playing media.
-
+
Player.Command
Commands that can be executed on a Player
.
-
+
Player.Commands
-
+
Player.Commands.Builder
-
+
Player.DiscontinuityReason
Reasons for position discontinuities.
-
+
Player.Event
-
+
Player.Events
-
+
Player.Listener
Listener of all changes in the Player.
-
+
Player.MediaItemTransitionReason
Reasons for media item transitions.
-
+
Player.PlaybackSuppressionReason
-
+
Player.PlayWhenReadyChangeReason
-
+
Player.PositionInfo
Position info describing a playback position involved in a discontinuity.
-
+
Player.RepeatMode
Repeat modes for playback.
-
+
Player.State
Playback state.
-
+
Player.TimelineChangeReason
Reasons for timeline changes.
-
+
PlayerControlView
A view for controlling
Player
instances.
-
+
PlayerControlView.ProgressUpdateListener
Listener to be notified when progress has been updated.
-
+
PlayerControlView.VisibilityListener
Listener to be notified about changes of the visibility of the UI control.
-
+
PlayerEmsgHandler
Handles all emsg messages from all media tracks for the player.
-
+
PlayerEmsgHandler.PlayerEmsgCallback
Callbacks for player emsg events encountered during DASH live stream.
-
+
PlayerId
Identifier for a player instance.
-
+
PlayerMessage
-
+
PlayerMessage.Sender
A sender for messages.
-
+
PlayerMessage.Target
A target for messages.
-
+
PlayerNotificationManager
Starts, updates and cancels a media style notification reflecting the player state.
-
+
PlayerNotificationManager.Builder
-
+
PlayerNotificationManager.CustomActionReceiver
Defines and handles custom actions.
-
+
PlayerNotificationManager.MediaDescriptionAdapter
An adapter to provide content assets of the media currently playing.
-
+
PlayerNotificationManager.NotificationListener
A listener for changes to the notification.
-
+
PlayerNotificationManager.Priority
Priority of the notification (required for API 25 and lower).
-
+
PlayerNotificationManager.Visibility
Visibility of notification on the lock screen.
-
+
PlayerView
Deprecated.
-
+
PlayerView.ShowBuffering
Determines when the buffering view is shown.
-
+
PositionHolder
Holds a position in the stream.
-
-Presentation
-
-Controls how a frame is presented with options to set the output resolution, crop the input, and
- choose how to map the input pixels onto the output frame geometry (for example, by stretching the
- input frame to match the specified output frame, or fitting the input frame using letterboxing).
-
-
-
-Presentation.Builder
+
+Presentation
-
+Controls how a frame is presented with options to set the output resolution and choose how to map
+ the input pixels onto the output frame geometry (for example, by stretching the input frame to
+ match the specified output frame, or fitting the input frame using letterboxing).
-
-Presentation.Layout
+
+Presentation.Layout
Strategies controlling the layout of input pixels in the output frame.
-
+
PriorityDataSource
-
+
PriorityDataSource.Factory
-
+
PriorityDataSourceFactory
Deprecated.
-
+
PriorityTaskManager
Allows tasks with associated priorities to control how they proceed relative to one another.
-
+
PriorityTaskManager.PriorityTooLowException
Thrown when task attempts to proceed when another registered task has a higher priority.
-
+
PrivateCommand
Represents a private command as defined in SCTE35, Section 9.3.6.
-
+
PrivFrame
PRIV (Private) ID3 frame.
-
+
ProgramInformation
A parsed program information element.
-
+
ProgressHolder
Holds a progress percentage.
-
+
ProgressiveDownloader
A downloader for progressive media streams.
-
+
ProgressiveMediaExtractor
Extracts the contents of a container file from a progressive media stream.
-
+
ProgressiveMediaExtractor.Factory
-
+
ProgressiveMediaSource
Provides one period that loads data from a
Uri
and extracted using an
Extractor
.
-
+
ProgressiveMediaSource.Factory
-
+
PsExtractor
Extracts data from the MPEG-2 PS container format.
-
+
PsshAtomUtil
Utility methods for handling PSSH atoms.
-
+
RandomizedMp3Decoder
Generates randomized, but correct amount of data on MP3 audio input.
-
+
RandomTrackSelection
-
+
RandomTrackSelection.Factory
-
+
RangedUri
Defines a range of data located at a reference uri.
-
+
Rating
A rating for media content.
-
+
RawResourceDataSource
A
DataSource
for reading a raw resource inside the APK.
-
+
RawResourceDataSource.RawResourceDataSourceException
Thrown when an
IOException
is encountered reading from a raw resource.
-
+
Renderer
-
+
Renderer.MessageType
Represents a type of message that can be passed to a renderer.
-
+
Renderer.State
The renderer states.
-
+
Renderer.WakeupListener
-
+
RendererCapabilities
-
+
RendererCapabilities.AdaptiveSupport
Level of renderer support for adaptive format switches.
-
+
RendererCapabilities.Capabilities
Combined renderer capabilities.
-
+
RendererCapabilities.DecoderSupport
Level of decoder support.
-
+
RendererCapabilities.FormatSupport
Deprecated.
-
+
RendererCapabilities.HardwareAccelerationSupport
Level of renderer support for hardware acceleration.
-
+
RendererCapabilities.TunnelingSupport
Level of renderer support for tunneling.
-
+
RendererConfiguration
-
+
RenderersFactory
-
+
RepeatModeActionProvider
Provides a custom action for toggling repeat modes.
-
+
RepeatModeUtil
Util class for repeat mode handling.
-
+
RepeatModeUtil.RepeatToggleModes
Set of repeat toggle modes.
-
+
Representation
A DASH representation.
-
+
Representation.MultiSegmentRepresentation
A DASH representation consisting of multiple segments.
-
+
Representation.SingleSegmentRepresentation
A DASH representation consisting of a single segment.
-
+
Requirements
Defines a set of device state requirements.
-
+
Requirements.RequirementFlags
Requirement flags.
-
+
RequirementsWatcher
-
+
RequirementsWatcher.Listener
Notified when RequirementsWatcher instance first created and on changes whether the
Requirements
are met.
-
+
ResolvingDataSource
-
+
ResolvingDataSource.Factory
-
+
ResolvingDataSource.Resolver
-
+
+RgbAdjustment
+
+Scales the red, green, and blue color channels of a frame.
+
+
+
+RgbAdjustment.Builder
+
+
+
+
+
+RgbFilter
+
+Provides common color filters.
+
+
+
+RgbMatrix
+
+Specifies a 4x4 RGB color transformation matrix to apply to each frame in the fragment shader.
+
+
+
RobolectricUtil
Utility methods for Robolectric-based tests.
-
+
RtmpDataSource
-
+
RtmpDataSource.Factory
-
+
RtmpDataSourceFactory
Deprecated.
-
+
RtpAc3Reader
Parses an AC3 byte stream carried on RTP packets, and extracts AC3 frames.
-
+
RtpPacket
Represents the header and the payload of an RTP packet.
-
+
RtpPacket.Builder
-
+
RtpPayloadFormat
Represents the payload format used in RTP.
-
+
RtpPayloadReader
Extracts media samples from the payload of received RTP packets.
-
+
RtpPayloadReader.Factory
-
+
RtpPcmReader
Parses byte stream carried on RTP packets, and extracts PCM frames.
-
+
RtpUtils
Utility methods for RTP.
-
+
RtspMediaSource
-
+
RtspMediaSource.Factory
-
+
RtspMediaSource.RtspPlaybackException
Thrown when an exception or error is encountered during loading an RTSP stream.
-
+
RubySpan
A styling span for ruby text.
-
+
RunnableFutureTask <R ,E extends Exception >
A
RunnableFuture
that supports additional uninterruptible operations to query whether
execution has started and finished.
-
+
SampleQueue
A queue of media samples.
-
+
SampleQueue.UpstreamFormatChangedListener
A listener for changes to the upstream format.
-
+
SampleQueueMappingException
-
+
SampleStream
A stream of media samples (and associated format information).
-
+
SampleStream.ReadDataResult
-
+
SampleStream.ReadFlags
-
-ScaleToFitTransformation
+
+ScaleToFitTransformation
Specifies a simple rotation and/or scale to apply in the vertex shader.
-
-ScaleToFitTransformation.Builder
+
+ScaleToFitTransformation.Builder
-
+
-
+
Scheduler
Schedules a service to be started in the foreground when some
Requirements
are met.
-
+
SectionPayloadReader
Reads section data.
-
+
SectionReader
-
+
SeekMap
Maps seek positions (in microseconds) to corresponding positions (byte offsets) in the stream.
-
+
SeekMap.SeekPoints
-
+
SeekMap.Unseekable
A
SeekMap
that does not support seeking.
-
+
SeekParameters
Parameters that apply to seeking.
-
+
SeekPoint
Defines a seek point in a media stream.
-
+
SegmentBase
An approximate representation of a SegmentBase manifest element.
-
+
SegmentBase.MultiSegmentBase
-
+
SegmentBase.SegmentList
-
+
SegmentBase.SegmentTemplate
-
+
SegmentBase.SegmentTimelineElement
Represents a timeline segment from the MPD's SegmentTimeline list.
-
+
SegmentBase.SingleSegmentBase
-
+
SegmentDownloader <M extends FilterableManifest <M >>
Base class for multi segment stream downloaders.
-
+
SegmentDownloader.Segment
Smallest unit of content to be downloaded.
-
+
SeiReader
Consumes SEI buffers, outputting contained CEA-608/708 messages to a
TrackOutput
.
-
+
SequenceableLoader
A loader that can proceed in approximate synchronization with other loaders.
-
+
SequenceableLoader.Callback <T extends SequenceableLoader >
-
+
ServerSideAdInsertionMediaSource
-
+
ServerSideAdInsertionMediaSource.AdPlaybackStateUpdater
Receives ad playback state update requests when the
Timeline
of the content media
source has changed.
-
+
ServerSideAdInsertionUtil
A static utility class with methods to work with server-side inserted ads.
-
+
ServiceDescriptionElement
Represents a service description element.
-
+
SessionAvailabilityListener
Listener of changes in the cast session availability.
-
+
SessionCallbackBuilder
Builds a MediaSession.SessionCallback
with various collaborators.
-
+
SessionCallbackBuilder.AllowedCommandProvider
Provides allowed commands for MediaController
.
-
+
SessionCallbackBuilder.CustomCommandProvider
Callbacks for querying what custom commands are supported, and for handling a custom command
when a controller sends it.
-
+
SessionCallbackBuilder.DefaultAllowedCommandProvider
-
+
SessionCallbackBuilder.DisconnectedCallback
Callback for handling controller disconnection.
-
+
SessionCallbackBuilder.MediaIdMediaItemProvider
-
+
SessionCallbackBuilder.MediaItemProvider
Provides the MediaItem
.
-
+
SessionCallbackBuilder.PostConnectCallback
Callback for handling extra initialization after the connection.
-
+
SessionCallbackBuilder.RatingCallback
Callback receiving a user rating for a specified media id.
-
+
SessionCallbackBuilder.SkipCallback
Callback receiving skip backward and skip forward.
-
+
SessionPlayerConnector
An implementation of
SessionPlayer
that wraps a given ExoPlayer
Player
instance.
-
+
ShadowMediaCodecConfig
A JUnit @Rule to configure Roboelectric's ShadowMediaCodec
.
-
+
ShuffleOrder
Shuffled order of indices.
-
+
ShuffleOrder.DefaultShuffleOrder
The default
ShuffleOrder
implementation for random shuffle order.
-
+
ShuffleOrder.UnshuffledShuffleOrder
-
+
SilenceMediaSource
Media source with a single period consisting of silent raw audio of a given duration.
-
+
SilenceMediaSource.Factory
-
+
SilenceSkippingAudioProcessor
-
+
+SimpleBasePlayer
+
+A base implementation for
Player
that reduces the number of methods to implement to a
+ minimum.
+
+
+
+SimpleBasePlayer.State
+
+An immutable state description of the player.
+
+
+
+SimpleBasePlayer.State.Builder
+
+
+
+
+
SimpleCache
A
Cache
implementation that maintains an in-memory representation.
-
+
SimpleDecoder <I extends DecoderInputBuffer ,O extends DecoderOutputBuffer ,E extends DecoderException >
Base class for
Decoder
s that use their own decode thread and decode each input buffer
immediately into a corresponding output buffer.
-
+
SimpleDecoderOutputBuffer
-
+
SimpleExoPlayer
Deprecated.
-
+
SimpleExoPlayer.Builder
Deprecated.
-
+
SimpleMetadataDecoder
-
+
SimpleSubtitleDecoder
Base class for subtitle parsers that use their own decode thread.
-
-SingleFrameGlTextureProcessor
+
+SingleColorLut
+
+Transforms the colors of a frame by applying the same color lookup table to each frame.
+
+
+
+SingleFrameGlTextureProcessor
Manages a GLSL shader program for processing a frame.
-
+
SinglePeriodAdTimeline
-
+
SinglePeriodTimeline
A
Timeline
consisting of a single period and static window.
-
+
SingleSampleMediaChunk
-
+
SingleSampleMediaSource
Loads data at a given
Uri
as a single sample belonging to a single
MediaPeriod
.
-
+
SingleSampleMediaSource.Factory
-
+
+Size
+
+Immutable class for describing width and height dimensions in pixels.
+
+
+
SlidingPercentile
Calculate any percentile over a sliding window of weighted values.
-
+
SlowMotionData
Holds information about the segments of slow motion playback within a track.
-
+
SlowMotionData.Segment
Holds information about a single segment of slow motion playback within a track.
-
+
SmtaMetadataEntry
Stores metadata from the Samsung smta box.
-
+
SntpClient
Static utility to retrieve the device time offset using SNTP.
-
+
SntpClient.InitializationCallback
-
+
SonicAudioProcessor
An
AudioProcessor
that uses the Sonic library to modify audio speed/pitch/sample rate.
-
+
SpannedSubject
A Truth
Subject
for assertions on
Spanned
instances containing text styling.
-
+
SpannedSubject.AbsoluteSized
Allows assertions about the absolute size of a span.
-
+
SpannedSubject.Aligned
Allows assertions about the alignment of a span.
-
+
SpannedSubject.AndSpanFlags
Allows additional assertions to be made on the flags of matching spans.
-
+
SpannedSubject.Colored
Allows assertions about the color of a span.
-
+
SpannedSubject.EmphasizedText
Allows assertions about a span's text emphasis mark and its position.
-
+
SpannedSubject.RelativeSized
Allows assertions about the relative size of a span.
-
+
SpannedSubject.RubyText
Allows assertions about a span's ruby text and its position.
-
+
SpannedSubject.Typefaced
Allows assertions about the typeface of a span.
-
+
SpannedSubject.WithSpanFlags
Allows additional assertions to be made on the flags of matching spans.
-
+
SpanUtil
-
+
SphericalGLSurfaceView
Renders a GL scene in a non-VR Activity that is affected by phone orientation and touch input.
-
+
SphericalGLSurfaceView.VideoSurfaceListener
Listener for the
Surface
to which video frames should be rendered.
-
+
SpliceCommand
Superclass for SCTE35 splice commands.
-
+
SpliceInfoDecoder
Decodes splice info sections and produces splice commands.
-
+
SpliceInsertCommand
Represents a splice insert command defined in SCTE35, Section 9.3.3.
-
+
SpliceInsertCommand.ComponentSplice
Holds splicing information for specific splice insert command components.
-
+
SpliceNullCommand
Represents a splice null command as defined in SCTE35, Section 9.3.1.
-
+
SpliceScheduleCommand
Represents a splice schedule command as defined in SCTE35, Section 9.3.2.
-
+
SpliceScheduleCommand.ComponentSplice
Holds splicing information for specific splice schedule command components.
-
+
SpliceScheduleCommand.Event
-
+
SsaDecoder
-
+
SsChunkSource
-
+
SsChunkSource.Factory
-
+
SsDownloader
A downloader for SmoothStreaming streams.
-
+
SsManifest
Represents a SmoothStreaming manifest.
-
+
SsManifest.ProtectionElement
Represents a protection element containing a single header.
-
+
SsManifest.StreamElement
Represents a StreamIndex element.
-
+
SsManifestParser
Parses SmoothStreaming client manifests.
-
+
SsManifestParser.MissingFieldException
Thrown if a required field is missing.
-
+
SsMediaSource
-
+
SsMediaSource.Factory
-
+
StandaloneDatabaseProvider
-
+
StandaloneMediaClock
A
MediaClock
whose position advances with real time based on the playback parameters when
started.
-
+
StarRating
A rating expressed as a fractional number of stars.
-
+
StartOffsetExtractorOutput
An extractor output that wraps another extractor output and applies a give start byte offset to
seek positions.
-
+
StatsDataSource
DataSource
wrapper which keeps track of bytes transferred, redirected uris, and response
headers.
-
+
StreamKey
A key for a subset of media that can be separately loaded (a "stream").
-
+
StubExoPlayer
-
+
StubPlayer
-
+
StyledPlayerControlView
A view for controlling
Player
instances.
-
+
StyledPlayerControlView.OnFullScreenModeChangedListener
Deprecated.
-
+
StyledPlayerControlView.ProgressUpdateListener
Listener to be notified when progress has been updated.
-
+
StyledPlayerControlView.VisibilityListener
Deprecated.
-
+
StyledPlayerView
A high level view for
Player
media playbacks.
-
+
StyledPlayerView.ControllerVisibilityListener
Listener to be notified about changes of the visibility of the UI controls.
-
+
StyledPlayerView.FullscreenButtonClickListener
Listener invoked when the fullscreen button is clicked.
-
+
StyledPlayerView.ShowBuffering
Determines when the buffering view is shown.
-
+
SubripDecoder
-
+
Subtitle
A subtitle consisting of timed
Cue
s.
-
+
SubtitleDecoder
-
+
SubtitleDecoderException
Thrown when an error occurs decoding subtitle data.
-
+
SubtitleDecoderFactory
-
+
SubtitleExtractor
Generic extractor for extracting subtitles from various subtitle formats.
-
+
SubtitleInputBuffer
-
+
SubtitleOutputBuffer
-
+
SubtitleView
A view for displaying subtitle
Cue
s.
-
+
SubtitleView.ViewType
The type of
View
to use to display subtitles.
-
+
+SurfaceInfo
+
+Immutable value class for a
Surface
and supporting information.
+
+
+
SynchronousMediaCodecAdapter
-
+
SynchronousMediaCodecAdapter.Factory
-
+
SystemClock
The standard implementation of
Clock
, an instance of which is available via
Clock.DEFAULT
.
-
+
TeeAudioProcessor
Audio processor that outputs its input unmodified and also outputs its input to a given sink.
-
+
TeeAudioProcessor.AudioBufferSink
A sink for audio buffers handled by the audio processor.
-
+
TeeAudioProcessor.WavFileAudioBufferSink
A sink for audio buffers that writes output audio as .wav files with a given path prefix.
-
+
TeeDataSource
Tees data into a
DataSink
as the data is read.
-
+
TestDownloadManagerListener
-
+
TestExoPlayerBuilder
A builder of
ExoPlayer
instances for testing.
-
+
TestPlayerRunHelper
Helper methods to block the calling thread until the provided
ExoPlayer
instance reaches
a particular state.
-
+
TestUtil
Utility methods for tests.
-
+
TextAnnotation
Properties of a text annotation (i.e.
-
+
TextAnnotation.Position
The possible positions of the annotation text relative to the base text.
-
+
TextEmphasisSpan
A styling span for text emphasis marks.
-
+
TextEmphasisSpan.MarkFill
The possible mark fills that can be used.
-
+
TextEmphasisSpan.MarkShape
The possible mark shapes that can be used.
-
+
TextInformationFrame
Text information ID3 frame.
-
+
TextOutput
Receives text output.
-
+
TextRenderer
A renderer for text.
-
+
+TextureInfo
+
+Contains information describing an OpenGL texture.
+
+
+
ThumbRating
A rating expressed as "thumbs up" or "thumbs down".
-
+
TimeBar
Interface for time bar views that can display a playback position, buffered position, duration
and ad markers, and that have a listener for scrubbing (seeking) events.
-
+
TimeBar.OnScrubListener
Listener for scrubbing events.
-
+
TimedValueQueue <V >
A utility class to keep a queue of values with timestamps.
-
+
Timeline
A flexible representation of the structure of media.
-
+
Timeline.Period
Holds information about a period in a
Timeline
.
-
+
Timeline.RemotableTimeline
-
+
Timeline.Window
Holds information about a window in a
Timeline
.
-
+
TimelineAsserts
-
+
TimelineQueueEditor
-
+
TimelineQueueEditor.MediaDescriptionConverter
Converts a
MediaDescriptionCompat
to a
MediaItem
.
-
+
TimelineQueueEditor.MediaIdEqualityChecker
Media description comparator comparing the media IDs.
-
+
TimelineQueueEditor.QueueDataAdapter
Adapter to get
MediaDescriptionCompat
of items in the queue and to notify the
application about changes in the queue to sync the data structure backing the
MediaSessionConnector
.
-
+
TimelineQueueNavigator
-
+
TimeSignalCommand
Represents a time signal command as defined in SCTE35, Section 9.3.4.
-
+
TimestampAdjuster
Adjusts and offsets sample timestamps.
-
+
TimestampAdjusterProvider
-
+
TimeToFirstByteEstimator
Provides an estimate of the time to first byte of a transfer.
-
+
TraceUtil
Calls through to
Trace
methods on supported API levels.
-
+
Track
Encapsulates information describing an MP4 track.
-
+
Track.Transformation
The transformation to apply to samples in the track, if any.
-
+
TrackEncryptionBox
Encapsulates information parsed from a track encryption (tenc) box or sample group description
(sgpd) box in an MP4 stream.
-
+
TrackGroup
An immutable group of tracks available within a media stream.
-
+
TrackGroupArray
-
+
TrackNameProvider
Converts
Format
s to user readable track names.
-
+
TrackOutput
Receives track level data extracted by an
Extractor
.
-
+
TrackOutput.CryptoData
Holds data required to decrypt a sample.
-
+
TrackOutput.SampleDataPart
-
+
Tracks
Information about groups of tracks.
-
+
Tracks.Group
Information about a single group of tracks, including the underlying
TrackGroup
, the
@@ -7017,547 +7254,544 @@
All Classes
selected.
-
+
TrackSelection
A track selection consisting of a static subset of selected tracks belonging to a
TrackGroup
.
-
+
TrackSelection.Type
Represents a type track selection.
-
+
TrackSelectionArray
-
+
TrackSelectionDialogBuilder
-
+
TrackSelectionDialogBuilder.DialogCallback
Callback which is invoked when a track selection has been made.
-
+
TrackSelectionOverride
A track selection override, consisting of a
TrackGroup
and the indices of the tracks
within the group that should be selected.
-
+
TrackSelectionParameters
Parameters for controlling track selection.
-
+
TrackSelectionParameters.Builder
-
+
TrackSelectionUtil
Track selection related utility methods.
-
+
TrackSelectionUtil.AdaptiveTrackSelectionFactory
Functional interface to create a single adaptive track selection.
-
+
TrackSelectionView
A view for making track selections.
-
+
TrackSelectionView.TrackSelectionListener
Listener for changes to the selected tracks.
-
+
TrackSelector
The component of an
ExoPlayer
responsible for selecting tracks to be consumed by each of
the player's
Renderer
s.
-
+
TrackSelector.InvalidationListener
Notified when selections previously made by a
TrackSelector
are no longer valid.
-
+
TrackSelectorResult
-
+
TransferListener
A listener of data transfer events.
-
+
TransformationException
Thrown when a non-locally recoverable transformation failure occurs.
-
+
TransformationException.ErrorCode
-
+
TransformationRequest
A media transformation request.
-
+
TransformationRequest.Builder
-
+
TransformationResult
Information about the result of a successful transformation.
-
+
TransformationResult.Builder
-
+
Transformer
A transformer to transform media inputs.
-
+
Transformer.Builder
-
-Transformer.DebugViewProvider
-
-Provider for views to show diagnostic information during transformation, for debugging.
-
-
-
+
Transformer.Listener
A listener for the transformation events.
-
+
Transformer.ProgressState
Progress state.
-
+
TrueHdSampleRechunker
-
+
TsExtractor
Extracts data from the MPEG-2 TS container format.
-
+
TsExtractor.Mode
Modes for the extractor.
-
+
TsPayloadReader
Parses TS packet payload data.
-
+
TsPayloadReader.DvbSubtitleInfo
Holds information about a DVB subtitle, as defined in ETSI EN 300 468 V1.11.1 section 6.2.41.
-
+
TsPayloadReader.EsInfo
Holds information associated with a PMT entry.
-
+
TsPayloadReader.Factory
-
+
TsPayloadReader.Flags
Contextual flags indicating the presence of indicators in the TS packet or PES packet headers.
-
+
TsPayloadReader.TrackIdGenerator
-
+
TsUtil
Utilities method for extracting MPEG-TS streams.
-
+
TtmlDecoder
-
+
Tx3gDecoder
-
+
UdpDataSource
-
+
UdpDataSource.UdpDataSourceException
Thrown when an error is encountered when trying to read from a
UdpDataSource
.
-
+
UnknownNull
Annotation for specifying unknown nullness.
-
+
UnrecognizedInputFormatException
Thrown if the input format was not recognized.
-
+
UnsupportedDrmException
Thrown when the requested DRM scheme is not supported.
-
+
UnsupportedDrmException.Reason
The reason for the exception.
-
+
UriUtil
Utility methods for manipulating URIs.
-
+
UrlLinkFrame
Url link ID3 frame.
-
+
UrlTemplate
A template from which URLs can be built.
-
+
UtcTimingElement
Represents a UTCTiming element.
-
+
Util
Miscellaneous utility methods.
-
+
VersionTable
Utility methods for accessing versions of media library database components.
-
+
VideoDecoderGLSurfaceView
-
+
VideoDecoderOutputBuffer
Video decoder output buffer containing video frame data.
-
+
VideoDecoderOutputBufferRenderer
-
+
VideoEncoderSettings
Represents the video encoder settings.
-
+
VideoEncoderSettings.BitrateMode
-
+The allowed values for bitrateMode
.
-
+
VideoEncoderSettings.Builder
-
+
VideoFrameMetadataListener
A listener for metadata corresponding to video frames being rendered.
-
+
VideoFrameReleaseHelper
-
+
VideoRendererEventListener
-
+
VideoRendererEventListener.EventDispatcher
-
+
VideoSize
Represents the video size.
-
+
VorbisBitArray
Wraps a byte array, providing methods that allow it to be read as a Vorbis bitstream.
-
+
VorbisComment
Deprecated.
-
+
VorbisComment
A vorbis comment, extracted from a FLAC or Ogg file.
-
+
VorbisUtil
Utility methods for parsing Vorbis streams.
-
+
VorbisUtil.CommentHeader
Vorbis comment header.
-
+
VorbisUtil.Mode
Vorbis setup header modes.
-
+
VorbisUtil.VorbisIdHeader
Vorbis identification header.
-
+
VpxDecoder
Vpx decoder.
-
+
VpxDecoderException
Thrown when a libvpx decoder error occurs.
-
+
VpxLibrary
Configures and queries the underlying native library.
-
+
WavExtractor
Extracts data from WAV byte streams.
-
+
WavUtil
Utilities for handling WAVE files.
-
+
WebServerDispatcher
A Dispatcher
for MockWebServer
that allows per-path
customisation of the static data served.
-
+
WebServerDispatcher.Resource
-
+
WebServerDispatcher.Resource.Builder
-
+
WebvttCssStyle
Style object of a Css style block in a Webvtt file.
-
+
WebvttCssStyle.FontSizeUnit
Font size unit enum.
-
+
WebvttCssStyle.StyleFlags
Style flag enum.
-
+
WebvttCueInfo
A representation of a WebVTT cue.
-
+
WebvttCueParser
Parser for WebVTT cues.
-
+
WebvttDecoder
-
+
WebvttExtractor
A special purpose extractor for WebVTT content in HLS.
-
+
WebvttParserUtil
Utility methods for parsing WebVTT data.
-
+
WidevineUtil
Utility methods for Widevine.
-
+
WorkManagerScheduler
-
+
WorkManagerScheduler.SchedulerWorker
A Worker
that starts the target service if the requirements are met.
-
+
+WrappingMediaSource
+
+
+
+
+
WritableDownloadIndex
-
+
XmlPullParserUtil
diff --git a/docs/doc/reference/allclasses.html b/docs/doc/reference/allclasses.html
index 38241f46d60..e33a5d8aa3a 100644
--- a/docs/doc/reference/allclasses.html
+++ b/docs/doc/reference/allclasses.html
@@ -123,6 +123,7 @@ All Classes
AudioProcessor
AudioProcessor.AudioFormat
AudioProcessor.UnhandledAudioFormatException
+AudioProcessorChain
AudioRendererEventListener
AudioRendererEventListener.EventDispatcher
AudioSink
@@ -248,6 +249,7 @@ All Classes
Codec.EncoderFactory
CodecSpecificDataUtil
ColorInfo
+ColorLut
ColorParser
CommentFrame
CompositeMediaSource
@@ -262,6 +264,7 @@ All Classes
ContentDataSource.ContentDataSourceException
ContentMetadata
ContentMetadataMutations
+Contrast
CopyOnWriteMultiset
CronetDataSource
CronetDataSource.Factory
@@ -269,6 +272,7 @@ All Classes
CronetDataSourceFactory
CronetEngineWrapper
CronetUtil
+Crop
CryptoConfig
CryptoException
CryptoInfo
@@ -314,6 +318,9 @@ All Classes
DataSpec.Flags
DataSpec.HttpMethod
DebugTextViewHelper
+DebugViewProvider
+DecodeOneFrameUtil
+DecodeOneFrameUtil.Listener
Decoder
DecoderAudioRenderer
DecoderCounters
@@ -332,6 +339,7 @@ All Classes
DefaultAnalyticsCollector
DefaultAudioSink
DefaultAudioSink.AudioProcessorChain
+DefaultAudioSink.AudioTrackBufferSizeProvider
DefaultAudioSink.Builder
DefaultAudioSink.DefaultAudioProcessorChain
DefaultAudioSink.InvalidAudioTrackTimestampException
@@ -361,6 +369,7 @@ All Classes
DefaultDrmSessionManager.Mode
DefaultDrmSessionManagerProvider
DefaultEncoderFactory
+DefaultEncoderFactory.Builder
DefaultExtractorInput
DefaultExtractorsFactory
DefaultHlsDataSourceFactory
@@ -380,6 +389,8 @@ All Classes
DefaultMediaItemConverter
DefaultMediaSourceFactory
DefaultMediaSourceFactory.AdsLoaderProvider
+DefaultMuxer
+DefaultMuxer.Factory
DefaultPlaybackSessionManager
DefaultRenderersFactory
DefaultRenderersFactory.ExtensionRendererMode
@@ -400,6 +411,7 @@ All Classes
Descriptor
DeviceInfo
DeviceInfo.PlaybackType
+DeviceMappedEncoderBitrateProvider
DolbyVisionConfig
Download
Download.FailureReason
@@ -449,12 +461,13 @@ All Classes
DvbSubtitleReader
EbmlProcessor
EbmlProcessor.ElementType
+Effect
EGLSurfaceTexture
-EGLSurfaceTexture.GlException
EGLSurfaceTexture.SecureMode
EGLSurfaceTexture.TextureImageListener
ElementaryStreamReader
EmptySampleStream
+EncoderBitrateProvider
EncoderSelector
EncoderUtil
ErrorMessageProvider
@@ -588,7 +601,11 @@ All Classes
ForwardingTimeline
FragmentedMp4Extractor
FragmentedMp4Extractor.Flags
-FrameProcessingException
+FrameInfo
+FrameProcessingException
+FrameProcessor
+FrameProcessor.Factory
+FrameProcessor.Listener
FrameworkCryptoConfig
FrameworkMediaDrm
GaplessInfoHolder
@@ -596,9 +613,15 @@ All Classes
Gav1DecoderException
Gav1Library
GeobFrame
-GlEffect
-GlMatrixTransformation
+GlEffect
+GlEffectsFrameProcessor
+GlEffectsFrameProcessor.Factory
+GlMatrixTransformation
GlProgram
+GlTextureProcessor
+GlTextureProcessor.ErrorListener
+GlTextureProcessor.InputListener
+GlTextureProcessor.OutputListener
GlUtil
GlUtil.GlException
H262Reader
@@ -644,6 +667,8 @@ All Classes
HorizontalTextInVerticalContextSpan
HostActivity
HostActivity.HostedTest
+HslAdjustment
+HslAdjustment.Builder
HttpDataSource
HttpDataSource.BaseFactory
HttpDataSource.CleartextNotPermittedException
@@ -683,6 +708,7 @@ All Classes
LatmReader
LeanbackPlayerAdapter
LeastRecentlyUsedCacheEvictor
+LegacyMediaPlayerWrapper
LibflacAudioRenderer
Libgav1VideoRenderer
LibopusAudioRenderer
@@ -720,7 +746,7 @@ All Classes
MaskingMediaPeriod.PrepareListener
MaskingMediaSource
MaskingMediaSource.PlaceholderTimeline
-MatrixTransformation
+MatrixTransformation
MatroskaExtractor
MatroskaExtractor.Flags
MatroskaExtractor.Track
@@ -823,6 +849,9 @@ All Classes
MpegAudioReader
MpegAudioUtil
MpegAudioUtil.Header
+Muxer
+Muxer.Factory
+Muxer.MuxerException
NalUnitUtil
NalUnitUtil.H265SpsData
NalUnitUtil.PpsData
@@ -906,9 +935,8 @@ All Classes
PlayerView
PlayerView.ShowBuffering
PositionHolder
-Presentation
-Presentation.Builder
-Presentation.Layout
+Presentation
+Presentation.Layout
PriorityDataSource
PriorityDataSource.Factory
PriorityDataSourceFactory
@@ -958,6 +986,10 @@ All Classes
ResolvingDataSource
ResolvingDataSource.Factory
ResolvingDataSource.Resolver
+RgbAdjustment
+RgbAdjustment.Builder
+RgbFilter
+RgbMatrix
RobolectricUtil
RtmpDataSource
RtmpDataSource.Factory
@@ -981,8 +1013,8 @@ All Classes
SampleStream
SampleStream.ReadDataResult
SampleStream.ReadFlags
-ScaleToFitTransformation
-ScaleToFitTransformation.Builder
+ScaleToFitTransformation
+ScaleToFitTransformation.Builder
Scheduler
SectionPayloadReader
SectionReader
@@ -1025,6 +1057,9 @@ All Classes
SilenceMediaSource
SilenceMediaSource.Factory
SilenceSkippingAudioProcessor
+SimpleBasePlayer
+SimpleBasePlayer.State
+SimpleBasePlayer.State.Builder
SimpleCache
SimpleDecoder
SimpleDecoderOutputBuffer
@@ -1032,12 +1067,14 @@ All Classes
SimpleExoPlayer.Builder
SimpleMetadataDecoder
SimpleSubtitleDecoder
-SingleFrameGlTextureProcessor
+SingleColorLut
+SingleFrameGlTextureProcessor
SinglePeriodAdTimeline
SinglePeriodTimeline
SingleSampleMediaChunk
SingleSampleMediaSource
SingleSampleMediaSource.Factory
+Size
SlidingPercentile
SlowMotionData
SlowMotionData.Segment
@@ -1103,6 +1140,7 @@ All Classes
SubtitleOutputBuffer
SubtitleView
SubtitleView.ViewType
+SurfaceInfo
SynchronousMediaCodecAdapter
SynchronousMediaCodecAdapter.Factory
SystemClock
@@ -1122,6 +1160,7 @@ All Classes
TextInformationFrame
TextOutput
TextRenderer
+TextureInfo
ThumbRating
TimeBar
TimeBar.OnScrubListener
@@ -1176,7 +1215,6 @@ All Classes
TransformationResult.Builder
Transformer
Transformer.Builder
-Transformer.DebugViewProvider
Transformer.Listener
Transformer.ProgressState
TrueHdSampleRechunker
@@ -1240,6 +1278,7 @@ All Classes
WidevineUtil
WorkManagerScheduler
WorkManagerScheduler.SchedulerWorker
+WrappingMediaSource
WritableDownloadIndex
XmlPullParserUtil
diff --git a/docs/doc/reference/allpackages-index.html b/docs/doc/reference/allpackages-index.html
index 4dd05fd376f..ee3dded757f 100644
--- a/docs/doc/reference/allpackages-index.html
+++ b/docs/doc/reference/allpackages-index.html
@@ -128,302 +128,306 @@ All Packages
-com.google.android.exoplayer2.ext.av1
+com.google.android.exoplayer2.effect
-com.google.android.exoplayer2.ext.cast
+com.google.android.exoplayer2.ext.av1
-com.google.android.exoplayer2.ext.cronet
+com.google.android.exoplayer2.ext.cast
-com.google.android.exoplayer2.ext.ffmpeg
+com.google.android.exoplayer2.ext.cronet
-com.google.android.exoplayer2.ext.flac
+com.google.android.exoplayer2.ext.ffmpeg
-com.google.android.exoplayer2.ext.ima
+com.google.android.exoplayer2.ext.flac
-com.google.android.exoplayer2.ext.leanback
+com.google.android.exoplayer2.ext.ima
-com.google.android.exoplayer2.ext.media2
+com.google.android.exoplayer2.ext.leanback
-com.google.android.exoplayer2.ext.mediasession
+com.google.android.exoplayer2.ext.media2
-com.google.android.exoplayer2.ext.okhttp
+com.google.android.exoplayer2.ext.mediasession
-com.google.android.exoplayer2.ext.opus
+com.google.android.exoplayer2.ext.okhttp
-com.google.android.exoplayer2.ext.rtmp
+com.google.android.exoplayer2.ext.opus
-com.google.android.exoplayer2.ext.vp9
+com.google.android.exoplayer2.ext.rtmp
-com.google.android.exoplayer2.ext.workmanager
+com.google.android.exoplayer2.ext.vp9
-com.google.android.exoplayer2.extractor
+com.google.android.exoplayer2.ext.workmanager
-com.google.android.exoplayer2.extractor.amr
+com.google.android.exoplayer2.extractor
-com.google.android.exoplayer2.extractor.avi
+com.google.android.exoplayer2.extractor.amr
-com.google.android.exoplayer2.extractor.flac
+com.google.android.exoplayer2.extractor.avi
-com.google.android.exoplayer2.extractor.flv
+com.google.android.exoplayer2.extractor.flac
-com.google.android.exoplayer2.extractor.jpeg
+com.google.android.exoplayer2.extractor.flv
-com.google.android.exoplayer2.extractor.mkv
+com.google.android.exoplayer2.extractor.jpeg
-com.google.android.exoplayer2.extractor.mp3
+com.google.android.exoplayer2.extractor.mkv
-com.google.android.exoplayer2.extractor.mp4
+com.google.android.exoplayer2.extractor.mp3
-com.google.android.exoplayer2.extractor.ogg
+com.google.android.exoplayer2.extractor.mp4
-com.google.android.exoplayer2.extractor.ts
+com.google.android.exoplayer2.extractor.ogg
-com.google.android.exoplayer2.extractor.wav
+com.google.android.exoplayer2.extractor.ts
-com.google.android.exoplayer2.mediacodec
+com.google.android.exoplayer2.extractor.wav
-com.google.android.exoplayer2.metadata
+com.google.android.exoplayer2.mediacodec
-com.google.android.exoplayer2.metadata.dvbsi
+com.google.android.exoplayer2.metadata
-com.google.android.exoplayer2.metadata.emsg
+com.google.android.exoplayer2.metadata.dvbsi
-com.google.android.exoplayer2.metadata.flac
+com.google.android.exoplayer2.metadata.emsg
-com.google.android.exoplayer2.metadata.icy
+com.google.android.exoplayer2.metadata.flac
-com.google.android.exoplayer2.metadata.id3
+com.google.android.exoplayer2.metadata.icy
-com.google.android.exoplayer2.metadata.mp4
+com.google.android.exoplayer2.metadata.id3
-com.google.android.exoplayer2.metadata.scte35
+com.google.android.exoplayer2.metadata.mp4
-com.google.android.exoplayer2.metadata.vorbis
+com.google.android.exoplayer2.metadata.scte35
-com.google.android.exoplayer2.offline
+com.google.android.exoplayer2.metadata.vorbis
-com.google.android.exoplayer2.robolectric
+com.google.android.exoplayer2.offline
-com.google.android.exoplayer2.scheduler
+com.google.android.exoplayer2.robolectric
-com.google.android.exoplayer2.source
+com.google.android.exoplayer2.scheduler
-com.google.android.exoplayer2.source.ads
+com.google.android.exoplayer2.source
-com.google.android.exoplayer2.source.chunk
+com.google.android.exoplayer2.source.ads
-com.google.android.exoplayer2.source.dash
+com.google.android.exoplayer2.source.chunk
-com.google.android.exoplayer2.source.dash.manifest
+com.google.android.exoplayer2.source.dash
-com.google.android.exoplayer2.source.dash.offline
+com.google.android.exoplayer2.source.dash.manifest
-com.google.android.exoplayer2.source.hls
+com.google.android.exoplayer2.source.dash.offline
-com.google.android.exoplayer2.source.hls.offline
+com.google.android.exoplayer2.source.hls
-com.google.android.exoplayer2.source.hls.playlist
+com.google.android.exoplayer2.source.hls.offline
-com.google.android.exoplayer2.source.mediaparser
+com.google.android.exoplayer2.source.hls.playlist
-com.google.android.exoplayer2.source.rtsp
+com.google.android.exoplayer2.source.mediaparser
-com.google.android.exoplayer2.source.rtsp.reader
+com.google.android.exoplayer2.source.rtsp
-com.google.android.exoplayer2.source.smoothstreaming
+com.google.android.exoplayer2.source.rtsp.reader
-com.google.android.exoplayer2.source.smoothstreaming.manifest
+com.google.android.exoplayer2.source.smoothstreaming
-com.google.android.exoplayer2.source.smoothstreaming.offline
+com.google.android.exoplayer2.source.smoothstreaming.manifest
-com.google.android.exoplayer2.testutil
+com.google.android.exoplayer2.source.smoothstreaming.offline
-com.google.android.exoplayer2.testutil.truth
+com.google.android.exoplayer2.testutil
-com.google.android.exoplayer2.text
+com.google.android.exoplayer2.testutil.truth
-com.google.android.exoplayer2.text.cea
+com.google.android.exoplayer2.text
-com.google.android.exoplayer2.text.dvb
+com.google.android.exoplayer2.text.cea
-com.google.android.exoplayer2.text.pgs
+com.google.android.exoplayer2.text.dvb
-com.google.android.exoplayer2.text.span
+com.google.android.exoplayer2.text.pgs
-com.google.android.exoplayer2.text.ssa
+com.google.android.exoplayer2.text.span
-com.google.android.exoplayer2.text.subrip
+com.google.android.exoplayer2.text.ssa
-com.google.android.exoplayer2.text.ttml
+com.google.android.exoplayer2.text.subrip
-com.google.android.exoplayer2.text.tx3g
+com.google.android.exoplayer2.text.ttml
-com.google.android.exoplayer2.text.webvtt
+com.google.android.exoplayer2.text.tx3g
-com.google.android.exoplayer2.trackselection
+com.google.android.exoplayer2.text.webvtt
-com.google.android.exoplayer2.transformer
+com.google.android.exoplayer2.trackselection
-com.google.android.exoplayer2.ui
+com.google.android.exoplayer2.transformer
-com.google.android.exoplayer2.upstream
+com.google.android.exoplayer2.ui
-com.google.android.exoplayer2.upstream.cache
+com.google.android.exoplayer2.upstream
-com.google.android.exoplayer2.upstream.crypto
+com.google.android.exoplayer2.upstream.cache
-com.google.android.exoplayer2.util
+com.google.android.exoplayer2.upstream.crypto
-com.google.android.exoplayer2.video
+com.google.android.exoplayer2.util
+com.google.android.exoplayer2.video
+
+
+
com.google.android.exoplayer2.video.spherical
diff --git a/docs/doc/reference/com/google/android/exoplayer2/BasePlayer.html b/docs/doc/reference/com/google/android/exoplayer2/BasePlayer.html
index 4fdcfe84662..57e6b7db5bd 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/BasePlayer.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/BasePlayer.html
@@ -25,7 +25,7 @@
catch(err) {
}
//-->
-var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":42,"i11":10,"i12":10,"i13":10,"i14":42,"i15":10,"i16":42,"i17":42,"i18":10,"i19":42,"i20":42,"i21":10,"i22":42,"i23":10,"i24":10,"i25":10,"i26":10,"i27":42,"i28":42,"i29":42,"i30":10,"i31":10,"i32":42,"i33":10,"i34":10,"i35":42,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":42,"i45":10,"i46":10,"i47":42,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10};
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":42,"i11":10,"i12":10,"i13":10,"i14":42,"i15":10,"i16":42,"i17":42,"i18":10,"i19":42,"i20":42,"i21":10,"i22":42,"i23":10,"i24":10,"i25":10,"i26":10,"i27":42,"i28":42,"i29":42,"i30":10,"i31":10,"i32":42,"i33":10,"i34":10,"i35":42,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":42,"i46":10,"i47":10,"i48":42,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -134,7 +134,7 @@ Class BasePlayer
Direct Known Subclasses:
-CastPlayer
, SimpleExoPlayer
, StubPlayer
+CastPlayer
, SimpleBasePlayer
, SimpleExoPlayer
, StubPlayer
public abstract class BasePlayer
@@ -527,13 +527,20 @@ Method Summary
+protected void
+repeatCurrentMediaItem ()
+
+Repeat the current media item.
+
+
+
void
seekBack ()
-
+
void
seekForward ()
@@ -541,35 +548,35 @@ Method Summary
milliseconds.
-
+
void
seekTo (long positionMs)
Seeks to a position specified in milliseconds in the current
MediaItem
.
-
+
void
seekToDefaultPosition ()
Seeks to the default position associated with the current
MediaItem
.
-
+
void
seekToDefaultPosition (int mediaItemIndex)
Seeks to the default position associated with the specified
MediaItem
.
-
+
void
seekToNext ()
Seeks to a later position in the current or next
MediaItem
(if available).
-
+
void
seekToNextMediaItem ()
@@ -577,7 +584,7 @@ Method Summary
repeat mode and whether shuffle mode is enabled.
-
+
void
seekToNextWindow ()
@@ -586,14 +593,14 @@ Method Summary
-
+
void
seekToPrevious ()
Seeks to an earlier position in the current or previous
MediaItem
(if available).
-
+
void
seekToPreviousMediaItem ()
@@ -601,7 +608,7 @@ Method Summary
current repeat mode and whether shuffle mode is enabled.
-
+
void
seekToPreviousWindow ()
@@ -610,7 +617,7 @@ Method Summary
-
+
void
setMediaItem (MediaItem mediaItem)
@@ -618,7 +625,7 @@ Method Summary
default position.
-
+
void
setMediaItem (MediaItem mediaItem,
boolean resetPosition)
@@ -626,7 +633,7 @@ Method Summary
Clears the playlist and adds the specified
MediaItem
.
-
+
void
setMediaItem (MediaItem mediaItem,
long startPositionMs)
@@ -634,7 +641,7 @@ Method Summary
Clears the playlist and adds the specified
MediaItem
.
-
+
void
setMediaItems (List <MediaItem > mediaItems)
@@ -642,7 +649,7 @@ Method Summary
the default position.
-
+
void
setPlaybackSpeed (float speed)
@@ -662,7 +669,7 @@ Methods inherited from class java.lang.Player
-addListener , addMediaItems , clearVideoSurface , clearVideoSurface , clearVideoSurfaceHolder , clearVideoSurfaceView , clearVideoTextureView , decreaseDeviceVolume , getApplicationLooper , getAudioAttributes , getAvailableCommands , getBufferedPosition , getContentBufferedPosition , getContentPosition , getCurrentAdGroupIndex , getCurrentAdIndexInAdGroup , getCurrentCues , getCurrentMediaItemIndex , getCurrentPeriodIndex , getCurrentPosition , getCurrentTimeline , getCurrentTracks , getDeviceInfo , getDeviceVolume , getDuration , getMaxSeekToPreviousPosition , getMediaMetadata , getPlaybackParameters , getPlaybackState , getPlaybackSuppressionReason , getPlayerError , getPlaylistMetadata , getPlayWhenReady , getRepeatMode , getSeekBackIncrement , getSeekForwardIncrement , getShuffleModeEnabled , getTotalBufferedDuration , getTrackSelectionParameters , getVideoSize , getVolume , increaseDeviceVolume , isDeviceMuted , isLoading , isPlayingAd , moveMediaItems , prepare , release , removeListener , removeMediaItems , seekTo , setDeviceMuted , setDeviceVolume , setMediaItems , setMediaItems , setPlaybackParameters , setPlaylistMetadata , setPlayWhenReady , setRepeatMode , setShuffleModeEnabled , setTrackSelectionParameters , setVideoSurface , setVideoSurfaceHolder , setVideoSurfaceView , setVideoTextureView , setVolume , stop , stop
+addListener , addMediaItems , clearVideoSurface , clearVideoSurface , clearVideoSurfaceHolder , clearVideoSurfaceView , clearVideoTextureView , decreaseDeviceVolume , getApplicationLooper , getAudioAttributes , getAvailableCommands , getBufferedPosition , getContentBufferedPosition , getContentPosition , getCurrentAdGroupIndex , getCurrentAdIndexInAdGroup , getCurrentCues , getCurrentMediaItemIndex , getCurrentPeriodIndex , getCurrentPosition , getCurrentTimeline , getCurrentTracks , getDeviceInfo , getDeviceVolume , getDuration , getMaxSeekToPreviousPosition , getMediaMetadata , getPlaybackParameters , getPlaybackState , getPlaybackSuppressionReason , getPlayerError , getPlaylistMetadata , getPlayWhenReady , getRepeatMode , getSeekBackIncrement , getSeekForwardIncrement , getShuffleModeEnabled , getSurfaceSize , getTotalBufferedDuration , getTrackSelectionParameters , getVideoSize , getVolume , increaseDeviceVolume , isDeviceMuted , isLoading , isPlayingAd , moveMediaItems , prepare , release , removeListener , removeMediaItems , seekTo , setDeviceMuted , setDeviceVolume , setMediaItems , setMediaItems , setPlaybackParameters , setPlaylistMetadata , setPlayWhenReady , setRepeatMode , setShuffleModeEnabled , setTrackSelectionParameters , setVideoSurface , setVideoSurfaceHolder , setVideoSurfaceView , setVideoTextureView , setVolume , stop , stop
@@ -1685,7 +1692,7 @@ isCurrentMediaItemSeekable
-
diff --git a/docs/doc/reference/com/google/android/exoplayer2/BaseRenderer.html b/docs/doc/reference/com/google/android/exoplayer2/BaseRenderer.html
index 5bea18d8b06..820e21ee705 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/BaseRenderer.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/BaseRenderer.html
@@ -183,14 +183,14 @@ Field Summary
Fields inherited from interface com.google.android.exoplayer2.Renderer
-MSG_CUSTOM_BASE , MSG_SET_AUDIO_ATTRIBUTES , MSG_SET_AUDIO_SESSION_ID , MSG_SET_AUX_EFFECT_INFO , MSG_SET_CAMERA_MOTION_LISTENER , MSG_SET_CHANGE_FRAME_RATE_STRATEGY , MSG_SET_SCALING_MODE , MSG_SET_SKIP_SILENCE_ENABLED , MSG_SET_VIDEO_FRAME_METADATA_LISTENER , MSG_SET_VIDEO_OUTPUT , MSG_SET_VOLUME , MSG_SET_WAKEUP_LISTENER , STATE_DISABLED , STATE_ENABLED , STATE_STARTED
+MSG_CUSTOM_BASE , MSG_SET_AUDIO_ATTRIBUTES , MSG_SET_AUDIO_SESSION_ID , MSG_SET_AUX_EFFECT_INFO , MSG_SET_CAMERA_MOTION_LISTENER , MSG_SET_CHANGE_FRAME_RATE_STRATEGY , MSG_SET_PREFERRED_AUDIO_DEVICE , MSG_SET_SCALING_MODE , MSG_SET_SKIP_SILENCE_ENABLED , MSG_SET_VIDEO_FRAME_METADATA_LISTENER , MSG_SET_VIDEO_OUTPUT , MSG_SET_VOLUME , MSG_SET_WAKEUP_LISTENER , STATE_DISABLED , STATE_ENABLED , STATE_STARTED
Fields inherited from interface com.google.android.exoplayer2.RendererCapabilities
-ADAPTIVE_NOT_SEAMLESS , ADAPTIVE_NOT_SUPPORTED , ADAPTIVE_SEAMLESS , ADAPTIVE_SUPPORT_MASK , DECODER_SUPPORT_FALLBACK , DECODER_SUPPORT_PRIMARY , FORMAT_EXCEEDS_CAPABILITIES , FORMAT_HANDLED , FORMAT_SUPPORT_MASK , FORMAT_UNSUPPORTED_DRM , FORMAT_UNSUPPORTED_SUBTYPE , FORMAT_UNSUPPORTED_TYPE , HARDWARE_ACCELERATION_NOT_SUPPORTED , HARDWARE_ACCELERATION_SUPPORT_MASK , HARDWARE_ACCELERATION_SUPPORTED , MODE_SUPPORT_MASK , TUNNELING_NOT_SUPPORTED , TUNNELING_SUPPORT_MASK , TUNNELING_SUPPORTED
+ADAPTIVE_NOT_SEAMLESS , ADAPTIVE_NOT_SUPPORTED , ADAPTIVE_SEAMLESS , ADAPTIVE_SUPPORT_MASK , DECODER_SUPPORT_FALLBACK , DECODER_SUPPORT_FALLBACK_MIMETYPE , DECODER_SUPPORT_PRIMARY , FORMAT_EXCEEDS_CAPABILITIES , FORMAT_HANDLED , FORMAT_SUPPORT_MASK , FORMAT_UNSUPPORTED_DRM , FORMAT_UNSUPPORTED_SUBTYPE , FORMAT_UNSUPPORTED_TYPE , HARDWARE_ACCELERATION_NOT_SUPPORTED , HARDWARE_ACCELERATION_SUPPORT_MASK , HARDWARE_ACCELERATION_SUPPORTED , MODE_SUPPORT_MASK , TUNNELING_NOT_SUPPORTED , TUNNELING_SUPPORT_MASK , TUNNELING_SUPPORTED
diff --git a/docs/doc/reference/com/google/android/exoplayer2/C.ColorSpace.html b/docs/doc/reference/com/google/android/exoplayer2/C.ColorSpace.html
index 8cf131f6fc9..fb8913116cf 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/C.ColorSpace.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/C.ColorSpace.html
@@ -117,7 +117,7 @@ Annotation Type C.ColorSp
@Retention (SOURCE )
@Target (TYPE_USE )
public static @interface C.ColorSpace
-
+
diff --git a/docs/doc/reference/com/google/android/exoplayer2/C.html b/docs/doc/reference/com/google/android/exoplayer2/C.html
index 0a0e38ae65e..97d9c59ace7 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/C.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/C.html
@@ -4262,31 +4262,31 @@ STEREO_MODE_STEREO_MESH
-
+
-
+
diff --git a/docs/doc/reference/com/google/android/exoplayer2/DefaultLivePlaybackSpeedControl.Builder.html b/docs/doc/reference/com/google/android/exoplayer2/DefaultLivePlaybackSpeedControl.Builder.html
index 4de821f568c..07503e8ba6f 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/DefaultLivePlaybackSpeedControl.Builder.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/DefaultLivePlaybackSpeedControl.Builder.html
@@ -290,7 +290,8 @@ Method Detail
setFallbackMinPlaybackSpeed
-public DefaultLivePlaybackSpeedControl.Builder setFallbackMinPlaybackSpeed(float fallbackMinPlaybackSpeed)
+@CanIgnoreReturnValue
+public DefaultLivePlaybackSpeedControl.Builder setFallbackMinPlaybackSpeed(float fallbackMinPlaybackSpeed)
Sets the minimum playback speed that should be used if no minimum playback speed is defined
by the media.
@@ -309,7 +310,8 @@
setFallbackMinPlaybackSpeed
setFallbackMaxPlaybackSpeed
-public DefaultLivePlaybackSpeedControl.Builder setFallbackMaxPlaybackSpeed(float fallbackMaxPlaybackSpeed)
+@CanIgnoreReturnValue
+public DefaultLivePlaybackSpeedControl.Builder setFallbackMaxPlaybackSpeed(float fallbackMaxPlaybackSpeed)
Sets the maximum playback speed that should be used if no maximum playback speed is defined
by the media.
@@ -328,7 +330,8 @@
setFallbackMaxPlaybackSpeed
setMinUpdateIntervalMs
-public DefaultLivePlaybackSpeedControl.Builder setMinUpdateIntervalMs(long minUpdateIntervalMs)
+@CanIgnoreReturnValue
+public DefaultLivePlaybackSpeedControl.Builder setMinUpdateIntervalMs(long minUpdateIntervalMs)
@@ -347,7 +350,8 @@ setMinUpdateIntervalMs
setProportionalControlFactor
-public DefaultLivePlaybackSpeedControl.Builder setProportionalControlFactor(float proportionalControlFactor)
+@CanIgnoreReturnValue
+public DefaultLivePlaybackSpeedControl.Builder setProportionalControlFactor(float proportionalControlFactor)
Sets the proportional control factor used to adjust the playback speed.
The factor by which playback will be sped up is calculated as 1.0 +
@@ -369,7 +373,8 @@ setProportionalControlFactor
setMaxLiveOffsetErrorMsForUnitSpeed
-public DefaultLivePlaybackSpeedControl.Builder setMaxLiveOffsetErrorMsForUnitSpeed(long maxLiveOffsetErrorMsForUnitSpeed)
+@CanIgnoreReturnValue
+public DefaultLivePlaybackSpeedControl.Builder setMaxLiveOffsetErrorMsForUnitSpeed(long maxLiveOffsetErrorMsForUnitSpeed)
Sets the maximum difference between the current live offset and the target live offset, in
milliseconds, for which unit speed (1.0f) is used.
@@ -389,7 +394,8 @@
setMaxLiveOffsetErrorMsForUnitSpeed
setTargetLiveOffsetIncrementOnRebufferMs
-public DefaultLivePlaybackSpeedControl.Builder setTargetLiveOffsetIncrementOnRebufferMs(long targetLiveOffsetIncrementOnRebufferMs)
+@CanIgnoreReturnValue
+public DefaultLivePlaybackSpeedControl.Builder setTargetLiveOffsetIncrementOnRebufferMs(long targetLiveOffsetIncrementOnRebufferMs)
Sets the increment applied to the target live offset each time the player is rebuffering, in
milliseconds.
@@ -407,7 +413,8 @@ setTargetLiveOffsetIncrementOnRebufferMs
setMinPossibleLiveOffsetSmoothingFactor
-public DefaultLivePlaybackSpeedControl.Builder setMinPossibleLiveOffsetSmoothingFactor(float minPossibleLiveOffsetSmoothingFactor)
+@CanIgnoreReturnValue
+public DefaultLivePlaybackSpeedControl.Builder setMinPossibleLiveOffsetSmoothingFactor(float minPossibleLiveOffsetSmoothingFactor)
Sets the smoothing factor when smoothing the minimum possible live offset that can be
achieved during playback.
diff --git a/docs/doc/reference/com/google/android/exoplayer2/DefaultLoadControl.Builder.html b/docs/doc/reference/com/google/android/exoplayer2/DefaultLoadControl.Builder.html
index 7a67fcf5ccb..366a3a49afd 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/DefaultLoadControl.Builder.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/DefaultLoadControl.Builder.html
@@ -286,7 +286,8 @@
Method Detail
default void
+onExperimentalOffloadedPlayback (boolean offloadedPlayback)
+
+
+
+
+
+default void
onExperimentalOffloadSchedulingEnabledChanged (boolean offloadSchedulingEnabled)
-
+
default void
onExperimentalSleepingForOffloadChanged (boolean sleepingForOffload)
@@ -195,7 +202,7 @@ onExperimentalOffloadSchedulingEnabledChanged
-
+
onExperimentalSleepingForOffloadChanged
default void onExperimentalSleepingForOffloadChanged(boolean sleepingForOffload)
@@ -204,6 +211,21 @@ onExperimentalSleepingForOffloadChanged
This method is experimental, and will be renamed or removed in a future release.
+
+
+
+
diff --git a/docs/doc/reference/com/google/android/exoplayer2/ExoPlayer.Builder.html b/docs/doc/reference/com/google/android/exoplayer2/ExoPlayer.Builder.html
index a895b9bf713..7ef54dc89b1 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/ExoPlayer.Builder.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/ExoPlayer.Builder.html
@@ -587,7 +587,8 @@ Method Detail
+boolean
+isTunnelingEnabled ()
+
+Returns whether
tunneling is enabled for
+ the currently selected tracks.
+
+
+
void
prepare (MediaSource mediaSource)
@@ -624,7 +632,7 @@ Method Summary
-
+
void
prepare (MediaSource mediaSource,
boolean resetPosition,
@@ -635,21 +643,21 @@ Method Summary
-
+
void
removeAnalyticsListener (AnalyticsListener listener)
-
+
void
removeAudioOffloadListener (ExoPlayer.AudioOffloadListener listener)
Removes a listener of audio offload events.
-
+
void
retry ()
@@ -658,7 +666,7 @@ Method Summary
-
+
void
setAudioAttributes (AudioAttributes audioAttributes,
boolean handleAudioFocus)
@@ -666,28 +674,28 @@ Method Summary
Sets the attributes for audio playback, used by the underlying audio track.
-
+
void
setAudioSessionId (int audioSessionId)
Sets the ID of the audio session to attach to the underlying
AudioTrack
.
-
+
void
setAuxEffectInfo (AuxEffectInfo auxEffectInfo)
Sets information on an auxiliary audio effect to attach to the underlying audio track.
-
+
void
setCameraMotionListener (CameraMotionListener listener)
Sets a listener of camera motion events.
-
+
void
setForegroundMode (boolean foregroundMode)
@@ -695,7 +703,7 @@ Method Summary
even when in the idle state.
-
+
void
setHandleAudioBecomingNoisy (boolean handleAudioBecomingNoisy)
@@ -703,7 +711,7 @@ Method Summary
device speakers.
-
+
void
setHandleWakeLock (boolean handleWakeLock)
@@ -712,7 +720,7 @@ Method Summary
-
+
void
setMediaSource (MediaSource mediaSource)
@@ -720,7 +728,7 @@ Method Summary
default position.
-
+
void
setMediaSource (MediaSource mediaSource,
boolean resetPosition)
@@ -728,7 +736,7 @@ Method Summary
Clears the playlist and adds the specified
MediaSource
.
-
+
void
setMediaSource (MediaSource mediaSource,
long startPositionMs)
@@ -736,7 +744,7 @@ Method Summary
Clears the playlist and adds the specified
MediaSource
.
-
+
void
setMediaSources (List <MediaSource > mediaSources)
@@ -744,7 +752,7 @@ Method Summary
position to the default position.
-
+
void
setMediaSources (List <MediaSource > mediaSources,
boolean resetPosition)
@@ -752,7 +760,7 @@ Method Summary
-
+
void
setMediaSources (List <MediaSource > mediaSources,
int startMediaItemIndex,
@@ -761,42 +769,49 @@ Method Summary
-
+
void
setPauseAtEndOfMediaItems (boolean pauseAtEndOfMediaItems)
Sets whether to pause playback at the end of each media item.
-
+
+void
+setPreferredAudioDevice (AudioDeviceInfo audioDeviceInfo)
+
+Sets the preferred audio device.
+
+
+
void
setPriorityTaskManager (PriorityTaskManager priorityTaskManager)
-
+
void
setSeekParameters (SeekParameters seekParameters)
Sets the parameters that control how seek operations are performed.
-
+
void
setShuffleOrder (ShuffleOrder shuffleOrder)
Sets the shuffle order.
-
+
void
setSkipSilenceEnabled (boolean skipSilenceEnabled)
Sets whether skipping silences in the audio stream is enabled.
-
+
void
setVideoChangeFrameRateStrategy (@com.google.android.exoplayer2.C.VideoChangeFrameRateStrategy int videoChangeFrameRateStrategy)
@@ -804,21 +819,21 @@ Method Summary
with a video output Surface
.
-
+
void
setVideoFrameMetadataListener (VideoFrameMetadataListener listener)
Sets a listener to receive video frame metadata events.
-
+
void
setVideoScalingMode (@com.google.android.exoplayer2.C.VideoScalingMode int videoScalingMode)
-
+
void
setWakeMode (@com.google.android.exoplayer2.C.WakeMode int wakeMode)
@@ -831,7 +846,7 @@ Method Summary
Methods inherited from interface com.google.android.exoplayer2.Player
-addListener , addMediaItem , addMediaItem , addMediaItems , addMediaItems , canAdvertiseSession , clearMediaItems , clearVideoSurface , clearVideoSurface , clearVideoSurfaceHolder , clearVideoSurfaceView , clearVideoTextureView , decreaseDeviceVolume , getApplicationLooper , getAudioAttributes , getAvailableCommands , getBufferedPercentage , getBufferedPosition , getContentBufferedPosition , getContentDuration , getContentPosition , getCurrentAdGroupIndex , getCurrentAdIndexInAdGroup , getCurrentCues , getCurrentLiveOffset , getCurrentManifest , getCurrentMediaItem , getCurrentMediaItemIndex , getCurrentPeriodIndex , getCurrentPosition , getCurrentTimeline , getCurrentTracks , getCurrentWindowIndex , getDeviceInfo , getDeviceVolume , getDuration , getMaxSeekToPreviousPosition , getMediaItemAt , getMediaItemCount , getMediaMetadata , getNextMediaItemIndex , getNextWindowIndex , getPlaybackParameters , getPlaybackState , getPlaybackSuppressionReason , getPlaylistMetadata , getPlayWhenReady , getPreviousMediaItemIndex , getPreviousWindowIndex , getRepeatMode , getSeekBackIncrement , getSeekForwardIncrement , getShuffleModeEnabled , getTotalBufferedDuration , getTrackSelectionParameters , getVideoSize , getVolume , hasNext , hasNextMediaItem , hasNextWindow , hasPrevious , hasPreviousMediaItem , hasPreviousWindow , increaseDeviceVolume , isCommandAvailable , isCurrentMediaItemDynamic , isCurrentMediaItemLive , isCurrentMediaItemSeekable , isCurrentWindowDynamic , isCurrentWindowLive , isCurrentWindowSeekable , isDeviceMuted , isLoading , isPlaying , isPlayingAd , moveMediaItem , moveMediaItems , next , pause , play , prepare , previous , release , removeListener , removeMediaItem , removeMediaItems , seekBack , seekForward , seekTo , seekTo , seekToDefaultPosition , seekToDefaultPosition , seekToNext , seekToNextMediaItem , seekToNextWindow , seekToPrevious , seekToPreviousMediaItem , seekToPreviousWindow , setDeviceMuted , setDeviceVolume , setMediaItem , setMediaItem , setMediaItem , setMediaItems , setMediaItems , setMediaItems , setPlaybackParameters , setPlaybackSpeed , setPlaylistMetadata , setPlayWhenReady , setRepeatMode , setShuffleModeEnabled , setTrackSelectionParameters , setVideoSurface , setVideoSurfaceHolder , setVideoSurfaceView , setVideoTextureView , setVolume , stop , stop
+addListener , addMediaItem , addMediaItem , addMediaItems , addMediaItems , canAdvertiseSession , clearMediaItems , clearVideoSurface , clearVideoSurface , clearVideoSurfaceHolder , clearVideoSurfaceView , clearVideoTextureView , decreaseDeviceVolume , getApplicationLooper , getAudioAttributes , getAvailableCommands , getBufferedPercentage , getBufferedPosition , getContentBufferedPosition , getContentDuration , getContentPosition , getCurrentAdGroupIndex , getCurrentAdIndexInAdGroup , getCurrentCues , getCurrentLiveOffset , getCurrentManifest , getCurrentMediaItem , getCurrentMediaItemIndex , getCurrentPeriodIndex , getCurrentPosition , getCurrentTimeline , getCurrentTracks , getCurrentWindowIndex , getDeviceInfo , getDeviceVolume , getDuration , getMaxSeekToPreviousPosition , getMediaItemAt , getMediaItemCount , getMediaMetadata , getNextMediaItemIndex , getNextWindowIndex , getPlaybackParameters , getPlaybackState , getPlaybackSuppressionReason , getPlaylistMetadata , getPlayWhenReady , getPreviousMediaItemIndex , getPreviousWindowIndex , getRepeatMode , getSeekBackIncrement , getSeekForwardIncrement , getShuffleModeEnabled , getSurfaceSize , getTotalBufferedDuration , getTrackSelectionParameters , getVideoSize , getVolume , hasNext , hasNextMediaItem , hasNextWindow , hasPrevious , hasPreviousMediaItem , hasPreviousWindow , increaseDeviceVolume , isCommandAvailable , isCurrentMediaItemDynamic , isCurrentMediaItemLive , isCurrentMediaItemSeekable , isCurrentWindowDynamic , isCurrentWindowLive , isCurrentWindowSeekable , isDeviceMuted , isLoading , isPlaying , isPlayingAd , moveMediaItem , moveMediaItems , next , pause , play , prepare , previous , release , removeListener , removeMediaItem , removeMediaItems , seekBack , seekForward , seekTo , seekTo , seekToDefaultPosition , seekToDefaultPosition , seekToNext , seekToNextMediaItem , seekToNextWindow , seekToPrevious , seekToPreviousMediaItem , seekToPreviousWindow , setDeviceMuted , setDeviceVolume , setMediaItem , setMediaItem , setMediaItem , setMediaItems , setMediaItems , setMediaItems , setPlaybackParameters , setPlaybackSpeed , setPlaylistMetadata , setPlayWhenReady , setRepeatMode , setShuffleModeEnabled , setTrackSelectionParameters , setVideoSurface , setVideoSurfaceHolder , setVideoSurfaceView , setVideoTextureView , setVolume , stop , stop
@@ -1441,6 +1456,23 @@ clearAuxEffectInfo
Detaches any previously attached auxiliary audio effect from the underlying audio track.
+
+
+
+
@@ -1855,7 +1887,7 @@ experimentalSetOffloadSchedulingEnabled
-
diff --git a/docs/doc/reference/com/google/android/exoplayer2/Format.Builder.html b/docs/doc/reference/com/google/android/exoplayer2/Format.Builder.html
index 8c7dd707f31..f2151164a70 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/Format.Builder.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/Format.Builder.html
@@ -457,7 +457,8 @@ Method Detail
+Bundle
+toBundle (boolean excludeMetadata)
+
+Returns a
Bundle
representing the information stored in this object.
+
+
+
static String
toLogString (Format format)
-
+
String
toString ()
-
+
Format
withManifestFormatInfo (Format manifestFormat)
@@ -1627,7 +1634,7 @@ toLogString
-
+
toBundle
public Bundle toBundle()
@@ -1639,6 +1646,17 @@ toBundle
+
+
+
+
diff --git a/docs/doc/reference/com/google/android/exoplayer2/ForwardingPlayer.html b/docs/doc/reference/com/google/android/exoplayer2/ForwardingPlayer.html
index 570fc0f845c..44729c9e780 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/ForwardingPlayer.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/ForwardingPlayer.html
@@ -25,7 +25,7 @@
catch(err) {
}
//-->
-var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":42,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":42,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":42,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":42,"i60":10,"i61":42,"i62":42,"i63":10,"i64":42,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":42,"i71":42,"i72":42,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":42,"i80":10,"i81":10,"i82":10,"i83":42,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":42,"i97":10,"i98":10,"i99":42,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":42};
+var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":42,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":42,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":42,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":42,"i61":10,"i62":42,"i63":42,"i64":10,"i65":42,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":42,"i72":42,"i73":42,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":42,"i81":10,"i82":10,"i83":10,"i84":42,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":42,"i98":10,"i99":10,"i100":42,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109":10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":42};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -602,41 +602,48 @@ Method Summary
+Size
+getSurfaceSize ()
+
+
+
+
+
long
getTotalBufferedDuration ()
-
+
TrackSelectionParameters
getTrackSelectionParameters ()
-
+
VideoSize
getVideoSize ()
-
+
float
getVolume ()
-
+
Player
getWrappedPlayer ()
Returns the
Player
to which operations are forwarded.
-
+
boolean
hasNext ()
@@ -645,14 +652,14 @@ Method Summary
-
+
boolean
hasNextMediaItem ()
-
+
boolean
hasNextWindow ()
@@ -661,7 +668,7 @@ Method Summary
-
+
boolean
hasPrevious ()
@@ -670,14 +677,14 @@ Method Summary
-
+
boolean
hasPreviousMediaItem ()
-
+
boolean
hasPreviousWindow ()
@@ -686,42 +693,42 @@ Method Summary
-
+
void
increaseDeviceVolume ()
-
+
boolean
isCommandAvailable (@com.google.android.exoplayer2.Player.Command int command)
-
+
boolean
isCurrentMediaItemDynamic ()
-
+
boolean
isCurrentMediaItemLive ()
-
+
boolean
isCurrentMediaItemSeekable ()
-
+
boolean
isCurrentWindowDynamic ()
@@ -730,7 +737,7 @@ Method Summary
-
+
boolean
isCurrentWindowLive ()
@@ -739,7 +746,7 @@ Method Summary
-
+
boolean
isCurrentWindowSeekable ()
@@ -748,35 +755,35 @@ Method Summary
-
+
boolean
isDeviceMuted ()
-
+
boolean
isLoading ()
-
+
boolean
isPlaying ()
-
+
boolean
isPlayingAd ()
-
+
void
moveMediaItem (int currentIndex,
int newIndex)
@@ -784,7 +791,7 @@ Method Summary
-
+
void
moveMediaItems (int fromIndex,
int toIndex,
@@ -793,7 +800,7 @@ Method Summary
-
+
void
next ()
@@ -802,28 +809,28 @@ Method Summary
-
+
void
pause ()
-
+
void
play ()
-
+
void
prepare ()
-
+
void
previous ()
@@ -832,28 +839,28 @@ Method Summary
-
+
void
release ()
-
+
void
removeListener (Player.Listener listener)
-
+
void
removeMediaItem (int index)
-
+
void
removeMediaItems (int fromIndex,
int toIndex)
@@ -861,21 +868,21 @@ Method Summary
-
+
void
seekBack ()
-
+
void
seekForward ()
-
+
void
seekTo (int mediaItemIndex,
long positionMs)
@@ -883,42 +890,42 @@ Method Summary
-
+
void
seekTo (long positionMs)
-
+
void
seekToDefaultPosition ()
-
+
void
seekToDefaultPosition (int mediaItemIndex)
-
+
void
seekToNext ()
-
+
void
seekToNextMediaItem ()
-
+
void
seekToNextWindow ()
@@ -927,21 +934,21 @@ Method Summary
-
+
void
seekToPrevious ()
-
+
void
seekToPreviousMediaItem ()
-
+
void
seekToPreviousWindow ()
@@ -950,28 +957,28 @@ Method Summary
-
+
void
setDeviceMuted (boolean muted)
-
+
void
setDeviceVolume (int volume)
-
+
void
setMediaItem (MediaItem mediaItem)
-
+
void
setMediaItem (MediaItem mediaItem,
boolean resetPosition)
@@ -979,7 +986,7 @@ Method Summary
-
+
void
setMediaItem (MediaItem mediaItem,
long startPositionMs)
@@ -987,14 +994,14 @@ Method Summary
-
+
void
setMediaItems (List <MediaItem > mediaItems)
-
+
void
setMediaItems (List <MediaItem > mediaItems,
boolean resetPosition)
@@ -1002,7 +1009,7 @@ Method Summary
-
+
void
setMediaItems (List <MediaItem > mediaItems,
int startIndex,
@@ -1011,98 +1018,98 @@ Method Summary
-
+
void
setPlaybackParameters (PlaybackParameters playbackParameters)
-
+
void
setPlaybackSpeed (float speed)
-
+
void
setPlaylistMetadata (MediaMetadata mediaMetadata)
-
+
void
setPlayWhenReady (boolean playWhenReady)
-
+
void
setRepeatMode (@com.google.android.exoplayer2.Player.RepeatMode int repeatMode)
-
+
void
setShuffleModeEnabled (boolean shuffleModeEnabled)
-
+
void
setTrackSelectionParameters (TrackSelectionParameters parameters)
-
+
void
setVideoSurface (Surface surface)
-
+
void
setVideoSurfaceHolder (SurfaceHolder surfaceHolder)
-
+
void
setVideoSurfaceView (SurfaceView surfaceView)
-
+
void
setVideoTextureView (TextureView textureView)
-
+
void
setVolume (float volume)
-
+
void
stop ()
-
+
void
stop (boolean reset)
@@ -2842,6 +2849,22 @@ getVideoSize
+
+
+
+
diff --git a/docs/doc/reference/com/google/android/exoplayer2/LegacyMediaPlayerWrapper.html b/docs/doc/reference/com/google/android/exoplayer2/LegacyMediaPlayerWrapper.html
new file mode 100644
index 00000000000..97861af3016
--- /dev/null
+++ b/docs/doc/reference/com/google/android/exoplayer2/LegacyMediaPlayerWrapper.html
@@ -0,0 +1,436 @@
+
+
+
+
+LegacyMediaPlayerWrapper (ExoPlayer library)
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Nested Class Summary
+
+
+
+
+
+Nested classes/interfaces inherited from interface com.google.android.exoplayer2.Player
+Player.Command , Player.Commands , Player.DiscontinuityReason , Player.Event , Player.Events , Player.Listener , Player.MediaItemTransitionReason , Player.PlaybackSuppressionReason , Player.PlayWhenReadyChangeReason , Player.PositionInfo , Player.RepeatMode , Player.TimelineChangeReason
+
+
+
+
+
+
+
+
+
+
+Field Summary
+
+
+
+
+
+Fields inherited from interface com.google.android.exoplayer2.Player
+COMMAND_ADJUST_DEVICE_VOLUME , COMMAND_CHANGE_MEDIA_ITEMS , COMMAND_GET_AUDIO_ATTRIBUTES , COMMAND_GET_CURRENT_MEDIA_ITEM , COMMAND_GET_DEVICE_VOLUME , COMMAND_GET_MEDIA_ITEMS_METADATA , COMMAND_GET_TEXT , COMMAND_GET_TIMELINE , COMMAND_GET_TRACKS , COMMAND_GET_VOLUME , COMMAND_INVALID , COMMAND_PLAY_PAUSE , COMMAND_PREPARE , COMMAND_SEEK_BACK , COMMAND_SEEK_FORWARD , COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM , COMMAND_SEEK_IN_CURRENT_WINDOW , COMMAND_SEEK_TO_DEFAULT_POSITION , COMMAND_SEEK_TO_MEDIA_ITEM , COMMAND_SEEK_TO_NEXT , COMMAND_SEEK_TO_NEXT_MEDIA_ITEM , COMMAND_SEEK_TO_NEXT_WINDOW , COMMAND_SEEK_TO_PREVIOUS , COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM , COMMAND_SEEK_TO_PREVIOUS_WINDOW , COMMAND_SEEK_TO_WINDOW , COMMAND_SET_DEVICE_VOLUME , COMMAND_SET_MEDIA_ITEM , COMMAND_SET_MEDIA_ITEMS_METADATA , COMMAND_SET_REPEAT_MODE , COMMAND_SET_SHUFFLE_MODE , COMMAND_SET_SPEED_AND_PITCH , COMMAND_SET_TRACK_SELECTION_PARAMETERS , COMMAND_SET_VIDEO_SURFACE , COMMAND_SET_VOLUME , COMMAND_STOP , DISCONTINUITY_REASON_AUTO_TRANSITION , DISCONTINUITY_REASON_INTERNAL , DISCONTINUITY_REASON_REMOVE , DISCONTINUITY_REASON_SEEK , DISCONTINUITY_REASON_SEEK_ADJUSTMENT , DISCONTINUITY_REASON_SKIP , EVENT_AUDIO_ATTRIBUTES_CHANGED , EVENT_AUDIO_SESSION_ID , EVENT_AVAILABLE_COMMANDS_CHANGED , EVENT_CUES , EVENT_DEVICE_INFO_CHANGED , EVENT_DEVICE_VOLUME_CHANGED , EVENT_IS_LOADING_CHANGED , EVENT_IS_PLAYING_CHANGED , EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED , EVENT_MEDIA_ITEM_TRANSITION , EVENT_MEDIA_METADATA_CHANGED , EVENT_METADATA , EVENT_PLAY_WHEN_READY_CHANGED , EVENT_PLAYBACK_PARAMETERS_CHANGED , EVENT_PLAYBACK_STATE_CHANGED , EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED , EVENT_PLAYER_ERROR , EVENT_PLAYLIST_METADATA_CHANGED , EVENT_POSITION_DISCONTINUITY , EVENT_RENDERED_FIRST_FRAME , EVENT_REPEAT_MODE_CHANGED , EVENT_SEEK_BACK_INCREMENT_CHANGED , EVENT_SEEK_FORWARD_INCREMENT_CHANGED , EVENT_SHUFFLE_MODE_ENABLED_CHANGED , EVENT_SKIP_SILENCE_ENABLED_CHANGED , EVENT_SURFACE_SIZE_CHANGED , EVENT_TIMELINE_CHANGED , EVENT_TRACK_SELECTION_PARAMETERS_CHANGED , EVENT_TRACKS_CHANGED , EVENT_VIDEO_SIZE_CHANGED , EVENT_VOLUME_CHANGED , MEDIA_ITEM_TRANSITION_REASON_AUTO , MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED , MEDIA_ITEM_TRANSITION_REASON_REPEAT , MEDIA_ITEM_TRANSITION_REASON_SEEK , PLAY_WHEN_READY_CHANGE_REASON_AUDIO_BECOMING_NOISY , PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS , PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM , PLAY_WHEN_READY_CHANGE_REASON_REMOTE , PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST , PLAYBACK_SUPPRESSION_REASON_NONE , PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS , REPEAT_MODE_ALL , REPEAT_MODE_OFF , REPEAT_MODE_ONE , STATE_BUFFERING , STATE_ENDED , STATE_IDLE , STATE_READY , TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED , TIMELINE_CHANGE_REASON_SOURCE_UPDATE
+
+
+
+
+
+
+
+
+
+
+Constructor Summary
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+Methods inherited from class com.google.android.exoplayer2.SimpleBasePlayer
+addListener , addMediaItems , clearVideoSurface , clearVideoSurface , clearVideoSurfaceHolder , clearVideoSurfaceView , clearVideoTextureView , decreaseDeviceVolume , getApplicationLooper , getAudioAttributes , getAvailableCommands , getBufferedPosition , getContentBufferedPosition , getContentPosition , getCurrentAdGroupIndex , getCurrentAdIndexInAdGroup , getCurrentCues , getCurrentMediaItemIndex , getCurrentPeriodIndex , getCurrentPosition , getCurrentTimeline , getCurrentTracks , getDeviceInfo , getDeviceVolume , getDuration , getMaxSeekToPreviousPosition , getMediaMetadata , getPlaceholderState , getPlaybackParameters , getPlaybackState , getPlaybackSuppressionReason , getPlayerError , getPlaylistMetadata , getPlayWhenReady , getRepeatMode , getSeekBackIncrement , getSeekForwardIncrement , getShuffleModeEnabled , getSurfaceSize , getTotalBufferedDuration , getTrackSelectionParameters , getVideoSize , getVolume , increaseDeviceVolume , invalidateState , isDeviceMuted , isLoading , isPlayingAd , moveMediaItems , prepare , release , removeListener , removeMediaItems , seekTo , setDeviceMuted , setDeviceVolume , setMediaItems , setMediaItems , setPlaybackParameters , setPlaylistMetadata , setPlayWhenReady , setRepeatMode , setShuffleModeEnabled , setTrackSelectionParameters , setVideoSurface , setVideoSurfaceHolder , setVideoSurfaceView , setVideoTextureView , setVolume , stop , stop
+
+
+
+
+
+Methods inherited from class com.google.android.exoplayer2.BasePlayer
+addMediaItem , addMediaItem , addMediaItems , canAdvertiseSession , clearMediaItems , getBufferedPercentage , getContentDuration , getCurrentLiveOffset , getCurrentManifest , getCurrentMediaItem , getCurrentWindowIndex , getMediaItemAt , getMediaItemCount , getNextMediaItemIndex , getNextWindowIndex , getPreviousMediaItemIndex , getPreviousWindowIndex , hasNext , hasNextMediaItem , hasNextWindow , hasPrevious , hasPreviousMediaItem , hasPreviousWindow , isCommandAvailable , isCurrentMediaItemDynamic , isCurrentMediaItemLive , isCurrentMediaItemSeekable , isCurrentWindowDynamic , isCurrentWindowLive , isCurrentWindowSeekable , isPlaying , moveMediaItem , next , pause , play , previous , removeMediaItem , repeatCurrentMediaItem , seekBack , seekForward , seekTo , seekToDefaultPosition , seekToDefaultPosition , seekToNext , seekToNextMediaItem , seekToNextWindow , seekToPrevious , seekToPreviousMediaItem , seekToPreviousWindow , setMediaItem , setMediaItem , setMediaItem , setMediaItems , setPlaybackSpeed
+
+
+
+
+
+Methods inherited from class java.lang.Object
+clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/doc/reference/com/google/android/exoplayer2/MediaItem.AdsConfiguration.Builder.html b/docs/doc/reference/com/google/android/exoplayer2/MediaItem.AdsConfiguration.Builder.html
index d71987cbca1..0b1a87d4a79 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/MediaItem.AdsConfiguration.Builder.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/MediaItem.AdsConfiguration.Builder.html
@@ -252,7 +252,8 @@ Method Detail
@@ -262,7 +263,8 @@ setAdTagUri
setAdsId
-public MediaItem.AdsConfiguration.Builder setAdsId(@Nullable
+@CanIgnoreReturnValue
+public MediaItem.AdsConfiguration.Builder setAdsId(@Nullable
Object adsId)
Sets the ads identifier.
diff --git a/docs/doc/reference/com/google/android/exoplayer2/MediaItem.Builder.html b/docs/doc/reference/com/google/android/exoplayer2/MediaItem.Builder.html
index e6b1a25e437..835e75caf10 100644
--- a/docs/doc/reference/com/google/android/exoplayer2/MediaItem.Builder.html
+++ b/docs/doc/reference/com/google/android/exoplayer2/MediaItem.Builder.html
@@ -556,7 +556,8 @@
Method Detail