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
42057cc9
authored
Oct 27, 2022
by
kimvde
Committed by
microkatz
Oct 31, 2022
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add test for muxer watchdog timer
PiperOrigin-RevId: 484298261
parent
136addf6
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
100 additions
and
0 deletions
library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java
library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java
View file @
42057cc9
...
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify;
...
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify;
import
android.content.Context
;
import
android.content.Context
;
import
android.media.MediaCrypto
;
import
android.media.MediaCrypto
;
import
android.media.MediaFormat
;
import
android.media.MediaFormat
;
import
android.net.Uri
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.HandlerThread
;
import
android.os.HandlerThread
;
import
android.os.Looper
;
import
android.os.Looper
;
...
@@ -42,6 +43,14 @@ import androidx.test.core.app.ApplicationProvider;
...
@@ -42,6 +43,14 @@ import androidx.test.core.app.ApplicationProvider;
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.MediaItem
;
import
com.google.android.exoplayer2.MediaItem
;
import
com.google.android.exoplayer2.extractor.DefaultExtractorsFactory
;
import
com.google.android.exoplayer2.extractor.Extractor
;
import
com.google.android.exoplayer2.extractor.ExtractorInput
;
import
com.google.android.exoplayer2.extractor.ExtractorOutput
;
import
com.google.android.exoplayer2.extractor.ExtractorsFactory
;
import
com.google.android.exoplayer2.extractor.PositionHolder
;
import
com.google.android.exoplayer2.source.DefaultMediaSourceFactory
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.testutil.DumpFileAsserts
;
import
com.google.android.exoplayer2.testutil.DumpFileAsserts
;
import
com.google.android.exoplayer2.testutil.FakeClock
;
import
com.google.android.exoplayer2.testutil.FakeClock
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.MimeTypes
;
...
@@ -54,7 +63,9 @@ import java.nio.ByteBuffer;
...
@@ -54,7 +63,9 @@ import java.nio.ByteBuffer;
import
java.nio.file.Files
;
import
java.nio.file.Files
;
import
java.nio.file.Paths
;
import
java.nio.file.Paths
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.CountDownLatch
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
java.util.concurrent.atomic.AtomicInteger
;
...
@@ -478,6 +489,26 @@ public final class TransformerEndToEndTest {
...
@@ -478,6 +489,26 @@ public final class TransformerEndToEndTest {
}
}
@Test
@Test
public
void
startTransformation_withSlowOutputSampleRate_completesWithError
()
throws
Exception
{
MediaSource
.
Factory
mediaSourceFactory
=
new
DefaultMediaSourceFactory
(
context
,
new
SlowExtractorsFactory
(
/* delayBetweenReadsMs= */
10
));
Muxer
.
Factory
muxerFactory
=
new
TestMuxerFactory
(
/* maxDelayBetweenSamplesMs= */
1
);
Transformer
transformer
=
createTransformerBuilder
(
/* enableFallback= */
false
)
.
setMediaSourceFactory
(
mediaSourceFactory
)
.
setMuxerFactory
(
muxerFactory
)
.
build
();
MediaItem
mediaItem
=
MediaItem
.
fromUri
(
ASSET_URI_PREFIX
+
FILE_AUDIO_VIDEO
);
transformer
.
startTransformation
(
mediaItem
,
outputPath
);
TransformationException
exception
=
TransformerTestRunner
.
runUntilError
(
transformer
);
assertThat
(
exception
).
hasCauseThat
().
isInstanceOf
(
IllegalStateException
.
class
);
assertThat
(
exception
.
errorCode
).
isEqualTo
(
TransformationException
.
ERROR_CODE_MUXING_FAILED
);
}
@Test
public
void
startTransformation_withUnsetMaxDelayBetweenSamples_completesSuccessfully
()
public
void
startTransformation_withUnsetMaxDelayBetweenSamples_completesSuccessfully
()
throws
Exception
{
throws
Exception
{
Muxer
.
Factory
muxerFactory
=
new
TestMuxerFactory
(
/* maxDelayBetweenSamplesMs= */
C
.
TIME_UNSET
);
Muxer
.
Factory
muxerFactory
=
new
TestMuxerFactory
(
/* maxDelayBetweenSamplesMs= */
C
.
TIME_UNSET
);
...
@@ -897,4 +928,73 @@ public final class TransformerEndToEndTest {
...
@@ -897,4 +928,73 @@ public final class TransformerEndToEndTest {
return
defaultMuxerFactory
.
getSupportedSampleMimeTypes
(
trackType
);
return
defaultMuxerFactory
.
getSupportedSampleMimeTypes
(
trackType
);
}
}
}
}
private
static
final
class
SlowExtractorsFactory
implements
ExtractorsFactory
{
private
final
long
delayBetweenReadsMs
;
private
final
ExtractorsFactory
defaultExtractorsFactory
;
public
SlowExtractorsFactory
(
long
delayBetweenReadsMs
)
{
this
.
delayBetweenReadsMs
=
delayBetweenReadsMs
;
this
.
defaultExtractorsFactory
=
new
DefaultExtractorsFactory
();
}
@Override
public
Extractor
[]
createExtractors
()
{
return
slowDownExtractors
(
defaultExtractorsFactory
.
createExtractors
());
}
@Override
public
Extractor
[]
createExtractors
(
Uri
uri
,
Map
<
String
,
List
<
String
>>
responseHeaders
)
{
return
slowDownExtractors
(
defaultExtractorsFactory
.
createExtractors
(
uri
,
responseHeaders
));
}
private
Extractor
[]
slowDownExtractors
(
Extractor
[]
extractors
)
{
Extractor
[]
slowExtractors
=
new
Extractor
[
extractors
.
length
];
Arrays
.
setAll
(
slowExtractors
,
i
->
new
SlowExtractor
(
extractors
[
i
],
delayBetweenReadsMs
));
return
slowExtractors
;
}
private
static
final
class
SlowExtractor
implements
Extractor
{
private
final
Extractor
extractor
;
private
final
long
delayBetweenReadsMs
;
public
SlowExtractor
(
Extractor
extractor
,
long
delayBetweenReadsMs
)
{
this
.
extractor
=
extractor
;
this
.
delayBetweenReadsMs
=
delayBetweenReadsMs
;
}
@Override
public
boolean
sniff
(
ExtractorInput
input
)
throws
IOException
{
return
extractor
.
sniff
(
input
);
}
@Override
public
void
init
(
ExtractorOutput
output
)
{
extractor
.
init
(
output
);
}
@Override
public
@ReadResult
int
read
(
ExtractorInput
input
,
PositionHolder
seekPosition
)
throws
IOException
{
try
{
Thread
.
sleep
(
delayBetweenReadsMs
);
}
catch
(
InterruptedException
e
)
{
throw
new
IllegalStateException
(
e
);
}
return
extractor
.
read
(
input
,
seekPosition
);
}
@Override
public
void
seek
(
long
position
,
long
timeUs
)
{
extractor
.
seek
(
position
,
timeUs
);
}
@Override
public
void
release
()
{
extractor
.
release
();
}
}
}
}
}
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