no commit message
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
package org.mangui.hls.demux {
|
||||
import flash.utils.ByteArray;
|
||||
public class ExpGolomb {
|
||||
private var _data : ByteArray;
|
||||
private var _bit : int;
|
||||
private var _curByte : uint;
|
||||
|
||||
public function ExpGolomb(data : ByteArray) {
|
||||
_data = data;
|
||||
_bit = -1;
|
||||
}
|
||||
|
||||
private function _readBit() : uint {
|
||||
var res : uint;
|
||||
if (_bit == -1) {
|
||||
// read next
|
||||
_curByte = _data.readByte();
|
||||
_bit = 7;
|
||||
}
|
||||
res = _curByte & (1 << _bit) ? 1 : 0;
|
||||
_bit--;
|
||||
return res;
|
||||
}
|
||||
|
||||
public function readBoolean() : Boolean {
|
||||
return (_readBit() == 1);
|
||||
}
|
||||
|
||||
public function readBits(nbBits : uint) : int {
|
||||
var val : int = 0;
|
||||
for (var i : uint = 0; i < nbBits; ++i)
|
||||
val = (val << 1) + _readBit();
|
||||
return val;
|
||||
}
|
||||
|
||||
public function readUE() : uint {
|
||||
var nbZero : uint = 0;
|
||||
while (_readBit() == 0)
|
||||
++nbZero;
|
||||
var x : uint = readBits(nbZero);
|
||||
return x + (1 << nbZero) - 1;
|
||||
}
|
||||
|
||||
public function readSE() : uint {
|
||||
var value : int = readUE();
|
||||
// the number is odd if the low order bit is set
|
||||
if (0x01 & value) {
|
||||
// add 1 to make it even, and divide by 2
|
||||
return (1 + value) >> 1;
|
||||
} else {
|
||||
// divide by two then make it negative
|
||||
return -1 * (value >> 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user