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
93620e47
authored
Nov 01, 2021
by
tonihei
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'dev-v2' of
https://github.com/google/ExoPlayer
into dev-v2
parents
e77fa14e
70713c84
Hide whitespace changes
Inline
Side-by-side
Showing
50 changed files
with
442 additions
and
287 deletions
build.gradle
extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/Utils.java
library/common/src/main/java/com/google/android/exoplayer2/C.java
library/common/src/main/java/com/google/android/exoplayer2/Format.java
library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java
library/common/src/main/java/com/google/android/exoplayer2/MediaMetadata.java
library/common/src/main/java/com/google/android/exoplayer2/PlaybackException.java
library/common/src/main/java/com/google/android/exoplayer2/Player.java
library/common/src/main/java/com/google/android/exoplayer2/text/Cue.java
library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java
library/common/src/main/java/com/google/android/exoplayer2/util/MediaFormatUtil.java
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverridesTest.java
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionParametersTest.java
library/common/src/test/java/com/google/android/exoplayer2/util/MediaFormatUtilTest.java
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java
library/core/src/main/java/com/google/android/exoplayer2/MediaPeriodQueue.java
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java
library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java
library/core/src/main/java/com/google/android/exoplayer2/video/spherical/ProjectionRenderer.java
library/core/src/test/java/com/google/android/exoplayer2/MediaPeriodQueueTest.java
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/AesCipherDataSink.java → library/datasource/src/main/java/com/google/android/exoplayer2/upstream/crypto/AesCipherDataSink.java
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/AesCipherDataSource.java → library/datasource/src/main/java/com/google/android/exoplayer2/upstream/crypto/AesCipherDataSource.java
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/AesFlushingCipher.java → library/datasource/src/main/java/com/google/android/exoplayer2/upstream/crypto/AesFlushingCipher.java
library/common/src/main/java/com/google/android/exoplayer2/upstream/crypto/package-info.java → library/datasource/src/main/java/com/google/android/exoplayer2/upstream/crypto/package-info.java
library/datasource/src/test/java/com/google/android/exoplayer2/upstream/AesFlushingCipherTest.java → library/datasource/src/test/java/com/google/android/exoplayer2/upstream/crypto/AesFlushingCipherTest.java
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/TrackFragment.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameworkMuxer.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerAudioRenderer.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerBaseRenderer.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerMuxingVideoRenderer.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerTranscodingVideoRenderer.java
testdata/src/test/assets/audiosinkdumps/mka/bear-flac-16bit.mka.audiosink.dump
testdata/src/test/assets/audiosinkdumps/mka/bear-flac-24bit.mka.audiosink.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented.mp4.0.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented.mp4.unknown_length.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.0.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.1.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.2.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.3.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.unknown_length.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sei.mp4.0.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sei.mp4.unknown_length.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sideloaded_track.mp4.0.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sideloaded_track.mp4.unknown_length.dump
testdata/src/test/assets/extractordumps/mp4/sample_partially_fragmented.mp4.0.dump
testdata/src/test/assets/extractordumps/mp4/sample_partially_fragmented.mp4.unknown_length.dump
build.gradle
View file @
93620e47
...
@@ -17,7 +17,7 @@ buildscript {
...
@@ -17,7 +17,7 @@ buildscript {
mavenCentral
()
mavenCentral
()
}
}
dependencies
{
dependencies
{
classpath
'com.android.tools.build:gradle:7.0.
0
'
classpath
'com.android.tools.build:gradle:7.0.
3
'
classpath
'com.google.android.gms:strict-version-matcher-plugin:1.2.2'
classpath
'com.google.android.gms:strict-version-matcher-plugin:1.2.2'
}
}
}
}
...
...
extensions/media2/src/main/java/com/google/android/exoplayer2/ext/media2/Utils.java
View file @
93620e47
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
ext
.
media2
;
package
com
.
google
.
android
.
exoplayer2
.
ext
.
media2
;
import
android.annotation.SuppressLint
;
import
androidx.media.AudioAttributesCompat
;
import
androidx.media.AudioAttributesCompat
;
import
androidx.media2.common.SessionPlayer
;
import
androidx.media2.common.SessionPlayer
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player
;
...
@@ -24,6 +25,7 @@ import com.google.android.exoplayer2.audio.AudioAttributes;
...
@@ -24,6 +25,7 @@ import com.google.android.exoplayer2.audio.AudioAttributes;
/* package */
final
class
Utils
{
/* package */
final
class
Utils
{
/** Returns ExoPlayer audio attributes for the given audio attributes. */
/** Returns ExoPlayer audio attributes for the given audio attributes. */
@SuppressLint
(
"WrongConstant"
)
// AudioAttributesCompat.AttributeUsage is equal to C.AudioUsage
public
static
AudioAttributes
getAudioAttributes
(
AudioAttributesCompat
audioAttributesCompat
)
{
public
static
AudioAttributes
getAudioAttributes
(
AudioAttributesCompat
audioAttributesCompat
)
{
return
new
AudioAttributes
.
Builder
()
return
new
AudioAttributes
.
Builder
()
.
setContentType
(
audioAttributesCompat
.
getContentType
())
.
setContentType
(
audioAttributesCompat
.
getContentType
())
...
...
library/common/src/main/java/com/google/android/exoplayer2/C.java
View file @
93620e47
...
@@ -15,6 +15,13 @@
...
@@ -15,6 +15,13 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
;
package
com
.
google
.
android
.
exoplayer2
;
import
static
java
.
lang
.
annotation
.
ElementType
.
FIELD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
LOCAL_VARIABLE
;
import
static
java
.
lang
.
annotation
.
ElementType
.
METHOD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
PARAMETER
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
android.annotation.SuppressLint
;
import
android.content.Context
;
import
android.content.Context
;
import
android.media.AudioAttributes
;
import
android.media.AudioAttributes
;
import
android.media.AudioFormat
;
import
android.media.AudioFormat
;
...
@@ -29,7 +36,6 @@ import com.google.android.exoplayer2.util.MimeTypes;
...
@@ -29,7 +36,6 @@ import com.google.android.exoplayer2.util.MimeTypes;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.errorprone.annotations.InlineMe
;
import
com.google.errorprone.annotations.InlineMe
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
import
java.lang.annotation.Target
;
...
@@ -126,6 +132,7 @@ public final class C {
...
@@ -126,6 +132,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
(
TYPE_USE
)
@IntDef
(
@IntDef
(
open
=
true
,
open
=
true
,
value
=
{
value
=
{
...
@@ -268,8 +275,10 @@ public final class C {
...
@@ -268,8 +275,10 @@ public final class C {
/**
/**
* Stream types for an {@link android.media.AudioTrack}. One of {@link #STREAM_TYPE_ALARM}, {@link
* Stream types for an {@link android.media.AudioTrack}. One of {@link #STREAM_TYPE_ALARM}, {@link
* #STREAM_TYPE_DTMF}, {@link #STREAM_TYPE_MUSIC}, {@link #STREAM_TYPE_NOTIFICATION}, {@link
* #STREAM_TYPE_DTMF}, {@link #STREAM_TYPE_MUSIC}, {@link #STREAM_TYPE_NOTIFICATION}, {@link
* #STREAM_TYPE_RING}, {@link #STREAM_TYPE_SYSTEM} or {@link #STREAM_TYPE_VOICE_CALL}.
* #STREAM_TYPE_RING}, {@link #STREAM_TYPE_SYSTEM}, {@link #STREAM_TYPE_VOICE_CALL} or {@link
* #STREAM_TYPE_DEFAULT}.
*/
*/
@SuppressLint
(
"UniqueConstants"
)
// Intentional duplication to set STREAM_TYPE_DEFAULT.
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
@IntDef
({
...
@@ -279,7 +288,8 @@ public final class C {
...
@@ -279,7 +288,8 @@ public final class C {
STREAM_TYPE_NOTIFICATION
,
STREAM_TYPE_NOTIFICATION
,
STREAM_TYPE_RING
,
STREAM_TYPE_RING
,
STREAM_TYPE_SYSTEM
,
STREAM_TYPE_SYSTEM
,
STREAM_TYPE_VOICE_CALL
STREAM_TYPE_VOICE_CALL
,
STREAM_TYPE_DEFAULT
})
})
public
@interface
StreamType
{}
public
@interface
StreamType
{}
/** @see AudioManager#STREAM_ALARM */
/** @see AudioManager#STREAM_ALARM */
...
@@ -306,6 +316,7 @@ public final class C {
...
@@ -306,6 +316,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
CONTENT_TYPE_MOVIE
,
CONTENT_TYPE_MOVIE
,
CONTENT_TYPE_MUSIC
,
CONTENT_TYPE_MUSIC
,
...
@@ -334,6 +345,7 @@ public final class C {
...
@@ -334,6 +345,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
(
@IntDef
(
flag
=
true
,
flag
=
true
,
value
=
{
FLAG_AUDIBILITY_ENFORCED
})
value
=
{
FLAG_AUDIBILITY_ENFORCED
})
...
@@ -354,6 +366,7 @@ public final class C {
...
@@ -354,6 +366,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
USAGE_ALARM
,
USAGE_ALARM
,
USAGE_ASSISTANCE_ACCESSIBILITY
,
USAGE_ASSISTANCE_ACCESSIBILITY
,
...
@@ -422,6 +435,7 @@ public final class C {
...
@@ -422,6 +435,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
ALLOW_CAPTURE_BY_ALL
,
ALLOW_CAPTURE_BY_NONE
,
ALLOW_CAPTURE_BY_SYSTEM
})
@IntDef
({
ALLOW_CAPTURE_BY_ALL
,
ALLOW_CAPTURE_BY_NONE
,
ALLOW_CAPTURE_BY_SYSTEM
})
public
@interface
AudioAllowedCapturePolicy
{}
public
@interface
AudioAllowedCapturePolicy
{}
/** See {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_ALL}. */
/** See {@link android.media.AudioAttributes#ALLOW_CAPTURE_BY_ALL}. */
...
@@ -527,11 +541,17 @@ public final class C {
...
@@ -527,11 +541,17 @@ public final class C {
/**
/**
* Video scaling modes for {@link MediaCodec}-based renderers. One of {@link
* Video scaling modes for {@link MediaCodec}-based renderers. One of {@link
* #VIDEO_SCALING_MODE_SCALE_TO_FIT} or {@link #VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}.
* #VIDEO_SCALING_MODE_SCALE_TO_FIT}, {@link #VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING} or
* {@link #VIDEO_SCALING_MODE_DEFAULT}.
*/
*/
@SuppressLint
(
"UniqueConstants"
)
// Intentional duplication to set VIDEO_SCALING_MODE_DEFAULT.
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
(
value
=
{
VIDEO_SCALING_MODE_SCALE_TO_FIT
,
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
})
@IntDef
({
VIDEO_SCALING_MODE_SCALE_TO_FIT
,
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
,
VIDEO_SCALING_MODE_DEFAULT
})
public
@interface
VideoScalingMode
{}
public
@interface
VideoScalingMode
{}
/** See {@link MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT}. */
/** See {@link MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT}. */
public
static
final
int
VIDEO_SCALING_MODE_SCALE_TO_FIT
=
public
static
final
int
VIDEO_SCALING_MODE_SCALE_TO_FIT
=
...
@@ -565,6 +585,7 @@ public final class C {
...
@@ -565,6 +585,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
(
@IntDef
(
flag
=
true
,
flag
=
true
,
value
=
{
SELECTION_FLAG_DEFAULT
,
SELECTION_FLAG_FORCED
,
SELECTION_FLAG_AUTOSELECT
})
value
=
{
SELECTION_FLAG_DEFAULT
,
SELECTION_FLAG_FORCED
,
SELECTION_FLAG_AUTOSELECT
})
...
@@ -680,7 +701,7 @@ public final class C {
...
@@ -680,7 +701,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
(
{
ElementType
.
TYPE_USE
}
)
@Target
(
TYPE_USE
)
@IntDef
(
@IntDef
(
open
=
true
,
open
=
true
,
value
=
{
value
=
{
...
@@ -976,6 +997,7 @@ public final class C {
...
@@ -976,6 +997,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
WAKE_MODE_NONE
,
WAKE_MODE_LOCAL
,
WAKE_MODE_NETWORK
})
@IntDef
({
WAKE_MODE_NONE
,
WAKE_MODE_LOCAL
,
WAKE_MODE_NETWORK
})
public
@interface
WakeMode
{}
public
@interface
WakeMode
{}
/**
/**
...
@@ -1012,6 +1034,7 @@ public final class C {
...
@@ -1012,6 +1034,7 @@ public final class C {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
(
@IntDef
(
flag
=
true
,
flag
=
true
,
value
=
{
value
=
{
...
...
library/common/src/main/java/com/google/android/exoplayer2/Format.java
View file @
93620e47
...
@@ -128,8 +128,8 @@ public final class Format implements Bundleable {
...
@@ -128,8 +128,8 @@ public final class Format implements Bundleable {
@Nullable
private
String
id
;
@Nullable
private
String
id
;
@Nullable
private
String
label
;
@Nullable
private
String
label
;
@Nullable
private
String
language
;
@Nullable
private
String
language
;
@C
.
SelectionFlags
private
int
selectionFlags
;
private
@C
.
SelectionFlags
int
selectionFlags
;
@C
.
RoleFlags
private
int
roleFlags
;
private
@C
.
RoleFlags
int
roleFlags
;
private
int
averageBitrate
;
private
int
averageBitrate
;
private
int
peakBitrate
;
private
int
peakBitrate
;
@Nullable
private
String
codecs
;
@Nullable
private
String
codecs
;
...
@@ -620,9 +620,9 @@ public final class Format implements Bundleable {
...
@@ -620,9 +620,9 @@ public final class Format implements Bundleable {
/** The language as an IETF BCP 47 conformant tag, or null if unknown or not applicable. */
/** The language as an IETF BCP 47 conformant tag, or null if unknown or not applicable. */
@Nullable
public
final
String
language
;
@Nullable
public
final
String
language
;
/** Track selection flags. */
/** Track selection flags. */
@C
.
SelectionFlags
public
final
int
selectionFlags
;
public
final
@C
.
SelectionFlags
int
selectionFlags
;
/** Track role flags. */
/** Track role flags. */
@C
.
RoleFlags
public
final
int
roleFlags
;
public
final
@C
.
RoleFlags
int
roleFlags
;
/**
/**
* The average bitrate in bits per second, or {@link #NO_VALUE} if unknown or not applicable. The
* The average bitrate in bits per second, or {@link #NO_VALUE} if unknown or not applicable. The
* way in which this field is populated depends on the type of media to which the format
* way in which this field is populated depends on the type of media to which the format
...
...
library/common/src/main/java/com/google/android/exoplayer2/MediaItem.java
View file @
93620e47
...
@@ -1235,8 +1235,8 @@ public final class MediaItem implements Bundleable {
...
@@ -1235,8 +1235,8 @@ public final class MediaItem implements Bundleable {
private
Uri
uri
;
private
Uri
uri
;
@Nullable
private
String
mimeType
;
@Nullable
private
String
mimeType
;
@Nullable
private
String
language
;
@Nullable
private
String
language
;
@C
.
SelectionFlags
private
int
selectionFlags
;
private
@C
.
SelectionFlags
int
selectionFlags
;
@C
.
RoleFlags
private
int
roleFlags
;
private
@C
.
RoleFlags
int
roleFlags
;
@Nullable
private
String
label
;
@Nullable
private
String
label
;
/**
/**
...
@@ -1310,9 +1310,9 @@ public final class MediaItem implements Bundleable {
...
@@ -1310,9 +1310,9 @@ public final class MediaItem implements Bundleable {
/** The language. */
/** The language. */
@Nullable
public
final
String
language
;
@Nullable
public
final
String
language
;
/** The selection flags. */
/** The selection flags. */
@C
.
SelectionFlags
public
final
int
selectionFlags
;
public
final
@C
.
SelectionFlags
int
selectionFlags
;
/** The role flags. */
/** The role flags. */
@C
.
RoleFlags
public
final
int
roleFlags
;
public
final
@C
.
RoleFlags
int
roleFlags
;
/** The label. */
/** The label. */
@Nullable
public
final
String
label
;
@Nullable
public
final
String
label
;
...
...
library/common/src/main/java/com/google/android/exoplayer2/MediaMetadata.java
View file @
93620e47
...
@@ -15,6 +15,12 @@
...
@@ -15,6 +15,12 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
;
package
com
.
google
.
android
.
exoplayer2
;
import
static
java
.
lang
.
annotation
.
ElementType
.
FIELD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
LOCAL_VARIABLE
;
import
static
java
.
lang
.
annotation
.
ElementType
.
METHOD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
PARAMETER
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
android.net.Uri
;
import
android.net.Uri
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
...
@@ -26,6 +32,7 @@ import com.google.common.base.Objects;
...
@@ -26,6 +32,7 @@ import com.google.common.base.Objects;
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
;
import
java.lang.annotation.Target
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.List
;
...
@@ -500,6 +507,7 @@ public final class MediaMetadata implements Bundleable {
...
@@ -500,6 +507,7 @@ public final class MediaMetadata implements Bundleable {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
FOLDER_TYPE_NONE
,
FOLDER_TYPE_NONE
,
FOLDER_TYPE_MIXED
,
FOLDER_TYPE_MIXED
,
...
@@ -537,6 +545,7 @@ public final class MediaMetadata implements Bundleable {
...
@@ -537,6 +545,7 @@ public final class MediaMetadata implements Bundleable {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
PICTURE_TYPE_OTHER
,
PICTURE_TYPE_OTHER
,
PICTURE_TYPE_FILE_ICON
,
PICTURE_TYPE_FILE_ICON
,
...
@@ -614,7 +623,7 @@ public final class MediaMetadata implements Bundleable {
...
@@ -614,7 +623,7 @@ public final class MediaMetadata implements Bundleable {
/** Optional artwork data as a compressed byte array. */
/** Optional artwork data as a compressed byte array. */
@Nullable
public
final
byte
[]
artworkData
;
@Nullable
public
final
byte
[]
artworkData
;
/** Optional {@link PictureType} of the artwork data. */
/** Optional {@link PictureType} of the artwork data. */
@Nullable
@PictureType
public
final
Integer
artworkDataType
;
@Nullable
public
final
@PictureType
Integer
artworkDataType
;
/** Optional artwork {@link Uri}. */
/** Optional artwork {@link Uri}. */
@Nullable
public
final
Uri
artworkUri
;
@Nullable
public
final
Uri
artworkUri
;
/** Optional track number. */
/** Optional track number. */
...
@@ -622,7 +631,7 @@ public final class MediaMetadata implements Bundleable {
...
@@ -622,7 +631,7 @@ public final class MediaMetadata implements Bundleable {
/** Optional total number of tracks. */
/** Optional total number of tracks. */
@Nullable
public
final
Integer
totalTrackCount
;
@Nullable
public
final
Integer
totalTrackCount
;
/** Optional {@link FolderType}. */
/** Optional {@link FolderType}. */
@Nullable
@FolderType
public
final
Integer
folderType
;
@Nullable
public
final
@FolderType
Integer
folderType
;
/** Optional boolean for media playability. */
/** Optional boolean for media playability. */
@Nullable
public
final
Boolean
isPlayable
;
@Nullable
public
final
Boolean
isPlayable
;
/** @deprecated Use {@link #recordingYear} instead. */
/** @deprecated Use {@link #recordingYear} instead. */
...
...
library/common/src/main/java/com/google/android/exoplayer2/PlaybackException.java
View file @
93620e47
...
@@ -15,6 +15,12 @@
...
@@ -15,6 +15,12 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
;
package
com
.
google
.
android
.
exoplayer2
;
import
static
java
.
lang
.
annotation
.
ElementType
.
FIELD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
LOCAL_VARIABLE
;
import
static
java
.
lang
.
annotation
.
ElementType
.
METHOD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
PARAMETER
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
android.net.ConnectivityManager
;
import
android.net.ConnectivityManager
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.os.RemoteException
;
import
android.os.RemoteException
;
...
@@ -28,6 +34,7 @@ import com.google.android.exoplayer2.util.Util;
...
@@ -28,6 +34,7 @@ import com.google.android.exoplayer2.util.Util;
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
;
import
java.lang.annotation.Target
;
/** Thrown when a non locally recoverable playback failure occurs. */
/** Thrown when a non locally recoverable playback failure occurs. */
public
class
PlaybackException
extends
Exception
implements
Bundleable
{
public
class
PlaybackException
extends
Exception
implements
Bundleable
{
...
@@ -40,6 +47,7 @@ public class PlaybackException extends Exception implements Bundleable {
...
@@ -40,6 +47,7 @@ public class PlaybackException extends Exception implements Bundleable {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
(
@IntDef
(
open
=
true
,
open
=
true
,
value
=
{
value
=
{
...
@@ -312,7 +320,7 @@ public class PlaybackException extends Exception implements Bundleable {
...
@@ -312,7 +320,7 @@ public class PlaybackException extends Exception implements Bundleable {
}
}
/** An error code which identifies the cause of the playback failure. */
/** An error code which identifies the cause of the playback failure. */
@ErrorCode
public
final
int
errorCode
;
public
final
@ErrorCode
int
errorCode
;
/** The value of {@link SystemClock#elapsedRealtime()} when this exception was created. */
/** The value of {@link SystemClock#elapsedRealtime()} when this exception was created. */
public
final
long
timestampMs
;
public
final
long
timestampMs
;
...
@@ -423,7 +431,6 @@ public class PlaybackException extends Exception implements Bundleable {
...
@@ -423,7 +431,6 @@ public class PlaybackException extends Exception implements Bundleable {
protected
static
final
int
FIELD_CUSTOM_ID_BASE
=
1000
;
protected
static
final
int
FIELD_CUSTOM_ID_BASE
=
1000
;
/** Object that can create a {@link PlaybackException} from a {@link Bundle}. */
/** Object that can create a {@link PlaybackException} from a {@link Bundle}. */
@SuppressWarnings
(
"unchecked"
)
public
static
final
Creator
<
PlaybackException
>
CREATOR
=
PlaybackException:
:
new
;
public
static
final
Creator
<
PlaybackException
>
CREATOR
=
PlaybackException:
:
new
;
@CallSuper
@CallSuper
...
...
library/common/src/main/java/com/google/android/exoplayer2/Player.java
View file @
93620e47
...
@@ -15,6 +15,12 @@
...
@@ -15,6 +15,12 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
;
package
com
.
google
.
android
.
exoplayer2
;
import
static
java
.
lang
.
annotation
.
ElementType
.
FIELD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
LOCAL_VARIABLE
;
import
static
java
.
lang
.
annotation
.
ElementType
.
METHOD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
PARAMETER
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
android.os.Bundle
;
import
android.os.Bundle
;
import
android.os.Looper
;
import
android.os.Looper
;
import
android.view.Surface
;
import
android.view.Surface
;
...
@@ -40,6 +46,7 @@ import com.google.common.base.Objects;
...
@@ -40,6 +46,7 @@ import com.google.common.base.Objects;
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
;
import
java.lang.annotation.Target
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
...
@@ -447,8 +454,7 @@ public interface Player {
...
@@ -447,8 +454,7 @@ public interface Player {
* @return The {@link Event} at the given index.
* @return The {@link Event} at the given index.
* @throws IndexOutOfBoundsException If index is outside the allowed range.
* @throws IndexOutOfBoundsException If index is outside the allowed range.
*/
*/
@Event
public
@Event
int
get
(
int
index
)
{
public
int
get
(
int
index
)
{
return
flags
.
get
(
index
);
return
flags
.
get
(
index
);
}
}
...
@@ -863,8 +869,7 @@ public interface Player {
...
@@ -863,8 +869,7 @@ public interface Player {
* @return The {@link Command} at the given index.
* @return The {@link Command} at the given index.
* @throws IndexOutOfBoundsException If index is outside the allowed range.
* @throws IndexOutOfBoundsException If index is outside the allowed range.
*/
*/
@Command
public
@Command
int
get
(
int
index
)
{
public
int
get
(
int
index
)
{
return
flags
.
get
(
index
);
return
flags
.
get
(
index
);
}
}
...
@@ -1079,6 +1084,7 @@ public interface Player {
...
@@ -1079,6 +1084,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
STATE_IDLE
,
STATE_BUFFERING
,
STATE_READY
,
STATE_ENDED
})
@IntDef
({
STATE_IDLE
,
STATE_BUFFERING
,
STATE_READY
,
STATE_ENDED
})
@interface
State
{}
@interface
State
{}
/** The player is idle, and must be {@link #prepare() prepared} before it will play the media. */
/** The player is idle, and must be {@link #prepare() prepared} before it will play the media. */
...
@@ -1107,6 +1113,7 @@ public interface Player {
...
@@ -1107,6 +1113,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST
,
PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST
,
PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS
,
PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS
,
...
@@ -1133,6 +1140,7 @@ public interface Player {
...
@@ -1133,6 +1140,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
PLAYBACK_SUPPRESSION_REASON_NONE
,
PLAYBACK_SUPPRESSION_REASON_NONE
,
PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS
PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS
...
@@ -1149,6 +1157,7 @@ public interface Player {
...
@@ -1149,6 +1157,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
REPEAT_MODE_OFF
,
REPEAT_MODE_ONE
,
REPEAT_MODE_ALL
})
@IntDef
({
REPEAT_MODE_OFF
,
REPEAT_MODE_ONE
,
REPEAT_MODE_ALL
})
@interface
RepeatMode
{}
@interface
RepeatMode
{}
/**
/**
...
@@ -1180,6 +1189,7 @@ public interface Player {
...
@@ -1180,6 +1189,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
DISCONTINUITY_REASON_AUTO_TRANSITION
,
DISCONTINUITY_REASON_AUTO_TRANSITION
,
DISCONTINUITY_REASON_SEEK
,
DISCONTINUITY_REASON_SEEK
,
...
@@ -1218,6 +1228,7 @@ public interface Player {
...
@@ -1218,6 +1228,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
,
TIMELINE_CHANGE_REASON_SOURCE_UPDATE
})
@IntDef
({
TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
,
TIMELINE_CHANGE_REASON_SOURCE_UPDATE
})
@interface
TimelineChangeReason
{}
@interface
TimelineChangeReason
{}
/** Timeline changed as a result of a change of the playlist items or the order of the items. */
/** Timeline changed as a result of a change of the playlist items or the order of the items. */
...
@@ -1238,6 +1249,7 @@ public interface Player {
...
@@ -1238,6 +1249,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
MEDIA_ITEM_TRANSITION_REASON_REPEAT
,
MEDIA_ITEM_TRANSITION_REASON_REPEAT
,
MEDIA_ITEM_TRANSITION_REASON_AUTO
,
MEDIA_ITEM_TRANSITION_REASON_AUTO
,
...
@@ -1270,6 +1282,7 @@ public interface Player {
...
@@ -1270,6 +1282,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
EVENT_TIMELINE_CHANGED
,
EVENT_TIMELINE_CHANGED
,
EVENT_MEDIA_ITEM_TRANSITION
,
EVENT_MEDIA_ITEM_TRANSITION
,
...
@@ -1355,6 +1368,7 @@ public interface Player {
...
@@ -1355,6 +1368,7 @@ public interface Player {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
COMMAND_INVALID
,
COMMAND_INVALID
,
COMMAND_PLAY_PAUSE
,
COMMAND_PLAY_PAUSE
,
...
...
library/common/src/main/java/com/google/android/exoplayer2/text/Cue.java
View file @
93620e47
...
@@ -15,6 +15,12 @@
...
@@ -15,6 +15,12 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
text
;
package
com
.
google
.
android
.
exoplayer2
.
text
;
import
static
java
.
lang
.
annotation
.
ElementType
.
FIELD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
LOCAL_VARIABLE
;
import
static
java
.
lang
.
annotation
.
ElementType
.
METHOD
;
import
static
java
.
lang
.
annotation
.
ElementType
.
PARAMETER
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
android.graphics.Bitmap
;
import
android.graphics.Bitmap
;
import
android.graphics.Color
;
import
android.graphics.Color
;
import
android.os.Bundle
;
import
android.os.Bundle
;
...
@@ -32,6 +38,7 @@ import com.google.common.base.Objects;
...
@@ -32,6 +38,7 @@ import com.google.common.base.Objects;
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
;
import
java.lang.annotation.Target
;
import
org.checkerframework.dataflow.qual.Pure
;
import
org.checkerframework.dataflow.qual.Pure
;
/** Contains information about a specific cue, including textual content and formatting data. */
/** Contains information about a specific cue, including textual content and formatting data. */
...
@@ -53,6 +60,7 @@ public final class Cue implements Bundleable {
...
@@ -53,6 +60,7 @@ public final class Cue implements Bundleable {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
TYPE_UNSET
,
ANCHOR_TYPE_START
,
ANCHOR_TYPE_MIDDLE
,
ANCHOR_TYPE_END
})
@IntDef
({
TYPE_UNSET
,
ANCHOR_TYPE_START
,
ANCHOR_TYPE_MIDDLE
,
ANCHOR_TYPE_END
})
public
@interface
AnchorType
{}
public
@interface
AnchorType
{}
...
@@ -80,6 +88,7 @@ public final class Cue implements Bundleable {
...
@@ -80,6 +88,7 @@ public final class Cue implements Bundleable {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
TYPE_UNSET
,
LINE_TYPE_FRACTION
,
LINE_TYPE_NUMBER
})
@IntDef
({
TYPE_UNSET
,
LINE_TYPE_FRACTION
,
LINE_TYPE_NUMBER
})
public
@interface
LineType
{}
public
@interface
LineType
{}
...
@@ -96,6 +105,7 @@ public final class Cue implements Bundleable {
...
@@ -96,6 +105,7 @@ public final class Cue implements Bundleable {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
TYPE_UNSET
,
TYPE_UNSET
,
TEXT_SIZE_TYPE_FRACTIONAL
,
TEXT_SIZE_TYPE_FRACTIONAL
,
...
@@ -119,6 +129,7 @@ public final class Cue implements Bundleable {
...
@@ -119,6 +129,7 @@ public final class Cue implements Bundleable {
*/
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@Target
({
FIELD
,
METHOD
,
PARAMETER
,
LOCAL_VARIABLE
,
TYPE_USE
})
@IntDef
({
@IntDef
({
TYPE_UNSET
,
TYPE_UNSET
,
VERTICAL_TYPE_RL
,
VERTICAL_TYPE_RL
,
...
@@ -545,16 +556,16 @@ public final class Cue implements Bundleable {
...
@@ -545,16 +556,16 @@ public final class Cue implements Bundleable {
@Nullable
private
Alignment
multiRowAlignment
;
@Nullable
private
Alignment
multiRowAlignment
;
private
float
line
;
private
float
line
;
@LineType
private
int
lineType
;
@LineType
private
int
lineType
;
@AnchorType
privat
e
int
lineAnchor
;
private
@AnchorTyp
e
int
lineAnchor
;
private
float
position
;
private
float
position
;
@AnchorType
privat
e
int
positionAnchor
;
private
@AnchorTyp
e
int
positionAnchor
;
@TextSizeType
privat
e
int
textSizeType
;
private
@TextSizeTyp
e
int
textSizeType
;
private
float
textSize
;
private
float
textSize
;
private
float
size
;
private
float
size
;
private
float
bitmapHeight
;
private
float
bitmapHeight
;
private
boolean
windowColorSet
;
private
boolean
windowColorSet
;
@ColorInt
private
int
windowColor
;
@ColorInt
private
int
windowColor
;
@VerticalType
privat
e
int
verticalType
;
private
@VerticalTyp
e
int
verticalType
;
private
float
shearDegrees
;
private
float
shearDegrees
;
public
Builder
()
{
public
Builder
()
{
...
...
library/common/src/main/java/com/google/android/exoplayer2/trackselection/TrackSelectionParameters.java
View file @
93620e47
...
@@ -82,13 +82,13 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -82,13 +82,13 @@ public class TrackSelectionParameters implements Bundleable {
private
ImmutableList
<
String
>
preferredVideoMimeTypes
;
private
ImmutableList
<
String
>
preferredVideoMimeTypes
;
// Audio
// Audio
private
ImmutableList
<
String
>
preferredAudioLanguages
;
private
ImmutableList
<
String
>
preferredAudioLanguages
;
@C
.
RoleFlags
private
int
preferredAudioRoleFlags
;
private
@C
.
RoleFlags
int
preferredAudioRoleFlags
;
private
int
maxAudioChannelCount
;
private
int
maxAudioChannelCount
;
private
int
maxAudioBitrate
;
private
int
maxAudioBitrate
;
private
ImmutableList
<
String
>
preferredAudioMimeTypes
;
private
ImmutableList
<
String
>
preferredAudioMimeTypes
;
// Text
// Text
private
ImmutableList
<
String
>
preferredTextLanguages
;
private
ImmutableList
<
String
>
preferredTextLanguages
;
@C
.
RoleFlags
private
int
preferredTextRoleFlags
;
private
@C
.
RoleFlags
int
preferredTextRoleFlags
;
private
boolean
selectUndeterminedTextLanguage
;
private
boolean
selectUndeterminedTextLanguage
;
// General
// General
private
boolean
forceLowestBitrate
;
private
boolean
forceLowestBitrate
;
...
@@ -781,7 +781,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -781,7 +781,7 @@ public class TrackSelectionParameters implements Bundleable {
* The preferred {@link C.RoleFlags} for audio tracks. {@code 0} selects the default track if
* The preferred {@link C.RoleFlags} for audio tracks. {@code 0} selects the default track if
* there is one, or the first track if there's no default. The default value is {@code 0}.
* there is one, or the first track if there's no default. The default value is {@code 0}.
*/
*/
@C
.
RoleFlags
public
final
int
preferredAudioRoleFlags
;
public
final
@C
.
RoleFlags
int
preferredAudioRoleFlags
;
/**
/**
* Maximum allowed audio channel count. The default value is {@link Integer#MAX_VALUE} (i.e. no
* Maximum allowed audio channel count. The default value is {@link Integer#MAX_VALUE} (i.e. no
* constraint).
* constraint).
...
@@ -811,7 +811,7 @@ public class TrackSelectionParameters implements Bundleable {
...
@@ -811,7 +811,7 @@ public class TrackSelectionParameters implements Bundleable {
* | {@link C#ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND} if the accessibility {@link CaptioningManager}
* | {@link C#ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND} if the accessibility {@link CaptioningManager}
* is enabled.
* is enabled.
*/
*/
@C
.
RoleFlags
public
final
int
preferredTextRoleFlags
;
public
final
@C
.
RoleFlags
int
preferredTextRoleFlags
;
/**
/**
* Whether a text track with undetermined language should be selected if no track with {@link
* Whether a text track with undetermined language should be selected if no track with {@link
* #preferredTextLanguages} is available, or if {@link #preferredTextLanguages} is unset. The
* #preferredTextLanguages} is available, or if {@link #preferredTextLanguages} is unset. The
...
...
library/common/src/main/java/com/google/android/exoplayer2/util/MediaFormatUtil.java
View file @
93620e47
...
@@ -32,17 +32,19 @@ public final class MediaFormatUtil {
...
@@ -32,17 +32,19 @@ public final class MediaFormatUtil {
* Custom {@link MediaFormat} key associated with a float representing the ratio between a pixel's
* Custom {@link MediaFormat} key associated with a float representing the ratio between a pixel's
* width and height.
* width and height.
*/
*/
public
static
final
String
KEY_EXO_PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
=
// The constant value must not be changed, because it's also set by the framework MediaParser API.
public
static
final
String
KEY_PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
=
"exo-pixel-width-height-ratio-float"
;
"exo-pixel-width-height-ratio-float"
;
/**
/**
* Custom {@link MediaFormat} key associated with an integer representing the PCM encoding.
* Custom {@link MediaFormat} key associated with an integer representing the PCM encoding.
*
*
* <p>Equivalent to {@link MediaFormat#KEY_PCM_ENCODING}, except it allows additional
* <p>Equivalent to {@link MediaFormat#KEY_PCM_ENCODING}, except it allows additional
values
*
ExoPlayer-specific values
including {@link C#ENCODING_PCM_16BIT_BIG_ENDIAN}, {@link
*
defined by {@link C.PcmEncoding},
including {@link C#ENCODING_PCM_16BIT_BIG_ENDIAN}, {@link
* C#ENCODING_PCM_24BIT}, and {@link C#ENCODING_PCM_32BIT}.
* C#ENCODING_PCM_24BIT}, and {@link C#ENCODING_PCM_32BIT}.
*/
*/
public
static
final
String
KEY_EXO_PCM_ENCODING
=
"exo-pcm-encoding-int"
;
// The constant value must not be changed, because it's also set by the framework MediaParser API.
public
static
final
String
KEY_PCM_ENCODING_EXTENDED
=
"exo-pcm-encoding-int"
;
private
static
final
int
MAX_POWER_OF_TWO_INT
=
1
<<
30
;
private
static
final
int
MAX_POWER_OF_TWO_INT
=
1
<<
30
;
...
@@ -52,8 +54,8 @@ public final class MediaFormatUtil {
...
@@ -52,8 +54,8 @@ public final class MediaFormatUtil {
* <p>May include the following custom keys:
* <p>May include the following custom keys:
*
*
* <ul>
* <ul>
* <li>{@link #KEY_
EXO_
PIXEL_WIDTH_HEIGHT_RATIO_FLOAT}.
* <li>{@link #KEY_PIXEL_WIDTH_HEIGHT_RATIO_FLOAT}.
* <li>{@link #KEY_
EXO_PCM_ENCODING
}.
* <li>{@link #KEY_
PCM_ENCODING_EXTENDED
}.
* </ul>
* </ul>
*/
*/
@SuppressLint
(
"InlinedApi"
)
// Inlined MediaFormat keys.
@SuppressLint
(
"InlinedApi"
)
// Inlined MediaFormat keys.
...
@@ -184,7 +186,7 @@ public final class MediaFormatUtil {
...
@@ -184,7 +186,7 @@ public final class MediaFormatUtil {
@SuppressLint
(
"InlinedApi"
)
@SuppressLint
(
"InlinedApi"
)
private
static
void
maybeSetPixelAspectRatio
(
private
static
void
maybeSetPixelAspectRatio
(
MediaFormat
mediaFormat
,
float
pixelWidthHeightRatio
)
{
MediaFormat
mediaFormat
,
float
pixelWidthHeightRatio
)
{
mediaFormat
.
setFloat
(
KEY_
EXO_
PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
,
pixelWidthHeightRatio
);
mediaFormat
.
setFloat
(
KEY_PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
,
pixelWidthHeightRatio
);
int
pixelAspectRatioWidth
=
1
;
int
pixelAspectRatioWidth
=
1
;
int
pixelAspectRatioHeight
=
1
;
int
pixelAspectRatioHeight
=
1
;
// ExoPlayer extractors output the pixel aspect ratio as a float. Do our best to recreate the
// ExoPlayer extractors output the pixel aspect ratio as a float. Do our best to recreate the
...
@@ -207,7 +209,7 @@ public final class MediaFormatUtil {
...
@@ -207,7 +209,7 @@ public final class MediaFormatUtil {
return
;
return
;
}
}
int
mediaFormatPcmEncoding
;
int
mediaFormatPcmEncoding
;
maybeSetInteger
(
mediaFormat
,
KEY_
EXO_PCM_ENCODING
,
exoPcmEncoding
);
maybeSetInteger
(
mediaFormat
,
KEY_
PCM_ENCODING_EXTENDED
,
exoPcmEncoding
);
switch
(
exoPcmEncoding
)
{
switch
(
exoPcmEncoding
)
{
case
C
.
ENCODING_PCM_8BIT
:
case
C
.
ENCODING_PCM_8BIT
:
mediaFormatPcmEncoding
=
AudioFormat
.
ENCODING_PCM_8BIT
;
mediaFormatPcmEncoding
=
AudioFormat
.
ENCODING_PCM_8BIT
;
...
...
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionOverridesTest.java
View file @
93620e47
...
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertThrows;
...
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertThrows;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
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.source.TrackGroup
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableList
;
...
...
library/common/src/test/java/com/google/android/exoplayer2/trackselection/TrackSelectionParametersTest.java
View file @
93620e47
...
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
...
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
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.source.TrackGroup
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionOverrides.TrackSelectionOverride
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.common.collect.ImmutableList
;
import
com.google.common.collect.ImmutableList
;
...
...
library/common/src/test/java/com/google/android/exoplayer2/util/MediaFormatUtilTest.java
View file @
93620e47
...
@@ -37,7 +37,7 @@ public class MediaFormatUtilTest {
...
@@ -37,7 +37,7 @@ public class MediaFormatUtilTest {
// Assert that no invalid keys are accidentally being populated.
// Assert that no invalid keys are accidentally being populated.
assertThat
(
mediaFormat
.
getKeys
())
assertThat
(
mediaFormat
.
getKeys
())
.
containsExactly
(
.
containsExactly
(
MediaFormatUtil
.
KEY_
EXO_
PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
,
MediaFormatUtil
.
KEY_PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
,
MediaFormat
.
KEY_ENCODER_DELAY
,
MediaFormat
.
KEY_ENCODER_DELAY
,
MediaFormat
.
KEY_ENCODER_PADDING
,
MediaFormat
.
KEY_ENCODER_PADDING
,
MediaFormat
.
KEY_PIXEL_ASPECT_RATIO_WIDTH
,
MediaFormat
.
KEY_PIXEL_ASPECT_RATIO_WIDTH
,
...
@@ -46,7 +46,7 @@ public class MediaFormatUtilTest {
...
@@ -46,7 +46,7 @@ public class MediaFormatUtilTest {
MediaFormat
.
KEY_IS_FORCED_SUBTITLE
,
MediaFormat
.
KEY_IS_FORCED_SUBTITLE
,
MediaFormat
.
KEY_IS_AUTOSELECT
,
MediaFormat
.
KEY_IS_AUTOSELECT
,
MediaFormat
.
KEY_ROTATION
);
MediaFormat
.
KEY_ROTATION
);
assertThat
(
mediaFormat
.
getFloat
(
MediaFormatUtil
.
KEY_
EXO_
PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
))
assertThat
(
mediaFormat
.
getFloat
(
MediaFormatUtil
.
KEY_PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
))
.
isEqualTo
(
1
.
f
);
.
isEqualTo
(
1
.
f
);
assertThat
(
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_ENCODER_DELAY
)).
isEqualTo
(
0
);
assertThat
(
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_ENCODER_DELAY
)).
isEqualTo
(
0
);
assertThat
(
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_ENCODER_PADDING
)).
isEqualTo
(
0
);
assertThat
(
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_ENCODER_PADDING
)).
isEqualTo
(
0
);
...
@@ -116,7 +116,7 @@ public class MediaFormatUtilTest {
...
@@ -116,7 +116,7 @@ public class MediaFormatUtilTest {
.
isEqualTo
(
format
.
initializationData
.
get
(
1
));
.
isEqualTo
(
format
.
initializationData
.
get
(
1
));
assertThat
(
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_PCM_ENCODING
)).
isEqualTo
(
format
.
pcmEncoding
);
assertThat
(
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_PCM_ENCODING
)).
isEqualTo
(
format
.
pcmEncoding
);
assertThat
(
mediaFormat
.
getInteger
(
MediaFormatUtil
.
KEY_
EXO_PCM_ENCODING
))
assertThat
(
mediaFormat
.
getInteger
(
MediaFormatUtil
.
KEY_
PCM_ENCODING_EXTENDED
))
.
isEqualTo
(
format
.
pcmEncoding
);
.
isEqualTo
(
format
.
pcmEncoding
);
assertThat
(
mediaFormat
.
getString
(
MediaFormat
.
KEY_LANGUAGE
)).
isEqualTo
(
format
.
language
);
assertThat
(
mediaFormat
.
getString
(
MediaFormat
.
KEY_LANGUAGE
)).
isEqualTo
(
format
.
language
);
...
@@ -140,7 +140,7 @@ public class MediaFormatUtilTest {
...
@@ -140,7 +140,7 @@ public class MediaFormatUtilTest {
(
float
)
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_PIXEL_ASPECT_RATIO_WIDTH
)
(
float
)
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_PIXEL_ASPECT_RATIO_WIDTH
)
/
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_PIXEL_ASPECT_RATIO_HEIGHT
);
/
mediaFormat
.
getInteger
(
MediaFormat
.
KEY_PIXEL_ASPECT_RATIO_HEIGHT
);
assertThat
(
calculatedPixelAspectRatio
).
isWithin
(.
0001
f
).
of
(
format
.
pixelWidthHeightRatio
);
assertThat
(
calculatedPixelAspectRatio
).
isWithin
(.
0001
f
).
of
(
format
.
pixelWidthHeightRatio
);
assertThat
(
mediaFormat
.
getFloat
(
MediaFormatUtil
.
KEY_
EXO_
PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
))
assertThat
(
mediaFormat
.
getFloat
(
MediaFormatUtil
.
KEY_PIXEL_WIDTH_HEIGHT_RATIO_FLOAT
))
.
isEqualTo
(
format
.
pixelWidthHeightRatio
);
.
isEqualTo
(
format
.
pixelWidthHeightRatio
);
}
}
...
@@ -148,7 +148,7 @@ public class MediaFormatUtilTest {
...
@@ -148,7 +148,7 @@ public class MediaFormatUtilTest {
public
void
createMediaFormatFromFormat_withPcmEncoding_setsCustomPcmEncodingEntry
()
{
public
void
createMediaFormatFromFormat_withPcmEncoding_setsCustomPcmEncodingEntry
()
{
Format
format
=
new
Format
.
Builder
().
setPcmEncoding
(
C
.
ENCODING_PCM_32BIT
).
build
();
Format
format
=
new
Format
.
Builder
().
setPcmEncoding
(
C
.
ENCODING_PCM_32BIT
).
build
();
MediaFormat
mediaFormat
=
MediaFormatUtil
.
createMediaFormatFromFormat
(
format
);
MediaFormat
mediaFormat
=
MediaFormatUtil
.
createMediaFormatFromFormat
(
format
);
assertThat
(
mediaFormat
.
getInteger
(
MediaFormatUtil
.
KEY_
EXO_PCM_ENCODING
))
assertThat
(
mediaFormat
.
getInteger
(
MediaFormatUtil
.
KEY_
PCM_ENCODING_EXTENDED
))
.
isEqualTo
(
C
.
ENCODING_PCM_32BIT
);
.
isEqualTo
(
C
.
ENCODING_PCM_32BIT
);
assertThat
(
mediaFormat
.
containsKey
(
MediaFormat
.
KEY_PCM_ENCODING
)).
isFalse
();
assertThat
(
mediaFormat
.
containsKey
(
MediaFormat
.
KEY_PCM_ENCODING
)).
isFalse
();
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java
View file @
93620e47
...
@@ -1266,7 +1266,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
...
@@ -1266,7 +1266,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
queue
.
advancePlayingPeriod
();
queue
.
advancePlayingPeriod
();
}
}
queue
.
removeAfter
(
newPlayingPeriodHolder
);
queue
.
removeAfter
(
newPlayingPeriodHolder
);
newPlayingPeriodHolder
.
setRendererOffset
(
/* rendererPositionOffsetUs= */
0
);
newPlayingPeriodHolder
.
setRendererOffset
(
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
);
enableRenderers
();
enableRenderers
();
}
}
}
}
...
@@ -1299,7 +1300,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
...
@@ -1299,7 +1300,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
MediaPeriodHolder
playingMediaPeriod
=
queue
.
getPlayingPeriod
();
MediaPeriodHolder
playingMediaPeriod
=
queue
.
getPlayingPeriod
();
rendererPositionUs
=
rendererPositionUs
=
playingMediaPeriod
==
null
playingMediaPeriod
==
null
?
periodPositionUs
?
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
+
periodPositionUs
:
playingMediaPeriod
.
toRendererTime
(
periodPositionUs
);
:
playingMediaPeriod
.
toRendererTime
(
periodPositionUs
);
mediaClock
.
resetPosition
(
rendererPositionUs
);
mediaClock
.
resetPosition
(
rendererPositionUs
);
for
(
Renderer
renderer
:
renderers
)
{
for
(
Renderer
renderer
:
renderers
)
{
...
@@ -1375,7 +1376,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
...
@@ -1375,7 +1376,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
pendingRecoverableRendererError
=
null
;
pendingRecoverableRendererError
=
null
;
isRebuffering
=
false
;
isRebuffering
=
false
;
mediaClock
.
stop
();
mediaClock
.
stop
();
rendererPositionUs
=
0
;
rendererPositionUs
=
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
;
for
(
Renderer
renderer
:
renderers
)
{
for
(
Renderer
renderer
:
renderers
)
{
try
{
try
{
disableRenderer
(
renderer
);
disableRenderer
(
renderer
);
...
@@ -1963,7 +1964,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
...
@@ -1963,7 +1964,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
emptyTrackSelectorResult
);
emptyTrackSelectorResult
);
mediaPeriodHolder
.
mediaPeriod
.
prepare
(
this
,
info
.
startPositionUs
);
mediaPeriodHolder
.
mediaPeriod
.
prepare
(
this
,
info
.
startPositionUs
);
if
(
queue
.
getPlayingPeriod
()
==
mediaPeriodHolder
)
{
if
(
queue
.
getPlayingPeriod
()
==
mediaPeriodHolder
)
{
resetRendererPosition
(
mediaPeriodHolder
.
getStartPositionRendererTime
()
);
resetRendererPosition
(
info
.
startPositionUs
);
}
}
handleLoadingMediaPeriodChanged
(
/* loadingTrackSelectionChanged= */
false
);
handleLoadingMediaPeriodChanged
(
/* loadingTrackSelectionChanged= */
false
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/MediaPeriodQueue.java
View file @
93620e47
...
@@ -38,6 +38,26 @@ import com.google.common.collect.ImmutableList;
...
@@ -38,6 +38,26 @@ import com.google.common.collect.ImmutableList;
/* package */
final
class
MediaPeriodQueue
{
/* package */
final
class
MediaPeriodQueue
{
/**
/**
* Initial renderer position offset used for the first item in the queue, in microseconds.
*
* <p>Choosing a positive value, larger than any reasonable single media duration, ensures three
* things:
*
* <ul>
* <li>Media that accidentally or intentionally starts with small negative timestamps doesn't
* send samples with negative timestamps to decoders. This makes rendering more robust as
* many decoders are known to have problems with negative timestamps.
* <li>Enqueueing media after the initial item with a non-zero start offset (e.g. content after
* ad breaks or live streams) is virtually guaranteed to stay in the positive timestamp
* range even when seeking back. This prevents renderer resets that are required if the
* allowed timestamp range may become negative.
* <li>Choosing a large value with zeros at all relevant digits simplifies debugging as the
* original timestamp of the media is still visible.
* </ul>
*/
public
static
final
long
INITIAL_RENDERER_POSITION_OFFSET_US
=
1_000_000_000_000L
;
/**
* Limits the maximum number of periods to buffer ahead of the current playing period. The
* Limits the maximum number of periods to buffer ahead of the current playing period. The
* buffering policy normally prevents buffering too far ahead, but the policy could allow too many
* buffering policy normally prevents buffering too far ahead, but the policy could allow too many
* small periods to be buffered if the period count were not limited.
* small periods to be buffered if the period count were not limited.
...
@@ -163,9 +183,7 @@ import com.google.common.collect.ImmutableList;
...
@@ -163,9 +183,7 @@ import com.google.common.collect.ImmutableList;
TrackSelectorResult
emptyTrackSelectorResult
)
{
TrackSelectorResult
emptyTrackSelectorResult
)
{
long
rendererPositionOffsetUs
=
long
rendererPositionOffsetUs
=
loading
==
null
loading
==
null
?
(
info
.
id
.
isAd
()
&&
info
.
requestedContentPositionUs
!=
C
.
TIME_UNSET
?
INITIAL_RENDERER_POSITION_OFFSET_US
?
info
.
requestedContentPositionUs
:
0
)
:
(
loading
.
getRendererOffset
()
+
loading
.
info
.
durationUs
-
info
.
startPositionUs
);
:
(
loading
.
getRendererOffset
()
+
loading
.
info
.
durationUs
-
info
.
startPositionUs
);
MediaPeriodHolder
newPeriodHolder
=
MediaPeriodHolder
newPeriodHolder
=
new
MediaPeriodHolder
(
new
MediaPeriodHolder
(
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
View file @
93620e47
...
@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.audio;
...
@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.audio;
import
static
java
.
lang
.
Math
.
max
;
import
static
java
.
lang
.
Math
.
max
;
import
static
java
.
lang
.
Math
.
min
;
import
static
java
.
lang
.
Math
.
min
;
import
android.annotation.SuppressLint
;
import
android.media.AudioFormat
;
import
android.media.AudioFormat
;
import
android.media.AudioManager
;
import
android.media.AudioManager
;
import
android.media.AudioTrack
;
import
android.media.AudioTrack
;
...
@@ -1634,6 +1635,8 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1634,6 +1635,8 @@ public final class DefaultAudioSink implements AudioSink {
}
}
@RequiresApi
(
29
)
@RequiresApi
(
29
)
// Return values of AudioManager.getPlaybackOffloadSupport are equal to C.AudioManagerOffloadMode.
@SuppressLint
(
"WrongConstant"
)
@C
.
AudioManagerOffloadMode
@C
.
AudioManagerOffloadMode
private
int
getOffloadedPlaybackSupport
(
private
int
getOffloadedPlaybackSupport
(
AudioFormat
audioFormat
,
android
.
media
.
AudioAttributes
audioAttributes
)
{
AudioFormat
audioFormat
,
android
.
media
.
AudioAttributes
audioAttributes
)
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java
View file @
93620e47
...
@@ -21,6 +21,7 @@ import com.google.android.exoplayer2.Format;
...
@@ -21,6 +21,7 @@ import com.google.android.exoplayer2.Format;
import
com.google.android.exoplayer2.FormatHolder
;
import
com.google.android.exoplayer2.FormatHolder
;
import
com.google.android.exoplayer2.SeekParameters
;
import
com.google.android.exoplayer2.SeekParameters
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.decoder.DecoderInputBuffer
;
import
com.google.android.exoplayer2.source.ClippingMediaSource.IllegalClippingException
;
import
com.google.android.exoplayer2.trackselection.ExoTrackSelection
;
import
com.google.android.exoplayer2.trackselection.ExoTrackSelection
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
...
@@ -42,6 +43,7 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
...
@@ -42,6 +43,7 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
private
long
pendingInitialDiscontinuityPositionUs
;
private
long
pendingInitialDiscontinuityPositionUs
;
/* package */
long
startUs
;
/* package */
long
startUs
;
/* package */
long
endUs
;
/* package */
long
endUs
;
@Nullable
private
IllegalClippingException
clippingError
;
/**
/**
* Creates a new clipping media period that provides a clipped view of the specified {@link
* Creates a new clipping media period that provides a clipped view of the specified {@link
...
@@ -78,6 +80,16 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
...
@@ -78,6 +80,16 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
this
.
endUs
=
endUs
;
this
.
endUs
=
endUs
;
}
}
/**
* Sets a clipping error detected by the media source so that it can be thrown as a period error
* at the next opportunity.
*
* @param clippingError The clipping error.
*/
public
void
setClippingError
(
IllegalClippingException
clippingError
)
{
this
.
clippingError
=
clippingError
;
}
@Override
@Override
public
void
prepare
(
MediaPeriod
.
Callback
callback
,
long
positionUs
)
{
public
void
prepare
(
MediaPeriod
.
Callback
callback
,
long
positionUs
)
{
this
.
callback
=
callback
;
this
.
callback
=
callback
;
...
@@ -86,6 +98,9 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
...
@@ -86,6 +98,9 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
@Override
@Override
public
void
maybeThrowPrepareError
()
throws
IOException
{
public
void
maybeThrowPrepareError
()
throws
IOException
{
if
(
clippingError
!=
null
)
{
throw
clippingError
;
}
mediaPeriod
.
maybeThrowPrepareError
();
mediaPeriod
.
maybeThrowPrepareError
();
}
}
...
@@ -218,6 +233,9 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
...
@@ -218,6 +233,9 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
@Override
@Override
public
void
onPrepared
(
MediaPeriod
mediaPeriod
)
{
public
void
onPrepared
(
MediaPeriod
mediaPeriod
)
{
if
(
clippingError
!=
null
)
{
return
;
}
Assertions
.
checkNotNull
(
callback
).
onPrepared
(
this
);
Assertions
.
checkNotNull
(
callback
).
onPrepared
(
this
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java
View file @
93620e47
...
@@ -276,6 +276,11 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> {
...
@@ -276,6 +276,11 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> {
clippingTimeline
=
new
ClippingTimeline
(
timeline
,
windowStartUs
,
windowEndUs
);
clippingTimeline
=
new
ClippingTimeline
(
timeline
,
windowStartUs
,
windowEndUs
);
}
catch
(
IllegalClippingException
e
)
{
}
catch
(
IllegalClippingException
e
)
{
clippingError
=
e
;
clippingError
=
e
;
// The clipping error won't be propagated while we have existing MediaPeriods. Setting the
// error at the MediaPeriods ensures it will be thrown as soon as possible.
for
(
int
i
=
0
;
i
<
mediaPeriods
.
size
();
i
++)
{
mediaPeriods
.
get
(
i
).
setClippingError
(
clippingError
);
}
return
;
return
;
}
}
refreshSourceInfo
(
clippingTimeline
);
refreshSourceInfo
(
clippingTimeline
);
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/spherical/ProjectionRenderer.java
View file @
93620e47
...
@@ -207,7 +207,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
...
@@ -207,7 +207,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private
final
int
vertexCount
;
private
final
int
vertexCount
;
private
final
FloatBuffer
vertexBuffer
;
private
final
FloatBuffer
vertexBuffer
;
private
final
FloatBuffer
textureBuffer
;
private
final
FloatBuffer
textureBuffer
;
@Projection
.
DrawMode
private
final
int
drawMode
;
private
final
int
drawMode
;
public
MeshData
(
Projection
.
SubMesh
subMesh
)
{
public
MeshData
(
Projection
.
SubMesh
subMesh
)
{
vertexCount
=
subMesh
.
getVertexCount
();
vertexCount
=
subMesh
.
getVertexCount
();
...
...
library/core/src/test/java/com/google/android/exoplayer2/MediaPeriodQueueTest.java
View file @
93620e47
...
@@ -493,10 +493,13 @@ public final class MediaPeriodQueueTest {
...
@@ -493,10 +493,13 @@ public final class MediaPeriodQueueTest {
// Change position of first ad (= change duration of playing content before first ad).
// Change position of first ad (= change duration of playing content before first ad).
updateAdPlaybackStateAndTimeline
(
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
-
2000
);
updateAdPlaybackStateAndTimeline
(
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
-
2000
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
long
maxRendererReadPositionUs
=
FIRST_AD_START_TIME_US
-
3000
;
long
maxRendererReadPositionUs
=
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
+
FIRST_AD_START_TIME_US
-
3000
;
boolean
changeHandled
=
boolean
changeHandled
=
mediaPeriodQueue
.
updateQueuedPeriods
(
mediaPeriodQueue
.
updateQueuedPeriods
(
playbackInfo
.
timeline
,
/* rendererPositionUs= */
0
,
maxRendererReadPositionUs
);
playbackInfo
.
timeline
,
/* rendererPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
,
maxRendererReadPositionUs
);
assertThat
(
changeHandled
).
isTrue
();
assertThat
(
changeHandled
).
isTrue
();
assertThat
(
getQueueLength
()).
isEqualTo
(
1
);
assertThat
(
getQueueLength
()).
isEqualTo
(
1
);
...
@@ -518,10 +521,13 @@ public final class MediaPeriodQueueTest {
...
@@ -518,10 +521,13 @@ public final class MediaPeriodQueueTest {
// Change position of first ad (= change duration of playing content before first ad).
// Change position of first ad (= change duration of playing content before first ad).
updateAdPlaybackStateAndTimeline
(
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
-
2000
);
updateAdPlaybackStateAndTimeline
(
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
-
2000
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
long
maxRendererReadPositionUs
=
FIRST_AD_START_TIME_US
-
1000
;
long
maxRendererReadPositionUs
=
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
+
FIRST_AD_START_TIME_US
-
1000
;
boolean
changeHandled
=
boolean
changeHandled
=
mediaPeriodQueue
.
updateQueuedPeriods
(
mediaPeriodQueue
.
updateQueuedPeriods
(
playbackInfo
.
timeline
,
/* rendererPositionUs= */
0
,
maxRendererReadPositionUs
);
playbackInfo
.
timeline
,
/* rendererPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
,
maxRendererReadPositionUs
);
assertThat
(
changeHandled
).
isFalse
();
assertThat
(
changeHandled
).
isFalse
();
assertThat
(
getQueueLength
()).
isEqualTo
(
1
);
assertThat
(
getQueueLength
()).
isEqualTo
(
1
);
...
@@ -552,10 +558,13 @@ public final class MediaPeriodQueueTest {
...
@@ -552,10 +558,13 @@ public final class MediaPeriodQueueTest {
.
withIsServerSideInserted
(
/* adGroupIndex= */
0
,
/* isServerSideInserted= */
true
);
.
withIsServerSideInserted
(
/* adGroupIndex= */
0
,
/* isServerSideInserted= */
true
);
updateTimeline
();
updateTimeline
();
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
long
maxRendererReadPositionUs
=
FIRST_AD_START_TIME_US
-
1000
;
long
maxRendererReadPositionUs
=
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
+
FIRST_AD_START_TIME_US
-
1000
;
boolean
changeHandled
=
boolean
changeHandled
=
mediaPeriodQueue
.
updateQueuedPeriods
(
mediaPeriodQueue
.
updateQueuedPeriods
(
playbackInfo
.
timeline
,
/* rendererPositionUs= */
0
,
maxRendererReadPositionUs
);
playbackInfo
.
timeline
,
/* rendererPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
,
maxRendererReadPositionUs
);
assertThat
(
changeHandled
).
isTrue
();
assertThat
(
changeHandled
).
isTrue
();
assertThat
(
getQueueLength
()).
isEqualTo
(
1
);
assertThat
(
getQueueLength
()).
isEqualTo
(
1
);
...
@@ -583,7 +592,9 @@ public final class MediaPeriodQueueTest {
...
@@ -583,7 +592,9 @@ public final class MediaPeriodQueueTest {
setAdGroupLoaded
(
/* adGroupIndex= */
1
);
setAdGroupLoaded
(
/* adGroupIndex= */
1
);
boolean
changeHandled
=
boolean
changeHandled
=
mediaPeriodQueue
.
updateQueuedPeriods
(
mediaPeriodQueue
.
updateQueuedPeriods
(
playbackInfo
.
timeline
,
/* rendererPositionUs= */
0
,
/* maxRendererReadPositionUs= */
0
);
playbackInfo
.
timeline
,
/* rendererPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
,
/* maxRendererReadPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
);
assertThat
(
changeHandled
).
isTrue
();
assertThat
(
changeHandled
).
isTrue
();
assertThat
(
getQueueLength
()).
isEqualTo
(
3
);
assertThat
(
getQueueLength
()).
isEqualTo
(
3
);
...
@@ -608,11 +619,13 @@ public final class MediaPeriodQueueTest {
...
@@ -608,11 +619,13 @@ public final class MediaPeriodQueueTest {
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
,
SECOND_AD_START_TIME_US
-
1000
);
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
,
SECOND_AD_START_TIME_US
-
1000
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
1
);
setAdGroupLoaded
(
/* adGroupIndex= */
1
);
long
maxRendererReadPositionUs
=
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
+
FIRST_AD_START_TIME_US
;
boolean
changeHandled
=
boolean
changeHandled
=
mediaPeriodQueue
.
updateQueuedPeriods
(
mediaPeriodQueue
.
updateQueuedPeriods
(
playbackInfo
.
timeline
,
playbackInfo
.
timeline
,
/* rendererPositionUs= */
0
,
/* rendererPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
,
/* maxRendererReadPositionUs= */
FIRST_AD_START_TIME_US
);
maxRendererReadPositionUs
);
assertThat
(
changeHandled
).
isFalse
();
assertThat
(
changeHandled
).
isFalse
();
assertThat
(
getQueueLength
()).
isEqualTo
(
3
);
assertThat
(
getQueueLength
()).
isEqualTo
(
3
);
...
@@ -636,11 +649,14 @@ public final class MediaPeriodQueueTest {
...
@@ -636,11 +649,14 @@ public final class MediaPeriodQueueTest {
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
,
SECOND_AD_START_TIME_US
-
1000
);
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
,
SECOND_AD_START_TIME_US
-
1000
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
1
);
setAdGroupLoaded
(
/* adGroupIndex= */
1
);
long
readingPositionAtStartOfContentBetweenAds
=
FIRST_AD_START_TIME_US
+
AD_DURATION_US
;
long
readingPositionAtStartOfContentBetweenAds
=
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
+
FIRST_AD_START_TIME_US
+
AD_DURATION_US
;
boolean
changeHandled
=
boolean
changeHandled
=
mediaPeriodQueue
.
updateQueuedPeriods
(
mediaPeriodQueue
.
updateQueuedPeriods
(
playbackInfo
.
timeline
,
playbackInfo
.
timeline
,
/* rendererPositionUs= */
0
,
/* rendererPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
,
/* maxRendererReadPositionUs= */
readingPositionAtStartOfContentBetweenAds
);
/* maxRendererReadPositionUs= */
readingPositionAtStartOfContentBetweenAds
);
assertThat
(
changeHandled
).
isTrue
();
assertThat
(
changeHandled
).
isTrue
();
...
@@ -665,11 +681,14 @@ public final class MediaPeriodQueueTest {
...
@@ -665,11 +681,14 @@ public final class MediaPeriodQueueTest {
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
,
SECOND_AD_START_TIME_US
-
1000
);
/* adGroupTimesUs...= */
FIRST_AD_START_TIME_US
,
SECOND_AD_START_TIME_US
-
1000
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
0
);
setAdGroupLoaded
(
/* adGroupIndex= */
1
);
setAdGroupLoaded
(
/* adGroupIndex= */
1
);
long
readingPositionAtEndOfContentBetweenAds
=
SECOND_AD_START_TIME_US
+
AD_DURATION_US
;
long
readingPositionAtEndOfContentBetweenAds
=
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
+
SECOND_AD_START_TIME_US
+
AD_DURATION_US
;
boolean
changeHandled
=
boolean
changeHandled
=
mediaPeriodQueue
.
updateQueuedPeriods
(
mediaPeriodQueue
.
updateQueuedPeriods
(
playbackInfo
.
timeline
,
playbackInfo
.
timeline
,
/* rendererPositionUs= */
0
,
/* rendererPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
,
/* maxRendererReadPositionUs= */
readingPositionAtEndOfContentBetweenAds
);
/* maxRendererReadPositionUs= */
readingPositionAtEndOfContentBetweenAds
);
assertThat
(
changeHandled
).
isFalse
();
assertThat
(
changeHandled
).
isFalse
();
...
@@ -697,7 +716,7 @@ public final class MediaPeriodQueueTest {
...
@@ -697,7 +716,7 @@ public final class MediaPeriodQueueTest {
boolean
changeHandled
=
boolean
changeHandled
=
mediaPeriodQueue
.
updateQueuedPeriods
(
mediaPeriodQueue
.
updateQueuedPeriods
(
playbackInfo
.
timeline
,
playbackInfo
.
timeline
,
/* rendererPositionUs= */
0
,
/* rendererPositionUs= */
MediaPeriodQueue
.
INITIAL_RENDERER_POSITION_OFFSET_US
,
/* maxRendererReadPositionUs= */
C
.
TIME_END_OF_SOURCE
);
/* maxRendererReadPositionUs= */
C
.
TIME_END_OF_SOURCE
);
assertThat
(
changeHandled
).
isFalse
();
assertThat
(
changeHandled
).
isFalse
();
...
...
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/AesCipherDataSink.java
→
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/
crypto/
AesCipherDataSink.java
View file @
93620e47
...
@@ -13,12 +13,14 @@
...
@@ -13,12 +13,14 @@
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
upstream
;
package
com
.
google
.
android
.
exoplayer2
.
upstream
.
crypto
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
import
static
java
.
lang
.
Math
.
min
;
import
static
java
.
lang
.
Math
.
min
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.upstream.DataSink
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
java.io.IOException
;
import
java.io.IOException
;
import
javax.crypto.Cipher
;
import
javax.crypto.Cipher
;
...
...
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/AesCipherDataSource.java
→
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/
crypto/
AesCipherDataSource.java
View file @
93620e47
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
upstream
;
package
com
.
google
.
android
.
exoplayer2
.
upstream
.
crypto
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
...
@@ -21,6 +21,9 @@ import static com.google.android.exoplayer2.util.Util.castNonNull;
...
@@ -21,6 +21,9 @@ import static com.google.android.exoplayer2.util.Util.castNonNull;
import
android.net.Uri
;
import
android.net.Uri
;
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.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
com.google.android.exoplayer2.upstream.TransferListener
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
...
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/AesFlushingCipher.java
→
library/datasource/src/main/java/com/google/android/exoplayer2/upstream/
crypto/
AesFlushingCipher.java
View file @
93620e47
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
upstream
;
package
com
.
google
.
android
.
exoplayer2
.
upstream
.
crypto
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
...
...
library/
common
/src/main/java/com/google/android/exoplayer2/upstream/crypto/package-info.java
→
library/
datasource
/src/main/java/com/google/android/exoplayer2/upstream/crypto/package-info.java
View file @
93620e47
File moved
library/datasource/src/test/java/com/google/android/exoplayer2/upstream/AesFlushingCipherTest.java
→
library/datasource/src/test/java/com/google/android/exoplayer2/upstream/
crypto/
AesFlushingCipherTest.java
View file @
93620e47
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* See the License for the specific language governing permissions and
* limitations under the License.
* limitations under the License.
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
upstream
;
package
com
.
google
.
android
.
exoplayer2
.
upstream
.
crypto
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
java
.
lang
.
Math
.
min
;
import
static
java
.
lang
.
Math
.
min
;
...
...
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java
View file @
93620e47
...
@@ -999,21 +999,18 @@ public class FragmentedMp4Extractor implements Extractor {
...
@@ -999,21 +999,18 @@ public class FragmentedMp4Extractor implements Extractor {
// Offset to the entire video timeline. In the presence of B-frames this is usually used to
// Offset to the entire video timeline. In the presence of B-frames this is usually used to
// ensure that the first frame's presentation timestamp is zero.
// ensure that the first frame's presentation timestamp is zero.
long
edtsOffset
Us
=
0
;
long
edtsOffset
=
0
;
// Currently we only support a single edit that moves the entire media timeline (indicated by
// Currently we only support a single edit that moves the entire media timeline (indicated by
// duration == 0). Other uses of edit lists are uncommon and unsupported.
// duration == 0). Other uses of edit lists are uncommon and unsupported.
if
(
track
.
editListDurations
!=
null
if
(
track
.
editListDurations
!=
null
&&
track
.
editListDurations
.
length
==
1
&&
track
.
editListDurations
.
length
==
1
&&
track
.
editListDurations
[
0
]
==
0
)
{
&&
track
.
editListDurations
[
0
]
==
0
)
{
edtsOffsetUs
=
edtsOffset
=
castNonNull
(
track
.
editListMediaTimes
)[
0
];
Util
.
scaleLargeTimestamp
(
castNonNull
(
track
.
editListMediaTimes
)[
0
],
C
.
MICROS_PER_SECOND
,
track
.
timescale
);
}
}
int
[]
sampleSizeTable
=
fragment
.
sampleSizeTable
;
int
[]
sampleSizeTable
=
fragment
.
sampleSizeTable
;
int
[]
sampleCompositionTimeOffsetUsTable
=
fragment
.
sampleCompositionTimeOffsetUsTable
;
long
[]
samplePresentationTimesUs
=
fragment
.
samplePresentationTimesUs
;
long
[]
sampleDecodingTimeUsTable
=
fragment
.
sampleDecodingTimeUsTable
;
boolean
[]
sampleIsSyncFrameTable
=
fragment
.
sampleIsSyncFrameTable
;
boolean
[]
sampleIsSyncFrameTable
=
fragment
.
sampleIsSyncFrameTable
;
boolean
workaroundEveryVideoFrameIsSyncFrame
=
boolean
workaroundEveryVideoFrameIsSyncFrame
=
...
@@ -1033,22 +1030,20 @@ public class FragmentedMp4Extractor implements Extractor {
...
@@ -1033,22 +1030,20 @@ public class FragmentedMp4Extractor implements Extractor {
sampleFlagsPresent
sampleFlagsPresent
?
trun
.
readInt
()
?
trun
.
readInt
()
:
(
i
==
0
&&
firstSampleFlagsPresent
)
?
firstSampleFlags
:
defaultSampleValues
.
flags
;
:
(
i
==
0
&&
firstSampleFlagsPresent
)
?
firstSampleFlags
:
defaultSampleValues
.
flags
;
int
sampleCompositionTimeOffset
=
0
;
if
(
sampleCompositionTimeOffsetsPresent
)
{
if
(
sampleCompositionTimeOffsetsPresent
)
{
// The BMFF spec (ISO 14496-12) states that sample offsets should be unsigned integers in
// The BMFF spec (ISO 14496-12) states that sample offsets should be unsigned integers in
// version 0 trun boxes, however a significant number of streams violate the spec and use
// version 0 trun boxes, however a significant number of streams violate the spec and use
// signed integers instead. It's safe to always decode sample offsets as signed integers
// signed integers instead. It's safe to always decode sample offsets as signed integers
// here, because unsigned integers will still be parsed correctly (unless their top bit is
// here, because unsigned integers will still be parsed correctly (unless their top bit is
// set, which is never true in practice because sample offsets are always small).
// set, which is never true in practice because sample offsets are always small).
int
sampleOffset
=
trun
.
readInt
();
sampleCompositionTimeOffset
=
trun
.
readInt
();
sampleCompositionTimeOffsetUsTable
[
i
]
=
(
int
)
((
sampleOffset
*
C
.
MICROS_PER_SECOND
)
/
timescale
);
}
else
{
sampleCompositionTimeOffsetUsTable
[
i
]
=
0
;
}
}
sampleDecodingTimeUsTable
[
i
]
=
long
samplePresentationTime
=
cumulativeTime
+
sampleCompositionTimeOffset
-
edtsOffset
;
Util
.
scaleLargeTimestamp
(
cumulativeTime
,
C
.
MICROS_PER_SECOND
,
timescale
)
-
edtsOffsetUs
;
samplePresentationTimesUs
[
i
]
=
Util
.
scaleLargeTimestamp
(
samplePresentationTime
,
C
.
MICROS_PER_SECOND
,
timescale
);
if
(!
fragment
.
nextFragmentDecodeTimeIncludesMoov
)
{
if
(!
fragment
.
nextFragmentDecodeTimeIncludesMoov
)
{
sample
DecodingTimeUsTable
[
i
]
+=
trackBundle
.
moovSampleTable
.
durationUs
;
sample
PresentationTimesUs
[
i
]
+=
trackBundle
.
moovSampleTable
.
durationUs
;
}
}
sampleSizeTable
[
i
]
=
sampleSize
;
sampleSizeTable
[
i
]
=
sampleSize
;
sampleIsSyncFrameTable
[
i
]
=
sampleIsSyncFrameTable
[
i
]
=
...
...
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/TrackFragment.java
View file @
93620e47
...
@@ -42,10 +42,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
...
@@ -42,10 +42,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
public
int
[]
trunLength
;
public
int
[]
trunLength
;
/** The size of each sample in the fragment. */
/** The size of each sample in the fragment. */
public
int
[]
sampleSizeTable
;
public
int
[]
sampleSizeTable
;
/** The composition time offset of each sample in the fragment, in microseconds. */
/** The presentation time of each sample in the fragment, in microseconds. */
public
int
[]
sampleCompositionTimeOffsetUsTable
;
public
long
[]
samplePresentationTimesUs
;
/** The decoding time of each sample in the fragment, in microseconds. */
public
long
[]
sampleDecodingTimeUsTable
;
/** Indicates which samples are sync frames. */
/** Indicates which samples are sync frames. */
public
boolean
[]
sampleIsSyncFrameTable
;
public
boolean
[]
sampleIsSyncFrameTable
;
/** Whether the fragment defines encryption data. */
/** Whether the fragment defines encryption data. */
...
@@ -80,8 +78,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
...
@@ -80,8 +78,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
trunDataPosition
=
new
long
[
0
];
trunDataPosition
=
new
long
[
0
];
trunLength
=
new
int
[
0
];
trunLength
=
new
int
[
0
];
sampleSizeTable
=
new
int
[
0
];
sampleSizeTable
=
new
int
[
0
];
sampleCompositionTimeOffsetUsTable
=
new
int
[
0
];
samplePresentationTimesUs
=
new
long
[
0
];
sampleDecodingTimeUsTable
=
new
long
[
0
];
sampleIsSyncFrameTable
=
new
boolean
[
0
];
sampleIsSyncFrameTable
=
new
boolean
[
0
];
sampleHasSubsampleEncryptionTable
=
new
boolean
[
0
];
sampleHasSubsampleEncryptionTable
=
new
boolean
[
0
];
sampleEncryptionData
=
new
ParsableByteArray
();
sampleEncryptionData
=
new
ParsableByteArray
();
...
@@ -123,8 +120,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
...
@@ -123,8 +120,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
// likely. The choice of 25% is relatively arbitrary.
// likely. The choice of 25% is relatively arbitrary.
int
tableSize
=
(
sampleCount
*
125
)
/
100
;
int
tableSize
=
(
sampleCount
*
125
)
/
100
;
sampleSizeTable
=
new
int
[
tableSize
];
sampleSizeTable
=
new
int
[
tableSize
];
sampleCompositionTimeOffsetUsTable
=
new
int
[
tableSize
];
samplePresentationTimesUs
=
new
long
[
tableSize
];
sampleDecodingTimeUsTable
=
new
long
[
tableSize
];
sampleIsSyncFrameTable
=
new
boolean
[
tableSize
];
sampleIsSyncFrameTable
=
new
boolean
[
tableSize
];
sampleHasSubsampleEncryptionTable
=
new
boolean
[
tableSize
];
sampleHasSubsampleEncryptionTable
=
new
boolean
[
tableSize
];
}
}
...
@@ -173,7 +169,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
...
@@ -173,7 +169,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
* @return The presentation timestamps of this sample in microseconds.
* @return The presentation timestamps of this sample in microseconds.
*/
*/
public
long
getSamplePresentationTimeUs
(
int
index
)
{
public
long
getSamplePresentationTimeUs
(
int
index
)
{
return
sample
DecodingTimeUsTable
[
index
]
+
sampleCompositionTimeOffsetUsTable
[
index
];
return
sample
PresentationTimesUs
[
index
];
}
}
/** Returns whether the sample at the given index has a subsample encryption table. */
/** Returns whether the sample at the given index has a subsample encryption table. */
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser.java
View file @
93620e47
...
@@ -48,6 +48,7 @@ import java.io.BufferedReader;
...
@@ -48,6 +48,7 @@ import java.io.BufferedReader;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.InputStreamReader
;
import
java.math.BigDecimal
;
import
java.util.ArrayDeque
;
import
java.util.ArrayDeque
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Collections
;
...
@@ -759,8 +760,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
...
@@ -759,8 +760,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
parseStringAttr
(
line
,
REGEX_VALUE
,
variableDefinitions
));
parseStringAttr
(
line
,
REGEX_VALUE
,
variableDefinitions
));
}
}
}
else
if
(
line
.
startsWith
(
TAG_MEDIA_DURATION
))
{
}
else
if
(
line
.
startsWith
(
TAG_MEDIA_DURATION
))
{
segmentDurationUs
=
segmentDurationUs
=
parseTimeSecondsToUs
(
line
,
REGEX_MEDIA_DURATION
);
(
long
)
(
parseDoubleAttr
(
line
,
REGEX_MEDIA_DURATION
)
*
C
.
MICROS_PER_SECOND
);
segmentTitle
=
parseOptionalStringAttr
(
line
,
REGEX_MEDIA_TITLE
,
""
,
variableDefinitions
);
segmentTitle
=
parseOptionalStringAttr
(
line
,
REGEX_MEDIA_TITLE
,
""
,
variableDefinitions
);
}
else
if
(
line
.
startsWith
(
TAG_SKIP
))
{
}
else
if
(
line
.
startsWith
(
TAG_SKIP
))
{
int
skippedSegmentCount
=
parseIntAttr
(
line
,
REGEX_SKIPPED_SEGMENTS
);
int
skippedSegmentCount
=
parseIntAttr
(
line
,
REGEX_SKIPPED_SEGMENTS
);
...
@@ -1202,6 +1202,12 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
...
@@ -1202,6 +1202,12 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
return
defaultValue
;
return
defaultValue
;
}
}
private
static
long
parseTimeSecondsToUs
(
String
line
,
Pattern
pattern
)
throws
ParserException
{
String
timeValueSeconds
=
parseStringAttr
(
line
,
pattern
,
Collections
.
emptyMap
());
BigDecimal
timeValue
=
new
BigDecimal
(
timeValueSeconds
);
return
timeValue
.
multiply
(
new
BigDecimal
(
C
.
MICROS_PER_SECOND
)).
longValue
();
}
private
static
double
parseDoubleAttr
(
String
line
,
Pattern
pattern
)
throws
ParserException
{
private
static
double
parseDoubleAttr
(
String
line
,
Pattern
pattern
)
throws
ParserException
{
return
Double
.
parseDouble
(
parseStringAttr
(
line
,
pattern
,
Collections
.
emptyMap
()));
return
Double
.
parseDouble
(
parseStringAttr
(
line
,
pattern
,
Collections
.
emptyMap
()));
}
}
...
...
library/hls/src/test/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java
View file @
93620e47
...
@@ -77,6 +77,10 @@ public class HlsMediaPlaylistParserTest {
...
@@ -77,6 +77,10 @@ public class HlsMediaPlaylistParserTest {
+
"\n"
+
"\n"
+
"#EXTINF:7.975,\n"
+
"#EXTINF:7.975,\n"
+
"https://priv.example.com/fileSequence2683.ts\n"
+
"https://priv.example.com/fileSequence2683.ts\n"
+
"\n"
// 2.002 tests correct rounding, see https://github.com/google/ExoPlayer/issues/9575.
+
"#EXTINF:2.002,\n"
+
"https://priv.example.com/fileSequence2684.ts\n"
+
"#EXT-X-ENDLIST"
;
+
"#EXT-X-ENDLIST"
;
InputStream
inputStream
=
new
ByteArrayInputStream
(
Util
.
getUtf8Bytes
(
playlistString
));
InputStream
inputStream
=
new
ByteArrayInputStream
(
Util
.
getUtf8Bytes
(
playlistString
));
HlsPlaylist
playlist
=
new
HlsPlaylistParser
().
parse
(
playlistUri
,
inputStream
);
HlsPlaylist
playlist
=
new
HlsPlaylistParser
().
parse
(
playlistUri
,
inputStream
);
...
@@ -93,7 +97,7 @@ public class HlsMediaPlaylistParserTest {
...
@@ -93,7 +97,7 @@ public class HlsMediaPlaylistParserTest {
assertThat
(
mediaPlaylist
.
partTargetDurationUs
).
isEqualTo
(
C
.
TIME_UNSET
);
assertThat
(
mediaPlaylist
.
partTargetDurationUs
).
isEqualTo
(
C
.
TIME_UNSET
);
List
<
Segment
>
segments
=
mediaPlaylist
.
segments
;
List
<
Segment
>
segments
=
mediaPlaylist
.
segments
;
assertThat
(
segments
).
isNotNull
();
assertThat
(
segments
).
isNotNull
();
assertThat
(
segments
).
hasSize
(
5
);
assertThat
(
segments
).
hasSize
(
6
);
Segment
segment
=
segments
.
get
(
0
);
Segment
segment
=
segments
.
get
(
0
);
assertThat
(
mediaPlaylist
.
discontinuitySequence
+
segment
.
relativeDiscontinuitySequence
)
assertThat
(
mediaPlaylist
.
discontinuitySequence
+
segment
.
relativeDiscontinuitySequence
)
...
@@ -152,6 +156,9 @@ public class HlsMediaPlaylistParserTest {
...
@@ -152,6 +156,9 @@ public class HlsMediaPlaylistParserTest {
assertThat
(
segment
.
byteRangeLength
).
isEqualTo
(
C
.
LENGTH_UNSET
);
assertThat
(
segment
.
byteRangeLength
).
isEqualTo
(
C
.
LENGTH_UNSET
);
assertThat
(
segment
.
byteRangeOffset
).
isEqualTo
(
0
);
assertThat
(
segment
.
byteRangeOffset
).
isEqualTo
(
0
);
assertThat
(
segment
.
url
).
isEqualTo
(
"https://priv.example.com/fileSequence2683.ts"
);
assertThat
(
segment
.
url
).
isEqualTo
(
"https://priv.example.com/fileSequence2683.ts"
);
segment
=
segments
.
get
(
5
);
assertThat
(
segment
.
durationUs
).
isEqualTo
(
2002000
);
}
}
@Test
@Test
...
@@ -389,7 +396,7 @@ public class HlsMediaPlaylistParserTest {
...
@@ -389,7 +396,7 @@ public class HlsMediaPlaylistParserTest {
.
parse
(
playlistUri
,
inputStream
);
.
parse
(
playlistUri
,
inputStream
);
assertThat
(
playlist
.
segments
).
hasSize
(
3
);
assertThat
(
playlist
.
segments
).
hasSize
(
3
);
assertThat
(
playlist
.
segments
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
40000
79
);
assertThat
(
playlist
.
segments
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
40000
80
);
assertThat
(
previousPlaylist
.
segments
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
0
);
assertThat
(
previousPlaylist
.
segments
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
0
);
assertThat
(
previousPlaylist
.
segments
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
previousPlaylist
.
segments
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
previousPlaylist
.
segments
.
get
(
2
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
previousPlaylist
.
segments
.
get
(
2
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
...
@@ -448,12 +455,12 @@ public class HlsMediaPlaylistParserTest {
...
@@ -448,12 +455,12 @@ public class HlsMediaPlaylistParserTest {
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
2000000
);
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
2000000
);
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
0
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
40000
79
);
assertThat
(
playlist
.
segments
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
40000
80
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
0
).
relativeStartTimeUs
).
isEqualTo
(
40000
79
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
0
).
relativeStartTimeUs
).
isEqualTo
(
40000
80
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
60000
79
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeStartTimeUs
).
isEqualTo
(
60000
80
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
segments
.
get
(
1
).
parts
.
get
(
1
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
trailingParts
.
get
(
0
).
relativeStartTimeUs
).
isEqualTo
(
80001
58
);
assertThat
(
playlist
.
trailingParts
.
get
(
0
).
relativeStartTimeUs
).
isEqualTo
(
80001
60
);
assertThat
(
playlist
.
trailingParts
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
assertThat
(
playlist
.
trailingParts
.
get
(
0
).
relativeDiscontinuitySequence
).
isEqualTo
(
1
);
}
}
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameworkMuxer.java
View file @
93620e47
...
@@ -19,6 +19,7 @@ import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
...
@@ -19,6 +19,7 @@ import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
SDK_INT
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
SDK_INT
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Util
.
castNonNull
;
import
android.annotation.SuppressLint
;
import
android.media.MediaCodec
;
import
android.media.MediaCodec
;
import
android.media.MediaFormat
;
import
android.media.MediaFormat
;
import
android.media.MediaMuxer
;
import
android.media.MediaMuxer
;
...
@@ -122,6 +123,7 @@ import java.nio.ByteBuffer;
...
@@ -122,6 +123,7 @@ import java.nio.ByteBuffer;
return
mediaMuxer
.
addTrack
(
mediaFormat
);
return
mediaMuxer
.
addTrack
(
mediaFormat
);
}
}
@SuppressLint
(
"WrongConstant"
)
// C.BUFFER_FLAG_KEY_FRAME equals MediaCodec.BUFFER_FLAG_KEY_FRAME.
@Override
@Override
public
void
writeSampleData
(
public
void
writeSampleData
(
int
trackIndex
,
ByteBuffer
data
,
boolean
isKeyFrame
,
long
presentationTimeUs
)
{
int
trackIndex
,
ByteBuffer
data
,
boolean
isKeyFrame
,
long
presentationTimeUs
)
{
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerAudioRenderer.java
View file @
93620e47
...
@@ -279,6 +279,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -279,6 +279,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
int
result
=
readSource
(
getFormatHolder
(),
decoderInputBuffer
,
/* readFlags= */
0
);
int
result
=
readSource
(
getFormatHolder
(),
decoderInputBuffer
,
/* readFlags= */
0
);
switch
(
result
)
{
switch
(
result
)
{
case
C
.
RESULT_BUFFER_READ
:
case
C
.
RESULT_BUFFER_READ
:
decoderInputBuffer
.
timeUs
-=
streamOffsetUs
;
mediaClock
.
updateTimeForTrackType
(
getTrackType
(),
decoderInputBuffer
.
timeUs
);
mediaClock
.
updateTimeForTrackType
(
getTrackType
(),
decoderInputBuffer
.
timeUs
);
decoderInputBuffer
.
flip
();
decoderInputBuffer
.
flip
();
decoder
.
queueInputBuffer
(
decoderInputBuffer
);
decoder
.
queueInputBuffer
(
decoderInputBuffer
);
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerBaseRenderer.java
View file @
93620e47
...
@@ -34,6 +34,7 @@ import com.google.android.exoplayer2.util.MimeTypes;
...
@@ -34,6 +34,7 @@ import com.google.android.exoplayer2.util.MimeTypes;
protected
final
Transformation
transformation
;
protected
final
Transformation
transformation
;
protected
boolean
isRendererStarted
;
protected
boolean
isRendererStarted
;
protected
long
streamOffsetUs
;
public
TransformerBaseRenderer
(
public
TransformerBaseRenderer
(
int
trackType
,
int
trackType
,
...
@@ -47,6 +48,12 @@ import com.google.android.exoplayer2.util.MimeTypes;
...
@@ -47,6 +48,12 @@ import com.google.android.exoplayer2.util.MimeTypes;
}
}
@Override
@Override
protected
void
onStreamChanged
(
Format
[]
formats
,
long
startPositionUs
,
long
offsetUs
)
throws
ExoPlaybackException
{
this
.
streamOffsetUs
=
offsetUs
;
}
@Override
@C
.
FormatSupport
@C
.
FormatSupport
public
final
int
supportsFormat
(
Format
format
)
{
public
final
int
supportsFormat
(
Format
format
)
{
@Nullable
String
sampleMimeType
=
format
.
sampleMimeType
;
@Nullable
String
sampleMimeType
=
format
.
sampleMimeType
;
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerMuxingVideoRenderer.java
View file @
93620e47
...
@@ -117,6 +117,7 @@ import java.nio.ByteBuffer;
...
@@ -117,6 +117,7 @@ import java.nio.ByteBuffer;
muxerWrapper
.
endTrack
(
getTrackType
());
muxerWrapper
.
endTrack
(
getTrackType
());
return
false
;
return
false
;
}
}
buffer
.
timeUs
-=
streamOffsetUs
;
mediaClock
.
updateTimeForTrackType
(
getTrackType
(),
buffer
.
timeUs
);
mediaClock
.
updateTimeForTrackType
(
getTrackType
(),
buffer
.
timeUs
);
ByteBuffer
data
=
checkNotNull
(
buffer
.
data
);
ByteBuffer
data
=
checkNotNull
(
buffer
.
data
);
data
.
flip
();
data
.
flip
();
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerTranscodingVideoRenderer.java
View file @
93620e47
...
@@ -320,6 +320,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -320,6 +320,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
case
C
.
RESULT_FORMAT_READ
:
case
C
.
RESULT_FORMAT_READ
:
throw
new
IllegalStateException
(
"Format changes are not supported."
);
throw
new
IllegalStateException
(
"Format changes are not supported."
);
case
C
.
RESULT_BUFFER_READ
:
case
C
.
RESULT_BUFFER_READ
:
decoderInputBuffer
.
timeUs
-=
streamOffsetUs
;
mediaClock
.
updateTimeForTrackType
(
getTrackType
(),
decoderInputBuffer
.
timeUs
);
mediaClock
.
updateTimeForTrackType
(
getTrackType
(),
decoderInputBuffer
.
timeUs
);
ByteBuffer
data
=
checkNotNull
(
decoderInputBuffer
.
data
);
ByteBuffer
data
=
checkNotNull
(
decoderInputBuffer
.
data
);
data
.
flip
();
data
.
flip
();
...
...
testdata/src/test/assets/audiosinkdumps/mka/bear-flac-16bit.mka.audiosink.dump
View file @
93620e47
...
@@ -3,89 +3,89 @@ config:
...
@@ -3,89 +3,89 @@ config:
channelCount = 2
channelCount = 2
sampleRate = 48000
sampleRate = 48000
buffer:
buffer:
time = 1000
time = 1000
000001000
data = 1217833679
data = 1217833679
buffer:
buffer:
time = 97000
time =
10000000
97000
data = 558614672
data = 558614672
buffer:
buffer:
time = 193000
time = 1
0000001
93000
data = -709714787
data = -709714787
buffer:
buffer:
time = 289000
time =
1000000
289000
data = 1367870571
data = 1367870571
buffer:
buffer:
time = 385000
time =
1000000
385000
data = -141229457
data = -141229457
buffer:
buffer:
time = 481000
time =
1000000
481000
data = 1287758361
data = 1287758361
buffer:
buffer:
time = 577000
time =
1000000
577000
data = 1125289147
data = 1125289147
buffer:
buffer:
time = 673000
time =
1000000
673000
data = -1677383475
data = -1677383475
buffer:
buffer:
time = 769000
time =
1000000
769000
data = 2130742861
data = 2130742861
buffer:
buffer:
time = 865000
time =
1000000
865000
data = -1292320253
data = -1292320253
buffer:
buffer:
time = 961000
time =
1000000
961000
data = -456587163
data = -456587163
buffer:
buffer:
time = 1057000
time = 10
000010
57000
data = 748981534
data = 748981534
buffer:
buffer:
time = 1153000
time = 1
000001
153000
data = 1550456016
data = 1550456016
buffer:
buffer:
time = 1249000
time = 1
000001
249000
data = 1657906039
data = 1657906039
buffer:
buffer:
time = 1345000
time = 1
000001
345000
data = -762677083
data = -762677083
buffer:
buffer:
time = 1441000
time = 1
000001
441000
data = -1343810763
data = -1343810763
buffer:
buffer:
time = 1537000
time = 1
000001
537000
data = 1137318783
data = 1137318783
buffer:
buffer:
time = 1633000
time = 1
000001
633000
data = -1891318229
data = -1891318229
buffer:
buffer:
time = 1729000
time = 1
000001
729000
data = -472068495
data = -472068495
buffer:
buffer:
time = 1825000
time = 1
000001
825000
data = 832315001
data = 832315001
buffer:
buffer:
time = 1921000
time = 1
000001
921000
data = 2054935175
data = 2054935175
buffer:
buffer:
time = 2017000
time =
100000
2017000
data = 57921641
data = 57921641
buffer:
buffer:
time = 2113000
time =
100000
2113000
data = 2132759067
data = 2132759067
buffer:
buffer:
time = 2209000
time =
100000
2209000
data = -1742540521
data = -1742540521
buffer:
buffer:
time = 2305000
time =
100000
2305000
data = 1657024301
data = 1657024301
buffer:
buffer:
time = 2401000
time =
100000
2401000
data = -585080145
data = -585080145
buffer:
buffer:
time = 2497000
time =
100000
2497000
data = 427271397
data = 427271397
buffer:
buffer:
time = 2593000
time =
100000
2593000
data = -364201340
data = -364201340
buffer:
buffer:
time = 2689000
time =
100000
2689000
data = -627965287
data = -627965287
testdata/src/test/assets/audiosinkdumps/mka/bear-flac-24bit.mka.audiosink.dump
View file @
93620e47
...
@@ -3,89 +3,89 @@ config:
...
@@ -3,89 +3,89 @@ config:
channelCount = 2
channelCount = 2
sampleRate = 48000
sampleRate = 48000
buffer:
buffer:
time = 0
time =
100000000000
0
data = 225023649
data = 225023649
buffer:
buffer:
time = 96000
time =
10000000
96000
data = 455106306
data = 455106306
buffer:
buffer:
time = 192000
time = 1
0000001
92000
data = 2025727297
data = 2025727297
buffer:
buffer:
time = 288000
time =
1000000
288000
data = 758514657
data = 758514657
buffer:
buffer:
time = 384000
time =
1000000
384000
data = 1044986473
data = 1044986473
buffer:
buffer:
time = 480000
time =
1000000
480000
data = -2030029695
data = -2030029695
buffer:
buffer:
time = 576000
time =
1000000
576000
data = 1907053281
data = 1907053281
buffer:
buffer:
time = 672000
time =
1000000
672000
data = -1974954431
data = -1974954431
buffer:
buffer:
time = 768000
time =
1000000
768000
data = -206248383
data = -206248383
buffer:
buffer:
time = 864000
time =
1000000
864000
data = 1484984417
data = 1484984417
buffer:
buffer:
time = 960000
time =
1000000
960000
data = -1306117439
data = -1306117439
buffer:
buffer:
time = 1056000
time = 10
000010
56000
data = 692829792
data = 692829792
buffer:
buffer:
time = 1152000
time = 1
000001
152000
data = 1070563058
data = 1070563058
buffer:
buffer:
time = 1248000
time = 1
000001
248000
data = -1444096479
data = -1444096479
buffer:
buffer:
time = 1344000
time = 1
000001
344000
data = 1753016419
data = 1753016419
buffer:
buffer:
time = 1440000
time = 1
000001
440000
data = 1947797953
data = 1947797953
buffer:
buffer:
time = 1536000
time = 1
000001
536000
data = 266121411
data = 266121411
buffer:
buffer:
time = 1632000
time = 1
000001
632000
data = 1275494369
data = 1275494369
buffer:
buffer:
time = 1728000
time = 1
000001
728000
data = 372077825
data = 372077825
buffer:
buffer:
time = 1824000
time = 1
000001
824000
data = -993079679
data = -993079679
buffer:
buffer:
time = 1920000
time = 1
000001
920000
data = 177307937
data = 177307937
buffer:
buffer:
time = 2016000
time =
100000
2016000
data = 2037083009
data = 2037083009
buffer:
buffer:
time = 2112000
time =
100000
2112000
data = -435776287
data = -435776287
buffer:
buffer:
time = 2208000
time =
100000
2208000
data = 1867447329
data = 1867447329
buffer:
buffer:
time = 2304000
time =
100000
2304000
data = 1884495937
data = 1884495937
buffer:
buffer:
time = 2400000
time =
100000
2400000
data = -804673375
data = -804673375
buffer:
buffer:
time = 2496000
time =
100000
2496000
data = -588531007
data = -588531007
buffer:
buffer:
time = 2592000
time =
100000
2592000
data = -1064642970
data = -1064642970
buffer:
buffer:
time = 2688000
time =
100000
2688000
data = -1771406207
data = -1771406207
testdata/src/test/assets/extractordumps/mp4/sample_fragmented.mp4.0.dump
View file @
93620e47
...
@@ -20,7 +20,7 @@ track 0:
...
@@ -20,7 +20,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -32,7 +32,7 @@ track 0:
...
@@ -32,7 +32,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -48,7 +48,7 @@ track 0:
...
@@ -48,7 +48,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -56,7 +56,7 @@ track 0:
...
@@ -56,7 +56,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -68,7 +68,7 @@ track 0:
...
@@ -68,7 +68,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -80,7 +80,7 @@ track 0:
...
@@ -80,7 +80,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -96,7 +96,7 @@ track 0:
...
@@ -96,7 +96,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -104,7 +104,7 @@ track 0:
...
@@ -104,7 +104,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -116,7 +116,7 @@ track 0:
...
@@ -116,7 +116,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -128,7 +128,7 @@ track 0:
...
@@ -128,7 +128,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented.mp4.unknown_length.dump
View file @
93620e47
...
@@ -20,7 +20,7 @@ track 0:
...
@@ -20,7 +20,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -32,7 +32,7 @@ track 0:
...
@@ -32,7 +32,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -48,7 +48,7 @@ track 0:
...
@@ -48,7 +48,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -56,7 +56,7 @@ track 0:
...
@@ -56,7 +56,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -68,7 +68,7 @@ track 0:
...
@@ -68,7 +68,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -80,7 +80,7 @@ track 0:
...
@@ -80,7 +80,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -96,7 +96,7 @@ track 0:
...
@@ -96,7 +96,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -104,7 +104,7 @@ track 0:
...
@@ -104,7 +104,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -116,7 +116,7 @@ track 0:
...
@@ -116,7 +116,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -128,7 +128,7 @@ track 0:
...
@@ -128,7 +128,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.0.dump
View file @
93620e47
...
@@ -23,7 +23,7 @@ track 0:
...
@@ -23,7 +23,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -35,7 +35,7 @@ track 0:
...
@@ -35,7 +35,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -51,7 +51,7 @@ track 0:
...
@@ -51,7 +51,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -59,7 +59,7 @@ track 0:
...
@@ -59,7 +59,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -71,7 +71,7 @@ track 0:
...
@@ -71,7 +71,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -83,7 +83,7 @@ track 0:
...
@@ -83,7 +83,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -99,7 +99,7 @@ track 0:
...
@@ -99,7 +99,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -107,7 +107,7 @@ track 0:
...
@@ -107,7 +107,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -119,7 +119,7 @@ track 0:
...
@@ -119,7 +119,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -131,7 +131,7 @@ track 0:
...
@@ -131,7 +131,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.1.dump
View file @
93620e47
...
@@ -23,7 +23,7 @@ track 0:
...
@@ -23,7 +23,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -35,7 +35,7 @@ track 0:
...
@@ -35,7 +35,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -51,7 +51,7 @@ track 0:
...
@@ -51,7 +51,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -59,7 +59,7 @@ track 0:
...
@@ -59,7 +59,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -71,7 +71,7 @@ track 0:
...
@@ -71,7 +71,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -83,7 +83,7 @@ track 0:
...
@@ -83,7 +83,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -99,7 +99,7 @@ track 0:
...
@@ -99,7 +99,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -107,7 +107,7 @@ track 0:
...
@@ -107,7 +107,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -119,7 +119,7 @@ track 0:
...
@@ -119,7 +119,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -131,7 +131,7 @@ track 0:
...
@@ -131,7 +131,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.2.dump
View file @
93620e47
...
@@ -23,7 +23,7 @@ track 0:
...
@@ -23,7 +23,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -35,7 +35,7 @@ track 0:
...
@@ -35,7 +35,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -51,7 +51,7 @@ track 0:
...
@@ -51,7 +51,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -59,7 +59,7 @@ track 0:
...
@@ -59,7 +59,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -71,7 +71,7 @@ track 0:
...
@@ -71,7 +71,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -83,7 +83,7 @@ track 0:
...
@@ -83,7 +83,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -99,7 +99,7 @@ track 0:
...
@@ -99,7 +99,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -107,7 +107,7 @@ track 0:
...
@@ -107,7 +107,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -119,7 +119,7 @@ track 0:
...
@@ -119,7 +119,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -131,7 +131,7 @@ track 0:
...
@@ -131,7 +131,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.3.dump
View file @
93620e47
...
@@ -23,7 +23,7 @@ track 0:
...
@@ -23,7 +23,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -35,7 +35,7 @@ track 0:
...
@@ -35,7 +35,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -51,7 +51,7 @@ track 0:
...
@@ -51,7 +51,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -59,7 +59,7 @@ track 0:
...
@@ -59,7 +59,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -71,7 +71,7 @@ track 0:
...
@@ -71,7 +71,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -83,7 +83,7 @@ track 0:
...
@@ -83,7 +83,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -99,7 +99,7 @@ track 0:
...
@@ -99,7 +99,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -107,7 +107,7 @@ track 0:
...
@@ -107,7 +107,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -119,7 +119,7 @@ track 0:
...
@@ -119,7 +119,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -131,7 +131,7 @@ track 0:
...
@@ -131,7 +131,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_seekable.mp4.unknown_length.dump
View file @
93620e47
...
@@ -23,7 +23,7 @@ track 0:
...
@@ -23,7 +23,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -35,7 +35,7 @@ track 0:
...
@@ -35,7 +35,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -51,7 +51,7 @@ track 0:
...
@@ -51,7 +51,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -59,7 +59,7 @@ track 0:
...
@@ -59,7 +59,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -71,7 +71,7 @@ track 0:
...
@@ -71,7 +71,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -83,7 +83,7 @@ track 0:
...
@@ -83,7 +83,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -99,7 +99,7 @@ track 0:
...
@@ -99,7 +99,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -107,7 +107,7 @@ track 0:
...
@@ -107,7 +107,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -119,7 +119,7 @@ track 0:
...
@@ -119,7 +119,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -131,7 +131,7 @@ track 0:
...
@@ -131,7 +131,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sei.mp4.0.dump
View file @
93620e47
...
@@ -20,7 +20,7 @@ track 0:
...
@@ -20,7 +20,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -32,7 +32,7 @@ track 0:
...
@@ -32,7 +32,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -48,7 +48,7 @@ track 0:
...
@@ -48,7 +48,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -56,7 +56,7 @@ track 0:
...
@@ -56,7 +56,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -68,7 +68,7 @@ track 0:
...
@@ -68,7 +68,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -80,7 +80,7 @@ track 0:
...
@@ -80,7 +80,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -96,7 +96,7 @@ track 0:
...
@@ -96,7 +96,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -104,7 +104,7 @@ track 0:
...
@@ -104,7 +104,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -116,7 +116,7 @@ track 0:
...
@@ -116,7 +116,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -128,7 +128,7 @@ track 0:
...
@@ -128,7 +128,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sei.mp4.unknown_length.dump
View file @
93620e47
...
@@ -20,7 +20,7 @@ track 0:
...
@@ -20,7 +20,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -32,7 +32,7 @@ track 0:
...
@@ -32,7 +32,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -48,7 +48,7 @@ track 0:
...
@@ -48,7 +48,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -56,7 +56,7 @@ track 0:
...
@@ -56,7 +56,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -68,7 +68,7 @@ track 0:
...
@@ -68,7 +68,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -80,7 +80,7 @@ track 0:
...
@@ -80,7 +80,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -96,7 +96,7 @@ track 0:
...
@@ -96,7 +96,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -104,7 +104,7 @@ track 0:
...
@@ -104,7 +104,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -116,7 +116,7 @@ track 0:
...
@@ -116,7 +116,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -128,7 +128,7 @@ track 0:
...
@@ -128,7 +128,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sideloaded_track.mp4.0.dump
View file @
93620e47
...
@@ -13,7 +13,7 @@ track 0:
...
@@ -13,7 +13,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -25,7 +25,7 @@ track 0:
...
@@ -25,7 +25,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -41,7 +41,7 @@ track 0:
...
@@ -41,7 +41,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -49,7 +49,7 @@ track 0:
...
@@ -49,7 +49,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -61,7 +61,7 @@ track 0:
...
@@ -61,7 +61,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -73,7 +73,7 @@ track 0:
...
@@ -73,7 +73,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -89,7 +89,7 @@ track 0:
...
@@ -89,7 +89,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -97,7 +97,7 @@ track 0:
...
@@ -97,7 +97,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -109,7 +109,7 @@ track 0:
...
@@ -109,7 +109,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -121,7 +121,7 @@ track 0:
...
@@ -121,7 +121,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sideloaded_track.mp4.unknown_length.dump
View file @
93620e47
...
@@ -13,7 +13,7 @@ track 0:
...
@@ -13,7 +13,7 @@ track 0:
flags = 1
flags = 1
data = length 38070, hash B58E1AEE
data = length 38070, hash B58E1AEE
sample 1:
sample 1:
time = 200
199
time = 200
200
flags = 0
flags = 0
data = length 8340, hash 8AC449FF
data = length 8340, hash 8AC449FF
sample 2:
sample 2:
...
@@ -25,7 +25,7 @@ track 0:
...
@@ -25,7 +25,7 @@ track 0:
flags = 0
flags = 0
data = length 469, hash D6E0A200
data = length 469, hash D6E0A200
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 564, hash E5F56C5B
data = length 564, hash E5F56C5B
sample 5:
sample 5:
...
@@ -41,7 +41,7 @@ track 0:
...
@@ -41,7 +41,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash B9CCE047
data = length 455, hash B9CCE047
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 467, hash 69806D94
data = length 467, hash 69806D94
sample 9:
sample 9:
...
@@ -49,7 +49,7 @@ track 0:
...
@@ -49,7 +49,7 @@ track 0:
flags = 0
flags = 0
data = length 4549, hash 3944F501
data = length 4549, hash 3944F501
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1087, hash 491BF106
data = length 1087, hash 491BF106
sample 11:
sample 11:
...
@@ -61,7 +61,7 @@ track 0:
...
@@ -61,7 +61,7 @@ track 0:
flags = 0
flags = 0
data = length 455, hash 8A0610
data = length 455, hash 8A0610
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5190, hash B9031D8
data = length 5190, hash B9031D8
sample 14:
sample 14:
...
@@ -73,7 +73,7 @@ track 0:
...
@@ -73,7 +73,7 @@ track 0:
flags = 0
flags = 0
data = length 653, hash 8494F326
data = length 653, hash 8494F326
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 485, hash 2CCC85F4
data = length 485, hash 2CCC85F4
sample 17:
sample 17:
...
@@ -89,7 +89,7 @@ track 0:
...
@@ -89,7 +89,7 @@ track 0:
flags = 0
flags = 0
data = length 640, hash F664125B
data = length 640, hash F664125B
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 491, hash B5930C7C
data = length 491, hash B5930C7C
sample 21:
sample 21:
...
@@ -97,7 +97,7 @@ track 0:
...
@@ -97,7 +97,7 @@ track 0:
flags = 0
flags = 0
data = length 2989, hash 92CF4FCF
data = length 2989, hash 92CF4FCF
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 838, hash 294A3451
data = length 838, hash 294A3451
sample 23:
sample 23:
...
@@ -109,7 +109,7 @@ track 0:
...
@@ -109,7 +109,7 @@ track 0:
flags = 0
flags = 0
data = length 329, hash A654FFA1
data = length 329, hash A654FFA1
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1517, hash 5F7EBF8B
data = length 1517, hash 5F7EBF8B
sample 26:
sample 26:
...
@@ -121,7 +121,7 @@ track 0:
...
@@ -121,7 +121,7 @@ track 0:
flags = 0
flags = 0
data = length 415, hash B31BBC3B
data = length 415, hash B31BBC3B
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 415, hash 850DFEA3
data = length 415, hash 850DFEA3
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_partially_fragmented.mp4.0.dump
View file @
93620e47
...
@@ -32,7 +32,7 @@ track 0:
...
@@ -32,7 +32,7 @@ track 0:
flags = 536870912
flags = 536870912
data = length 5867, hash 56F9EE87
data = length 5867, hash 56F9EE87
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 570, hash 984421BD
data = length 570, hash 984421BD
sample 5:
sample 5:
...
@@ -48,7 +48,7 @@ track 0:
...
@@ -48,7 +48,7 @@ track 0:
flags = 0
flags = 0
data = length 4310, hash 291E6161
data = length 4310, hash 291E6161
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 497, hash 398CBFAA
data = length 497, hash 398CBFAA
sample 9:
sample 9:
...
@@ -56,7 +56,7 @@ track 0:
...
@@ -56,7 +56,7 @@ track 0:
flags = 0
flags = 0
data = length 4449, hash 322CAA2B
data = length 4449, hash 322CAA2B
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1076, hash B479B634
data = length 1076, hash B479B634
sample 11:
sample 11:
...
@@ -68,7 +68,7 @@ track 0:
...
@@ -68,7 +68,7 @@ track 0:
flags = 0
flags = 0
data = length 463, hash A85F9769
data = length 463, hash A85F9769
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5339, hash F232195D
data = length 5339, hash F232195D
sample 14:
sample 14:
...
@@ -80,7 +80,7 @@ track 0:
...
@@ -80,7 +80,7 @@ track 0:
flags = 0
flags = 0
data = length 689, hash 3EB753A3
data = length 689, hash 3EB753A3
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 516, hash E6DF9C1C
data = length 516, hash E6DF9C1C
sample 17:
sample 17:
...
@@ -96,7 +96,7 @@ track 0:
...
@@ -96,7 +96,7 @@ track 0:
flags = 0
flags = 0
data = length 625, hash ED1C8EF1
data = length 625, hash ED1C8EF1
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 492, hash E6E066EA
data = length 492, hash E6E066EA
sample 21:
sample 21:
...
@@ -104,7 +104,7 @@ track 0:
...
@@ -104,7 +104,7 @@ track 0:
flags = 0
flags = 0
data = length 2973, hash A3C54C3B
data = length 2973, hash A3C54C3B
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 833, hash 41CA807D
data = length 833, hash 41CA807D
sample 23:
sample 23:
...
@@ -116,7 +116,7 @@ track 0:
...
@@ -116,7 +116,7 @@ track 0:
flags = 0
flags = 0
data = length 384, hash A0E8FA50
data = length 384, hash A0E8FA50
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1450, hash 92741C3B
data = length 1450, hash 92741C3B
sample 26:
sample 26:
...
@@ -128,7 +128,7 @@ track 0:
...
@@ -128,7 +128,7 @@ track 0:
flags = 0
flags = 0
data = length 413, hash 886904C
data = length 413, hash 886904C
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 427, hash FC2FA8CC
data = length 427, hash FC2FA8CC
sample 29:
sample 29:
...
...
testdata/src/test/assets/extractordumps/mp4/sample_partially_fragmented.mp4.unknown_length.dump
View file @
93620e47
...
@@ -32,7 +32,7 @@ track 0:
...
@@ -32,7 +32,7 @@ track 0:
flags = 536870912
flags = 536870912
data = length 5867, hash 56F9EE87
data = length 5867, hash 56F9EE87
sample 4:
sample 4:
time = 16683
2
time = 16683
3
flags = 0
flags = 0
data = length 570, hash 984421BD
data = length 570, hash 984421BD
sample 5:
sample 5:
...
@@ -48,7 +48,7 @@ track 0:
...
@@ -48,7 +48,7 @@ track 0:
flags = 0
flags = 0
data = length 4310, hash 291E6161
data = length 4310, hash 291E6161
sample 8:
sample 8:
time = 300
299
time = 300
300
flags = 0
flags = 0
data = length 497, hash 398CBFAA
data = length 497, hash 398CBFAA
sample 9:
sample 9:
...
@@ -56,7 +56,7 @@ track 0:
...
@@ -56,7 +56,7 @@ track 0:
flags = 0
flags = 0
data = length 4449, hash 322CAA2B
data = length 4449, hash 322CAA2B
sample 10:
sample 10:
time = 400
399
time = 400
400
flags = 0
flags = 0
data = length 1076, hash B479B634
data = length 1076, hash B479B634
sample 11:
sample 11:
...
@@ -68,7 +68,7 @@ track 0:
...
@@ -68,7 +68,7 @@ track 0:
flags = 0
flags = 0
data = length 463, hash A85F9769
data = length 463, hash A85F9769
sample 13:
sample 13:
time = 600
599
time = 600
600
flags = 0
flags = 0
data = length 5339, hash F232195D
data = length 5339, hash F232195D
sample 14:
sample 14:
...
@@ -80,7 +80,7 @@ track 0:
...
@@ -80,7 +80,7 @@ track 0:
flags = 0
flags = 0
data = length 689, hash 3EB753A3
data = length 689, hash 3EB753A3
sample 16:
sample 16:
time = 56723
2
time = 56723
3
flags = 0
flags = 0
data = length 516, hash E6DF9C1C
data = length 516, hash E6DF9C1C
sample 17:
sample 17:
...
@@ -96,7 +96,7 @@ track 0:
...
@@ -96,7 +96,7 @@ track 0:
flags = 0
flags = 0
data = length 625, hash ED1C8EF1
data = length 625, hash ED1C8EF1
sample 20:
sample 20:
time = 700
699
time = 700
700
flags = 0
flags = 0
data = length 492, hash E6E066EA
data = length 492, hash E6E066EA
sample 21:
sample 21:
...
@@ -104,7 +104,7 @@ track 0:
...
@@ -104,7 +104,7 @@ track 0:
flags = 0
flags = 0
data = length 2973, hash A3C54C3B
data = length 2973, hash A3C54C3B
sample 22:
sample 22:
time = 800
799
time = 800
800
flags = 0
flags = 0
data = length 833, hash 41CA807D
data = length 833, hash 41CA807D
sample 23:
sample 23:
...
@@ -116,7 +116,7 @@ track 0:
...
@@ -116,7 +116,7 @@ track 0:
flags = 0
flags = 0
data = length 384, hash A0E8FA50
data = length 384, hash A0E8FA50
sample 25:
sample 25:
time = 100
0999
time = 100
1000
flags = 0
flags = 0
data = length 1450, hash 92741C3B
data = length 1450, hash 92741C3B
sample 26:
sample 26:
...
@@ -128,7 +128,7 @@ track 0:
...
@@ -128,7 +128,7 @@ track 0:
flags = 0
flags = 0
data = length 413, hash 886904C
data = length 413, hash 886904C
sample 28:
sample 28:
time = 96763
2
time = 96763
3
flags = 0
flags = 0
data = length 427, hash FC2FA8CC
data = length 427, hash FC2FA8CC
sample 29:
sample 29:
...
...
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