From adbb64a9b34aaf859aed76d98c3a56b96538d93a Mon Sep 17 00:00:00 2001 From: Guilherme Arthur Geronimo <guilherme.geronimo@ufsc.br> Date: Fri, 17 Jan 2025 16:03:49 -0300 Subject: [PATCH] length by unit --- bin/smartdata/Unit.php | 82 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 3 deletions(-) diff --git a/bin/smartdata/Unit.php b/bin/smartdata/Unit.php index 09270a9..b456ed5 100644 --- a/bin/smartdata/Unit.php +++ b/bin/smartdata/Unit.php @@ -64,10 +64,8 @@ abstract class Unit switch ($u & (1 << 31)) { case self::DIGITAL: return new Digital_Unit($u); - break; case self::SI: return new SI_Unit($u); - break; default: throw new InvalidUnitException("Invalid Unit: " . $u); } @@ -135,6 +133,42 @@ final class TypicalUnit extends Unit class Digital_Unit extends Unit { + //const Switch = 0 << 8 | 00 << 0; + //const Direction = 0 << 8 | 01 << 0; + //const On_Off = 0 << 8 | 00 << 0; + //const RFID32 = 1 << 8 | 00 << 0; + const PCMU = 2 << 8 | 0 << 0; + const GSM = 2 << 8 | 3 << 0; + const G723 = 2 << 8 | 4 << 0; + const DVI4_8 = 2 << 8 | 5 << 0; + const DVI4_16 = 2 << 8 | 6 << 0; + const LPC = 2 << 8 | 7 << 0; + const PCMA = 2 << 8 | 8 << 0; + const G722 = 2 << 8 | 9 << 0; + const L16_2 = 2 << 8 | 10 << 0; + const L16_1 = 2 << 8 | 11 << 0; + const QCELP = 2 << 8 | 12 << 0; + const CN = 2 << 8 | 13 << 0; + const MPA = 2 << 8 | 14 << 0; + const G728 = 2 << 8 | 15 << 0; + const DVI4_11 = 2 << 8 | 16 << 0; + const DVI4_22 = 2 << 8 | 17 << 0; + const G729 = 2 << 8 | 18 << 0; + const CelB = 2 << 8 | 25 << 0; + const JPEG = 2 << 8 | 26 << 0; + const nv = 2 << 8 | 28 << 0; + const H261 = 2 << 8 | 31 << 0; + const MPV = 2 << 8 | 32 << 0; + const MP2T = 2 << 8 | 33 << 0; + const H263 = 2 << 8 | 34 << 0; + const MPEG2TS = 2 << 8 | 35 << 0; + const PNG = 2 << 8 | 36 << 0; + const RAW_BGR = 2 << 8 | 37 << 0; + const PCD_MONOCROMATIC = 2 << 8 | 1 << 0; + const PCD_RGB = 2 << 8 | 2 << 0; + //const MOTION_VECTOR_GLOBAL = 1 << 15 | 0 << 8 | 00 << 00; + //const MOTION_VECTOR_LOCAL = 1 << 15 | 0 << 8 | 00 << 00; + public function __get($property) { switch ($property) { @@ -143,12 +177,54 @@ class Digital_Unit extends Unit case 'type': return (($this->_unit & self::TYPE) >> 16); case 'lenght': - return ($this->_unit & self::LENGHT); + return $this->_getLengthByUnit($this->_unit); default: return null; } } + public function _getLengthByUnit($unit) + { + switch ($unit & self::TYPE >> 16) { + case self::PCMU: // TODO + case self::GSM: + case self::G723: + case self::DVI4_8: + case self::DVI4_16: + case self::LPC: + case self::PCMA: + case self::G722: + case self::L16_2: + case self::L16_1: + case self::QCELP: + case self::CN: + case self::MPA: + case self::G728: + case self::DVI4_11: + case self::DVI4_22: + case self::G729: + case self::CelB: + case self::nv: + case self::H261: + case self::MPV: + case self::MP2T: + case self::H263: + case self::MPEG2TS: + return ($this->_unit & self::LENGHT) == 1 ? 1 : $this->_unit & self::LENGHT; + case self::JPEG: + return ($this->_unit & self::LENGHT) == 1 ? 61440 : $this->_unit & self::LENGHT; + case self::PNG: + return ($this->_unit & self::LENGHT) == 1 ? 1 * 1024 * 1024 : (($this->_unit & self::LENGHT) == 2 ? 4 * 1024 * 1024 : $this->_unit & self::LENGHT); + case self::RAW_BGR: + return (($this->_unit & self::LENGHT) == 1 ? 1920 * 1080 * 3 : (($this->_unit & self::LENGHT) == 2 ? 1920 * 1200 * 3 : $this->_unit & self::LENGHT)); + case self::PCD_MONOCROMATIC: + return (($this->_unit & self::LENGHT) == 1 ? 4 * 4 * 32 * (100000 * 0.1) : (($this->_unit & self::LENGHT) == 2 ? 16 * 2 * 12 * (4 * 3 + 1) : $this->_unit & self::LENGHT)); + case self::PCD_RGB: + return ($this->_unit & self::LENGHT) == 1 ? 1 * 1024 * 1024 : $this->_unit & self::LENGHT; + default: + return $this->_unit & self::LENGHT; + } + } public function __toString() { return "{{$this->cod}, D, t={$this->type}, l={$this->lenght}}"; -- GitLab