/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.media.mpegts; /** * mpegtsのcrc32の計算動作 * @author taktod */ public class Crc32 { private long MPEG2TS_POLYNOMINAL = 0x04C11DB7L; private long[] crcTable = new long[256]; long crc; /** * コンストラクタ */ public Crc32() { // テーブルをつくっておく。 long crc = 0; for(int i = 0;i < 256;i ++) { crc = i << 24; for(int j = 0;j < 8;j ++) { crc = (crc << 1) ^ ((crc & 0x80000000L) != 0 ? MPEG2TS_POLYNOMINAL : 0); } crcTable[i] = crc & 0xFFFFFFFFL; } reset(); } /** * 初期化(設定によると0xFFFFFFFFにしていないとだめっぽい) */ public void reset() { crc = 0xFFFFFFFFL; } /** * データを追加していきます。 * @param b */ public void update(byte b) { crc = (crc << 8) ^ crcTable[(int)(((crc >> 24) ^ b) & 0xFF)]; } /** * 計算済みのデータを取得します。 * @return */ public long getValue() { return crc & 0xFFFFFFFFL; } }