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
e10270e6
authored
May 11, 2023
by
kimvde
Committed by
Tofunmi Adigun-Hameed
May 11, 2023
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Move VideoFrameProcessorFactory setter to Transformer
PiperOrigin-RevId: 531123743
parent
04ef3ae8
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
39 additions
and
57 deletions
library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Effects.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SequenceAssetLoader.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java
library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TextureAssetLoaderTest.java
library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java
View file @
e10270e6
...
...
@@ -121,26 +121,23 @@ public class TransformerEndToEndTest {
String
testId
=
"videoEditing_withTextureInput_completesWithCorrectFrameCountAndDuration"
;
Bitmap
bitmap
=
new
DataSourceBitmapLoader
(
context
).
loadBitmap
(
Uri
.
parse
(
PNG_ASSET_URI_STRING
)).
get
();
Transformer
transformer
=
new
Transformer
.
Builder
(
context
)
.
setAssetLoaderFactory
(
new
TestTextureAssetLoaderFactory
(
bitmap
.
getWidth
(),
bitmap
.
getHeight
()))
.
build
();
int
expectedFrameCount
=
2
;
EGLContext
currentContext
=
createOpenGlObjects
();
DefaultVideoFrameProcessor
.
Factory
videoFrameProcessorFactory
=
new
DefaultVideoFrameProcessor
.
Factory
.
Builder
()
.
setGlObjectsProvider
(
new
DefaultGlObjectsProvider
(
currentContext
))
.
build
();
Transformer
transformer
=
new
Transformer
.
Builder
(
context
)
.
setAssetLoaderFactory
(
new
TestTextureAssetLoaderFactory
(
bitmap
.
getWidth
(),
bitmap
.
getHeight
()))
.
setVideoFrameProcessorFactory
(
videoFrameProcessorFactory
)
.
build
();
ImmutableList
<
Effect
>
videoEffects
=
ImmutableList
.
of
(
Presentation
.
createForHeight
(
480
));
EditedMediaItem
editedMediaItem
=
new
EditedMediaItem
.
Builder
(
MediaItem
.
fromUri
(
Uri
.
EMPTY
))
.
setDurationUs
(
C
.
MICROS_PER_SECOND
)
.
setEffects
(
new
Effects
(
/* audioProcessors= */
ImmutableList
.
of
(),
videoEffects
,
videoFrameProcessorFactory
))
.
setEffects
(
new
Effects
(
/* audioProcessors= */
ImmutableList
.
of
(),
videoEffects
))
.
build
();
int
texId
=
generateTextureFromBitmap
(
bitmap
);
HandlerThread
textureQueuingThread
=
new
HandlerThread
(
"textureQueuingThread"
);
...
...
@@ -178,25 +175,21 @@ public class TransformerEndToEndTest {
String
testId
=
"videoTranscoding_withTextureInput_completesWithCorrectFrameCountAndDuration"
;
Bitmap
bitmap
=
new
DataSourceBitmapLoader
(
context
).
loadBitmap
(
Uri
.
parse
(
PNG_ASSET_URI_STRING
)).
get
();
Transformer
transformer
=
new
Transformer
.
Builder
(
context
)
.
setAssetLoaderFactory
(
new
TestTextureAssetLoaderFactory
(
bitmap
.
getWidth
(),
bitmap
.
getHeight
()))
.
build
();
int
expectedFrameCount
=
2
;
EGLContext
currentContext
=
createOpenGlObjects
();
DefaultVideoFrameProcessor
.
Factory
videoFrameProcessorFactory
=
new
DefaultVideoFrameProcessor
.
Factory
.
Builder
()
.
setGlObjectsProvider
(
new
DefaultGlObjectsProvider
(
currentContext
))
.
build
();
Transformer
transformer
=
new
Transformer
.
Builder
(
context
)
.
setAssetLoaderFactory
(
new
TestTextureAssetLoaderFactory
(
bitmap
.
getWidth
(),
bitmap
.
getHeight
()))
.
setVideoFrameProcessorFactory
(
videoFrameProcessorFactory
)
.
build
();
EditedMediaItem
editedMediaItem
=
new
EditedMediaItem
.
Builder
(
MediaItem
.
fromUri
(
Uri
.
EMPTY
))
.
setDurationUs
(
C
.
MICROS_PER_SECOND
)
.
setEffects
(
new
Effects
(
/* audioProcessors= */
ImmutableList
.
of
(),
/* videoEffects= */
ImmutableList
.
of
(),
videoFrameProcessorFactory
))
.
build
();
int
texId
=
generateTextureFromBitmap
(
bitmap
);
HandlerThread
textureQueuingThread
=
new
HandlerThread
(
"textureQueuingThread"
);
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Effects.java
View file @
e10270e6
...
...
@@ -17,9 +17,7 @@ package com.google.android.exoplayer2.transformer;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.audio.AudioProcessor
;
import
com.google.android.exoplayer2.effect.DefaultVideoFrameProcessor
;
import
com.google.android.exoplayer2.util.Effect
;
import
com.google.android.exoplayer2.util.VideoFrameProcessor
;
import
com.google.common.collect.ImmutableList
;
import
java.util.List
;
...
...
@@ -42,35 +40,15 @@ public final class Effects {
* order of the list.
*/
public
final
ImmutableList
<
Effect
>
videoEffects
;
/**
* The {@link VideoFrameProcessor.Factory} for the {@link VideoFrameProcessor} to use when
* applying the {@code videoEffects} to the video frames.
*/
public
final
VideoFrameProcessor
.
Factory
videoFrameProcessorFactory
;
/**
* Creates an instance using a {@link DefaultVideoFrameProcessor.Factory}.
*
* <p>This is equivalent to calling {@link Effects#Effects(List, List,
* VideoFrameProcessor.Factory)} with a {@link DefaultVideoFrameProcessor.Factory}.
*/
public
Effects
(
List
<
AudioProcessor
>
audioProcessors
,
List
<
Effect
>
videoEffects
)
{
this
(
audioProcessors
,
videoEffects
,
new
DefaultVideoFrameProcessor
.
Factory
.
Builder
().
build
());
}
/**
* Creates an instance.
*
* @param audioProcessors The {@link #audioProcessors}.
* @param videoEffects The {@link #videoEffects}.
* @param videoFrameProcessorFactory The {@link #videoFrameProcessorFactory}.
*/
public
Effects
(
List
<
AudioProcessor
>
audioProcessors
,
List
<
Effect
>
videoEffects
,
VideoFrameProcessor
.
Factory
videoFrameProcessorFactory
)
{
public
Effects
(
List
<
AudioProcessor
>
audioProcessors
,
List
<
Effect
>
videoEffects
)
{
this
.
audioProcessors
=
ImmutableList
.
copyOf
(
audioProcessors
);
this
.
videoEffects
=
ImmutableList
.
copyOf
(
videoEffects
);
this
.
videoFrameProcessorFactory
=
videoFrameProcessorFactory
;
}
}
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SequenceAssetLoader.java
View file @
e10270e6
...
...
@@ -424,6 +424,11 @@ import java.util.concurrent.atomic.AtomicInteger;
}
@Override
public
void
setOnInputFrameProcessedListener
(
OnInputFrameProcessedListener
listener
)
{
sampleConsumer
.
setOnInputFrameProcessedListener
(
listener
);
}
@Override
public
boolean
queueInputTexture
(
int
texId
,
long
presentationTimeUs
)
{
long
globalTimestampUs
=
totalDurationUs
+
presentationTimeUs
;
if
(
isLooping
&&
globalTimestampUs
>=
maxSequenceDurationUs
)
{
...
...
@@ -437,11 +442,6 @@ import java.util.concurrent.atomic.AtomicInteger;
}
@Override
public
void
setOnInputFrameProcessedListener
(
OnInputFrameProcessedListener
listener
)
{
sampleConsumer
.
setOnInputFrameProcessedListener
(
listener
);
}
@Override
public
Surface
getInputSurface
()
{
return
sampleConsumer
.
getInputSurface
();
}
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java
View file @
e10270e6
...
...
@@ -272,12 +272,16 @@ public final class Transformer {
}
/**
* @deprecated Set the {@link VideoFrameProcessor.Factory} in an {@link EditedMediaItem}, and
* pass it to {@link #start(EditedMediaItem, String)} instead.
* Sets the factory to be used to create {@link VideoFrameProcessor} instances.
*
* <p>The default value is a {@link DefaultVideoFrameProcessor.Factory} built with default
* values.
*
* @param videoFrameProcessorFactory A {@link VideoFrameProcessor.Factory}.
* @return This builder.
*/
@CanIgnoreReturnValue
@Deprecated
public
Builder
setFrameProcessorFactory
(
public
Builder
setVideoFrameProcessorFactory
(
VideoFrameProcessor
.
Factory
videoFrameProcessorFactory
)
{
this
.
videoFrameProcessorFactory
=
videoFrameProcessorFactory
;
return
this
;
...
...
@@ -719,6 +723,7 @@ public final class Transformer {
path
,
transformationRequest
,
assetLoaderFactory
,
videoFrameProcessorFactory
,
encoderFactory
,
muxerFactory
,
transformerInternalListener
,
...
...
@@ -797,7 +802,7 @@ public final class Transformer {
.
setRemoveAudio
(
removeAudio
)
.
setRemoveVideo
(
removeVideo
)
.
setFlattenForSlowMotion
(
flattenForSlowMotion
)
.
setEffects
(
new
Effects
(
audioProcessors
,
videoEffects
,
videoFrameProcessorFactory
))
.
setEffects
(
new
Effects
(
audioProcessors
,
videoEffects
))
.
build
();
start
(
editedMediaItem
,
path
);
}
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java
View file @
e10270e6
...
...
@@ -47,6 +47,7 @@ import com.google.android.exoplayer2.util.DebugViewProvider;
import
com.google.android.exoplayer2.util.Effect
;
import
com.google.android.exoplayer2.util.HandlerWrapper
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.VideoFrameProcessor
;
import
com.google.common.collect.ImmutableList
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
...
...
@@ -131,6 +132,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
String
outputPath
,
TransformationRequest
transformationRequest
,
AssetLoader
.
Factory
assetLoaderFactory
,
VideoFrameProcessor
.
Factory
videoFrameProcessorFactory
,
Codec
.
EncoderFactory
encoderFactory
,
Muxer
.
Factory
muxerFactory
,
Listener
listener
,
...
...
@@ -154,6 +156,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
/* sequenceIndex= */
i
,
composition
,
transformationRequest
,
videoFrameProcessorFactory
,
fallbackListener
,
debugViewProvider
);
EditedMediaItemSequence
sequence
=
composition
.
sequences
.
get
(
i
);
...
...
@@ -444,6 +447,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private
final
ImmutableList
<
EditedMediaItem
>
editedMediaItems
;
private
final
Composition
composition
;
private
final
TransformationRequest
transformationRequest
;
private
final
VideoFrameProcessor
.
Factory
videoFrameProcessorFactory
;
private
final
FallbackListener
fallbackListener
;
private
final
DebugViewProvider
debugViewProvider
;
private
final
Map
<
Integer
,
AddedTrackInfo
>
addedTrackInfoByTrackType
;
...
...
@@ -454,12 +458,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
int
sequenceIndex
,
Composition
composition
,
TransformationRequest
transformationRequest
,
VideoFrameProcessor
.
Factory
videoFrameProcessorFactory
,
FallbackListener
fallbackListener
,
DebugViewProvider
debugViewProvider
)
{
this
.
sequenceIndex
=
sequenceIndex
;
editedMediaItems
=
composition
.
sequences
.
get
(
sequenceIndex
).
editedMediaItems
;
this
.
composition
=
composition
;
this
.
transformationRequest
=
transformationRequest
;
this
.
videoFrameProcessorFactory
=
videoFrameProcessorFactory
;
this
.
fallbackListener
=
fallbackListener
;
this
.
debugViewProvider
=
debugViewProvider
;
addedTrackInfoByTrackType
=
new
HashMap
<>();
...
...
@@ -565,7 +571,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
transformationRequest
,
firstEditedMediaItem
.
effects
.
videoEffects
,
compositionPresentation
,
firstEditedMediaItem
.
effects
.
videoFrameProcessorFactory
,
videoFrameProcessorFactory
,
encoderFactory
,
muxerWrapper
,
/* errorConsumer= */
this
::
onError
,
...
...
library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TextureAssetLoaderTest.java
View file @
e10270e6
...
...
@@ -135,14 +135,14 @@ public class TextureAssetLoaderTest {
private
static
final
class
FakeSampleConsumer
implements
SampleConsumer
{
@Override
public
void
setOnInputFrameProcessedListener
(
OnInputFrameProcessedListener
listener
)
{}
@Override
public
boolean
queueInputTexture
(
int
texId
,
long
presentationTimeUs
)
{
return
true
;
}
@Override
public
void
setOnInputFrameProcessedListener
(
OnInputFrameProcessedListener
listener
)
{}
@Override
public
void
signalEndOfVideoInput
()
{}
}
}
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