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