mirror of
https://github.com/SerenityOS/serenity
synced 2024-11-05 17:46:52 +00:00
0d098211b7
Previously, ChunkID's from_big_endian_number() and as_big_endian_number() weren't inverses of each other. ChunkID::from_big_endian_number() used to take an u32 that contained `('f' << 24) | ('t' << 16) | ('y' << 8) | 'p'`, that is 'f', 't', 'y', 'p' in memory on big-endian and 'p', 'y', 't', 'f' on little-endian, and return a ChunkID for 'f', 't', 'y', 'p'. ChunkID::as_big_endian_number() used to return an u32 that for a ChunkID storing 'f', 't', 'y', 'p' was always 'f', 't', 'y', 'p' in memory on both little-endian and big-endian, that is it stored `('f' << 24) | ('t' << 16) | ('y' << 8) | 'p'` on big-endian and `('p' << 24) | ('y' << 16) | ('t' << 8) | 'f'` on little-endian. `ChunkID::from_big_endian_number(0x11223344).as_big_endian_number()` returned 0x44332211. This change makes the two methods self-consistent: they now take and return a u32 that always has the first ChunkID part in the highest bits of the u32 (`'f' << 24`), and so on. That also means they return a u32 that in-memory looks differently on big-endian and little-endian. Since that's normal for numbers, this also renames the two methods to just `from_number()` and `to_number()`. With the semantics cleared up, change the one use in ISOBMFF to read a BigEndian for chunk headers and brand codes. This has the effect of tags now being printed in the right order. Before: ```sh % Build/lagom/bin/isobmff ~/Downloads/sample1.jp2 Unknown Box (' Pj') [ 4 bytes ] ('pytf') (version = 0, flags = 0x0) - major_brand = ' 2pj' - minor_version = 0 - compatible_brands = { ' 2pj' } Unknown Box ('h2pj') [ 37 bytes ] Unknown Box ('fniu') [ 92 bytes ] Unknown Box (' lmx') [ 2736 bytes ] Unknown Box ('c2pj') [ 667336 bytes ] ``` After: ```sh % Build/lagom/bin/isobmff ~/Downloads/sample1.jp2 hmm 0x11223344 0x11223344 Unknown Box ('jP ') [ 4 bytes ] ('ftyp' ) (version = 0, flags = 0x0) - major_brand = 'jp2 ' - minor_version = 0 - compatible_brands = { 'jp2 ' } Unknown Box ('jp2h') [ 37 bytes ] Unknown Box ('uinf') [ 92 bytes ] Unknown Box ('xml ') [ 2736 bytes ] Unknown Box ('jp2c') [ 667336 bytes ] ``` |
||
---|---|---|
.. | ||
ChunkID.h | ||
CMakeLists.txt | ||
Decoding.cpp | ||
Details.cpp | ||
Details.h | ||
IFF.h | ||
RIFF.h |