UNPKG

tethr

Version:

Controlls USB-connected cameras, webcam, and smartphone camera from browser

126 lines 4.64 kB
import { BiMap } from 'bim'; import { ExposureModeTable, WhiteBalanceTable, } from '../configs'; import { DatatypeCode, DevicePropCode } from '../PTPDatacode'; import { TethrPTPUSB } from './TethrPTPUSB'; var DevicePropCodeRicohTheta; (function (DevicePropCodeRicohTheta) { DevicePropCodeRicohTheta[DevicePropCodeRicohTheta["ShutterSpeed"] = 53263] = "ShutterSpeed"; DevicePropCodeRicohTheta[DevicePropCodeRicohTheta["ColorTemperature"] = 55315] = "ColorTemperature"; })(DevicePropCodeRicohTheta || (DevicePropCodeRicohTheta = {})); export class TethrRicohTheta extends TethrPTPUSB { // PTP extension specs here: https://api.ricoh/docs/theta-usb-api/ // Configs setColorTemperature(value) { return this.setDevicePropValue({ devicePropCode: DevicePropCodeRicohTheta.ColorTemperature, datatypeCode: DatatypeCode.Uint16, encode: value => value, value, }); } getColorTemperatureDesc() { return this.getDevicePropDesc({ devicePropCode: DevicePropCodeRicohTheta.ColorTemperature, datatypeCode: DatatypeCode.Uint16, decode: data => data, }); } setExposureMode(value) { return this.setDevicePropValue({ devicePropCode: DevicePropCode.ExposureProgramMode, datatypeCode: DatatypeCode.Uint16, encode: value => { return this.exposureModeTable.getKey(value) ?? null; }, value, }); } getExposureModeDesc() { return this.getDevicePropDesc({ devicePropCode: DevicePropCode.ExposureProgramMode, datatypeCode: DatatypeCode.Uint16, decode: data => { return this.exposureModeTable.get(data) ?? null; }, }); } async getFocalLengthDesc() { return { writable: false, value: 'spherical', }; } setShutterSpeed(value) { return this.setDevicePropValue({ devicePropCode: DevicePropCodeRicohTheta.ShutterSpeed, datatypeCode: DatatypeCode.Uint64, encode(str) { let fraction, denominator; if (str.includes('/')) { const [fractionStr, denominatorStr] = str.split('/'); fraction = parseInt(fractionStr); denominator = parseInt(denominatorStr); } else { const secs = parseFloat(str); denominator = secs % 1 > 0 ? 10 : 1; fraction = Math.round(secs * denominator); } return (BigInt(denominator) << BigInt(32)) | BigInt(fraction); }, value, }); } getShutterSpeedDesc() { return this.getDevicePropDesc({ devicePropCode: DevicePropCodeRicohTheta.ShutterSpeed, datatypeCode: DatatypeCode.Uint64, decode(num) { const denominator = Number(num >> BigInt(32)); const fraction = Number(num & BigInt(0xffffffff)); if (denominator === 1 || denominator === 10) { return `${fraction / denominator}`; } return `${fraction}/${denominator}`; }, }); } setWhiteBalance(value) { return this.setDevicePropValue({ devicePropCode: DevicePropCode.WhiteBalance, datatypeCode: DatatypeCode.Uint16, encode: value => { return this.WhiteBalanceTable.getKey(value) ?? null; }, value, }); } getWhiteBalanceDesc() { return this.getDevicePropDesc({ devicePropCode: DevicePropCode.ExposureProgramMode, datatypeCode: DatatypeCode.Uint16, decode: data => { return this.WhiteBalanceTable.get(data) ?? null; }, }); } exposureModeTable = new BiMap([ ...ExposureModeTable.entries(), [0x8003, 'vendor:iso-priority'], ]); WhiteBalanceTable = new BiMap([ ...WhiteBalanceTable.entries(), [0x8001, 'shade'], [0x0004, 'daylight'], [0x0006, 'incandescent'], [0x8002, 'cloud'], [0x8020, 'vendor:incandescent 2'], [0x8003, 'vendor:fluorescent daylight'], [0x8004, 'vendor:fluorescent natural white'], [0x8005, 'vendor:fluorescent white'], [0x8006, 'tungsten'], [0x8007, 'manual'], [0x8008, 'underwater'], ]); } //# sourceMappingURL=TethrRicohTheta.js.map