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
90de454e
authored
Feb 03, 2023
by
kimvde
Committed by
microkatz
Feb 08, 2023
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Adapt TransformationResult for multi-asset
PiperOrigin-RevId: 506898392
parent
937fcf9c
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
113 additions
and
42 deletions
library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java
library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/TransformationTestResult.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/CompositeAssetLoader.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationResult.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java
library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java
View file @
90de454e
...
@@ -26,6 +26,7 @@ import android.os.Build;
...
@@ -26,6 +26,7 @@ import android.os.Build;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecInfo
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecInfo
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecUtil
;
import
com.google.android.exoplayer2.mediacodec.MediaCodecUtil
;
import
com.google.android.exoplayer2.util.Log
;
import
com.google.android.exoplayer2.util.Log
;
...
@@ -36,6 +37,7 @@ import com.google.common.collect.ImmutableList;
...
@@ -36,6 +37,7 @@ import com.google.common.collect.ImmutableList;
import
java.io.File
;
import
java.io.File
;
import
java.io.FileWriter
;
import
java.io.FileWriter
;
import
java.io.IOException
;
import
java.io.IOException
;
import
org.json.JSONArray
;
import
org.json.JSONException
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
...
@@ -502,6 +504,31 @@ public final class AndroidTestUtil {
...
@@ -502,6 +504,31 @@ public final class AndroidTestUtil {
}
}
/**
/**
* Creates a {@link JSONArray} from {@link TransformationResult.ProcessedInput processed inputs}.
*
* @param processedInputs The list of {@link TransformationResult.ProcessedInput} instances.
* @return A {@link JSONArray} containing {@link JSONObject} instances representing the {@link
* TransformationResult.ProcessedInput} instances.
*/
public
static
JSONArray
processedInputsAsJsonArray
(
ImmutableList
<
TransformationResult
.
ProcessedInput
>
processedInputs
)
throws
JSONException
{
JSONArray
jsonArray
=
new
JSONArray
();
for
(
int
i
=
0
;
i
<
processedInputs
.
size
();
i
++)
{
TransformationResult
.
ProcessedInput
processedInput
=
processedInputs
.
get
(
i
);
JSONObject
jsonObject
=
new
JSONObject
();
@Nullable
MediaItem
.
LocalConfiguration
localConfiguration
=
processedInput
.
mediaItem
.
localConfiguration
;
if
(
localConfiguration
!=
null
)
{
jsonObject
.
put
(
"mediaItemUri"
,
localConfiguration
.
uri
);
}
jsonObject
.
putOpt
(
"audioDecoderName"
,
processedInput
.
audioDecoderName
);
jsonObject
.
putOpt
(
"videoDecoderName"
,
processedInput
.
videoDecoderName
);
jsonArray
.
put
(
jsonObject
);
}
return
jsonArray
;
}
/**
* Creates a {@link JSONObject} from the {@link Exception}.
* Creates a {@link JSONObject} from the {@link Exception}.
*
*
* <p>If the exception is a {@link TransformationException}, {@code errorCode} is included.
* <p>If the exception is a {@link TransformationException}, {@code errorCode} is included.
...
...
library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/TransformationTestResult.java
View file @
90de454e
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
package
com
.
google
.
android
.
exoplayer2
.
transformer
;
package
com
.
google
.
android
.
exoplayer2
.
transformer
;
import
static
com
.
google
.
android
.
exoplayer2
.
transformer
.
AndroidTestUtil
.
exceptionAsJsonObject
;
import
static
com
.
google
.
android
.
exoplayer2
.
transformer
.
AndroidTestUtil
.
exceptionAsJsonObject
;
import
static
com
.
google
.
android
.
exoplayer2
.
transformer
.
AndroidTestUtil
.
processedInputsAsJsonArray
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
...
@@ -156,19 +157,22 @@ public class TransformationTestResult {
...
@@ -156,19 +157,22 @@ public class TransformationTestResult {
public
JSONObject
asJsonObject
()
throws
JSONException
{
public
JSONObject
asJsonObject
()
throws
JSONException
{
JSONObject
jsonObject
=
JSONObject
jsonObject
=
new
JSONObject
()
new
JSONObject
()
.
putOpt
(
"audioDecoderName"
,
transformationResult
.
audioDecoderName
)
.
putOpt
(
"audioEncoderName"
,
transformationResult
.
audioEncoderName
)
.
putOpt
(
"audioEncoderName"
,
transformationResult
.
audioEncoderName
)
.
putOpt
(
.
putOpt
(
"fallbackDetails"
,
fallbackDetails
!=
null
?
fallbackDetails
.
asJsonObject
()
:
null
)
"fallbackDetails"
,
fallbackDetails
!=
null
?
fallbackDetails
.
asJsonObject
()
:
null
)
.
putOpt
(
"filePath"
,
filePath
)
.
putOpt
(
"filePath"
,
filePath
)
.
putOpt
(
"colorInfo"
,
transformationResult
.
colorInfo
)
.
putOpt
(
"colorInfo"
,
transformationResult
.
colorInfo
)
.
putOpt
(
"videoDecoderName"
,
transformationResult
.
videoDecoderName
)
.
putOpt
(
"videoEncoderName"
,
transformationResult
.
videoEncoderName
)
.
putOpt
(
"videoEncoderName"
,
transformationResult
.
videoEncoderName
)
.
putOpt
(
.
putOpt
(
"testException"
,
"testException"
,
exceptionAsJsonObject
(
transformationResult
.
transformationException
))
exceptionAsJsonObject
(
transformationResult
.
transformationException
))
.
putOpt
(
"analysisException"
,
exceptionAsJsonObject
(
analysisException
));
.
putOpt
(
"analysisException"
,
exceptionAsJsonObject
(
analysisException
));
if
(!
transformationResult
.
processedInputs
.
isEmpty
())
{
jsonObject
.
put
(
"processedInputs"
,
processedInputsAsJsonArray
(
transformationResult
.
processedInputs
));
}
if
(
transformationResult
.
averageAudioBitrate
!=
C
.
RATE_UNSET_INT
)
{
if
(
transformationResult
.
averageAudioBitrate
!=
C
.
RATE_UNSET_INT
)
{
jsonObject
.
put
(
"averageAudioBitrate"
,
transformationResult
.
averageAudioBitrate
);
jsonObject
.
put
(
"averageAudioBitrate"
,
transformationResult
.
averageAudioBitrate
);
}
}
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/CompositeAssetLoader.java
View file @
90de454e
...
@@ -32,6 +32,7 @@ import com.google.android.exoplayer2.util.Clock;
...
@@ -32,6 +32,7 @@ import com.google.android.exoplayer2.util.Clock;
import
com.google.android.exoplayer2.util.HandlerWrapper
;
import
com.google.android.exoplayer2.util.HandlerWrapper
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.video.ColorInfo
;
import
com.google.android.exoplayer2.video.ColorInfo
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableMap
;
import
com.google.common.collect.ImmutableMap
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
...
@@ -52,10 +53,12 @@ import java.util.concurrent.atomic.AtomicLong;
...
@@ -52,10 +53,12 @@ import java.util.concurrent.atomic.AtomicLong;
private
final
Listener
compositeAssetLoaderListener
;
private
final
Listener
compositeAssetLoaderListener
;
private
final
Map
<
Integer
,
SampleConsumer
>
sampleConsumersByTrackType
;
private
final
Map
<
Integer
,
SampleConsumer
>
sampleConsumersByTrackType
;
private
final
Map
<
Integer
,
OnMediaItemChangedListener
>
mediaItemChangedListenersByTrackType
;
private
final
Map
<
Integer
,
OnMediaItemChangedListener
>
mediaItemChangedListenersByTrackType
;
private
final
ImmutableList
.
Builder
<
TransformationResult
.
ProcessedInput
>
processedInputsBuilder
;
private
final
AtomicLong
totalDurationUs
;
private
final
AtomicLong
totalDurationUs
;
private
final
AtomicInteger
nonEndedTracks
;
private
final
AtomicInteger
nonEndedTracks
;
private
AssetLoader
currentAssetLoader
;
private
AssetLoader
currentAssetLoader
;
private
int
processedInputsSize
;
private
volatile
long
currentDurationUs
;
private
volatile
long
currentDurationUs
;
...
@@ -72,6 +75,7 @@ import java.util.concurrent.atomic.AtomicLong;
...
@@ -72,6 +75,7 @@ import java.util.concurrent.atomic.AtomicLong;
handler
=
clock
.
createHandler
(
looper
,
/* callback= */
null
);
handler
=
clock
.
createHandler
(
looper
,
/* callback= */
null
);
sampleConsumersByTrackType
=
new
HashMap
<>();
sampleConsumersByTrackType
=
new
HashMap
<>();
mediaItemChangedListenersByTrackType
=
new
HashMap
<>();
mediaItemChangedListenersByTrackType
=
new
HashMap
<>();
processedInputsBuilder
=
new
ImmutableList
.
Builder
<>();
totalDurationUs
=
new
AtomicLong
();
totalDurationUs
=
new
AtomicLong
();
nonEndedTracks
=
new
AtomicInteger
();
nonEndedTracks
=
new
AtomicInteger
();
// It's safe to use "this" because we don't start the AssetLoader before exiting the
// It's safe to use "this" because we don't start the AssetLoader before exiting the
...
@@ -105,10 +109,18 @@ import java.util.concurrent.atomic.AtomicLong;
...
@@ -105,10 +109,18 @@ import java.util.concurrent.atomic.AtomicLong;
@Override
@Override
public
ImmutableMap
<
Integer
,
String
>
getDecoderNames
()
{
public
ImmutableMap
<
Integer
,
String
>
getDecoderNames
()
{
// TODO(b/252537210): update TransformationResult to contain all the decoders used.
return
currentAssetLoader
.
getDecoderNames
();
return
currentAssetLoader
.
getDecoderNames
();
}
}
/**
* Returns the partially or entirely {@linkplain TransformationResult.ProcessedInput processed
* inputs}.
*/
public
ImmutableList
<
TransformationResult
.
ProcessedInput
>
getProcessedInputs
()
{
addCurrentProcessedInput
();
return
processedInputsBuilder
.
build
();
}
@Override
@Override
public
void
release
()
{
public
void
release
()
{
currentAssetLoader
.
release
();
currentAssetLoader
.
release
();
...
@@ -193,6 +205,18 @@ import java.util.concurrent.atomic.AtomicLong;
...
@@ -193,6 +205,18 @@ import java.util.concurrent.atomic.AtomicLong;
compositeAssetLoaderListener
.
onError
(
exception
);
compositeAssetLoaderListener
.
onError
(
exception
);
}
}
private
void
addCurrentProcessedInput
()
{
int
currentMediaItemIndex
=
this
.
currentMediaItemIndex
.
get
();
if
(
currentMediaItemIndex
>=
processedInputsSize
)
{
MediaItem
mediaItem
=
editedMediaItems
.
get
(
currentMediaItemIndex
).
mediaItem
;
ImmutableMap
<
Integer
,
String
>
decoders
=
currentAssetLoader
.
getDecoderNames
();
processedInputsBuilder
.
add
(
new
TransformationResult
.
ProcessedInput
(
mediaItem
,
decoders
.
get
(
C
.
TRACK_TYPE_AUDIO
),
decoders
.
get
(
C
.
TRACK_TYPE_VIDEO
)));
processedInputsSize
++;
}
}
private
final
class
SampleConsumerWrapper
implements
SampleConsumer
{
private
final
class
SampleConsumerWrapper
implements
SampleConsumer
{
private
final
SampleConsumer
sampleConsumer
;
private
final
SampleConsumer
sampleConsumer
;
...
@@ -270,6 +294,7 @@ import java.util.concurrent.atomic.AtomicLong;
...
@@ -270,6 +294,7 @@ import java.util.concurrent.atomic.AtomicLong;
totalDurationUs
.
addAndGet
(
currentDurationUs
);
totalDurationUs
.
addAndGet
(
currentDurationUs
);
handler
.
post
(
handler
.
post
(
()
->
{
()
->
{
addCurrentProcessedInput
();
currentAssetLoader
.
release
();
currentAssetLoader
.
release
();
EditedMediaItem
editedMediaItem
=
EditedMediaItem
editedMediaItem
=
editedMediaItems
.
get
(
currentMediaItemIndex
.
incrementAndGet
());
editedMediaItems
.
get
(
currentMediaItemIndex
.
incrementAndGet
());
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationResult.java
View file @
90de454e
...
@@ -20,32 +20,36 @@ import static com.google.android.exoplayer2.util.Assertions.checkArgument;
...
@@ -20,32 +20,36 @@ import static com.google.android.exoplayer2.util.Assertions.checkArgument;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.video.ColorInfo
;
import
com.google.android.exoplayer2.video.ColorInfo
;
import
com.google.common.collect.ImmutableList
;
import
com.google.errorprone.annotations.CanIgnoreReturnValue
;
import
com.google.errorprone.annotations.CanIgnoreReturnValue
;
import
java.util.Objects
;
import
java.util.Objects
;
import
org.checkerframework.checker.nullness.qual.MonotonicNonNull
;
/** Information about the result of a transformation. */
/** Information about the result of a transformation. */
public
final
class
TransformationResult
{
public
final
class
TransformationResult
{
/** A builder for {@link TransformationResult} instances. */
/** A builder for {@link TransformationResult} instances. */
public
static
final
class
Builder
{
public
static
final
class
Builder
{
private
ImmutableList
<
ProcessedInput
>
processedInputs
;
private
long
durationMs
;
private
long
durationMs
;
private
long
fileSizeBytes
;
private
long
fileSizeBytes
;
private
int
averageAudioBitrate
;
private
int
averageAudioBitrate
;
private
int
channelCount
;
private
int
channelCount
;
private
@C
.
PcmEncoding
int
pcmEncoding
;
private
@C
.
PcmEncoding
int
pcmEncoding
;
private
int
sampleRate
;
private
int
sampleRate
;
@Nullable
private
String
audioDecoderName
;
@Nullable
private
String
audioEncoderName
;
@Nullable
private
String
audioEncoderName
;
private
int
averageVideoBitrate
;
private
int
averageVideoBitrate
;
@Nullable
ColorInfo
colorInfo
;
@Nullable
ColorInfo
colorInfo
;
private
int
height
;
private
int
height
;
private
int
width
;
private
int
width
;
private
int
videoFrameCount
;
private
int
videoFrameCount
;
@Nullable
private
String
videoDecoderName
;
@Nullable
private
String
videoEncoderName
;
@Nullable
private
String
videoEncoderName
;
@Nullable
private
TransformationException
transformationException
;
@Nullable
private
TransformationException
transformationException
;
/** Creates a builder. */
public
Builder
()
{
public
Builder
()
{
processedInputs
=
ImmutableList
.
of
();
durationMs
=
C
.
TIME_UNSET
;
durationMs
=
C
.
TIME_UNSET
;
fileSizeBytes
=
C
.
LENGTH_UNSET
;
fileSizeBytes
=
C
.
LENGTH_UNSET
;
averageAudioBitrate
=
C
.
RATE_UNSET_INT
;
averageAudioBitrate
=
C
.
RATE_UNSET_INT
;
...
@@ -57,6 +61,13 @@ public final class TransformationResult {
...
@@ -57,6 +61,13 @@ public final class TransformationResult {
width
=
C
.
LENGTH_UNSET
;
width
=
C
.
LENGTH_UNSET
;
}
}
/** Sets the {@linkplain ProcessedInput processed inputs}. */
@CanIgnoreReturnValue
public
Builder
setProcessedInputs
(
ImmutableList
<
ProcessedInput
>
processedInputs
)
{
this
.
processedInputs
=
processedInputs
;
return
this
;
}
/**
/**
* Sets the duration of the output in milliseconds.
* Sets the duration of the output in milliseconds.
*
*
...
@@ -124,13 +135,6 @@ public final class TransformationResult {
...
@@ -124,13 +135,6 @@ public final class TransformationResult {
return
this
;
return
this
;
}
}
/** Sets the name of the audio decoder used. */
@CanIgnoreReturnValue
public
Builder
setAudioDecoderName
(
@Nullable
String
audioDecoderName
)
{
this
.
audioDecoderName
=
audioDecoderName
;
return
this
;
}
/** Sets the name of the audio encoder used. */
/** Sets the name of the audio encoder used. */
@CanIgnoreReturnValue
@CanIgnoreReturnValue
public
Builder
setAudioEncoderName
(
@Nullable
String
audioEncoderName
)
{
public
Builder
setAudioEncoderName
(
@Nullable
String
audioEncoderName
)
{
...
@@ -193,13 +197,6 @@ public final class TransformationResult {
...
@@ -193,13 +197,6 @@ public final class TransformationResult {
return
this
;
return
this
;
}
}
/** Sets the name of the video decoder used. */
@CanIgnoreReturnValue
public
Builder
setVideoDecoderName
(
@Nullable
String
videoDecoderName
)
{
this
.
videoDecoderName
=
videoDecoderName
;
return
this
;
}
/** Sets the name of the video encoder used. */
/** Sets the name of the video encoder used. */
@CanIgnoreReturnValue
@CanIgnoreReturnValue
public
Builder
setVideoEncoderName
(
@Nullable
String
videoEncoderName
)
{
public
Builder
setVideoEncoderName
(
@Nullable
String
videoEncoderName
)
{
...
@@ -215,27 +212,54 @@ public final class TransformationResult {
...
@@ -215,27 +212,54 @@ public final class TransformationResult {
return
this
;
return
this
;
}
}
/** Builds a {@link TransformationResult} instance. */
public
TransformationResult
build
()
{
public
TransformationResult
build
()
{
return
new
TransformationResult
(
return
new
TransformationResult
(
processedInputs
,
durationMs
,
durationMs
,
fileSizeBytes
,
fileSizeBytes
,
averageAudioBitrate
,
averageAudioBitrate
,
channelCount
,
channelCount
,
pcmEncoding
,
pcmEncoding
,
sampleRate
,
sampleRate
,
audioDecoderName
,
audioEncoderName
,
audioEncoderName
,
averageVideoBitrate
,
averageVideoBitrate
,
colorInfo
,
colorInfo
,
height
,
height
,
width
,
width
,
videoFrameCount
,
videoFrameCount
,
videoDecoderName
,
videoEncoderName
,
videoEncoderName
,
transformationException
);
transformationException
);
}
}
}
}
/** An input entirely or partially processed. */
public
static
final
class
ProcessedInput
{
/** The processed {@link MediaItem}. */
public
final
MediaItem
mediaItem
;
/**
* The name of the audio decoder used to process {@code mediaItem}. This field is {@code null}
* if no audio decoder was used.
*/
public
final
@MonotonicNonNull
String
audioDecoderName
;
/**
* The name of the video decoder used to process {@code mediaItem}. This field is {@code null}
* if no video decoder was used.
*/
public
final
@MonotonicNonNull
String
videoDecoderName
;
/** Creates an instance. */
public
ProcessedInput
(
MediaItem
mediaItem
,
@Nullable
String
audioDecoderName
,
@Nullable
String
videoDecoderName
)
{
this
.
mediaItem
=
mediaItem
;
this
.
audioDecoderName
=
audioDecoderName
;
this
.
videoDecoderName
=
videoDecoderName
;
}
}
/** The list of {@linkplain ProcessedInput processed inputs}. */
public
final
ImmutableList
<
ProcessedInput
>
processedInputs
;
/** The duration of the file in milliseconds, or {@link C#TIME_UNSET} if unset or unknown. */
/** The duration of the file in milliseconds, or {@link C#TIME_UNSET} if unset or unknown. */
public
final
long
durationMs
;
public
final
long
durationMs
;
/** The size of the file in bytes, or {@link C#LENGTH_UNSET} if unset or unknown. */
/** The size of the file in bytes, or {@link C#LENGTH_UNSET} if unset or unknown. */
...
@@ -247,12 +271,10 @@ public final class TransformationResult {
...
@@ -247,12 +271,10 @@ public final class TransformationResult {
public
final
int
averageAudioBitrate
;
public
final
int
averageAudioBitrate
;
/** The channel count of the audio, or {@link C#LENGTH_UNSET} if unset or unknown. */
/** The channel count of the audio, or {@link C#LENGTH_UNSET} if unset or unknown. */
public
final
int
channelCount
;
public
final
int
channelCount
;
/* The {@link C.PcmEncoding} of the audio, or {@link Format#NO_VALUE} if unset or unknown. */
/*
*
The {@link C.PcmEncoding} of the audio, or {@link Format#NO_VALUE} if unset or unknown. */
public
final
@C
.
PcmEncoding
int
pcmEncoding
;
public
final
@C
.
PcmEncoding
int
pcmEncoding
;
/** The sample rate of the audio, or {@link C#RATE_UNSET_INT} if unset or unknown. */
/** The sample rate of the audio, or {@link C#RATE_UNSET_INT} if unset or unknown. */
public
final
int
sampleRate
;
public
final
int
sampleRate
;
/** The name of the audio decoder used, or {@code null} if none were used. */
@Nullable
public
final
String
audioDecoderName
;
/** The name of the audio encoder used, or {@code null} if none were used. */
/** The name of the audio encoder used, or {@code null} if none were used. */
@Nullable
public
final
String
audioEncoderName
;
@Nullable
public
final
String
audioEncoderName
;
...
@@ -268,8 +290,6 @@ public final class TransformationResult {
...
@@ -268,8 +290,6 @@ public final class TransformationResult {
public
final
int
width
;
public
final
int
width
;
/** The number of video frames. */
/** The number of video frames. */
public
final
int
videoFrameCount
;
public
final
int
videoFrameCount
;
/** The name of the video decoder used, or {@code null} if none were used. */
@Nullable
public
final
String
videoDecoderName
;
/** The name of the video encoder used, or {@code null} if none were used. */
/** The name of the video encoder used, or {@code null} if none were used. */
@Nullable
public
final
String
videoEncoderName
;
@Nullable
public
final
String
videoEncoderName
;
...
@@ -280,56 +300,53 @@ public final class TransformationResult {
...
@@ -280,56 +300,53 @@ public final class TransformationResult {
@Nullable
public
final
TransformationException
transformationException
;
@Nullable
public
final
TransformationException
transformationException
;
private
TransformationResult
(
private
TransformationResult
(
ImmutableList
<
ProcessedInput
>
processedInputs
,
long
durationMs
,
long
durationMs
,
long
fileSizeBytes
,
long
fileSizeBytes
,
int
averageAudioBitrate
,
int
averageAudioBitrate
,
int
channelCount
,
int
channelCount
,
@C
.
PcmEncoding
int
pcmEncoding
,
@C
.
PcmEncoding
int
pcmEncoding
,
int
sampleRate
,
int
sampleRate
,
@Nullable
String
audioDecoderName
,
@Nullable
String
audioEncoderName
,
@Nullable
String
audioEncoderName
,
int
averageVideoBitrate
,
int
averageVideoBitrate
,
@Nullable
ColorInfo
colorInfo
,
@Nullable
ColorInfo
colorInfo
,
int
height
,
int
height
,
int
width
,
int
width
,
int
videoFrameCount
,
int
videoFrameCount
,
@Nullable
String
videoDecoderName
,
@Nullable
String
videoEncoderName
,
@Nullable
String
videoEncoderName
,
@Nullable
TransformationException
transformationException
)
{
@Nullable
TransformationException
transformationException
)
{
this
.
processedInputs
=
processedInputs
;
this
.
durationMs
=
durationMs
;
this
.
durationMs
=
durationMs
;
this
.
fileSizeBytes
=
fileSizeBytes
;
this
.
fileSizeBytes
=
fileSizeBytes
;
this
.
averageAudioBitrate
=
averageAudioBitrate
;
this
.
averageAudioBitrate
=
averageAudioBitrate
;
this
.
channelCount
=
channelCount
;
this
.
channelCount
=
channelCount
;
this
.
pcmEncoding
=
pcmEncoding
;
this
.
pcmEncoding
=
pcmEncoding
;
this
.
sampleRate
=
sampleRate
;
this
.
sampleRate
=
sampleRate
;
this
.
audioDecoderName
=
audioDecoderName
;
this
.
audioEncoderName
=
audioEncoderName
;
this
.
audioEncoderName
=
audioEncoderName
;
this
.
averageVideoBitrate
=
averageVideoBitrate
;
this
.
averageVideoBitrate
=
averageVideoBitrate
;
this
.
colorInfo
=
colorInfo
;
this
.
colorInfo
=
colorInfo
;
this
.
height
=
height
;
this
.
height
=
height
;
this
.
width
=
width
;
this
.
width
=
width
;
this
.
videoFrameCount
=
videoFrameCount
;
this
.
videoFrameCount
=
videoFrameCount
;
this
.
videoDecoderName
=
videoDecoderName
;
this
.
videoEncoderName
=
videoEncoderName
;
this
.
videoEncoderName
=
videoEncoderName
;
this
.
transformationException
=
transformationException
;
this
.
transformationException
=
transformationException
;
}
}
public
Builder
buildUpon
()
{
public
Builder
buildUpon
()
{
return
new
Builder
()
return
new
Builder
()
.
setProcessedInputs
(
processedInputs
)
.
setDurationMs
(
durationMs
)
.
setDurationMs
(
durationMs
)
.
setFileSizeBytes
(
fileSizeBytes
)
.
setFileSizeBytes
(
fileSizeBytes
)
.
setAverageAudioBitrate
(
averageAudioBitrate
)
.
setAverageAudioBitrate
(
averageAudioBitrate
)
.
setChannelCount
(
channelCount
)
.
setChannelCount
(
channelCount
)
.
setPcmEncoding
(
pcmEncoding
)
.
setPcmEncoding
(
pcmEncoding
)
.
setSampleRate
(
sampleRate
)
.
setSampleRate
(
sampleRate
)
.
setAudioDecoderName
(
audioDecoderName
)
.
setAudioEncoderName
(
audioEncoderName
)
.
setAudioEncoderName
(
audioEncoderName
)
.
setAverageVideoBitrate
(
averageVideoBitrate
)
.
setAverageVideoBitrate
(
averageVideoBitrate
)
.
setColorInfo
(
colorInfo
)
.
setColorInfo
(
colorInfo
)
.
setHeight
(
height
)
.
setHeight
(
height
)
.
setWidth
(
width
)
.
setWidth
(
width
)
.
setVideoFrameCount
(
videoFrameCount
)
.
setVideoFrameCount
(
videoFrameCount
)
.
setVideoDecoderName
(
videoDecoderName
)
.
setVideoEncoderName
(
videoEncoderName
)
.
setVideoEncoderName
(
videoEncoderName
)
.
setTransformationException
(
transformationException
);
.
setTransformationException
(
transformationException
);
}
}
...
@@ -343,40 +360,38 @@ public final class TransformationResult {
...
@@ -343,40 +360,38 @@ public final class TransformationResult {
return
false
;
return
false
;
}
}
TransformationResult
result
=
(
TransformationResult
)
o
;
TransformationResult
result
=
(
TransformationResult
)
o
;
return
durationMs
==
result
.
durationMs
return
Objects
.
equals
(
processedInputs
,
result
.
processedInputs
)
&&
durationMs
==
result
.
durationMs
&&
fileSizeBytes
==
result
.
fileSizeBytes
&&
fileSizeBytes
==
result
.
fileSizeBytes
&&
averageAudioBitrate
==
result
.
averageAudioBitrate
&&
averageAudioBitrate
==
result
.
averageAudioBitrate
&&
channelCount
==
result
.
channelCount
&&
channelCount
==
result
.
channelCount
&&
pcmEncoding
==
result
.
pcmEncoding
&&
pcmEncoding
==
result
.
pcmEncoding
&&
sampleRate
==
result
.
sampleRate
&&
sampleRate
==
result
.
sampleRate
&&
Objects
.
equals
(
audioDecoderName
,
result
.
audioDecoderName
)
&&
Objects
.
equals
(
audioEncoderName
,
result
.
audioEncoderName
)
&&
Objects
.
equals
(
audioEncoderName
,
result
.
audioEncoderName
)
&&
averageVideoBitrate
==
result
.
averageVideoBitrate
&&
averageVideoBitrate
==
result
.
averageVideoBitrate
&&
Objects
.
equals
(
colorInfo
,
result
.
colorInfo
)
&&
Objects
.
equals
(
colorInfo
,
result
.
colorInfo
)
&&
height
==
result
.
height
&&
height
==
result
.
height
&&
width
==
result
.
width
&&
width
==
result
.
width
&&
videoFrameCount
==
result
.
videoFrameCount
&&
videoFrameCount
==
result
.
videoFrameCount
&&
Objects
.
equals
(
videoDecoderName
,
result
.
videoDecoderName
)
&&
Objects
.
equals
(
videoEncoderName
,
result
.
videoEncoderName
)
&&
Objects
.
equals
(
videoEncoderName
,
result
.
videoEncoderName
)
&&
Objects
.
equals
(
transformationException
,
result
.
transformationException
);
&&
Objects
.
equals
(
transformationException
,
result
.
transformationException
);
}
}
@Override
@Override
public
int
hashCode
()
{
public
int
hashCode
()
{
int
result
=
(
int
)
durationMs
;
int
result
=
Objects
.
hashCode
(
processedInputs
);
result
=
31
*
result
+
(
int
)
durationMs
;
result
=
31
*
result
+
(
int
)
fileSizeBytes
;
result
=
31
*
result
+
(
int
)
fileSizeBytes
;
result
=
31
*
result
+
averageAudioBitrate
;
result
=
31
*
result
+
averageAudioBitrate
;
result
=
31
*
result
+
channelCount
;
result
=
31
*
result
+
channelCount
;
result
=
31
*
result
+
pcmEncoding
;
result
=
31
*
result
+
pcmEncoding
;
result
=
31
*
result
+
sampleRate
;
result
=
31
*
result
+
sampleRate
;
result
=
31
*
result
+
Objects
.
hashCode
(
audioDecoderName
);
result
=
31
*
result
+
Objects
.
hashCode
(
audioEncoderName
);
result
=
31
*
result
+
Objects
.
hashCode
(
audioEncoderName
);
result
=
31
*
result
+
averageVideoBitrate
;
result
=
31
*
result
+
averageVideoBitrate
;
result
=
31
*
result
+
Objects
.
hashCode
(
colorInfo
);
result
=
31
*
result
+
Objects
.
hashCode
(
colorInfo
);
result
=
31
*
result
+
height
;
result
=
31
*
result
+
height
;
result
=
31
*
result
+
width
;
result
=
31
*
result
+
width
;
result
=
31
*
result
+
videoFrameCount
;
result
=
31
*
result
+
videoFrameCount
;
result
=
31
*
result
+
Objects
.
hashCode
(
videoDecoderName
);
result
=
31
*
result
+
Objects
.
hashCode
(
videoEncoderName
);
result
=
31
*
result
+
Objects
.
hashCode
(
videoEncoderName
);
result
=
31
*
result
+
Objects
.
hashCode
(
transformationException
);
result
=
31
*
result
+
Objects
.
hashCode
(
transformationException
);
return
result
;
return
result
;
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java
View file @
90de454e
...
@@ -43,7 +43,7 @@ import com.google.android.exoplayer2.util.Effect;
...
@@ -43,7 +43,7 @@ import com.google.android.exoplayer2.util.Effect;
import
com.google.android.exoplayer2.util.HandlerWrapper
;
import
com.google.android.exoplayer2.util.HandlerWrapper
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.Size
;
import
com.google.android.exoplayer2.util.Size
;
import
com.google.common.collect.Immutable
Map
;
import
com.google.common.collect.Immutable
List
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.RetentionPolicy
;
...
@@ -243,10 +243,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
...
@@ -243,10 +243,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private
void
endInternal
(
private
void
endInternal
(
@EndReason
int
endReason
,
@Nullable
TransformationException
transformationException
)
{
@EndReason
int
endReason
,
@Nullable
TransformationException
transformationException
)
{
ImmutableMap
<
Integer
,
String
>
decoderNames
=
compositeAssetLoader
.
getDecoderNames
();
ImmutableList
<
TransformationResult
.
ProcessedInput
>
processedInputs
=
compositeAssetLoader
.
getProcessedInputs
();
transformationResultBuilder
transformationResultBuilder
.
setAudioDecoderName
(
decoderNames
.
get
(
C
.
TRACK_TYPE_AUDIO
))
.
setProcessedInputs
(
processedInputs
)
.
setVideoDecoderName
(
decoderNames
.
get
(
C
.
TRACK_TYPE_VIDEO
))
.
setAudioEncoderName
(
encoderFactory
.
getAudioEncoderName
())
.
setAudioEncoderName
(
encoderFactory
.
getAudioEncoderName
())
.
setVideoEncoderName
(
encoderFactory
.
getVideoEncoderName
());
.
setVideoEncoderName
(
encoderFactory
.
getVideoEncoderName
());
...
...
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