#

DGDecode

## Přehled

autoři: MarcFD, Nic, trbarry, Sh0dan, Graft and others
verze: 1.5.5
kategorie: MPEG Dekodér
stáhnout: http://neuron2.net/dgmpgdec/dgmpgdec.html
požadavky:
licence: GPL

## Obsah

Co je DGDecode?
Syntaxe filtru
MPEG2Source()
LumaYV12()
BlindPP()
Deblock()
Příklady použití
LoadPlugin() - příklad
MPEG2Source() - příklady
LumaYV12() - příklady
BlindPP() - příklady
Deblock() - příklady
Příloha A: BlindPP() - poznámky
Příloha B: iDCT Algoritmus - poznámky
Příloha C: SIMD Instrukce
Poděkování
Licence

##

Co je DGDecode? | Obsah

DGDecode, část balíku DGMPGDec, je to MPEG-1/2 dekodér (plug-in) navržený pro AviSynth v2.5 nebo vyšší. Je schopen dekódovat jakýkoliv MPEG-1 nebo MPEG-2 stream čitelný v DGIndexu. Další funkce zahrnují: YV12, I420, a YUY2 výstupní barevné prostředí (a RGB24 přes DGVfapi), optimalizovaná iDCT, post-process deblocking (odstraňování kostkatění) a deringing (odstraňování zvonění, chvění hran), jasové (luminosity) filtrování, a více!

DGDecode je založen na MPEG2Dec3 v1.10, který sám je založen na MPEG2Dec2 ze SourceForge projektu "save-oe".

Důležitá poznámka: Tento filtr byl přejmenován na DGDecode aby se zabránilo zmatkům v názvech a pro jasnější spojení s neuron2 verzí programu DVD2AVI zvanou DGIndex. Neuron2 chce vynaložit velké úsilí pro uznání původu DGDecode, jak je popsáno níže od MarcFD! Ano, neuron2 pokračoval ve vývoji a udělal některé opravy, ale stojí na ramenou obrů uvedených níže v kapitole poděkování.

Poslední verze programu a zdrojového kódu DGMPGDec můžete stáhnout na http://neuron2.net/dgmpgdec/dgmpgdec.html

Toto je svobodný (free) software šířený pod podmínkami GNU GPL v2 license. Musíte souhlasit s podmínkami této licence než začnete tento plug-in nebo jeho zdrojový kód používat. Pro podrobnosti se podívejte prosím do kapitoly Licence .

##

Syntaxe filtru | Obsah

###

MPEG2Source() | Obsah

`MPEG2Source(str "d2v", int "idct", int "cpu", bool "iPP", int "moderate_h", int "moderate_v", str "cpu2", int "upConv", bool "iCC", bool "i420", int "info", bool "showQ", bool "fastMC")`
Ačkoliv DGDecode může nyní dekódovat jak MPEG-1 tak i MPEG-2, je tato funkce stále nazývána MPEG2Source()
pro kompatibilitu s existujícími skripty. Můžete ji použít jak pro MPEG-1 tak pro MPEG-2 stream.
d2v: "[CESTA\]project.d2v"

DGIndex Projektový soubor.
vyžadovaný parametr!
Poznámka 1: CESTA může být ignorována pokud "projekt.d2v" je ve stejné složce jako váš AviSynth (*.avs) skript.

idct: 0 až 7 (výchozí: 0)

iDCT Algoritmus.
Pro více infomací o iDCTs se podívejte do Přílohy B.
Podívejte se prosím do Přílohy C na podporované CPU.
- 0: Použije hodnotu zadanou DGIndexem
- 1: 32-bit MMX
- 2: 32-bit SSEMMX
- 3: 32-bit SSE2MMX
- 4: 64-bit Floating Point
- 5: 64-bit IEEE-1180 Reference
- 6: 32-bit SSEMMX (Skal)
- 7: 32-bit Simple MMX (XviD)

cpu: 0 až 6 (výchozí: 0)

Možnosti rychlého nastavení zpracování (Post-Processing).
(Y=luma - jas, C=chroma -barevnost, H=horizontální, V=vertikální)
- 0: VYPNUTÉ ZPRACOVÁNÍ (POST-PROCESSING)
- 1: DEBLOCK_Y_H
- 2: DEBLOCK_Y_H, DEBLOCK_Y_V
- 3: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H
- 4: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V
- 5: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V, DERING_Y
- 6: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V, DERING_Y, DERING_C

iPP: true/false (VÝCHOZÍ: auto)

Režim zpracování.
DGDecode automaticky používá PROGRESSIVE_FRAME flag (znak progresivního snímku) pro přepínání mezi zpracováním založeném na polích/snímcích podle skladby snímků.
Měli by jste zadat parametr iPP pouze pokud chcete vynutit, aby DGDecode použil konkrétní režim zpracování.
- [nezadané]: následuje PROGRESSIVE_FRAME flag
- true: vynutí na polích založené (prokládané) zpracování
- false: vynutí na snímcích založené (progresivní) zpracování

moderate_h, moderate_v: 0 až 255 (výchozí: moderate_h=20, moderate_v=40)

Citlivost detekce bloků.
(moderate_h=horizontal, moderate_v=vertical)
Menší hodnoty jsou silnější, používejte s opatrností.

cpu2: (výchozí: "")

Uživatelské možnosti zpracování.
Zadává šestiznakový řetězec "x" a "o" v souladu se seznamem níže. (case-insensitive)
Každý "x" zapíná odpovídající funkci zpracování.
Každý "o" vypíná odpovídající funkci zpracování.
znak 1: luma horizontal deblocking (horizontální odstranění kostkatění jasu - deblokování)
znak 2: luma vertical deblocking (vertikální odstranění kostkatění jasu)
znak 3: chroma horizontal deblocking (horizontální odstranění kostkatění barevnosti)
znak 4: chroma vertical deblocking (vitikální odstranění kostkatění barevnosti)
znak 5: luma deringing (odstranění zvonění hran jasu)
znak 6: chroma deringing (odstranění zvonění hran barevnosti)
Například, pro zapnutí zpracování jen barevnosti (chroma) použijte:

    MPEG2Source("project.d2v", cpu2="ooxxox")

upConv: 0 až 2 (výchozí: 0)

Nadvzorkuje z 4:2:0 do YUY2 (4:2:2) nebo RGB24.
- 0: neprovede nadvzorkování
- 1: Nadvzorkuje do YUY2 (ignorováno pokud je vstup už 4:2:2)
- 2: Nadvzorkuje do RGB24

iCC: true/false (výchozí: auto)

Režim nadvzorkování.
DGDecode automaticky používá PROGRESSIVE_FRAME flag (znak progresivního snímku) pro přepínání mezi nadvzorkováním založeném na polích/snímcích podle skladby snímků.
Měli by jste zadat jen iCC parametr pokud chcete vynutit, aby DGDecode použil konkrétní režim nadvzorkování.
- [nezadáné]: následuje PROGRESSIVE_FRAME flag
- true:vynutí na polích založené (prokládané) nadvzorkování
- false: vynutí na snímcích založené (progresivní) nadvzorkování

i420: true/false (výchozí: false)

Předává I420 barevné prostředí.
Může být vyžadováno některými legacy aplikacemi.
Ignorováno jestliže vstup není YV12 (4:2:0), nebo při nadvorkování s upConv=1 nebo 2.
- true: Předává I420
- false: Předává YV12

info: 0 až 3 (výchozí: 0)

Ladící (Debug) Informace.
- 0: Negeneruje ladící informaci
- 1: Ladící informace překrývání (Overlay) ve videu
- 2: Předává ladící informace přes OutputDebugString()
- 3: Předává údaje (hints) ve videu (jak je definováno v utilities.cpp/utilities.h)

showQ: true/false (výchozí: false)

Zobrazí kvantizery makrobloků.
- true: Zobrazí kvantizery
- false: Nezobrazí kvantizery

fastMC: true/false (výchozí: false)

Vladova kompenzace rychlého pohybu.
Velmi malé urychlení, ale se sníženou přesností.
Pro testovací účely, a může být odstraněna v příštích verzích.
Vyžaduje SSE nebo 3DNow!, podívejte se prosím do Přílohy C na podporu CPU.

###

LumaYV12() | Obsah

`LumaYV12(clip, integer "lumoff", float "lumgain")
`
Tato funkce nesouvisí s Jasovým filtrem (Luminance Filter) DGIndexu.
Transformace je: `Y = (y * lumgain) + lumoff`
LumaYV12() předává rozsah 0->255 YUV , a ne CCIR-601 rozsah 16->235. Použijte místo něj vestavěný filtr AviSynthu ColorYUV(), jestliže potřebujete vynutit rozsah 16->235. Functionality LumaYV12() lze dosáhnout použitím filtru AviviSyntu ColorYUV(), který má více možností, ale LumaYV12() je optimalizována pro rychlost při provádění základních úprav jasu.
lumoff: -255 až 255 (výchozí: 0)

Posunutí jasnosti (světelnosti).
Upraví jas (luma) všech pixelů o pevnou hodnotu.

lumgain: 0.0 až 2.0 (výchozí: 1.0)

Zesílení (násobení) jasnosti.
Upraví jas (luma) všech pixelů o proporcionální hodnotu.

###

BlindPP() | Obsah

`BlindPP(clip, int "quant", int "cpu", bool "iPP", int "moderate_h", int "moderate_v", str "cpu2")
`
Deblokuje a/nebo odstraňuje zvonění jakéhokoliv video zdroje.
Vyžaduje YUY2 nebo YV12 vstup.
Podívejte se prosím do Přílohy A na uživatelské poznámky.
quant: 0 až 31 (výchozí: 2)

Emulovaný (napodobený) kvantizer.
Určuje intenzitu procesu deblokování.

cpu: 0 až 6 (default: 6)

Stejná funkce jako v MPEG2Source(), ale s jinou výchozí hodnotou.

iPP: true/false (výchozí: false)

Stejná funkce jako v MPEG2Source(), ale s jinou výchozí hodnotou.
Automatický režim NENÍ dostupný.

moderate_h, moderate_v, cpu2: (výchozí: moderate_h=20, moderate_v=40, cpu2="")

Stejné funkce jako v MPEG2Source(), ale s jinými výchozími hodnotami.

###

Deblock() | Obsah

`Deblock(clip, int "quant", int "aOffset", int "bOffset", bool "mmx", bool "isse")
`
Manaův H.264 Deblokovací filtr. (v0.9.5)
Vyžaduje YV12 vstup.
Oba (quant + aOffset) A (quant + bOffset) musí být > = 16 jinak filtr nic neudělá.
quant: 0 až 51 (výchozí: 25)

Emulovaný (napodobený) kvantizer.
Určuje intenzitu procesu deblokování.

aOffset: (výchozí: 0)

Modifikátor k prahové hodnotě detektoru kostkatění (bloků).
Jeho vyšší nastavení znamená, že bude deblokováno více hran.

bOffset: (výchozí: 0)

Modifikátor pro detekci bloků a pro intenzitu deblokování.
Znovu, čím vyšší, tím silnější.

mmx: true/false (výchozí: true)

Automaticky se vypne, když ji CPU nepodporuje.
- true: Zapne MMX optimalizaci
- false: Vypne MMX optimalizaci

isse: true/false (výchozí: true)

Automaticky se vypne, když ji CPU nepodporuje.
Podívejte se prosím do Přílohy C na podporované CPU.
- true: Zapne SSE optimalizaci
- false: Vypne SSE optimalizaci

##

Uživatelské příklady | Obsah

###

Načtení pluginu do AviSynthu - LoadPlugin() | Obsah

Funkce AviSynthu LoadPlugin() musí být volána před použitím funkcí DGDecode.
Pro splnění této podmínky, přidejte na začátek vašeho AviSynth (*.avs) skriptu následující řádek:

    LoadPlugin("[PATH\]DGDecode.dll")

Poznámka: PATH (CESTA) může být ignorována pokud DGDecode.dll je ve výchozí složce pluginů AviSynthu , jinak musí být PATH zadána.

###

MPEG2Source() - příklady | Obsah

MPEG2Source() by měl být použij jen s MPEG-1 a MPEG-2 video zdroji.
Prosté YV12 dekódování:

    MPEG2Source("[PATH\]project.d2v")

Poznámka: PATH může být ignorována jestliže "project.d2v" je ve stejné složce jako váš AviSynth (*.avs) skript.
Provedení pouze deblokování:

    MPEG2Source("project.d2v", cpu=4)

Provedení deblokování prokládaného zdroje se zvýšenou vertikální citlivostí:

    MPEG2Source("project.d2v", cpu=4, iPP=true, moderate_v=20)

Provedení pouze "deringing" (odstranění zvonění, chvění hran):

    MPEG2Source("project.d2v", cpu2="ooooxx")

Výběr optimalizace 32-bit SSE2 iDCT a také výstup do I420 barevného prostředí:

    MPEG2Source("project.d2v", idct=5, i420=true)

Převedení do YUY2 založené na PROGRESSIVE_FRAME znaku:

    MPEG2Source("project.d2v", upConv=1)

Zobrazení informací o videu na obrazovce:

    MPEG2Source("project.d2v", info=1)

###

LumaYV12() - příklady | Obsah

Následující příklady LumaYV12() jsou samozřejmě zcela subjektivní.
Upravte si je poble libosti.
Ztmavení jasu:

    MPEG2Source("project.d2v")
    LumaYV12(lumoff=-10, lumgain=0.9)

Zesvětlení jasu:

    MPEG2Source("project.d2v")
    LumaYV12(lumoff=10, lumgain=1.1)

###

BlindPP() - příklady | Obsah

BlindPP() by nemělo být použito, když je video otevřeno pomocí funkce
MPEG2Source() , protože její možnosti zpracování budou pracovat lépe. Typicky je BlindPP() používáno při otvírání videa pomocí filtrů AviSynthu AviSource() nebo DirectShowSource().
Provedení výchozího deblokování a odstranění zvonění hran (deringing):

    AVISource("my_video.avi")
    BlindPP()

Provedení pouze deblokování:

    AVISource("my_video.avi")
    BlindPP(cpu=4)

Provedení deblokování na prokládaném zdroji se zvýšenou horizontální citlivostí:

    AVISource("my_video.avi")
    BlindPP(cpu=4, iPP=true, moderate_h=10)

Provedení silnějšího deblokování a odstranění zvonění hran:

    DirectShowSource("my_video.mpg")
    BlindPP(quant=12)

Provedení pouze odstranění zvonění hran:

    DirectShowSource("my_video.mpg")
    BlindPP(cpu2="ooooxx")

###

Deblock() - příklady | Obsah

Deblock() může být použito s MPEG-2 video zdrojem z MPEG2Source() pokud to upřednostňujete před zpracováním pomocí MPEG2Source(), nebo to může být použito s jinými zdroji videa. V druhém případě to obyčejně znamená otvírání videa pomocí filtrů AviSynthu AviSource() nebo DirectShowSource().
Provedení výchozího deblokování:

    MPEG2Source("my_video.d2v")
    Deblock()

nebo:

    AVISource("my_video.avi")
    Deblock()

Provedení silného deblokování se zvýšenou citlivostí:

    DirectShowSource("my_video.mpg")
    Deblock(quant=32, aOffset=16, bOffset=24)

##

Příloha A: BlindPP() - Poznámky | Obsah

Bloky (kostkatění obrazu) jsou důsledkem 8x8-pixel DCT používané MPEG enkodéry. Takže za prvé, musíte si být jisti, že bloky které chcete deblokovat (vyhladit, tzn. zbavit se kostkatění) jsou stále zarovnány na 8-pixelových hranicích. To znamená, neprovádět žádné ořezání obrazu (cropping) a žádné změny velikosti (resizing) před použitím BlindPP(). Pokud je váš zdroj kódován prokládaně, nastavte iPP=true, pokud je progresivní pak je výchozí nastavení správné (iPP=false).

Parametry jsou: quant, cpu2, moderate_h, a moderate_v.

quant udává celkovou sílu se kterou je deblokovací proces prováděn.

Nastavte cpu2 na "xxxxoo" pro horizontální a vertikální deblokování jasu a barevnosti, na "xooxoo" pro horizontální jasové a vertikální barevnostní deblokování, atd. Jak budete chtít.

moderate_h a moderate_v určuje horizontální a vertikální citlivosti, to je, kde provést deblokování, a kde ho neprovádět. Ovládají citlivost rozpoznávání zda jsou bloky přítomny.

quant=2, moderate_h=35-45, moderate_v=45-55 vám dá velmi jemné změkčení pouze na silných, jasně viditelných blocích. To zachová velmi mnoho detailů a ostrosti, ale také nechá nedotkuté slabé bloky, a ne zcela zničí ty silnější.

quant=16, moderate_h=15-20, moderate_v= 20-30 provede spíše silné deblokování na téměř všem co by snad mohlo být blokem, ale také vyhladí hodně detailů a ostrosti.

Zbytek je už na vás, vašem vkusu a vašem zdrojovém materiálu.

Jiný příklad... protože výborný odšumovač PixieDust() může sám občas způsobit kostkatění v pohyblivých oblastech, dělám občas toto:

    PixieDust(2).BlindPP(quant=8, cpu2="xxxxoo", moderate_h=45, moderate_v=55)

Toto odstraní slušné množství nejvíce viditelného kostkatění, pokud a pouze jestliže PixieDust() nějaké vytváří. Na zbývajících 99.8% kde PixieDust() neudělal bloky, toto neprovede téměř nic, tak jak to právě potřebujete.

##

Příloha B: iDCT Algoritmus - Poznámky | Obsah

Textový soubor FlasKMPEG obsahuje výborný technický popis iDCT. Cituji:

"Video informace uvnitř MPEG souborů jsou uchovány spíše ve frekvenčním pásmu než v prostorovém (spatial) pásmu (obrazy, které vidíme). Tak se stávají informace kompaktní a kompaktnost může být využita ke kompresi (snížení) množství informací, které musíte poslat přes přenosový kanál. MPEG používá DCT (Discrete Cosine Transform - Diskrétní kosinová transformace) pro překlad prostorové informace na frekvenční informaci. Pro navrácení prostorové informace z MPEG streamu musíte použít iDCT, to je, Inverse Discrete Cosine Transform (Inverzní diskrétní kosinová transformace), která obrátí DCT , jenž byla použita při kódování."

"Ačkoli MPEG je téměř deterministický (výstup daného MPEG streamu by měl být identický ve všech dekodérech), standard má určitou volnosti při volbě použitého iDCT. Tak, dekodér může být snadněji implementován v závislosti na hardwaru pod ním. To co standard od dekodéru vyžaduje, je aby iDCT splňovala IEEE-1180 specifikace, neboli prostými slovy, aby chyba z iDCT nepřekračovala tyto specifikace uvedené v IEEE-1180."

Kterou iDCT by jste měli použít závisí primárně na CPU a v menší míře na přesnosti iDCT kterou si přejete. Většina lidí nebude schopna říci rozdíl v kvalitě mezi těmito algoritmy, ale lze ho snadno pozorovat kombinováním filtrů AviSynthu Subtract() a Levels() . Všechny dostupné možnosti splňjí IEEE-1180, kromě SSE/MMX (Skal).

Stupeň kvality: IEEE-1180 Reference > 64-bit Floating Point > Simple MMX (XviD) > Ostatní iDCTs.

Stupeň rychlosti: SSE2/MMX a SSE/MMX (Skal) jsou obvykle nejrychlejší. IEEE-1180 Reference je prostě nejpomalejší.

##

Příloha C: SIMD Instrukce | Obsah

SIMD je zkratka pro Single Instruction, Multiple Data (jedna instrukce, více dat). Je to termín, který odkazuje na sadu operací pro efektivní manipulaci s velkým množstvím dat paralelně. Je to obzvlášť produktivní pro aplikace, ve kterých jsou zpracovávány video nebo audio soubory. Co obvykle vyžadovalo řadu instrukcí lze nyní vykonat v jedné instrukci.

Existuje sedm různých sad SIMD instrukcí, které jsou k dispozici pro procesory Intel a AMD, ale ne každý procesor podporuje všechny tyto moderní instrukční sady. To je důvod, proč mnoho funkcí DGDecode nabízí možnosti pro určení, která sada optimalizací má být použita. Níže uvedená tabulka uvádí SIMD instrukce podporované DGDecode, a požadované procesory pro jejich využití.

Tabulka 1: SIMD Instrukce podporované v DGDecode
| MMX | 3DNow! | SSE | SSE2
--- | --- | --- | --- | ---
Vyžadované Intel CPU | Všechny Intel CPU | Nepodporované v Intel CPU | Pentium 3, Pentium 4 | Pentium 4
Vyžadované AMD CPU | Všechny AMD CPU | Všechny AMD CPU | Athlon XP, Athlon 64 | Athlon 64

##

Poděkování | Obsah

Abecední pořadí:
"ARDA", za filtr LumaYV12()
Mathias Born, autor původního MPEG2Dec
"Cyberia", za Přílohy B a C, a modernizaci uživatelského manuálu
"Didée", za Přílohu A: Poznámky k použití BlindPP()
"fccHandler", MPEG dekódování opravy/vylepšení, dobré rady
Donald Graft ("neuron2"), oprava vypouštění snímků, přesné indexování, podpora PVA, a další
Peter Gubanov, autor MMX/SSEMMX iDCT
Chia-chen Kuo ("jackei"), autor DVD2AVI
"Manao", za jeho filtr Deblock()
"MarcFD", YV12 podpora a další
"Nic", zpracování (post-processing) a další
Miha Peternel, autor Floating Point a Reference iDCT
Dmitry Rozhdestvensky, autor SSE2 iDCT
"sh0dan", optimalizace kódu
"Skal", za jeho SSEMMX iDCT
"trbarry", transport parsing, a optimalizace kódu
"tritical", nadvzorkování (upsampling), překrytí informacemi, zdokonalení VFAPI, a oprava množství chyb

##

Licence | Obsah

Tento program je šířen za podmínek GNU Public License. Na podrobnosti se podívejte prosím do souboru COPYING.TXT zahrnutého do tohoto distribučního balíku.

Copyright (C) 2004-2006 Donald A. Graft, Všechna práva vyhrazena.

`Český překlad:12.6.2009`