Difference between revisions of "ETV"

From MultimediaWiki
Jump to: navigation, search
Line 30: Line 30:
   s8    noise[256*256/8]  -- used to set up noise filter
   s8    noise[256*256/8]  -- used to set up noise filter
  s8    videodata[]       -- RNC-packed
s32    len              -- do not rely on this value
  s8    videodata[len]   -- RNC-packed
== Video Decompression ==
== Video Decompression ==

Revision as of 08:31, 6 March 2011

ETV is a multimedia format found on the computer game Disney's Hercules. It is suspected to be from eTreppid Technologies.

Video compression heavily relies on RNC ProPack compression. Random noise filter is used as a part of decoding process. Apparently, movies can be only up to 200 seconds long.

File Format

File begins with a header, followed by frame blobs. All numbers are little-endian.

s8     signature[4]      -- "ETV\x0A"
s32    width
s32    height
s32    frames
s32    framerate
s32    soundchannels
s32    soundrate
s32    soundbits
s32    unknown1
s32    unknown2
s32    seconds[200]      -- size of one-second frame blob

Frames grouped in one-second blobs (so, up to framerate frames per blob.) Each blob begins with one-second audio data (soundrate * soundchannels * soundbits / 8) bytes total. Then followed by framerate (or less, for the last second) video chunks.

Video chunk format:

s32    chunksize         -- including this field
s8     new_palette       -- new palette flag
-- if new_palette
 RGB   palette[256]      -- new movie palette
 s8    noise[256*256/8]  -- used to set up noise filter
s32    len               -- do not rely on this value
s8     videodata[len]    -- RNC-packed

Video Decompression

Video decompression operates on already RNC-unpacked videodata. Each frame is encoded using 4x4 blocks. Encoded stream starts with block type tags array. Each tag has 2 bits, first tag in bits 7-6 of byte, then 5-4 and so on. Remainder carries actual pixel values.

For each block:

 if tag is 0: Draw block using next 4x4 bytes of video data.
 if tag is 2: Fill block using next byte of video data.
 otherwise  : Left block unchanged.

Noise Filter

TODO Not really neccessary, works fine without it anyway. Applied only to tag-2 blocks.