vault backup: 2025-04-19 00:51:05

This commit is contained in:
sShemet
2025-04-19 00:51:05 +05:00
parent 80029c6982
commit 9372af4422
2 changed files with 81 additions and 5 deletions

View File

@@ -41,12 +41,12 @@
"state": {
"type": "markdown",
"state": {
"file": "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md",
"file": "PERSONAL PROJECTS/PS1 DOCS/PS1 DMA.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "PS1 IRQ"
"title": "PS1 DMA"
}
}
],
@@ -207,9 +207,10 @@
},
"active": "dd912cc876184c4f",
"lastOpenFiles": [
"PERSONAL PROJECTS/PS1 DOCS/PS1 MDEC.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 DMA.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md",
"PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 Geometry Transformation Engine.md",
"PERSONAL PROJECTS/PS1 DOCS/LZSS C++ Lib.md",
@@ -221,7 +222,6 @@
"PERSONAL PROJECTS/PS1 DOCS/PSX code - modules load and exec.md",
"PERSONAL PROJECTS/PS1 DOCS/PSX code - Load texture from SECTOR!.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 Vblank.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 MDEC.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 Gpu-DMA.md",
"PERSONAL PROJECTS/PS1 DOCS/PS1 DMA CD-ROM.md",
"WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",

View File

@@ -143,4 +143,80 @@ void play_fmv() {
3. **Вывод** через GPU.
4. **Синхронизация** с VBlank.
Именно так работали FMV в играх вроде *Metal Gear Solid* и *Final Fantasy VII*! 🎥
-----------------
# Функция `DecDCTvlc2` в библиотеке PsyQ для PlayStation 1
Функция `DecDCTvlc2` является частью аппаратно-оптимизированной библиотеки декодирования видеоданных в реальном времени для PlayStation 1. Она выполняет декодирование **переменнодлинных кодов (VLC - Variable Length Coding)** в процессе декомпрессии **DCT (Discrete Cosine Transform)** данных, обычно используемых в видеоформатах типа MPEG.
## Основное назначение
`DecDCTvlc2` декодирует:
1. Битовые потоки с переменнодлинным кодированием (VLC)
2. Коэффициенты DCT после обратного зигзаг-сканирования
3. Данные в формате, используемом аппаратным декодером PS1
## Технические детали
```c
void DecDCTvlc2(unsigned short *data, int *macroblock);
```
Где:
- `data` - указатель на входной битовый поток VLC
- `macroblock` - указатель на выходной буфер для декодированных данных макроблока (6 блоков по 64 элемента: 4 яркостных, 2 цветностных)
## Особенности реализации
1. **Аппаратное ускорение** - использует специальные возможности графического процессора PS1
2. **Оптимизировано для MPEG-подобных потоков** - но не является полным MPEG-декодером
3. **Работает с макроблоками** - 16x16 пикселей (4 блока яркости Y, 1 блок каждой цветности Cr/Cb)
4. **Требует предварительной настройки** - через `DecDCTin()`, `DecDCTout()` и другие функции видеоцепи
## Пример использования
```c
#include <libetc.h>
#include <libgte.h>
#include <libgpu.h>
#include <libds.h>
#include <libsn.h>
void decode_video_frame(unsigned short *vlc_data) {
// Буфер для декодированного макроблока (6 блоков по 64 коэффициента)
int macroblock[6*64];
// Настройка ввода/вывода декодера
DecDCTin(vlc_data, 0);
DecDCTout((unsigned char*)macroblock, 0);
// Декодирование VLC-потока
DecDCTvlc2(vlc_data, macroblock);
// Дальнейшая обработка декодированных данных...
}
```
## Типичный контекст использования
1. **Декодирование внутрикадровых (I-кадров) MPEG-видео**
2. **Обработка видеопотоков в реальном времени**
3. **Специальные эффекты с использованием DCT-данных**
4. **Собственные алгоритмы видеокомпрессии**
## Важные нюансы
1. **Не является полным MPEG-декодером** - требует дополнительной логики для полного декодирования видео
2. **Требует точного соответствия формату данных** - входной поток должен быть правильно сформирован
3. **Работает в паре с другими функциями DCT-цепи**:
- `DecDCTin()` - настройка входного буфера
- `DecDCTout()` - настройка выходного буфера
- `DecDCToutCallback()` - установка callback'а по завершении
4. **Использует аппаратные возможности PS1** - дает значительный выигрыш в производительности по сравнению с программной реализацией
Функция `DecDCTvlc2` представляет собой низкоуровневый инструмент для работы с видео на PS1 и требует глубокого понимания принципов DCT-компрессии и форматов видеоданных, используемых на этой платформе.