From d6e5352285cf5df583b1feb59579b6ca56d7d1f9 Mon Sep 17 00:00:00 2001 From: kimvde Date: Thu, 27 Jan 2022 16:31:47 +0000 Subject: [PATCH] Make sure that onTransformationError is called once The second error is probably a consequence of the first one. #minor-release PiperOrigin-RevId: 424619944 --- .../media3/transformer/Transformer.java | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java index 4e12217f18..be2601f72c 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java @@ -935,26 +935,24 @@ public final class Transformer { } catch (RuntimeException e) { resourceReleaseException = TransformationException.createForUnexpected(e); } - - if (exception == null && resourceReleaseException == null) { - // TODO(b/213341814): Add event flags for Transformer events. - listeners.queueEvent( - /* eventFlag= */ C.INDEX_UNSET, - listener -> listener.onTransformationCompleted(mediaItem)); - listeners.flushEvents(); - return; + if (exception == null) { + // We only report the exception caused by releasing the resources if there is no other + // exception. It is more intuitive to call the error callback only once and reporting the + // exception caused by releasing the resources can be confusing if it is a consequence of + // the first exception. + exception = resourceReleaseException; } if (exception != null) { + TransformationException finalException = exception; + // TODO(b/213341814): Add event flags for Transformer events. listeners.queueEvent( /* eventFlag= */ C.INDEX_UNSET, - listener -> listener.onTransformationError(mediaItem, exception)); - } - if (resourceReleaseException != null) { - TransformationException finalResourceReleaseException = resourceReleaseException; + listener -> listener.onTransformationError(mediaItem, finalException)); + } else { listeners.queueEvent( /* eventFlag= */ C.INDEX_UNSET, - listener -> listener.onTransformationError(mediaItem, finalResourceReleaseException)); + listener -> listener.onTransformationCompleted(mediaItem)); } listeners.flushEvents(); }