1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Replace crc32 MPEG and IEEE by pycrc to match MIT license. 3.0.31

This commit is contained in:
winlin 2018-07-22 15:21:05 +08:00
parent e395878916
commit 0a63448b86
4 changed files with 268 additions and 123 deletions

View file

@ -1523,7 +1523,139 @@ VOID TEST(KernelUtility, AvcUev)
}
}
extern void __crc32_make_table(uint32_t t[256], uint32_t poly, bool reflect_in);
VOID TEST(KernelUtility, CRC32MakeTable)
{
uint32_t t[256];
// IEEE, @see https://github.com/ossrs/srs/blob/608c88b8f2b352cdbce3b89b9042026ea907e2d3/trunk/src/kernel/srs_kernel_utility.cpp#L770
__crc32_make_table(t, 0x4c11db7, true);
EXPECT_EQ((uint32_t)0x00000000, t[0]);
EXPECT_EQ((uint32_t)0x77073096, t[1]);
EXPECT_EQ((uint32_t)0xEE0E612C, t[2]);
EXPECT_EQ((uint32_t)0x990951BA, t[3]);
EXPECT_EQ((uint32_t)0x076DC419, t[4]);
EXPECT_EQ((uint32_t)0x706AF48F, t[5]);
EXPECT_EQ((uint32_t)0xE963A535, t[6]);
EXPECT_EQ((uint32_t)0x9E6495A3, t[7]);
EXPECT_EQ((uint32_t)0xB3667A2E, t[248]);
EXPECT_EQ((uint32_t)0xC4614AB8, t[249]);
EXPECT_EQ((uint32_t)0x5D681B02, t[250]);
EXPECT_EQ((uint32_t)0x2A6F2B94, t[251]);
EXPECT_EQ((uint32_t)0xB40BBE37, t[252]);
EXPECT_EQ((uint32_t)0xC30C8EA1, t[253]);
EXPECT_EQ((uint32_t)0x5A05DF1B, t[254]);
EXPECT_EQ((uint32_t)0x2D02EF8D, t[255]);
// IEEE, @see https://github.com/ossrs/srs/blob/608c88b8f2b352cdbce3b89b9042026ea907e2d3/trunk/src/kernel/srs_kernel_utility.cpp#L770
__crc32_make_table(t, 0x4c11db7, true);
EXPECT_EQ((uint32_t)0x00000000, t[0]);
EXPECT_EQ((uint32_t)0x77073096, t[1]);
EXPECT_EQ((uint32_t)0xEE0E612C, t[2]);
EXPECT_EQ((uint32_t)0x990951BA, t[3]);
EXPECT_EQ((uint32_t)0x076DC419, t[4]);
EXPECT_EQ((uint32_t)0x706AF48F, t[5]);
EXPECT_EQ((uint32_t)0xE963A535, t[6]);
EXPECT_EQ((uint32_t)0x9E6495A3, t[7]);
EXPECT_EQ((uint32_t)0xB3667A2E, t[248]);
EXPECT_EQ((uint32_t)0xC4614AB8, t[249]);
EXPECT_EQ((uint32_t)0x5D681B02, t[250]);
EXPECT_EQ((uint32_t)0x2A6F2B94, t[251]);
EXPECT_EQ((uint32_t)0xB40BBE37, t[252]);
EXPECT_EQ((uint32_t)0xC30C8EA1, t[253]);
EXPECT_EQ((uint32_t)0x5A05DF1B, t[254]);
EXPECT_EQ((uint32_t)0x2D02EF8D, t[255]);
// MPEG, @see https://github.com/ossrs/srs/blob/608c88b8f2b352cdbce3b89b9042026ea907e2d3/trunk/src/kernel/srs_kernel_utility.cpp#L691
__crc32_make_table(t, 0x4c11db7, false);
EXPECT_EQ((uint32_t)0x00000000, t[0]);
EXPECT_EQ((uint32_t)0x04c11db7, t[1]);
EXPECT_EQ((uint32_t)0x09823b6e, t[2]);
EXPECT_EQ((uint32_t)0x0d4326d9, t[3]);
EXPECT_EQ((uint32_t)0x130476dc, t[4]);
EXPECT_EQ((uint32_t)0x17c56b6b, t[5]);
EXPECT_EQ((uint32_t)0x1a864db2, t[6]);
EXPECT_EQ((uint32_t)0x1e475005, t[7]);
EXPECT_EQ((uint32_t)0xafb010b1, t[248]);
EXPECT_EQ((uint32_t)0xab710d06, t[249]);
EXPECT_EQ((uint32_t)0xa6322bdf, t[250]);
EXPECT_EQ((uint32_t)0xa2f33668, t[251]);
EXPECT_EQ((uint32_t)0xbcb4666d, t[252]);
EXPECT_EQ((uint32_t)0xb8757bda, t[253]);
EXPECT_EQ((uint32_t)0xb5365d03, t[254]);
EXPECT_EQ((uint32_t)0xb1f740b4, t[255]);
// MPEG, @see https://github.com/ossrs/srs/blob/608c88b8f2b352cdbce3b89b9042026ea907e2d3/trunk/src/kernel/srs_kernel_utility.cpp#L691
__crc32_make_table(t, 0x4c11db7, false);
EXPECT_EQ((uint32_t)0x00000000, t[0]);
EXPECT_EQ((uint32_t)0x04c11db7, t[1]);
EXPECT_EQ((uint32_t)0x09823b6e, t[2]);
EXPECT_EQ((uint32_t)0x0d4326d9, t[3]);
EXPECT_EQ((uint32_t)0x130476dc, t[4]);
EXPECT_EQ((uint32_t)0x17c56b6b, t[5]);
EXPECT_EQ((uint32_t)0x1a864db2, t[6]);
EXPECT_EQ((uint32_t)0x1e475005, t[7]);
EXPECT_EQ((uint32_t)0xafb010b1, t[248]);
EXPECT_EQ((uint32_t)0xab710d06, t[249]);
EXPECT_EQ((uint32_t)0xa6322bdf, t[250]);
EXPECT_EQ((uint32_t)0xa2f33668, t[251]);
EXPECT_EQ((uint32_t)0xbcb4666d, t[252]);
EXPECT_EQ((uint32_t)0xb8757bda, t[253]);
EXPECT_EQ((uint32_t)0xb5365d03, t[254]);
EXPECT_EQ((uint32_t)0xb1f740b4, t[255]);
}
VOID TEST(KernelUtility, CRC32IEEE)
{
if (true) {
string datas[] = {
"123456789", "srs", "ossrs.net",
"SRS's a simplest, conceptual integrated, industrial-strength live streaming origin cluster."
};
uint32_t checksums[] = {
0xcbf43926, 0x7df334e9, 0x2f52242b,
0x7e8677bd,
};
for (int i = 0; i < (int)(sizeof(datas)/sizeof(string)); i++) {
string data = datas[i];
uint32_t checksum = checksums[i];
EXPECT_EQ(checksum, srs_crc32_ieee(data.data(), data.length(), 0));
}
uint32_t previous = 0;
for (int i = 0; i < (int)(sizeof(datas)/sizeof(string)); i++) {
string data = datas[i];
previous = srs_crc32_ieee(data.data(), data.length(), previous);
}
EXPECT_EQ((uint32_t)0x431b8785, previous);
}
if (true) {
string data = "123456789srs";
EXPECT_EQ((uint32_t)0xf567b5cf, srs_crc32_ieee(data.data(), data.length(), 0));
}
if (true) {
string data = "123456789";
EXPECT_EQ((uint32_t)0xcbf43926, srs_crc32_ieee(data.data(), data.length(), 0));
data = "srs";
EXPECT_EQ((uint32_t)0xf567b5cf, srs_crc32_ieee(data.data(), data.length(), 0xcbf43926));
}
}
VOID TEST(KernelUtility, CRC32MPEGTS)
{
string datas[] = {
"123456789", "srs", "ossrs.net",
@ -1531,22 +1663,15 @@ VOID TEST(KernelUtility, CRC32IEEE)
};
uint32_t checksums[] = {
0xcbf43926, 0x7df334e9, 0x2f52242b,
0x7e8677bd
0x0376e6e7, 0xd9089591, 0xbd17933f,
0x9f389f7d
};
for (int i = 0; i < (int)(sizeof(datas)/sizeof(string)); i++) {
string data = datas[i];
uint32_t checksum = checksums[i];
EXPECT_EQ(checksum, srs_crc32_ieee(data.data(), data.length(), 0));
EXPECT_EQ(checksum, (uint32_t)srs_crc32_mpegts(data.data(), data.length()));
}
uint32_t previous = 0;
for (int i = 0; i < (int)(sizeof(datas)/sizeof(string)); i++) {
string data = datas[i];
previous = srs_crc32_ieee(data.data(), data.length(), previous);
}
EXPECT_EQ((uint32_t)0x431b8785, previous);
}
#endif