MDEC

From PSXDEV
Jump to: navigation, search

MDEC используется для декодирования потокового видео, обычно записанного в .STR файлы. Но в общем случае MDEC может декодировать любые изображения (картинки, текстуры и пр.)

Алгоритм декодирования несложный и практически повторяет JPEG. Поэтому разжевывать основы и принципы DCT мы тут не будем.

Входные данные разбиваются на более мелкие порции, называемые макроблоками. Поэтому процесс декодирования производится "шагами", декодируя макроблоки по очереди.

Аппаратно MDEC производит декодирование RLE, IDCT и конверсию color-space (YCbCr -> RGB). VLC-декодирование (Хаффман) производится программно, библиотекой PsyQ SDK (слишком жирно было бы Хаффмана железом делать).

Программный интерфейс

Программисту доступны 2 регистра : MDEC Data/Command (0x1f80_1820) и MDEC Status/Control (0x1f80_1824), а также 2 DMA-канала MDEC Input (DMA0) и MDEC Output (DMA1).

Более подробно можно почитать у Мартина : http://nocash.emubase.de/psx-spx.htm#macroblockdecodermdec

Также он у нас на форуме оставил интересное сообщение : http://board.psxdev.ru/topic/9/ , где вкратце расписана логика работы MDEC-декодера.

В PsqQ SDK содержится специальная библиотека libpress, которая содержит в себе все основные API для декодирования потока данных MDEC.

Форматы данных

Формат входных данных битстрима зависит от режима выходных данных:

  • Если формат выходных данных установлен в 4bpp или 8bpp (монохром), то MDEC интерпретирует входные данные как 8x8 блоки яркости (Y)
  • Если формат выходных данных установлен в 15bpp или 24bpp (цвет), то входные данные интерпретируются тоже блоками 8x8, но в такой последовательности : Cr, Cb, Y1, Y2, Y3, Y4. При этом блоки цветности "растягиваются" до блоков 16x16 (при адресации индекс просто умножается на 2). Вот:
   .-----.       .-----.       .-----.
   |     |       |     |       |Y1|Y2|
   | Cr  |   +   | Cb  |   +   |--+--|
   |     |       |     |       |Y3|Y4|
   '-----'       '-----'       '-----'

Цветность растягивается по причине того, что беспонту хранить отдельные блоки, потому что глаз человека все равно не заметит разницы.

Формат выходных данных устанавливается контрольным регистром MDEC.


MDEC Circuit

MDEC Circuit