diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 60037fe4a2..85df1fc75c 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -105,6 +105,8 @@ TransformationRequest, TransformationRequest)` instead. * Remove deprecated `TransformationResult` class. Use `ExportResult` instead. + * Remove deprecated `TransformationException` class. Use `ExportException` + instead. ## 1.5 diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java deleted file mode 100644 index 73636d07f8..0000000000 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Copyright 2021 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.transformer; - -import static java.lang.annotation.ElementType.TYPE_USE; - -import android.os.SystemClock; -import androidx.annotation.IntDef; -import androidx.annotation.Nullable; -import androidx.media3.common.Format; -import androidx.media3.common.VideoFrameProcessingException; -import androidx.media3.common.VideoFrameProcessor; -import androidx.media3.common.audio.AudioProcessor.AudioFormat; -import androidx.media3.common.util.Clock; -import androidx.media3.common.util.UnstableApi; -import androidx.media3.common.util.Util; -import com.google.common.collect.ImmutableBiMap; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @deprecated Use {@link ExportException} instead. - */ -@SuppressWarnings("deprecation") // Deprecated usages of own type -@Deprecated -@UnstableApi -public final class TransformationException extends Exception { - - /** - * Error codes that identify causes of {@link Transformer} errors. - * - *
This list of errors may be extended in future versions. The underlying values may also - * change, so it is best to avoid relying on them directly without using the constants. - */ - @Documented - @Retention(RetentionPolicy.SOURCE) - @Target(TYPE_USE) - @IntDef( - open = true, - value = { - ERROR_CODE_UNSPECIFIED, - ERROR_CODE_FAILED_RUNTIME_CHECK, - ERROR_CODE_IO_UNSPECIFIED, - ERROR_CODE_IO_NETWORK_CONNECTION_FAILED, - ERROR_CODE_IO_NETWORK_CONNECTION_TIMEOUT, - ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE, - ERROR_CODE_IO_BAD_HTTP_STATUS, - ERROR_CODE_IO_FILE_NOT_FOUND, - ERROR_CODE_IO_NO_PERMISSION, - ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED, - ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE, - ERROR_CODE_DECODER_INIT_FAILED, - ERROR_CODE_DECODING_FAILED, - ERROR_CODE_DECODING_FORMAT_UNSUPPORTED, - ERROR_CODE_ENCODER_INIT_FAILED, - ERROR_CODE_ENCODING_FAILED, - ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED, - ERROR_CODE_VIDEO_FRAME_PROCESSING_FAILED, - ERROR_CODE_AUDIO_PROCESSING_FAILED, - ERROR_CODE_MUXING_FAILED, - }) - public @interface ErrorCode {} - - // Miscellaneous errors (1xxx). - - /** Caused by an error whose cause could not be identified. */ - public static final int ERROR_CODE_UNSPECIFIED = 1000; - - /** - * Caused by a failed runtime check. - * - *
This can happen when transformer reaches an invalid state. - */ - public static final int ERROR_CODE_FAILED_RUNTIME_CHECK = 1001; - - // Input/Output errors (2xxx). - - /** Caused by an Input/Output error which could not be identified. */ - public static final int ERROR_CODE_IO_UNSPECIFIED = 2000; - - /** - * Caused by a network connection failure. - * - *
The following is a non-exhaustive list of possible reasons: - * - *
For example, this can happen when the {@link AssetLoader} is expecting a piece of media, but - * the server returns a paywall HTML page, with content type "text/html". - */ - public static final int ERROR_CODE_IO_INVALID_HTTP_CONTENT_TYPE = 2003; - - /** Caused by an HTTP server returning an unexpected HTTP response status code. */ - public static final int ERROR_CODE_IO_BAD_HTTP_STATUS = 2004; - - /** Caused by a non-existent file. */ - public static final int ERROR_CODE_IO_FILE_NOT_FOUND = 2005; - - /** - * Caused by lack of permission to perform an IO operation. For example, lack of permission to - * access internet or external storage. - */ - public static final int ERROR_CODE_IO_NO_PERMISSION = 2006; - - /** - * Caused by the {@link AssetLoader} trying to access cleartext HTTP traffic (meaning http:// - * rather than https://) when the app's Network Security Configuration does not permit it. - */ - public static final int ERROR_CODE_IO_CLEARTEXT_NOT_PERMITTED = 2007; - - /** Caused by reading data out of the data bound. */ - public static final int ERROR_CODE_IO_READ_POSITION_OUT_OF_RANGE = 2008; - - // Decoding errors (3xxx). - - /** Caused by a decoder initialization failure. */ - public static final int ERROR_CODE_DECODER_INIT_FAILED = 3001; - - /** Caused by a failure while trying to decode media samples. */ - public static final int ERROR_CODE_DECODING_FAILED = 3002; - - /** Caused by trying to decode content whose format is not supported. */ - public static final int ERROR_CODE_DECODING_FORMAT_UNSUPPORTED = 3003; - - // Encoding errors (4xxx). - - /** Caused by an encoder initialization failure. */ - public static final int ERROR_CODE_ENCODER_INIT_FAILED = 4001; - - /** Caused by a failure while trying to encode media samples. */ - public static final int ERROR_CODE_ENCODING_FAILED = 4002; - - /** - * Caused by trying to encode content whose format is not supported. * - * - *
Supported output formats are limited by the {@linkplain Codec.DecoderFactory encoders}
- * available.
- */
- public static final int ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED = 4003;
-
- // Video editing errors (5xxx).
-
- /** Caused by a video frame processing failure. */
- public static final int ERROR_CODE_VIDEO_FRAME_PROCESSING_FAILED = 5001;
-
- // Audio processing errors (6xxx).
-
- /** Caused by an audio processing failure. */
- public static final int ERROR_CODE_AUDIO_PROCESSING_FAILED = 6001;
-
- // Muxing errors (7xxx).
-
- /** Caused by a failure while muxing media samples. */
- public static final int ERROR_CODE_MUXING_FAILED = 7001;
-
- /* package */ static final ImmutableBiMap This method should be used when the {@code cause} occurs before the {@link Codec} is
- * initialized.
- *
- * @param cause The cause of the failure.
- * @param errorCode See {@link #errorCode}.
- * @param isVideo Whether the {@link Codec} is configured for video.
- * @param isDecoder Whether the exception is created for a decoder.
- * @param format The {@link Format} used for configuring the {@link Codec}.
- * @return The created instance.
- */
- public static TransformationException createForCodec(
- Throwable cause,
- @ErrorCode int errorCode,
- boolean isVideo,
- boolean isDecoder,
- Format format) {
- String details = "format=" + format;
- return createForCodec(cause, errorCode, isVideo, isDecoder, details);
- }
-
- /**
- * Creates an instance for a {@link Codec} related exception.
- *
- * @param cause The cause of the failure.
- * @param errorCode See {@link #errorCode}.
- * @param isVideo Whether the {@link Codec} is configured for video.
- * @param isDecoder Whether the exception is created for a decoder.
- * @param details The details associated with this exception.
- * @return The created instance.
- */
- public static TransformationException createForCodec(
- Throwable cause,
- @ErrorCode int errorCode,
- boolean isVideo,
- boolean isDecoder,
- String details) {
- String componentName = (isVideo ? "Video" : "Audio") + (isDecoder ? "Decoder" : "Encoder");
- String errorMessage = componentName + " error: " + details;
- return new TransformationException(errorMessage, cause, errorCode);
- }
-
- /**
- * Creates an instance for an audio processing related exception.
- *
- * @param cause The cause of the failure.
- * @param audioFormat The {@link AudioFormat} used.
- * @return The created instance.
- */
- public static TransformationException createForAudioProcessing(
- Throwable cause, AudioFormat audioFormat) {
- return new TransformationException(
- "Audio processing error, audio_format=" + audioFormat,
- cause,
- ERROR_CODE_AUDIO_PROCESSING_FAILED);
- }
-
- /**
- * Creates an instance for a {@link VideoFrameProcessor} related exception.
- *
- * @param cause The cause of the failure.
- * @param errorCode See {@link #errorCode}.
- * @return The created instance.
- */
- /* package */ static TransformationException createForVideoFrameProcessingException(
- VideoFrameProcessingException cause, int errorCode) {
- return new TransformationException("Video frame processing error", cause, errorCode);
- }
-
- /**
- * Creates an instance for a muxer related exception.
- *
- * @param cause The cause of the failure.
- * @param errorCode See {@link #errorCode}.
- * @return The created instance.
- */
- /* package */ static TransformationException createForMuxer(Throwable cause, int errorCode) {
- return new TransformationException("Muxer error", cause, errorCode);
- }
-
- /**
- * Creates an instance for an unexpected exception.
- *
- * If the exception is a runtime exception, error code {@link #ERROR_CODE_FAILED_RUNTIME_CHECK}
- * is used. Otherwise, the created instance has error code {@link #ERROR_CODE_UNSPECIFIED}.
- *
- * @param cause The cause of the failure.
- * @return The created instance.
- */
- public static TransformationException createForUnexpected(Exception cause) {
- if (cause instanceof RuntimeException) {
- return new TransformationException(
- "Unexpected runtime error", cause, ERROR_CODE_FAILED_RUNTIME_CHECK);
- }
- return new TransformationException("Unexpected error", cause, ERROR_CODE_UNSPECIFIED);
- }
-
- /** An error code which identifies the cause of the transformation failure. */
- public final @ErrorCode int errorCode;
-
- /** The value of {@link SystemClock#elapsedRealtime()} when this exception was created. */
- public final long timestampMs;
-
- /**
- * Creates an instance.
- *
- * @param message See {@link #getMessage()}.
- * @param cause See {@link #getCause()}.
- * @param errorCode A number which identifies the cause of the error. May be one of the {@link
- * ErrorCode ErrorCodes}.
- */
- private TransformationException(
- @Nullable String message, @Nullable Throwable cause, @ErrorCode int errorCode) {
- super(message, cause);
- this.errorCode = errorCode;
- this.timestampMs = Clock.DEFAULT.elapsedRealtime();
- }
-
- /* package */ TransformationException(ExportException exportException) {
- super(exportException.getMessage(), exportException.getCause());
- errorCode = exportException.errorCode;
- timestampMs = exportException.timestampMs;
- }
-
- /**
- * Returns whether the error data associated to this exception equals the error data associated to
- * {@code other}.
- *
- * Note that this method does not compare the exceptions' stack traces.
- */
- public boolean errorInfoEquals(@Nullable TransformationException other) {
- if (this == other) {
- return true;
- }
- if (other == null || getClass() != other.getClass()) {
- return false;
- }
-
- @Nullable Throwable thisCause = getCause();
- @Nullable Throwable thatCause = other.getCause();
- if (thisCause != null && thatCause != null) {
- if (!Util.areEqual(thisCause.getMessage(), thatCause.getMessage())) {
- return false;
- }
- if (!Util.areEqual(thisCause.getClass(), thatCause.getClass())) {
- return false;
- }
- } else if (thisCause != null || thatCause != null) {
- return false;
- }
- return errorCode == other.errorCode
- && Util.areEqual(getMessage(), other.getMessage())
- && timestampMs == other.timestampMs;
- }
-}