rtp.js
Version:
RTP stack for Node.js and browser written in TypeScript
50 lines (49 loc) • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.read3BytesInDataView = read3BytesInDataView;
exports.write3BytesInDataView = write3BytesInDataView;
exports.readSigned3BytesInDataView = readSigned3BytesInDataView;
exports.writeSigned3BytesInDataView = writeSigned3BytesInDataView;
/**
* Read 3 bytes starting from byte `pos` in `view` as unsigned value.
*
* @category Utils
* @hidden
*/
function read3BytesInDataView({ view, pos, }) {
return (view.getUint8(pos) << 16) + view.getUint16(pos + 1);
}
/**
* Write an unsigned value in 3 bytes starting from byte `pos` in `view`.
*
* @category Utils
* @hidden
*/
function write3BytesInDataView({ view, pos, value, }) {
view.setUint8(pos, value >> 16);
view.setUint16(pos + 1, value);
}
/**
* Read 3 bytes starting from byte `pos` in `view` as signed value.
*
* @category Utils
* @hidden
*/
function readSigned3BytesInDataView({ view, pos, }) {
const byte2 = view.getUint8(pos);
const byte1 = view.getUint8(pos + 1);
const byte0 = view.getUint8(pos + 2);
// Check bit 7 (sign).
const extension = byte2 & 0b10000000 ? 0b11111111 : 0b00000000;
return byte0 | (byte1 << 8) | (byte2 << 16) | (extension << 24);
}
/**
* Write a signed value in 3 bytes starting from byte `pos` in `view`.
*
* @category Utils
* @hidden
*/
function writeSigned3BytesInDataView({ view, pos, value, }) {
view.setInt8(pos, value >> 16);
view.setUint16(pos + 1, value);
}