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
2f4e88d5
authored
Mar 02, 2020
by
ibaker
Committed by
Oliver Woodman
Mar 10, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Remove ByteBufferBackingArray suppression from metadata decoders
PiperOrigin-RevId: 298312222
parent
ea51e6ee
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
174 additions
and
29 deletions
library/common/src/main/java/com/google/android/exoplayer2/metadata/MetadataDecoder.java
library/common/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoder.java
library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java
library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java
library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java
library/common/src/test/java/com/google/android/exoplayer2/metadata/id3/Id3DecoderTest.java
library/core/src/main/java/com/google/android/exoplayer2/metadata/dvbsi/AppInfoTableDecoder.java
library/core/src/main/java/com/google/android/exoplayer2/metadata/icy/IcyDecoder.java
library/core/src/main/java/com/google/android/exoplayer2/metadata/scte35/SpliceInfoDecoder.java
library/core/src/test/java/com/google/android/exoplayer2/metadata/dvbsi/AppInfoTableDecoderTest.java
library/core/src/test/java/com/google/android/exoplayer2/metadata/icy/IcyDecoderTest.java
library/core/src/test/java/com/google/android/exoplayer2/metadata/scte35/SpliceInfoDecoderTest.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/TestUtil.java
library/common/src/main/java/com/google/android/exoplayer2/metadata/MetadataDecoder.java
View file @
2f4e88d5
...
@@ -27,7 +27,8 @@ public interface MetadataDecoder {
...
@@ -27,7 +27,8 @@ public interface MetadataDecoder {
* Decodes a {@link Metadata} element from the provided input buffer.
* Decodes a {@link Metadata} element from the provided input buffer.
*
*
* <p>Respects {@link ByteBuffer#limit()} of {@code inputBuffer.data}, but assumes {@link
* <p>Respects {@link ByteBuffer#limit()} of {@code inputBuffer.data}, but assumes {@link
* ByteBuffer#position()} and {@link ByteBuffer#arrayOffset()} are both zero.
* ByteBuffer#position()} and {@link ByteBuffer#arrayOffset()} are both zero and {@link
* ByteBuffer#hasArray()} is true.
*
*
* @param inputBuffer The input buffer to decode.
* @param inputBuffer The input buffer to decode.
* @return The decoded metadata object, or null if the metadata could not be decoded.
* @return The decoded metadata object, or null if the metadata could not be decoded.
...
...
library/common/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoder.java
View file @
2f4e88d5
...
@@ -26,13 +26,12 @@ import java.util.Arrays;
...
@@ -26,13 +26,12 @@ import java.util.Arrays;
/** Decodes data encoded by {@link EventMessageEncoder}. */
/** Decodes data encoded by {@link EventMessageEncoder}. */
public
final
class
EventMessageDecoder
implements
MetadataDecoder
{
public
final
class
EventMessageDecoder
implements
MetadataDecoder
{
@SuppressWarnings
(
"ByteBufferBackingArray"
)
@Override
@Override
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
byte
[]
data
=
buffer
.
array
();
Assertions
.
checkArgument
(
int
size
=
buffer
.
limit
(
);
buffer
.
position
()
==
0
&&
buffer
.
hasArray
()
&&
buffer
.
arrayOffset
()
==
0
);
return
new
Metadata
(
decode
(
new
ParsableByteArray
(
data
,
size
)));
return
new
Metadata
(
decode
(
new
ParsableByteArray
(
buffer
.
array
(),
buffer
.
limit
()
)));
}
}
public
EventMessage
decode
(
ParsableByteArray
emsgData
)
{
public
EventMessage
decode
(
ParsableByteArray
emsgData
)
{
...
...
library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java
View file @
2f4e88d5
...
@@ -96,11 +96,12 @@ public final class Id3Decoder implements MetadataDecoder {
...
@@ -96,11 +96,12 @@ public final class Id3Decoder implements MetadataDecoder {
this
.
framePredicate
=
framePredicate
;
this
.
framePredicate
=
framePredicate
;
}
}
@SuppressWarnings
(
"ByteBufferBackingArray"
)
@Override
@Override
@Nullable
@Nullable
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
Assertions
.
checkArgument
(
buffer
.
position
()
==
0
&&
buffer
.
hasArray
()
&&
buffer
.
arrayOffset
()
==
0
);
return
decode
(
buffer
.
array
(),
buffer
.
limit
());
return
decode
(
buffer
.
array
(),
buffer
.
limit
());
}
}
...
...
library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java
View file @
2f4e88d5
...
@@ -16,13 +16,14 @@
...
@@ -16,13 +16,14 @@
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
emsg
;
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
emsg
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createByteArray
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createByteArray
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createMetadataInputBuffer
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
joinByteArrays
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
joinByteArrays
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
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.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
java.nio.ByteBuffer
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -40,10 +41,8 @@ public final class EventMessageDecoderTest {
...
@@ -40,10 +41,8 @@ public final class EventMessageDecoderTest {
createByteArray
(
0
,
15
,
67
,
211
),
// id = 1000403
createByteArray
(
0
,
15
,
67
,
211
),
// id = 1000403
createByteArray
(
0
,
1
,
2
,
3
,
4
));
// message_data = {0, 1, 2, 3, 4}
createByteArray
(
0
,
1
,
2
,
3
,
4
));
// message_data = {0, 1, 2, 3, 4}
EventMessageDecoder
decoder
=
new
EventMessageDecoder
();
EventMessageDecoder
decoder
=
new
EventMessageDecoder
();
MetadataInputBuffer
buffer
=
new
MetadataInputBuffer
();
buffer
.
data
=
ByteBuffer
.
allocate
(
rawEmsgBody
.
length
).
put
(
rawEmsgBody
);
Metadata
metadata
=
decoder
.
decode
(
buffer
);
Metadata
metadata
=
decoder
.
decode
(
createMetadataInputBuffer
(
rawEmsgBody
)
);
assertThat
(
metadata
.
length
()).
isEqualTo
(
1
);
assertThat
(
metadata
.
length
()).
isEqualTo
(
1
);
EventMessage
eventMessage
=
(
EventMessage
)
metadata
.
get
(
0
);
EventMessage
eventMessage
=
(
EventMessage
)
metadata
.
get
(
0
);
...
@@ -54,4 +53,31 @@ public final class EventMessageDecoderTest {
...
@@ -54,4 +53,31 @@ public final class EventMessageDecoderTest {
assertThat
(
eventMessage
.
messageData
).
isEqualTo
(
new
byte
[]{
0
,
1
,
2
,
3
,
4
});
assertThat
(
eventMessage
.
messageData
).
isEqualTo
(
new
byte
[]{
0
,
1
,
2
,
3
,
4
});
}
}
@Test
public
void
testDecodeEventMessage_failsIfPositionNonZero
()
{
EventMessageDecoder
decoder
=
new
EventMessageDecoder
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
.
position
(
1
);
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
testDecodeEventMessage_failsIfBufferHasNoArray
()
{
EventMessageDecoder
decoder
=
new
EventMessageDecoder
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
=
buffer
.
data
.
asReadOnlyBuffer
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
testDecodeEventMessage_failsIfArrayOffsetNonZero
()
{
EventMessageDecoder
decoder
=
new
EventMessageDecoder
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
.
position
(
1
);
buffer
.
data
=
buffer
.
data
.
slice
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
}
}
library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java
View file @
2f4e88d5
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
emsg
;
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
emsg
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createByteArray
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createByteArray
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createMetadataInputBuffer
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
joinByteArrays
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
joinByteArrays
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
...
@@ -23,7 +24,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
...
@@ -23,7 +24,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.nio.ByteBuffer
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -51,8 +51,7 @@ public final class EventMessageEncoderTest {
...
@@ -51,8 +51,7 @@ public final class EventMessageEncoderTest {
@Test
@Test
public
void
encodeDecodeEventStream
()
throws
IOException
{
public
void
encodeDecodeEventStream
()
throws
IOException
{
byte
[]
encodedByteArray
=
new
EventMessageEncoder
().
encode
(
DECODED_MESSAGE
);
byte
[]
encodedByteArray
=
new
EventMessageEncoder
().
encode
(
DECODED_MESSAGE
);
MetadataInputBuffer
buffer
=
new
MetadataInputBuffer
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
encodedByteArray
);
buffer
.
data
=
ByteBuffer
.
allocate
(
encodedByteArray
.
length
).
put
(
encodedByteArray
);
EventMessageDecoder
decoder
=
new
EventMessageDecoder
();
EventMessageDecoder
decoder
=
new
EventMessageDecoder
();
Metadata
metadata
=
decoder
.
decode
(
buffer
);
Metadata
metadata
=
decoder
.
decode
(
buffer
);
...
...
library/common/src/test/java/com/google/android/exoplayer2/metadata/id3/Id3DecoderTest.java
View file @
2f4e88d5
...
@@ -15,11 +15,15 @@
...
@@ -15,11 +15,15 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
id3
;
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
id3
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createByteArray
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createMetadataInputBuffer
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
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.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
java.nio.charset.Charset
;
import
java.nio.charset.Charset
;
import
java.util.Arrays
;
import
java.util.Arrays
;
...
@@ -233,6 +237,34 @@ public final class Id3DecoderTest {
...
@@ -233,6 +237,34 @@ public final class Id3DecoderTest {
assertThat
(
apicFrame
.
pictureData
).
isEqualTo
(
new
byte
[]
{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
0
});
assertThat
(
apicFrame
.
pictureData
).
isEqualTo
(
new
byte
[]
{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
0
});
}
}
@Test
public
void
decodeFailsIfPositionNonZero
()
{
Id3Decoder
decoder
=
new
Id3Decoder
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
.
position
(
1
);
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
decodeFailsIfBufferHasNoArray
()
{
Id3Decoder
decoder
=
new
Id3Decoder
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
=
buffer
.
data
.
asReadOnlyBuffer
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
decodeFailsIfArrayOffsetNonZero
()
{
Id3Decoder
decoder
=
new
Id3Decoder
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
.
position
(
1
);
buffer
.
data
=
buffer
.
data
.
slice
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
public
static
byte
[]
buildSingleFrameTag
(
String
frameId
,
byte
[]
frameData
)
{
public
static
byte
[]
buildSingleFrameTag
(
String
frameId
,
byte
[]
frameData
)
{
return
buildMultiFramesTag
(
new
FrameSpec
(
frameId
,
frameData
));
return
buildMultiFramesTag
(
new
FrameSpec
(
frameId
,
frameData
));
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/metadata/dvbsi/AppInfoTableDecoder.java
View file @
2f4e88d5
...
@@ -48,9 +48,10 @@ public final class AppInfoTableDecoder implements MetadataDecoder {
...
@@ -48,9 +48,10 @@ public final class AppInfoTableDecoder implements MetadataDecoder {
@Override
@Override
@Nullable
@Nullable
@SuppressWarnings
(
"ByteBufferBackingArray"
)
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
Assertions
.
checkArgument
(
buffer
.
position
()
==
0
&&
buffer
.
hasArray
()
&&
buffer
.
arrayOffset
()
==
0
);
int
tableId
=
buffer
.
get
();
int
tableId
=
buffer
.
get
();
return
tableId
==
APPLICATION_INFORMATION_TABLE_ID
return
tableId
==
APPLICATION_INFORMATION_TABLE_ID
?
parseAit
(
new
ParsableBitArray
(
buffer
.
array
(),
buffer
.
limit
()))
?
parseAit
(
new
ParsableBitArray
(
buffer
.
array
(),
buffer
.
limit
()))
...
...
library/core/src/main/java/com/google/android/exoplayer2/metadata/icy/IcyDecoder.java
View file @
2f4e88d5
...
@@ -45,9 +45,10 @@ public final class IcyDecoder implements MetadataDecoder {
...
@@ -45,9 +45,10 @@ public final class IcyDecoder implements MetadataDecoder {
}
}
@Override
@Override
@SuppressWarnings
(
"ByteBufferBackingArray"
)
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
Assertions
.
checkArgument
(
buffer
.
position
()
==
0
&&
buffer
.
hasArray
()
&&
buffer
.
arrayOffset
()
==
0
);
@Nullable
String
icyString
=
decodeToString
(
buffer
);
@Nullable
String
icyString
=
decodeToString
(
buffer
);
byte
[]
icyBytes
=
new
byte
[
buffer
.
limit
()];
byte
[]
icyBytes
=
new
byte
[
buffer
.
limit
()];
buffer
.
get
(
icyBytes
);
buffer
.
get
(
icyBytes
);
...
...
library/core/src/main/java/com/google/android/exoplayer2/metadata/scte35/SpliceInfoDecoder.java
View file @
2f4e88d5
...
@@ -47,10 +47,11 @@ public final class SpliceInfoDecoder implements MetadataDecoder {
...
@@ -47,10 +47,11 @@ public final class SpliceInfoDecoder implements MetadataDecoder {
sectionHeader
=
new
ParsableBitArray
();
sectionHeader
=
new
ParsableBitArray
();
}
}
@SuppressWarnings
(
"ByteBufferBackingArray"
)
@Override
@Override
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
public
Metadata
decode
(
MetadataInputBuffer
inputBuffer
)
{
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
ByteBuffer
buffer
=
Assertions
.
checkNotNull
(
inputBuffer
.
data
);
Assertions
.
checkArgument
(
buffer
.
position
()
==
0
&&
buffer
.
hasArray
()
&&
buffer
.
arrayOffset
()
==
0
);
// Internal timestamps adjustment.
// Internal timestamps adjustment.
if
(
timestampAdjuster
==
null
if
(
timestampAdjuster
==
null
...
...
library/core/src/test/java/com/google/android/exoplayer2/metadata/dvbsi/AppInfoTableDecoderTest.java
View file @
2f4e88d5
...
@@ -15,7 +15,10 @@
...
@@ -15,7 +15,10 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
dvbsi
;
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
dvbsi
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createByteArray
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createMetadataInputBuffer
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertThrows
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.core.app.ApplicationProvider
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
import
androidx.test.ext.junit.runners.AndroidJUnit4
;
...
@@ -23,7 +26,6 @@ import com.google.android.exoplayer2.metadata.Metadata;
...
@@ -23,7 +26,6 @@ import com.google.android.exoplayer2.metadata.Metadata;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
com.google.android.exoplayer2.testutil.TestUtil
;
import
com.google.android.exoplayer2.testutil.TestUtil
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.nio.ByteBuffer
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -69,12 +71,32 @@ public final class AppInfoTableDecoderTest {
...
@@ -69,12 +71,32 @@ public final class AppInfoTableDecoderTest {
assertThat
(
metadata
).
isNull
();
assertThat
(
metadata
).
isNull
();
}
}
private
static
MetadataInputBuffer
createMetadataInputBuffer
(
byte
[]
data
)
{
@Test
MetadataInputBuffer
inputBuffer
=
new
MetadataInputBuffer
();
public
void
decode_failsIfPositionNonZero
()
{
inputBuffer
.
data
=
ByteBuffer
.
allocate
(
data
.
length
);
AppInfoTableDecoder
decoder
=
new
AppInfoTableDecoder
();
inputBuffer
.
data
.
put
(
data
);
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
inputBuffer
.
data
.
flip
();
buffer
.
data
.
position
(
1
);
return
inputBuffer
;
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
decode_failsIfBufferHasNoArray
()
{
AppInfoTableDecoder
decoder
=
new
AppInfoTableDecoder
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
=
buffer
.
data
.
asReadOnlyBuffer
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
decode_failsIfArrayOffsetNonZero
()
{
AppInfoTableDecoder
decoder
=
new
AppInfoTableDecoder
();
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
.
position
(
1
);
buffer
.
data
=
buffer
.
data
.
slice
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
}
private
static
byte
[]
readTestFile
(
String
name
)
throws
IOException
{
private
static
byte
[]
readTestFile
(
String
name
)
throws
IOException
{
...
...
library/core/src/test/java/com/google/android/exoplayer2/metadata/icy/IcyDecoderTest.java
View file @
2f4e88d5
...
@@ -15,16 +15,18 @@
...
@@ -15,16 +15,18 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
icy
;
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
icy
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createByteArray
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createMetadataInputBuffer
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
java
.
nio
.
charset
.
StandardCharsets
.
ISO_8859_1
;
import
static
java
.
nio
.
charset
.
StandardCharsets
.
ISO_8859_1
;
import
static
java
.
nio
.
charset
.
StandardCharsets
.
UTF_16
;
import
static
java
.
nio
.
charset
.
StandardCharsets
.
UTF_16
;
import
static
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
;
import
static
java
.
nio
.
charset
.
StandardCharsets
.
UTF_8
;
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.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
com.google.android.exoplayer2.testutil.TestUtil
;
import
com.google.android.exoplayer2.testutil.TestUtil
;
import
java.nio.ByteBuffer
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -186,10 +188,28 @@ public final class IcyDecoderTest {
...
@@ -186,10 +188,28 @@ public final class IcyDecoderTest {
assertThat
(
streamInfo
.
url
).
isNull
();
assertThat
(
streamInfo
.
url
).
isNull
();
}
}
private
static
MetadataInputBuffer
createMetadataInputBuffer
(
byte
[]
data
)
{
@Test
MetadataInputBuffer
metadataInputBuffer
=
new
MetadataInputBuffer
();
public
void
decode_failsIfPositionNonZero
()
{
metadataInputBuffer
.
data
=
ByteBuffer
.
allocate
(
data
.
length
).
put
(
data
);
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
metadataInputBuffer
.
data
.
flip
();
buffer
.
data
.
position
(
1
);
return
metadataInputBuffer
;
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
decode_failsIfBufferHasNoArray
()
{
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
=
buffer
.
data
.
asReadOnlyBuffer
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
decode_failsIfArrayOffsetNonZero
()
{
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
.
position
(
1
);
buffer
.
data
=
buffer
.
data
.
slice
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
}
}
}
library/core/src/test/java/com/google/android/exoplayer2/metadata/scte35/SpliceInfoDecoderTest.java
View file @
2f4e88d5
...
@@ -16,7 +16,10 @@
...
@@ -16,7 +16,10 @@
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
scte35
;
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
scte35
;
import
static
com
.
google
.
android
.
exoplayer2
.
C
.
TIME_UNSET
;
import
static
com
.
google
.
android
.
exoplayer2
.
C
.
TIME_UNSET
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createByteArray
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
TestUtil
.
createMetadataInputBuffer
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
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.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.Metadata
;
...
@@ -162,9 +165,35 @@ public final class SpliceInfoDecoderTest {
...
@@ -162,9 +165,35 @@ public final class SpliceInfoDecoderTest {
assertThat
(
command
.
availsExpected
).
isEqualTo
(
2
);
assertThat
(
command
.
availsExpected
).
isEqualTo
(
2
);
}
}
@Test
public
void
decodeFailsIfPositionNonZero
()
{
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
.
position
(
1
);
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
decodeFailsIfBufferHasNoArray
()
{
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
=
buffer
.
data
.
asReadOnlyBuffer
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
@Test
public
void
decodeFailsIfArrayOffsetNonZero
()
{
MetadataInputBuffer
buffer
=
createMetadataInputBuffer
(
createByteArray
(
1
,
2
,
3
));
buffer
.
data
.
position
(
1
);
buffer
.
data
=
buffer
.
data
.
slice
();
assertThrows
(
IllegalArgumentException
.
class
,
()
->
decoder
.
decode
(
buffer
));
}
private
Metadata
feedInputBuffer
(
byte
[]
data
,
long
timeUs
,
long
subsampleOffset
)
{
private
Metadata
feedInputBuffer
(
byte
[]
data
,
long
timeUs
,
long
subsampleOffset
)
{
inputBuffer
.
clear
();
inputBuffer
.
clear
();
inputBuffer
.
data
=
ByteBuffer
.
allocate
(
data
.
length
).
put
(
data
);
inputBuffer
.
data
=
ByteBuffer
.
allocate
(
data
.
length
).
put
(
data
);
inputBuffer
.
data
.
flip
();
inputBuffer
.
timeUs
=
timeUs
;
inputBuffer
.
timeUs
=
timeUs
;
inputBuffer
.
subsampleOffsetUs
=
subsampleOffset
;
inputBuffer
.
subsampleOffsetUs
=
subsampleOffset
;
return
decoder
.
decode
(
inputBuffer
);
return
decoder
.
decode
(
inputBuffer
);
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/TestUtil.java
View file @
2f4e88d5
...
@@ -34,6 +34,7 @@ import com.google.android.exoplayer2.extractor.Extractor;
...
@@ -34,6 +34,7 @@ import com.google.android.exoplayer2.extractor.Extractor;
import
com.google.android.exoplayer2.extractor.ExtractorInput
;
import
com.google.android.exoplayer2.extractor.ExtractorInput
;
import
com.google.android.exoplayer2.extractor.PositionHolder
;
import
com.google.android.exoplayer2.extractor.PositionHolder
;
import
com.google.android.exoplayer2.extractor.SeekMap
;
import
com.google.android.exoplayer2.extractor.SeekMap
;
import
com.google.android.exoplayer2.metadata.MetadataInputBuffer
;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
...
@@ -42,6 +43,7 @@ import java.io.File;
...
@@ -42,6 +43,7 @@ import java.io.File;
import
java.io.FileOutputStream
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStream
;
import
java.nio.ByteBuffer
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.Random
;
import
java.util.Random
;
...
@@ -473,4 +475,15 @@ public class TestUtil {
...
@@ -473,4 +475,15 @@ public class TestUtil {
}
}
return
new
DefaultExtractorInput
(
dataSource
,
position
,
length
);
return
new
DefaultExtractorInput
(
dataSource
,
position
,
length
);
}
}
/**
* Create a new {@link MetadataInputBuffer} and copy {@code data} into the backing {@link
* ByteBuffer}.
*/
public
static
MetadataInputBuffer
createMetadataInputBuffer
(
byte
[]
data
)
{
MetadataInputBuffer
buffer
=
new
MetadataInputBuffer
();
buffer
.
data
=
ByteBuffer
.
allocate
(
data
.
length
).
put
(
data
);
buffer
.
data
.
flip
();
return
buffer
;
}
}
}
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