public final class

AudioOffloadSupport

extends java.lang.Object

 java.lang.Object

↳androidx.media3.exoplayer.audio.AudioOffloadSupport

Gradle dependencies

compile group: 'androidx.media3', name: 'media3-exoplayer', version: '1.5.0-alpha01'

  • groupId: androidx.media3
  • artifactId: media3-exoplayer
  • version: 1.5.0-alpha01

Artifact androidx.media3:media3-exoplayer:1.5.0-alpha01 it located at Google repository (https://maven.google.com/)

Overview

Represents the support capabilities for audio offload playback.

Summary

Fields
public static final AudioOffloadSupportDEFAULT_UNSUPPORTED

The default configuration.

public final booleanisFormatSupported

Whether the format is supported with offload playback.

public final booleanisGaplessSupported

Whether playback of the format is supported with gapless transitions.

public final booleanisSpeedChangeSupported

Whether playback of the format is supported with speed changes.

Methods
public AudioOffloadSupport.BuilderbuildUpon()

Creates a new AudioOffloadSupport.Builder, copying the initial values from this instance.

public booleanequals(java.lang.Object obj)

public inthashCode()

from java.lang.Objectclone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait

Fields

public static final AudioOffloadSupport DEFAULT_UNSUPPORTED

The default configuration.

public final boolean isFormatSupported

Whether the format is supported with offload playback.

public final boolean isGaplessSupported

Whether playback of the format is supported with gapless transitions.

public final boolean isSpeedChangeSupported

Whether playback of the format is supported with speed changes.

Methods

public AudioOffloadSupport.Builder buildUpon()

Creates a new AudioOffloadSupport.Builder, copying the initial values from this instance.

public boolean equals(java.lang.Object obj)

public int hashCode()

Source

/*
 * Copyright 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package androidx.media3.exoplayer.audio;

import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
import com.google.errorprone.annotations.CanIgnoreReturnValue;

/** Represents the support capabilities for audio offload playback. */
@UnstableApi
public final class AudioOffloadSupport {

  /** The default configuration. */
  public static final AudioOffloadSupport DEFAULT_UNSUPPORTED =
      new AudioOffloadSupport.Builder().build();

  /** A builder to create {@link AudioOffloadSupport} instances. */
  public static final class Builder {
    /** Whether the format is supported with offload playback. */
    private boolean isFormatSupported;

    /** Whether playback of the format is supported with gapless transitions. */
    private boolean isGaplessSupported;

    /** Whether playback of the format is supported with speed changes. */
    private boolean isSpeedChangeSupported;

    public Builder() {}

    public Builder(AudioOffloadSupport audioOffloadSupport) {
      isFormatSupported = audioOffloadSupport.isFormatSupported;
      isGaplessSupported = audioOffloadSupport.isGaplessSupported;
      isSpeedChangeSupported = audioOffloadSupport.isSpeedChangeSupported;
    }

    /**
     * Sets if media format is supported in offload playback.
     *
     * <p>Default is {@code false}.
     */
    @CanIgnoreReturnValue
    public Builder setIsFormatSupported(boolean isFormatSupported) {
      this.isFormatSupported = isFormatSupported;
      return this;
    }

    /**
     * Sets whether playback of the format is supported with gapless transitions.
     *
     * <p>Default is {@code false}.
     */
    @CanIgnoreReturnValue
    public Builder setIsGaplessSupported(boolean isGaplessSupported) {
      this.isGaplessSupported = isGaplessSupported;
      return this;
    }

    /**
     * Sets whether playback of the format is supported with speed changes.
     *
     * <p>Default is {@code false}.
     */
    @CanIgnoreReturnValue
    public Builder setIsSpeedChangeSupported(boolean isSpeedChangeSupported) {
      this.isSpeedChangeSupported = isSpeedChangeSupported;
      return this;
    }

    /**
     * Builds the {@link AudioOffloadSupport}.
     *
     * @throws IllegalStateException If either {@link #isGaplessSupported} or {@link
     *     #isSpeedChangeSupported} are true when {@link #isFormatSupported} is false.
     */
    public AudioOffloadSupport build() {
      if (!isFormatSupported && (isGaplessSupported || isSpeedChangeSupported)) {
        throw new IllegalStateException(
            "Secondary offload attribute fields are true but primary isFormatSupported is false");
      }
      return new AudioOffloadSupport(this);
    }
  }

  /** Whether the format is supported with offload playback. */
  public final boolean isFormatSupported;

  /** Whether playback of the format is supported with gapless transitions. */
  public final boolean isGaplessSupported;

  /** Whether playback of the format is supported with speed changes. */
  public final boolean isSpeedChangeSupported;

  private AudioOffloadSupport(AudioOffloadSupport.Builder builder) {
    this.isFormatSupported = builder.isFormatSupported;
    this.isGaplessSupported = builder.isGaplessSupported;
    this.isSpeedChangeSupported = builder.isSpeedChangeSupported;
  }

  /** Creates a new {@link Builder}, copying the initial values from this instance. */
  public Builder buildUpon() {
    return new Builder(this);
  }

  @Override
  public boolean equals(@Nullable Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null || getClass() != obj.getClass()) {
      return false;
    }
    AudioOffloadSupport other = (AudioOffloadSupport) obj;
    return isFormatSupported == other.isFormatSupported
        && isGaplessSupported == other.isGaplessSupported
        && isSpeedChangeSupported == other.isSpeedChangeSupported;
  }

  @Override
  public int hashCode() {
    int hashCode = (isFormatSupported ? 1 : 0) << 2;
    hashCode += (isGaplessSupported ? 1 : 0) << 1;
    hashCode += (isSpeedChangeSupported ? 1 : 0);
    return hashCode;
  }
}