Source code for mrcrowbar.lib.containers.riff

from __future__ import annotations

from mrcrowbar import models as mrc
from mrcrowbar.lib.images import base as img
from mrcrowbar.utils import from_uint32_be as Tag
from mrcrowbar.utils import to_uint32_be as TagB


[docs]class RIFF( mrc.Block ): CHUNK_MAP = {} magic = mrc.Const( mrc.Bytes( 0x00, length=4 ), b"RIFF" ) size = mrc.UInt32_LE( 0x04 ) form_type = mrc.Bytes( 0x08, length=4 ) stream = mrc.ChunkField( mrc.Ref( "CHUNK_MAP" ), 0x0c, length=mrc.Ref( "size" ), id_field=mrc.UInt32_BE, length_field=mrc.UInt32_LE, alignment=2, default_klass=mrc.Unknown, )
[docs]class RIFXMap( mrc.Block ): CHUNK_MAP = {} form_type = mrc.Bytes( 0x00, length=4 ) stream = mrc.ChunkField( mrc.Ref( "CHUNK_MAP" ), 0x04, id_field=mrc.UInt32_P, length_field=mrc.UInt32_P, alignment=2, fill=b"", default_klass=mrc.Unknown, )
[docs]class RIFX( mrc.Block ): _endian = "big" CHUNK_MAP_CLASS = RIFXMap magic = mrc.Const( mrc.UInt32_P( 0x00 ), Tag( b"RIFX" ) ) size = mrc.UInt32_P( 0x04 ) map = mrc.BlockField( mrc.Ref( "CHUNK_MAP_CLASS" ), 0x08, length=mrc.Ref( "size" ) )
[docs]class XFIR( RIFX ): _endian = "little"
# source: Palette File Format - https://www.aelius.com/njh/wavemetatools/doc/riffmci.pdf
[docs]class PALEntry( img.Colour ): r_raw = mrc.UInt8() g_raw = mrc.UInt8() b_raw = mrc.UInt8() flags = mrc.UInt8() @property def r( self ) -> float: return self.r_raw / 255 @r.setter def r( self, value: float ) -> None: self.r_raw = round( value * 255 ) @property def g( self ) -> float: return self.g_raw / 255 @g.setter def g( self, value: float ) -> None: self.g_raw = round( value * 255 ) @property def b( self ) -> float: return self.b_raw / 255 @b.setter def b( self, value: float ) -> None: self.b_raw = round( value * 255 )
[docs]class PALData( mrc.Block ): version = mrc.UInt16_LE() entry_count = mrc.UInt16_LE() entries = mrc.BlockField( PALEntry, count=mrc.Ref( "entry_count" ) )
[docs]class PAL( RIFF ): CHUNK_MAP = {Tag( b"data" ): PALData} form_type = mrc.Const( mrc.Bytes( 0x08, length=4 ), b"PAL " )