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
844c023b
authored
Nov 11, 2019
by
kimvde
Committed by
Oliver Woodman
Nov 15, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add CRC-8 method in Util
PiperOrigin-RevId: 279727618
parent
13cf2360
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
70 additions
and
5 deletions
library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/SectionReader.java
library/core/src/main/java/com/google/android/exoplayer2/util/Util.java
library/core/src/test/java/com/google/android/exoplayer2/util/UtilTest.java
library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/SectionReader.java
View file @
844c023b
...
@@ -114,7 +114,7 @@ public final class SectionReader implements TsPayloadReader {
...
@@ -114,7 +114,7 @@ public final class SectionReader implements TsPayloadReader {
if
(
bytesRead
==
totalSectionLength
)
{
if
(
bytesRead
==
totalSectionLength
)
{
if
(
sectionSyntaxIndicator
)
{
if
(
sectionSyntaxIndicator
)
{
// This section has common syntax as defined in ISO/IEC 13818-1, section 2.4.4.11.
// This section has common syntax as defined in ISO/IEC 13818-1, section 2.4.4.11.
if
(
Util
.
crc
(
sectionData
.
data
,
0
,
totalSectionLength
,
0xFFFFFFFF
)
!=
0
)
{
if
(
Util
.
crc
32
(
sectionData
.
data
,
0
,
totalSectionLength
,
0xFFFFFFFF
)
!=
0
)
{
// The CRC is invalid so discard the section.
// The CRC is invalid so discard the section.
waitingForPayloadStart
=
true
;
waitingForPayloadStart
=
true
;
return
;
return
;
...
...
library/core/src/main/java/com/google/android/exoplayer2/util/Util.java
View file @
844c023b
...
@@ -1719,8 +1719,8 @@ public final class Util {
...
@@ -1719,8 +1719,8 @@ public final class Util {
}
}
/**
/**
* Returns the result of updating a CRC
with the specified bytes in a "most significant bit first"
* Returns the result of updating a CRC
-32 with the specified bytes in a "most significant bit
* order.
*
first"
order.
*
*
* @param bytes Array containing the bytes to update the crc value with.
* @param bytes Array containing the bytes to update the crc value with.
* @param start The index to the first byte in the byte range to update the crc with.
* @param start The index to the first byte in the byte range to update the crc with.
...
@@ -1728,7 +1728,7 @@ public final class Util {
...
@@ -1728,7 +1728,7 @@ public final class Util {
* @param initialValue The initial value for the crc calculation.
* @param initialValue The initial value for the crc calculation.
* @return The result of updating the initial value with the specified bytes.
* @return The result of updating the initial value with the specified bytes.
*/
*/
public
static
int
crc
(
byte
[]
bytes
,
int
start
,
int
end
,
int
initialValue
)
{
public
static
int
crc
32
(
byte
[]
bytes
,
int
start
,
int
end
,
int
initialValue
)
{
for
(
int
i
=
start
;
i
<
end
;
i
++)
{
for
(
int
i
=
start
;
i
<
end
;
i
++)
{
initialValue
=
(
initialValue
<<
8
)
initialValue
=
(
initialValue
<<
8
)
^
CRC32_BYTES_MSBF
[((
initialValue
>>>
24
)
^
(
bytes
[
i
]
&
0xFF
))
&
0xFF
];
^
CRC32_BYTES_MSBF
[((
initialValue
>>>
24
)
^
(
bytes
[
i
]
&
0xFF
))
&
0xFF
];
...
@@ -1737,6 +1737,23 @@ public final class Util {
...
@@ -1737,6 +1737,23 @@ public final class Util {
}
}
/**
/**
* Returns the result of updating a CRC-8 with the specified bytes in a "most significant bit
* first" order.
*
* @param bytes Array containing the bytes to update the crc value with.
* @param start The index to the first byte in the byte range to update the crc with.
* @param end The index after the last byte in the byte range to update the crc with.
* @param initialValue The initial value for the crc calculation.
* @return The result of updating the initial value with the specified bytes.
*/
public
static
int
crc8
(
byte
[]
bytes
,
int
start
,
int
end
,
int
initialValue
)
{
for
(
int
i
=
start
;
i
<
end
;
i
++)
{
initialValue
=
CRC8_BYTES_MSBF
[
initialValue
^
(
bytes
[
i
]
&
0xFF
)];
}
return
initialValue
;
}
/**
* Returns the {@link C.NetworkType} of the current network connection.
* Returns the {@link C.NetworkType} of the current network connection.
*
*
* @param context A context to access the connectivity manager.
* @param context A context to access the connectivity manager.
...
@@ -2096,7 +2113,7 @@ public final class Util {
...
@@ -2096,7 +2113,7 @@ public final class Util {
};
};
/**
/**
* Allows the CRC calculation to be done byte by byte instead of bit per bit being the order
* Allows the CRC
-32
calculation to be done byte by byte instead of bit per bit being the order
* "most significant bit first".
* "most significant bit first".
*/
*/
private
static
final
int
[]
CRC32_BYTES_MSBF
=
{
private
static
final
int
[]
CRC32_BYTES_MSBF
=
{
...
@@ -2139,4 +2156,28 @@ public final class Util {
...
@@ -2139,4 +2156,28 @@ public final class Util {
0XBCB4666D
,
0XB8757BDA
,
0XB5365D03
,
0XB1F740B4
0XBCB4666D
,
0XB8757BDA
,
0XB5365D03
,
0XB1F740B4
};
};
/**
* Allows the CRC-8 calculation to be done byte by byte instead of bit per bit being the order
* "most significant bit first".
*/
private
static
final
int
[]
CRC8_BYTES_MSBF
=
{
0x00
,
0x07
,
0x0E
,
0x09
,
0x1C
,
0x1B
,
0x12
,
0x15
,
0x38
,
0x3F
,
0x36
,
0x31
,
0x24
,
0x23
,
0x2A
,
0x2D
,
0x70
,
0x77
,
0x7E
,
0x79
,
0x6C
,
0x6B
,
0x62
,
0x65
,
0x48
,
0x4F
,
0x46
,
0x41
,
0x54
,
0x53
,
0x5A
,
0x5D
,
0xE0
,
0xE7
,
0xEE
,
0xE9
,
0xFC
,
0xFB
,
0xF2
,
0xF5
,
0xD8
,
0xDF
,
0xD6
,
0xD1
,
0xC4
,
0xC3
,
0xCA
,
0xCD
,
0x90
,
0x97
,
0x9E
,
0x99
,
0x8C
,
0x8B
,
0x82
,
0x85
,
0xA8
,
0xAF
,
0xA6
,
0xA1
,
0xB4
,
0xB3
,
0xBA
,
0xBD
,
0xC7
,
0xC0
,
0xC9
,
0xCE
,
0xDB
,
0xDC
,
0xD5
,
0xD2
,
0xFF
,
0xF8
,
0xF1
,
0xF6
,
0xE3
,
0xE4
,
0xED
,
0xEA
,
0xB7
,
0xB0
,
0xB9
,
0xBE
,
0xAB
,
0xAC
,
0xA5
,
0xA2
,
0x8F
,
0x88
,
0x81
,
0x86
,
0x93
,
0x94
,
0x9D
,
0x9A
,
0x27
,
0x20
,
0x29
,
0x2E
,
0x3B
,
0x3C
,
0x35
,
0x32
,
0x1F
,
0x18
,
0x11
,
0x16
,
0x03
,
0x04
,
0x0D
,
0x0A
,
0x57
,
0x50
,
0x59
,
0x5E
,
0x4B
,
0x4C
,
0x45
,
0x42
,
0x6F
,
0x68
,
0x61
,
0x66
,
0x73
,
0x74
,
0x7D
,
0x7A
,
0x89
,
0x8E
,
0x87
,
0x80
,
0x95
,
0x92
,
0x9B
,
0x9C
,
0xB1
,
0xB6
,
0xBF
,
0xB8
,
0xAD
,
0xAA
,
0xA3
,
0xA4
,
0xF9
,
0xFE
,
0xF7
,
0xF0
,
0xE5
,
0xE2
,
0xEB
,
0xEC
,
0xC1
,
0xC6
,
0xCF
,
0xC8
,
0xDD
,
0xDA
,
0xD3
,
0xD4
,
0x69
,
0x6E
,
0x67
,
0x60
,
0x75
,
0x72
,
0x7B
,
0x7C
,
0x51
,
0x56
,
0x5F
,
0x58
,
0x4D
,
0x4A
,
0x43
,
0x44
,
0x19
,
0x1E
,
0x17
,
0x10
,
0x05
,
0x02
,
0x0B
,
0x0C
,
0x21
,
0x26
,
0x2F
,
0x28
,
0x3D
,
0x3A
,
0x33
,
0x34
,
0x4E
,
0x49
,
0x40
,
0x47
,
0x52
,
0x55
,
0x5C
,
0x5B
,
0x76
,
0x71
,
0x78
,
0x7F
,
0x6A
,
0x6D
,
0x64
,
0x63
,
0x3E
,
0x39
,
0x30
,
0x37
,
0x22
,
0x25
,
0x2C
,
0x2B
,
0x06
,
0x01
,
0x08
,
0x0F
,
0x1A
,
0x1D
,
0x14
,
0x13
,
0xAE
,
0xA9
,
0xA0
,
0xA7
,
0xB2
,
0xB5
,
0xBC
,
0xBB
,
0x96
,
0x91
,
0x98
,
0x9F
,
0x8A
,
0x8D
,
0x84
,
0x83
,
0xDE
,
0xD9
,
0xD0
,
0xD7
,
0xC2
,
0xC5
,
0xCC
,
0xCB
,
0xE6
,
0xE1
,
0xE8
,
0xEF
,
0xFA
,
0xFD
,
0xF4
,
0xF3
};
}
}
library/core/src/test/java/com/google/android/exoplayer2/util/UtilTest.java
View file @
844c023b
...
@@ -267,6 +267,30 @@ public class UtilTest {
...
@@ -267,6 +267,30 @@ public class UtilTest {
}
}
@Test
@Test
public
void
testCrc32
()
{
byte
[]
bytes
=
{
0x5F
,
0x78
,
0x04
,
0x7B
,
0x5F
};
int
start
=
1
;
int
end
=
4
;
int
initialValue
=
0xFFFFFFFF
;
int
result
=
Util
.
crc32
(
bytes
,
start
,
end
,
initialValue
);
assertThat
(
result
).
isEqualTo
(
0x67ce9747
);
}
@Test
public
void
testCrc8
()
{
byte
[]
bytes
=
{
0x5F
,
0x78
,
0x04
,
0x7B
,
0x5F
};
int
start
=
1
;
int
end
=
4
;
int
initialValue
=
0
;
int
result
=
Util
.
crc8
(
bytes
,
start
,
end
,
initialValue
);
assertThat
(
result
).
isEqualTo
(
0x4
);
}
@Test
public
void
testInflate
()
{
public
void
testInflate
()
{
byte
[]
testData
=
TestUtil
.
buildTestData
(
/*arbitrary test data size*/
256
*
1024
);
byte
[]
testData
=
TestUtil
.
buildTestData
(
/*arbitrary test data size*/
256
*
1024
);
byte
[]
compressedData
=
new
byte
[
testData
.
length
*
2
];
byte
[]
compressedData
=
new
byte
[
testData
.
length
*
2
];
...
...
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