Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
1c912e5c
authored
Feb 01, 2023
by
kimvde
Committed by
christosts
Feb 02, 2023
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Pass a Composition to Transformer callbacks
PiperOrigin-RevId: 506304101
parent
4a1cf3d8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
239 additions
and
69 deletions
libraries/transformer/src/main/java/androidx/media3/transformer/EditedMediaItem.java
libraries/transformer/src/main/java/androidx/media3/transformer/Effects.java
libraries/transformer/src/main/java/androidx/media3/transformer/FallbackListener.java
libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java
libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java
libraries/transformer/src/test/java/androidx/media3/transformer/FallbackListenerTest.java
libraries/transformer/src/test/java/androidx/media3/transformer/TransformerEndToEndTest.java
libraries/transformer/src/test/java/androidx/media3/transformer/VideoEncoderWrapperTest.java
libraries/transformer/src/main/java/androidx/media3/transformer/EditedMediaItem.java
View file @
1c912e5c
...
@@ -22,9 +22,7 @@ import androidx.media3.common.MediaItem;
...
@@ -22,9 +22,7 @@ import androidx.media3.common.MediaItem;
import
androidx.media3.common.util.UnstableApi
;
import
androidx.media3.common.util.UnstableApi
;
import
androidx.media3.exoplayer.source.MediaSource
;
import
androidx.media3.exoplayer.source.MediaSource
;
import
androidx.media3.extractor.mp4.Mp4Extractor
;
import
androidx.media3.extractor.mp4.Mp4Extractor
;
import
com.google.common.collect.ImmutableList
;
import
com.google.errorprone.annotations.CanIgnoreReturnValue
;
import
com.google.errorprone.annotations.CanIgnoreReturnValue
;
import
org.checkerframework.checker.nullness.qual.MonotonicNonNull
;
/** A {@link MediaItem} with the transformations to apply to it. */
/** A {@link MediaItem} with the transformations to apply to it. */
@UnstableApi
@UnstableApi
...
@@ -38,7 +36,7 @@ public final class EditedMediaItem {
...
@@ -38,7 +36,7 @@ public final class EditedMediaItem {
private
boolean
removeAudio
;
private
boolean
removeAudio
;
private
boolean
removeVideo
;
private
boolean
removeVideo
;
private
boolean
flattenForSlowMotion
;
private
boolean
flattenForSlowMotion
;
private
@MonotonicNonNull
Effects
effects
;
private
Effects
effects
;
/**
/**
* Creates an instance.
* Creates an instance.
...
@@ -47,6 +45,7 @@ public final class EditedMediaItem {
...
@@ -47,6 +45,7 @@ public final class EditedMediaItem {
*/
*/
public
Builder
(
MediaItem
mediaItem
)
{
public
Builder
(
MediaItem
mediaItem
)
{
this
.
mediaItem
=
mediaItem
;
this
.
mediaItem
=
mediaItem
;
effects
=
Effects
.
EMPTY
;
}
}
/**
/**
...
@@ -115,7 +114,7 @@ public final class EditedMediaItem {
...
@@ -115,7 +114,7 @@ public final class EditedMediaItem {
/**
/**
* Sets the {@link Effects} to apply to the {@link MediaItem}.
* Sets the {@link Effects} to apply to the {@link MediaItem}.
*
*
* <p>The default value is
an empty {@link Effects} instance
.
* <p>The default value is
{@link Effects#EMPTY}
.
*
*
* @param effects The {@link Effects} to apply.
* @param effects The {@link Effects} to apply.
* @return This builder.
* @return This builder.
...
@@ -128,11 +127,6 @@ public final class EditedMediaItem {
...
@@ -128,11 +127,6 @@ public final class EditedMediaItem {
/** Builds an {@link EditedMediaItem} instance. */
/** Builds an {@link EditedMediaItem} instance. */
public
EditedMediaItem
build
()
{
public
EditedMediaItem
build
()
{
if
(
effects
==
null
)
{
effects
=
new
Effects
(
/* audioProcessors= */
ImmutableList
.
of
(),
/* videoEffects= */
ImmutableList
.
of
());
}
return
new
EditedMediaItem
(
return
new
EditedMediaItem
(
mediaItem
,
removeAudio
,
removeVideo
,
flattenForSlowMotion
,
effects
);
mediaItem
,
removeAudio
,
removeVideo
,
flattenForSlowMotion
,
effects
);
}
}
...
...
libraries/transformer/src/main/java/androidx/media3/transformer/Effects.java
View file @
1c912e5c
...
@@ -27,6 +27,11 @@ import com.google.common.collect.ImmutableList;
...
@@ -27,6 +27,11 @@ import com.google.common.collect.ImmutableList;
@UnstableApi
@UnstableApi
public
final
class
Effects
{
public
final
class
Effects
{
/** An empty {@link Effects} instance. */
public
static
final
Effects
EMPTY
=
new
Effects
(
/* audioProcessors= */
ImmutableList
.
of
(),
/* videoEffects= */
ImmutableList
.
of
());
/**
/**
* The list of {@linkplain AudioProcessor audio processors} to apply to audio buffers. They are
* The list of {@linkplain AudioProcessor audio processors} to apply to audio buffers. They are
* applied in the order of the list, and buffers will only be modified by that {@link
* applied in the order of the list, and buffers will only be modified by that {@link
...
...
libraries/transformer/src/main/java/androidx/media3/transformer/FallbackListener.java
View file @
1c912e5c
...
@@ -20,7 +20,6 @@ import static androidx.media3.common.util.Assertions.checkState;
...
@@ -20,7 +20,6 @@ import static androidx.media3.common.util.Assertions.checkState;
import
androidx.annotation.IntRange
;
import
androidx.annotation.IntRange
;
import
androidx.media3.common.C
;
import
androidx.media3.common.C
;
import
androidx.media3.common.MediaItem
;
import
androidx.media3.common.util.HandlerWrapper
;
import
androidx.media3.common.util.HandlerWrapper
;
import
androidx.media3.common.util.ListenerSet
;
import
androidx.media3.common.util.ListenerSet
;
import
androidx.media3.common.util.Util
;
import
androidx.media3.common.util.Util
;
...
@@ -31,7 +30,7 @@ import androidx.media3.common.util.Util;
...
@@ -31,7 +30,7 @@ import androidx.media3.common.util.Util;
*/
*/
/* package */
final
class
FallbackListener
{
/* package */
final
class
FallbackListener
{
private
final
MediaItem
mediaItem
;
private
final
Composition
composition
;
private
final
TransformationRequest
originalTransformationRequest
;
private
final
TransformationRequest
originalTransformationRequest
;
private
final
ListenerSet
<
Transformer
.
Listener
>
transformerListeners
;
private
final
ListenerSet
<
Transformer
.
Listener
>
transformerListeners
;
private
final
HandlerWrapper
transformerListenerHandler
;
private
final
HandlerWrapper
transformerListenerHandler
;
...
@@ -42,7 +41,7 @@ import androidx.media3.common.util.Util;
...
@@ -42,7 +41,7 @@ import androidx.media3.common.util.Util;
/**
/**
* Creates a new instance.
* Creates a new instance.
*
*
* @param
mediaItem The {@link MediaItem
} to transform.
* @param
composition The {@link Composition
} to transform.
* @param transformerListeners The {@linkplain Transformer.Listener listeners} to call {@link
* @param transformerListeners The {@linkplain Transformer.Listener listeners} to call {@link
* Transformer.Listener#onFallbackApplied} on.
* Transformer.Listener#onFallbackApplied} on.
* @param transformerListenerHandler The {@link HandlerWrapper} to call {@link
* @param transformerListenerHandler The {@link HandlerWrapper} to call {@link
...
@@ -50,11 +49,11 @@ import androidx.media3.common.util.Util;
...
@@ -50,11 +49,11 @@ import androidx.media3.common.util.Util;
* @param originalTransformationRequest The original {@link TransformationRequest}.
* @param originalTransformationRequest The original {@link TransformationRequest}.
*/
*/
public
FallbackListener
(
public
FallbackListener
(
MediaItem
mediaItem
,
Composition
composition
,
ListenerSet
<
Transformer
.
Listener
>
transformerListeners
,
ListenerSet
<
Transformer
.
Listener
>
transformerListeners
,
HandlerWrapper
transformerListenerHandler
,
HandlerWrapper
transformerListenerHandler
,
TransformationRequest
originalTransformationRequest
)
{
TransformationRequest
originalTransformationRequest
)
{
this
.
mediaItem
=
mediaItem
;
this
.
composition
=
composition
;
this
.
transformerListeners
=
transformerListeners
;
this
.
transformerListeners
=
transformerListeners
;
this
.
transformerListenerHandler
=
transformerListenerHandler
;
this
.
transformerListenerHandler
=
transformerListenerHandler
;
this
.
originalTransformationRequest
=
originalTransformationRequest
;
this
.
originalTransformationRequest
=
originalTransformationRequest
;
...
@@ -79,7 +78,7 @@ import androidx.media3.common.util.Util;
...
@@ -79,7 +78,7 @@ import androidx.media3.common.util.Util;
*
*
* <p>Fallback is applied if the finalized {@code TransformationRequest} is different from the
* <p>Fallback is applied if the finalized {@code TransformationRequest} is different from the
* original {@code TransformationRequest}. If fallback is applied, calls {@link
* original {@code TransformationRequest}. If fallback is applied, calls {@link
* Transformer.Listener#onFallbackApplied(
MediaItem
, TransformationRequest,
* Transformer.Listener#onFallbackApplied(
Composition
, TransformationRequest,
* TransformationRequest)} once this method has been called for each track.
* TransformationRequest)} once this method has been called for each track.
*
*
* @param transformationRequest The final {@link TransformationRequest} for a track.
* @param transformationRequest The final {@link TransformationRequest} for a track.
...
@@ -115,7 +114,7 @@ import androidx.media3.common.util.Util;
...
@@ -115,7 +114,7 @@ import androidx.media3.common.util.Util;
/* eventFlag= */
C
.
INDEX_UNSET
,
/* eventFlag= */
C
.
INDEX_UNSET
,
listener
->
listener
->
listener
.
onFallbackApplied
(
listener
.
onFallbackApplied
(
mediaItem
,
composition
,
originalTransformationRequest
,
originalTransformationRequest
,
newFallbackTransformationRequest
)));
newFallbackTransformationRequest
)));
}
}
...
...
libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java
View file @
1c912e5c
...
@@ -23,7 +23,6 @@ import static java.lang.annotation.RetentionPolicy.SOURCE;
...
@@ -23,7 +23,6 @@ import static java.lang.annotation.RetentionPolicy.SOURCE;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
androidx.media3.common.C
;
import
androidx.media3.common.C
;
import
androidx.media3.common.MediaItem
;
import
androidx.media3.common.MimeTypes
;
import
androidx.media3.common.MimeTypes
;
import
androidx.media3.common.util.UnstableApi
;
import
androidx.media3.common.util.UnstableApi
;
import
androidx.media3.common.util.Util
;
import
androidx.media3.common.util.Util
;
...
@@ -247,10 +246,10 @@ public final class TransformationRequest {
...
@@ -247,10 +246,10 @@ public final class TransformationRequest {
*
*
* <ul>
* <ul>
* <li>Always set to {@link C#LENGTH_UNSET} in the {@code originalTransformationRequest}
* <li>Always set to {@link C#LENGTH_UNSET} in the {@code originalTransformationRequest}
* parameter of {@link Transformer.Listener#onFallbackApplied(
MediaItem
,
* parameter of {@link Transformer.Listener#onFallbackApplied(
Composition
,
* TransformationRequest, TransformationRequest)}.
* TransformationRequest, TransformationRequest)}.
* <li>Set to {@link C#LENGTH_UNSET} in the {@code fallbackTransformationRequest} parameter of
* <li>Set to {@link C#LENGTH_UNSET} in the {@code fallbackTransformationRequest} parameter of
* {@link Transformer.Listener#onFallbackApplied(
MediaItem
, TransformationRequest,
* {@link Transformer.Listener#onFallbackApplied(
Composition
, TransformationRequest,
* TransformationRequest)} to indicate that it is inferred from the input.
* TransformationRequest)} to indicate that it is inferred from the input.
* </ul>
* </ul>
*/
*/
...
...
libraries/transformer/src/main/java/androidx/media3/transformer/Transformer.java
View file @
1c912e5c
...
@@ -135,8 +135,8 @@ public final class Transformer {
...
@@ -135,8 +135,8 @@ public final class Transformer {
* Sets the {@link TransformationRequest} which configures the editing and transcoding options.
* Sets the {@link TransformationRequest} which configures the editing and transcoding options.
*
*
* <p>Actual applied values may differ, per device capabilities. {@link
* <p>Actual applied values may differ, per device capabilities. {@link
* Listener#onFallbackApplied(
MediaItem, TransformationRequest, TransformationRequest)} will be
* Listener#onFallbackApplied(
Composition, TransformationRequest, TransformationRequest)} will
* invoked with the actual applied values.
*
be
invoked with the actual applied values.
*
*
* @param transformationRequest The {@link TransformationRequest}.
* @param transformationRequest The {@link TransformationRequest}.
* @return This builder.
* @return This builder.
...
@@ -449,31 +449,42 @@ public final class Transformer {
...
@@ -449,31 +449,42 @@ public final class Transformer {
public
interface
Listener
{
public
interface
Listener
{
/**
/**
* @deprecated Use {@link #onTransformationCompleted(MediaItem, TransformationResult)} instead.
* @deprecated Use {@link #onTransformationCompleted(Composition, TransformationResult)}
* instead.
*/
*/
@Deprecated
@Deprecated
default
void
onTransformationCompleted
(
MediaItem
inputMediaItem
)
{}
default
void
onTransformationCompleted
(
MediaItem
inputMediaItem
)
{}
/**
/**
* @deprecated Use {@link #onTransformationCompleted(Composition, TransformationResult)}
* instead.
*/
@Deprecated
default
void
onTransformationCompleted
(
MediaItem
inputMediaItem
,
TransformationResult
result
)
{
onTransformationCompleted
(
inputMediaItem
);
}
/**
* Called when the transformation is completed successfully.
* Called when the transformation is completed successfully.
*
*
* @param
inputMediaItem The {@link MediaItem
} for which the transformation is completed.
* @param
composition The {@link Composition
} for which the transformation is completed.
* @param result The {@link TransformationResult} of the transformation.
* @param result The {@link TransformationResult} of the transformation.
*/
*/
default
void
onTransformationCompleted
(
MediaItem
inputMediaItem
,
TransformationResult
result
)
{
default
void
onTransformationCompleted
(
Composition
composition
,
TransformationResult
result
)
{
onTransformationCompleted
(
inputMediaItem
);
MediaItem
mediaItem
=
composition
.
sequences
.
get
(
0
).
editedMediaItems
.
get
(
0
).
mediaItem
;
onTransformationCompleted
(
mediaItem
,
result
);
}
}
/**
/**
* @deprecated Use {@link #onTransformationError(
MediaItem
, TransformationResult,
* @deprecated Use {@link #onTransformationError(
Composition
, TransformationResult,
* TransformationException)}.
* TransformationException)}
instead
.
*/
*/
@Deprecated
@Deprecated
default
void
onTransformationError
(
MediaItem
inputMediaItem
,
Exception
exception
)
{}
default
void
onTransformationError
(
MediaItem
inputMediaItem
,
Exception
exception
)
{}
/**
/**
* @deprecated Use {@link #onTransformationError(
MediaItem
, TransformationResult,
* @deprecated Use {@link #onTransformationError(
Composition
, TransformationResult,
* TransformationException)}.
* TransformationException)}
instead
.
*/
*/
@Deprecated
@Deprecated
default
void
onTransformationError
(
default
void
onTransformationError
(
...
@@ -482,22 +493,43 @@ public final class Transformer {
...
@@ -482,22 +493,43 @@ public final class Transformer {
}
}
/**
/**
* @deprecated Use {@link #onTransformationError(Composition, TransformationResult,
* TransformationException)} instead.
*/
@Deprecated
default
void
onTransformationError
(
MediaItem
inputMediaItem
,
TransformationResult
result
,
TransformationException
exception
)
{
onTransformationError
(
inputMediaItem
,
exception
);
}
/**
* Called if an exception occurs during the transformation.
* Called if an exception occurs during the transformation.
*
*
* @param
inputMediaItem The {@link MediaItem
} for which the exception occurs.
* @param
composition The {@link Composition
} for which the exception occurs.
* @param result The {@link TransformationResult} of the transformation.
* @param result The {@link TransformationResult} of the transformation.
* @param exception The {@link TransformationException} describing the exception.
* @param exception The {@link TransformationException} describing the exception.
*/
*/
default
void
onTransformationError
(
default
void
onTransformationError
(
MediaItem
inputMediaItem
,
TransformationResult
result
,
TransformationException
exception
)
{
Composition
composition
,
TransformationResult
result
,
TransformationException
exception
)
{
onTransformationError
(
inputMediaItem
,
exception
);
MediaItem
mediaItem
=
composition
.
sequences
.
get
(
0
).
editedMediaItems
.
get
(
0
).
mediaItem
;
onTransformationError
(
mediaItem
,
result
,
exception
);
}
}
/**
/**
* @deprecated Use {@link #onFallbackApplied(Composition, TransformationRequest,
* TransformationRequest)} instead.
*/
@Deprecated
default
void
onFallbackApplied
(
MediaItem
inputMediaItem
,
TransformationRequest
originalTransformationRequest
,
TransformationRequest
fallbackTransformationRequest
)
{}
/**
* Called when falling back to an alternative {@link TransformationRequest} or changing the
* Called when falling back to an alternative {@link TransformationRequest} or changing the
* video frames' resolution is necessary to comply with muxer or device constraints.
* video frames' resolution is necessary to comply with muxer or device constraints.
*
*
* @param
inputMediaItem The {@link MediaItem
} for which the transformation is requested.
* @param
composition The {@link Composition
} for which the transformation is requested.
* @param originalTransformationRequest The unsupported {@link TransformationRequest} used when
* @param originalTransformationRequest The unsupported {@link TransformationRequest} used when
* building {@link Transformer}.
* building {@link Transformer}.
* @param fallbackTransformationRequest The alternative {@link TransformationRequest}, with
* @param fallbackTransformationRequest The alternative {@link TransformationRequest}, with
...
@@ -506,9 +538,12 @@ public final class Transformer {
...
@@ -506,9 +538,12 @@ public final class Transformer {
* {@link TransformationRequest#hdrMode} values set.
* {@link TransformationRequest#hdrMode} values set.
*/
*/
default
void
onFallbackApplied
(
default
void
onFallbackApplied
(
MediaItem
inputMediaItem
,
Composition
composition
,
TransformationRequest
originalTransformationRequest
,
TransformationRequest
originalTransformationRequest
,
TransformationRequest
fallbackTransformationRequest
)
{}
TransformationRequest
fallbackTransformationRequest
)
{
MediaItem
mediaItem
=
composition
.
sequences
.
get
(
0
).
editedMediaItems
.
get
(
0
).
mediaItem
;
onFallbackApplied
(
mediaItem
,
originalTransformationRequest
,
fallbackTransformationRequest
);
}
}
}
/**
/**
...
@@ -717,12 +752,14 @@ public final class Transformer {
...
@@ -717,12 +752,14 @@ public final class Transformer {
if
(
transformerInternal
!=
null
)
{
if
(
transformerInternal
!=
null
)
{
throw
new
IllegalStateException
(
"There is already a transformation in progress."
);
throw
new
IllegalStateException
(
"There is already a transformation in progress."
);
}
}
EditedMediaItemSequence
sequence
=
new
EditedMediaItemSequence
(
ImmutableList
.
of
(
editedMediaItem
));
Composition
composition
=
new
Composition
(
ImmutableList
.
of
(
sequence
),
Effects
.
EMPTY
);
TransformerInternalListener
transformerInternalListener
=
TransformerInternalListener
transformerInternalListener
=
new
TransformerInternalListener
(
editedMediaItem
.
mediaItem
);
new
TransformerInternalListener
(
composition
);
HandlerWrapper
applicationHandler
=
clock
.
createHandler
(
looper
,
/* callback= */
null
);
HandlerWrapper
applicationHandler
=
clock
.
createHandler
(
looper
,
/* callback= */
null
);
FallbackListener
fallbackListener
=
FallbackListener
fallbackListener
=
new
FallbackListener
(
new
FallbackListener
(
composition
,
listeners
,
applicationHandler
,
transformationRequest
);
editedMediaItem
.
mediaItem
,
listeners
,
applicationHandler
,
transformationRequest
);
transformerInternal
=
transformerInternal
=
new
TransformerInternal
(
new
TransformerInternal
(
context
,
context
,
...
@@ -753,7 +790,7 @@ public final class Transformer {
...
@@ -753,7 +790,7 @@ public final class Transformer {
* Returns the current {@link ProgressState} and updates {@code progressHolder} with the current
* Returns the current {@link ProgressState} and updates {@code progressHolder} with the current
* progress if it is {@link #PROGRESS_STATE_AVAILABLE available}.
* progress if it is {@link #PROGRESS_STATE_AVAILABLE available}.
*
*
* <p>After a transformation {@linkplain Listener#onTransformationCompleted(
MediaItem
,
* <p>After a transformation {@linkplain Listener#onTransformationCompleted(
Composition
,
* TransformationResult) completes}, this method returns {@link #PROGRESS_STATE_NOT_STARTED}.
* TransformationResult) completes}, this method returns {@link #PROGRESS_STATE_NOT_STARTED}.
*
*
* @param progressHolder A {@link ProgressHolder}, updated to hold the percentage progress if
* @param progressHolder A {@link ProgressHolder}, updated to hold the percentage progress if
...
@@ -793,10 +830,10 @@ public final class Transformer {
...
@@ -793,10 +830,10 @@ public final class Transformer {
private
final
class
TransformerInternalListener
implements
TransformerInternal
.
Listener
{
private
final
class
TransformerInternalListener
implements
TransformerInternal
.
Listener
{
private
final
MediaItem
mediaItem
;
private
final
Composition
composition
;
public
TransformerInternalListener
(
MediaItem
mediaItem
)
{
public
TransformerInternalListener
(
Composition
composition
)
{
this
.
mediaItem
=
mediaItem
;
this
.
composition
=
composition
;
}
}
@Override
@Override
...
@@ -805,7 +842,7 @@ public final class Transformer {
...
@@ -805,7 +842,7 @@ public final class Transformer {
transformerInternal
=
null
;
transformerInternal
=
null
;
listeners
.
queueEvent
(
listeners
.
queueEvent
(
/* eventFlag= */
C
.
INDEX_UNSET
,
/* eventFlag= */
C
.
INDEX_UNSET
,
listener
->
listener
.
onTransformationCompleted
(
mediaItem
,
transformationResult
));
listener
->
listener
.
onTransformationCompleted
(
composition
,
transformationResult
));
listeners
.
flushEvents
();
listeners
.
flushEvents
();
}
}
...
@@ -815,7 +852,7 @@ public final class Transformer {
...
@@ -815,7 +852,7 @@ public final class Transformer {
transformerInternal
=
null
;
transformerInternal
=
null
;
listeners
.
queueEvent
(
listeners
.
queueEvent
(
/* eventFlag= */
C
.
INDEX_UNSET
,
/* eventFlag= */
C
.
INDEX_UNSET
,
listener
->
listener
.
onTransformationError
(
mediaItem
,
result
,
exception
));
listener
->
listener
.
onTransformationError
(
composition
,
result
,
exception
));
listeners
.
flushEvents
();
listeners
.
flushEvents
();
}
}
}
}
...
...
libraries/transformer/src/test/java/androidx/media3/transformer/FallbackListenerTest.java
View file @
1c912e5c
...
@@ -29,6 +29,7 @@ import androidx.media3.common.util.Clock;
...
@@ -29,6 +29,7 @@ import androidx.media3.common.util.Clock;
import
androidx.media3.common.util.HandlerWrapper
;
import
androidx.media3.common.util.HandlerWrapper
;
import
androidx.media3.common.util.ListenerSet
;
import
androidx.media3.common.util.ListenerSet
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
com.google.common.collect.ImmutableList
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
import
org.robolectric.shadows.ShadowLooper
;
import
org.robolectric.shadows.ShadowLooper
;
...
@@ -37,14 +38,20 @@ import org.robolectric.shadows.ShadowLooper;
...
@@ -37,14 +38,20 @@ import org.robolectric.shadows.ShadowLooper;
@RunWith
(
AndroidJUnit4
.
class
)
@RunWith
(
AndroidJUnit4
.
class
)
public
class
FallbackListenerTest
{
public
class
FallbackListenerTest
{
private
static
final
MediaItem
PLACEHOLDER_MEDIA_ITEM
=
MediaItem
.
fromUri
(
Uri
.
EMPTY
);
private
static
final
Composition
PLACEHOLDER_COMPOSITION
=
new
Composition
(
ImmutableList
.
of
(
new
EditedMediaItemSequence
(
ImmutableList
.
of
(
new
EditedMediaItem
.
Builder
(
MediaItem
.
fromUri
(
Uri
.
EMPTY
)).
build
()))),
Effects
.
EMPTY
);
@Test
@Test
public
void
onTransformationRequestFinalized_withoutTrackCountSet_throwsException
()
{
public
void
onTransformationRequestFinalized_withoutTrackCountSet_throwsException
()
{
TransformationRequest
transformationRequest
=
new
TransformationRequest
.
Builder
().
build
();
TransformationRequest
transformationRequest
=
new
TransformationRequest
.
Builder
().
build
();
FallbackListener
fallbackListener
=
FallbackListener
fallbackListener
=
new
FallbackListener
(
new
FallbackListener
(
PLACEHOLDER_
MEDIA_ITEM
,
createListenerSet
(),
createHandler
(),
transformationRequest
);
PLACEHOLDER_
COMPOSITION
,
createListenerSet
(),
createHandler
(),
transformationRequest
);
assertThrows
(
assertThrows
(
IllegalStateException
.
class
,
IllegalStateException
.
class
,
...
@@ -56,7 +63,7 @@ public class FallbackListenerTest {
...
@@ -56,7 +63,7 @@ public class FallbackListenerTest {
TransformationRequest
transformationRequest
=
new
TransformationRequest
.
Builder
().
build
();
TransformationRequest
transformationRequest
=
new
TransformationRequest
.
Builder
().
build
();
FallbackListener
fallbackListener
=
FallbackListener
fallbackListener
=
new
FallbackListener
(
new
FallbackListener
(
PLACEHOLDER_
MEDIA_ITEM
,
createListenerSet
(),
createHandler
(),
transformationRequest
);
PLACEHOLDER_
COMPOSITION
,
createListenerSet
(),
createHandler
(),
transformationRequest
);
fallbackListener
.
setTrackCount
(
1
);
fallbackListener
.
setTrackCount
(
1
);
fallbackListener
.
onTransformationRequestFinalized
(
transformationRequest
);
fallbackListener
.
onTransformationRequestFinalized
(
transformationRequest
);
...
@@ -71,7 +78,7 @@ public class FallbackListenerTest {
...
@@ -71,7 +78,7 @@ public class FallbackListenerTest {
Transformer
.
Listener
mockListener
=
mock
(
Transformer
.
Listener
.
class
);
Transformer
.
Listener
mockListener
=
mock
(
Transformer
.
Listener
.
class
);
FallbackListener
fallbackListener
=
FallbackListener
fallbackListener
=
new
FallbackListener
(
new
FallbackListener
(
PLACEHOLDER_
MEDIA_ITEM
,
PLACEHOLDER_
COMPOSITION
,
createListenerSet
(
mockListener
),
createListenerSet
(
mockListener
),
createHandler
(),
createHandler
(),
originalRequest
);
originalRequest
);
...
@@ -80,7 +87,7 @@ public class FallbackListenerTest {
...
@@ -80,7 +87,7 @@ public class FallbackListenerTest {
fallbackListener
.
onTransformationRequestFinalized
(
unchangedRequest
);
fallbackListener
.
onTransformationRequestFinalized
(
unchangedRequest
);
ShadowLooper
.
idleMainLooper
();
ShadowLooper
.
idleMainLooper
();
verify
(
mockListener
,
never
()).
onFallbackApplied
(
any
(),
any
(),
any
());
verify
(
mockListener
,
never
()).
onFallbackApplied
(
any
(
Composition
.
class
),
any
(),
any
());
}
}
@Test
@Test
...
@@ -92,7 +99,7 @@ public class FallbackListenerTest {
...
@@ -92,7 +99,7 @@ public class FallbackListenerTest {
Transformer
.
Listener
mockListener
=
mock
(
Transformer
.
Listener
.
class
);
Transformer
.
Listener
mockListener
=
mock
(
Transformer
.
Listener
.
class
);
FallbackListener
fallbackListener
=
FallbackListener
fallbackListener
=
new
FallbackListener
(
new
FallbackListener
(
PLACEHOLDER_
MEDIA_ITEM
,
PLACEHOLDER_
COMPOSITION
,
createListenerSet
(
mockListener
),
createListenerSet
(
mockListener
),
createHandler
(),
createHandler
(),
originalRequest
);
originalRequest
);
...
@@ -102,7 +109,7 @@ public class FallbackListenerTest {
...
@@ -102,7 +109,7 @@ public class FallbackListenerTest {
ShadowLooper
.
idleMainLooper
();
ShadowLooper
.
idleMainLooper
();
verify
(
mockListener
)
verify
(
mockListener
)
.
onFallbackApplied
(
PLACEHOLDER_
MEDIA_ITEM
,
originalRequest
,
audioFallbackRequest
);
.
onFallbackApplied
(
PLACEHOLDER_
COMPOSITION
,
originalRequest
,
audioFallbackRequest
);
}
}
@Test
@Test
...
@@ -122,7 +129,7 @@ public class FallbackListenerTest {
...
@@ -122,7 +129,7 @@ public class FallbackListenerTest {
Transformer
.
Listener
mockListener
=
mock
(
Transformer
.
Listener
.
class
);
Transformer
.
Listener
mockListener
=
mock
(
Transformer
.
Listener
.
class
);
FallbackListener
fallbackListener
=
FallbackListener
fallbackListener
=
new
FallbackListener
(
new
FallbackListener
(
PLACEHOLDER_
MEDIA_ITEM
,
PLACEHOLDER_
COMPOSITION
,
createListenerSet
(
mockListener
),
createListenerSet
(
mockListener
),
createHandler
(),
createHandler
(),
originalRequest
);
originalRequest
);
...
@@ -133,7 +140,7 @@ public class FallbackListenerTest {
...
@@ -133,7 +140,7 @@ public class FallbackListenerTest {
ShadowLooper
.
idleMainLooper
();
ShadowLooper
.
idleMainLooper
();
verify
(
mockListener
)
verify
(
mockListener
)
.
onFallbackApplied
(
PLACEHOLDER_
MEDIA_ITEM
,
originalRequest
,
mergedFallbackRequest
);
.
onFallbackApplied
(
PLACEHOLDER_
COMPOSITION
,
originalRequest
,
mergedFallbackRequest
);
}
}
private
static
ListenerSet
<
Transformer
.
Listener
>
createListenerSet
(
private
static
ListenerSet
<
Transformer
.
Listener
>
createListenerSet
(
...
...
libraries/transformer/src/test/java/androidx/media3/transformer/TransformerEndToEndTest.java
View file @
1c912e5c
This diff is collapsed.
Click to expand it.
libraries/transformer/src/test/java/androidx/media3/transformer/VideoEncoderWrapperTest.java
View file @
1c912e5c
...
@@ -43,12 +43,20 @@ import org.robolectric.shadows.ShadowMediaCodecList;
...
@@ -43,12 +43,20 @@ import org.robolectric.shadows.ShadowMediaCodecList;
/** Unit tests for {@link VideoSamplePipeline.EncoderWrapper}. */
/** Unit tests for {@link VideoSamplePipeline.EncoderWrapper}. */
@RunWith
(
AndroidJUnit4
.
class
)
@RunWith
(
AndroidJUnit4
.
class
)
public
final
class
VideoEncoderWrapperTest
{
public
final
class
VideoEncoderWrapperTest
{
private
static
final
Composition
FAKE_COMPOSITION
=
new
Composition
(
ImmutableList
.
of
(
new
EditedMediaItemSequence
(
ImmutableList
.
of
(
new
EditedMediaItem
.
Builder
(
MediaItem
.
fromUri
(
Uri
.
EMPTY
)).
build
()))),
Effects
.
EMPTY
);
private
final
TransformationRequest
emptyTransformationRequest
=
private
final
TransformationRequest
emptyTransformationRequest
=
new
TransformationRequest
.
Builder
().
build
();
new
TransformationRequest
.
Builder
().
build
();
private
final
FakeVideoEncoderFactory
fakeEncoderFactory
=
new
FakeVideoEncoderFactory
();
private
final
FakeVideoEncoderFactory
fakeEncoderFactory
=
new
FakeVideoEncoderFactory
();
private
final
FallbackListener
fallbackListener
=
private
final
FallbackListener
fallbackListener
=
new
FallbackListener
(
new
FallbackListener
(
MediaItem
.
fromUri
(
Uri
.
EMPTY
)
,
FAKE_COMPOSITION
,
new
ListenerSet
<>(
Looper
.
myLooper
(),
Clock
.
DEFAULT
,
(
listener
,
flags
)
->
{}),
new
ListenerSet
<>(
Looper
.
myLooper
(),
Clock
.
DEFAULT
,
(
listener
,
flags
)
->
{}),
Clock
.
DEFAULT
.
createHandler
(
Looper
.
myLooper
(),
/* callback= */
null
),
Clock
.
DEFAULT
.
createHandler
(
Looper
.
myLooper
(),
/* callback= */
null
),
emptyTransformationRequest
);
emptyTransformationRequest
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment