Source code for pytomo.flvlib.primitives

import struct

"""
The internal FLV representations of numbers.
"""


__all__ = ['get_ui32', 'make_ui32', 'get_si32_extended', 'make_si32_extended',
           'get_ui24', 'make_ui24', 'get_ui16', 'make_ui16',
           'get_si16', 'make_si16', 'get_ui8', 'make_ui8',
           'get_double', 'make_double', 'EndOfFile']


[docs]class EndOfFile(Exception): pass # UI32
[docs]def get_ui32(f): try: ret = struct.unpack(">I", f.read(4))[0] except struct.error: raise EndOfFile return ret
[docs]def make_ui32(num): return struct.pack(">I", num) # SI32 extended
[docs]def get_si32_extended(f): # The last 8 bits are the high 8 bits of the whole number # That's how Adobe likes it. Go figure... low_high = f.read(4) if len(low_high) < 4: raise EndOfFile combined = low_high[3] + low_high[:3] return struct.unpack(">i", combined)[0]
[docs]def make_si32_extended(num): ret = struct.pack(">i", num) return ret[1:] + ret[0] # UI24
[docs]def get_ui24(f): try: high, low = struct.unpack(">BH", f.read(3)) except struct.error: raise EndOfFile ret = (high << 16) + low return ret
[docs]def make_ui24(num): ret = struct.pack(">I", num) return ret[1:] # UI16
[docs]def get_ui16(f): try: ret = struct.unpack(">H", f.read(2))[0] except struct.error: raise EndOfFile return ret
[docs]def make_ui16(num): return struct.pack(">H", num) # SI16
[docs]def get_si16(f): try: ret = struct.unpack(">h", f.read(2))[0] except struct.error: raise EndOfFile return ret
[docs]def make_si16(num): return struct.pack(">h", num) # UI8
[docs]def get_ui8(f): try: ret = struct.unpack("B", f.read(1))[0] except struct.error: raise EndOfFile return ret
[docs]def make_ui8(num): return struct.pack("B", num) # DOUBLE
[docs]def get_double(f): data = f.read(8) try: ret = struct.unpack(">d", data)[0] except struct.error: raise EndOfFile return ret
[docs]def make_double(num): return struct.pack(">d", num)