diff --git a/source/io/video-io-readers-le.adb b/source/io/video-io-readers-le.adb new file mode 100644 index 0000000..8065cee --- /dev/null +++ b/source/io/video-io-readers-le.adb @@ -0,0 +1,32 @@ +with Ada.Unchecked_Conversion; + +package body Video.IO.Readers.LE is + + procedure Read (Reader : in out LE_Reader; Data : out Unsigned_16) is + Buf : Unsigned_8_Array (0 .. 1); + begin + Reader.Read (Buf); + Data := Unsigned_16 (Buf (0)) + + Shift_Left (Unsigned_16 (Buf (1)), 8); + end Read; + + procedure Read (Reader : in out LE_Reader; Data : out Unsigned_32) is + Buf : Unsigned_8_Array (0 .. 3); + begin + Reader.Read (Buf); + Data := Unsigned_32 (Buf (0)) + + Shift_Left (Unsigned_32 (Buf (1)), 8) + + Shift_Left (Unsigned_32 (Buf (2)), 16) + + Shift_Left (Unsigned_32 (Buf (3)), 24); + end Read; + + function To_Integer_32 is new Ada.Unchecked_Conversion (Source => Unsigned_32, Target => Integer_32); + + procedure Read (Reader : in out LE_Reader; Data : out Integer_32) is + T : Unsigned_32; + begin + Reader.Read (T); + Data := To_Integer_32 (T); + end Read; + +end Video.IO.Readers.LE; diff --git a/source/io/video-io-readers-le.ads b/source/io/video-io-readers-le.ads new file mode 100644 index 0000000..08d2d6a --- /dev/null +++ b/source/io/video-io-readers-le.ads @@ -0,0 +1,10 @@ +package Video.IO.Readers.LE is + type LE_Reader is new Base_Reader with null record; + + procedure Read (Reader : in out LE_Reader; Data : out Unsigned_16); + + procedure Read (Reader : in out LE_Reader; Data : out Unsigned_32); + + procedure Read (Reader : in out LE_Reader; Data : out Integer_32); + +end Video.IO.Readers.LE; diff --git a/source/io/video-io-readers.adb b/source/io/video-io-readers.adb new file mode 100644 index 0000000..3796f35 --- /dev/null +++ b/source/io/video-io-readers.adb @@ -0,0 +1,15 @@ +package body Video.IO.Readers is + + procedure Read (Reader : in out Base_Reader; Data : out Unsigned_8) is + begin + Unsigned_8'Read (Reader.Stream, Data); + Reader.Pos := Reader.Pos + 1; + end Read; + + procedure Read (Reader : in out Base_Reader; Data : out Unsigned_8_Array) is + begin + Unsigned_8_Array'Read (Reader.Stream, Data); + Reader.Pos := Reader.Pos + Data'Length; + end Read; + +end Video.IO.Readers; diff --git a/source/io/video-io-readers.ads b/source/io/video-io-readers.ads new file mode 100644 index 0000000..b5b1a75 --- /dev/null +++ b/source/io/video-io-readers.ads @@ -0,0 +1,16 @@ +with Interfaces; +use Interfaces; + +package Video.IO.Readers is + type Unsigned_8_Array is array (Integer range <>) of Unsigned_8; + + type Base_Reader is tagged limited record + Stream : access Ada.Streams.Root_Stream_Type'Class; + Pos : Integer := 0; + end record; + + procedure Read (Reader : in out Base_Reader; Data : out Unsigned_8); + + procedure Read (Reader : in out Base_Reader; Data : out Unsigned_8_Array); + +end Video.IO.Readers;