我正在尝试为 DOS 游戏中使用的旧视频格式Psygnosis SMV 视频格式编写解码器,但我很难理解图像解码过程,特别是本节:
Macroblocks drawing
Macroblocks are stored in the following format:
u8 pixels[16 * num_mblocks]
u4 nibbles[num_mblocks]
Size of pixels[] is equal to ST chunk's nibbles.
For each macroblock draw it by indexing its pixels by nibbles.
First nibble stored in top 4 bits of byte.
以下是我尝试解码的帧的属性:
- 图像宽度 = 320
- 图像高度 = 192
- 宏块宽度 = 16
- 宏块高度 = 16
- 小口 = 3840
- 以字节为单位的帧大小 = 34560
因此,根据这些,我计算了以下值:
num_mblocks = nibbles / 16 = 3840 / 16 = 240 macroblocks
further checking:
(image width / macroblock width) * (image height / macroblock height)
= (320 / 16) * (192 / 16)
= 20 * 12
= 240 macroblocks
第一个问题:
的大小u8 pixels[16 * num_mblocks]
确实是 3840 字节,但是u4 nibbles[num_mblocks]
应该是什么大小?240 字节或一半,因为类型是u4
?
第二个问题:
当我除以frame size in bytes
数量时,macroblocks
每个宏块只有 144 个字节(34560 / 240 = 144),但对我来说这与它应该的相去甚远,我想我在某个地方错了。
第三个问题:
作者写道:
对于每个宏块,通过按半字节索引其像素来绘制它。
但这究竟是什么意思?
问题
你能解释/阐明一个人应该如何解码一帧吗?