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
69e50a43
authored
Oct 19, 2017
by
苗华栋(Rabbit)
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
add readSignedInt24 in ParsableByteArray
parent
5895884c
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
25 additions
and
3 deletions
library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java
library/core/src/main/java/com/google/android/exoplayer2/util/ParsableByteArray.java
library/core/src/test/java/com/google/android/exoplayer2/util/ParsableByteArrayTest.java
library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java
View file @
69e50a43
...
...
@@ -79,9 +79,7 @@ import com.google.android.exoplayer2.video.AvcConfig;
@Override
protected
void
parsePayload
(
ParsableByteArray
data
,
long
timeUs
)
throws
ParserException
{
int
packetType
=
data
.
readUnsignedByte
();
int
compositionTimeMs
=
data
.
readUnsignedInt24
();
// compositionTimeMs is signed int 24, change unsigned int 24 to signed int 24
compositionTimeMs
=
(
compositionTimeMs
&
0x800000
L
)
>>>
23
==
1
?
(
compositionTimeMs
|
0xff000000
)
:
compositionTimeMs
;
int
compositionTimeMs
=
data
.
readSignedInt24
();
timeUs
+=
compositionTimeMs
*
1000L
;
// Parse avc sequence header in case this was not done before.
...
...
library/core/src/main/java/com/google/android/exoplayer2/util/ParsableByteArray.java
View file @
69e50a43
...
...
@@ -257,6 +257,14 @@ public final class ParsableByteArray {
}
/**
* Reads the next three bytes as an signed value.
*/
public
int
readSignedInt24
()
{
int
ui24
=
readUnsignedInt24
();
return
(
ui24
&
0x800000
L
)
>>>
23
==
1
?
(
ui24
|
0xff000000
)
:
ui24
;
}
/**
* Reads the next three bytes as a signed value in little endian order.
*/
public
int
readLittleEndianInt24
()
{
...
...
library/core/src/test/java/com/google/android/exoplayer2/util/ParsableByteArrayTest.java
View file @
69e50a43
...
...
@@ -335,6 +335,22 @@ public final class ParsableByteArrayTest {
}
@Test
public
void
testReadPositiveSignedInt24
()
{
byte
[]
data
=
{
0x01
,
0x02
,
(
byte
)
0xFF
};
ParsableByteArray
byteArray
=
new
ParsableByteArray
(
data
);
assertThat
(
byteArray
.
readSignedInt24
()).
isEqualTo
(
0x0102FF
);
assertThat
(
byteArray
.
getPosition
()).
isEqualTo
(
3
);
}
@Test
public
void
testReadNegativeSignedInt24
()
{
byte
[]
data
=
{
(
byte
)
0xFF
,
0x02
,
(
byte
)
0x01
};
ParsableByteArray
byteArray
=
new
ParsableByteArray
(
data
);
assertThat
(
byteArray
.
readSignedInt24
()).
isEqualTo
(
0xFFFF0201
);
assertThat
(
byteArray
.
getPosition
()).
isEqualTo
(
3
);
}
@Test
public
void
testReadLittleEndianUnsignedShort
()
{
ParsableByteArray
byteArray
=
new
ParsableByteArray
(
new
byte
[]
{
0x01
,
(
byte
)
0xFF
,
0x02
,
(
byte
)
0xFF
...
...
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