vault backup: 2025-04-19 00:51:05
This commit is contained in:
8
.obsidian/workspace.json
vendored
8
.obsidian/workspace.json
vendored
@@ -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",
|
||||
|
||||
@@ -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-компрессии и форматов видеоданных, используемых на этой платформе.
|
||||
Reference in New Issue
Block a user