HNM6: Difference between revisions
m (categorize) |
(→File Format: revisit file header) |
||
Line 9: | Line 9: | ||
u8 sig[4] -- file signature, "HNM6" | u8 sig[4] -- file signature, "HNM6" | ||
u8 reserved[ | u8 reserved[2] -- usually 0 | ||
u8 audioflags -- nonzero value indicates file has APC sound (not authoritative) | |||
u8 bpp | u8 bpp | ||
u16 width | u16 width | ||
u16 height | u16 height | ||
u32 filesize | u32 filesize | ||
u16 frames -- number of frames | |||
u16 reserved2 | |||
u32 | u32 reserved3 -- usually 0, but sometimes "V107", "V108" - version? | ||
u16 speed -- playback speed in fps, may be zero (?assume 15 fps then?) | |||
u16 maxbuffer -- number of frame buffers used | |||
u32 maxchunk -- max frame chunk size | u32 maxchunk -- max frame chunk size | ||
u8 note[16] | u8 note[16] | ||
u8 copyright[16] -- "-Copyright CRYO-" | u8 copyright[16] -- "-Copyright CRYO-" | ||
Each frame chunk begins with u32 chunk size (including this size field), then followed by individual chunks: | Each frame chunk begins with u32 chunk size (including this size field), then followed by frame's individual chunks: | ||
u32 chunksize -- chunk size including this field, excluding padding | u32 chunksize -- chunk size including this field, excluding padding | ||
Line 37: | Line 40: | ||
=== IX Chunk === | === IX Chunk === | ||
Video frame. | Video frame. | ||
== Format modifications == | |||
At least one known game (Riverworld) uses slightly different HNM6 container format, most likely due to different sound encoding. This format is just a small enhancement of the original, but it's not backward compatible. | |||
Standard HNM6 header continues with additional audio description header: | |||
u32 freq | |||
u32 bits | |||
u32 channels | |||
u32 ? | |||
u32 ? | |||
u8 copyright[28] -- "HNMS 1.1 by SARRET Hubert\0\0\0" | |||
u32 ? -- some initial audio samples? | |||
u32 ? | |||
u32 ? | |||
u32 ? | |||
Each frame chunk followed by an audio chunk, however, this audio chunk size is not counted by frame's chunk size field. | |||
Frame chunk format: | |||
u32 sig[4] -- "SOUN" | |||
u32 chunksize -- including this preamble | |||
u8 data[] | |||
== Video Format == | == Video Format == |
Revision as of 06:01, 8 September 2012
- Extension: hnm
- Company: CRYO Interactive Entertainment
- Samples:
HNM6 is the latest variant of HNM video format by Cryo. Unlike its previous versions, it has Hi-color video support.
File Format
File consist of a main header, followed by frame chunks. Each frame chunk consist of individual audio and video chunks. All numbers are little-endian.
u8 sig[4] -- file signature, "HNM6" u8 reserved[2] -- usually 0 u8 audioflags -- nonzero value indicates file has APC sound (not authoritative) u8 bpp u16 width u16 height u32 filesize u16 frames -- number of frames u16 reserved2 u32 reserved3 -- usually 0, but sometimes "V107", "V108" - version? u16 speed -- playback speed in fps, may be zero (?assume 15 fps then?) u16 maxbuffer -- number of frame buffers used u32 maxchunk -- max frame chunk size u8 note[16] u8 copyright[16] -- "-Copyright CRYO-"
Each frame chunk begins with u32 chunk size (including this size field), then followed by frame's individual chunks:
u32 chunksize -- chunk size including this field, excluding padding u16 chunkid -- TWOCC chunk id u16 reserved u8 data[] u8 padding[] -- pads chunk to 4-byte boundary
AA Chunk
APC Audio. See CRYO APC
BB Chunk
Audio continuation.
IX Chunk
Video frame.
Format modifications
At least one known game (Riverworld) uses slightly different HNM6 container format, most likely due to different sound encoding. This format is just a small enhancement of the original, but it's not backward compatible.
Standard HNM6 header continues with additional audio description header:
u32 freq u32 bits u32 channels u32 ? u32 ? u8 copyright[28] -- "HNMS 1.1 by SARRET Hubert\0\0\0" u32 ? -- some initial audio samples? u32 ? u32 ? u32 ?
Each frame chunk followed by an audio chunk, however, this audio chunk size is not counted by frame's chunk size field. Frame chunk format:
u32 sig[4] -- "SOUN" u32 chunksize -- including this preamble u8 data[]