# RawSource

## Přehled

autor: Ernst Peché
verze: 20060728
dowload: http://www.avisynth.org/warpenterprises/
kategorie: Různé pluginy
požadavky:
licence: GPL

## Co to dělá

Tento filtr načítá raw (syrová) video data.

## Použití

`RawSource` (string "file", int "widht", int "height", string "pixel_type", string "index", bool "show")

RawSource otvírá video soubory, které obsahují YUV2, YV16, YV12, RGB nebo Y8 video data.
Existují tři způsoby jak jsou pozice dat video snímků počítány:

- je nalezena YUV4MPEG2-hlavička (header), width/height/framerate/pixeltype je nastaveno v souladu s daty hlavičky. Jsou podporovány jen hlavičky snímků pevné délky (fixed-length FRAME headers).
- width, height a pixel_type jsou dány jako argumenty. Pak jsou pozice vypočteny za předpokladu, že jsou v souboru jen video data.
- řetězec "index" (nebo soubor) je zadán spolu s width, height, pixel_type. Řetězec index může obsahovat všechny nebo částečné pozice snímků.

Podporované pixel_type jsou:
RGB, RGBA, BGR, BGRA (interleaved RGB bez podvzorkování, což vede k formátům AviSynthu RGB24 nebo RGB32)
YUYV, YVYU, UYVY, VYUY (interleaved horizontálně podvzorkované což vede k formátu AviSynthu YUV2)
YV16 (planární horizontálně podvzorkovaný, je převeden do AviSynth formátu YUV2)
I420, YV12 (planární horizontálně a vertikálně podvzorkované což vede k formátu AviSynthu YV12)
Y8 (jen jas což vede k formátu AviSynthu YV12 grey, čeká na Avisynth 2.6 s nativní podporou Y8)

Maximální šířka width je 2880.
Frekvence snímků je pevná 25fps, Můžete ji změnit pomocí AssumeFPS, pokud potřebujete (např. pro NTSC-materiál).

Při show=true se zobrazí skutečně použitá bajtová pozice pro zobrazený snímek, následovaná:
K = použita je pozice daná v indexu
D = použita je pozice přidáním aktuálního delta
B = použita je pozice přidáním aktuálního big_delta

#### Několik jednoduchých příkladů:

    RawSource("d:\yuv4mpeg.yuv")  #toto předpokládá, že je uvnitř platná YUV4MPEG2-hlavička.
                                  #Pokud ne, použijí se výchozí hodnoty: width=720, height=576, pixel_type="YUV2"

    RawSource("d:\src6_625.raw",720,576,"BGRA") # skutečný raw (syrový) soubor
                                                # pokud si nejste jisti s pixel_type, jednoduše zkuste všechny možné hodnoty.

#### Použití řetězce index:

Můžete zadat bajtovou pozici video snímků přímo.

    RawSource("d:\yuv.mov",720,576,"UYVY", index="0:192512 1:1021952 25:21120512 50:42048512 75:62976512")

Toto je užitečné pokud to není skutečné raw video, ale např. nekomprimované MOV soubory nebo soubor s nějakým druhem hlavičky.
Bude to pracovat kdykoli jsou vzdálenosti mezi snímky pevné nebo mají alespoň dva pevné intervaly (např. audio data prolínaná (prokládaná) s videem každý 25tý snímek).
Zadáváte páry framenumber:byteposition.
Vnitřně jsou dva kroky hodnot (pro bajtové pozice): delta a big_delta.
delta je uloženo vždy, když jsou dána čísla dvou sousedních snímků, výchozí hodnotou je width*height*bytes_per_pixel.
big_delta je uloženo vždy, když jsou dány tři čísla snímků stejných dvou intervalů. Výchozí hodnota je 0 (to znamená, že není přítomno žádné užitečné big_delta )..
Pokud tyto podmínky nejsou splněny, vnitřní hodnoty delta a big_delta nejsou aktualizovány, je použita jen daná bajtová pozice v indexu.
big_delta je resetováno na 0 jestliže výsledná pozice by byla za danou (viz níže).

Zde je několik možných případů:

      0:    0
    snímek 0 začíná na bajtu 0, krok na snímek 1 je výchozí = width*height*bytes_per_pixel
      0:10000
    snímek 0 začíná na 10000
      0: 5000
      1:15000
    snímek 0 na 5000
    snímek 1 na 15000 (delta je nastaveno na 10000)
    snímek 2 na 25000 (použití delta)
    snímek 3 na 35000 (použití delta)
      0:  5000
      1: 15000

     25:290000

     50:590000

     75:890000
    snímek 0 na 5000
    snímek 1 na 15000 (delta=10000)
    snímek 2 na 25000
    ...
    snímek 25 na 290000 (použití hodnoty (entry) místo delta, které by bylo na 255000)
    snímek 26 na 300000 (stálé použití delta)
    ...
    snímek 50 na 590000 (použití hodnoty (entry) místo delta)
    >> protože 25...50 = 50...75 nyní je big_delta nastaveno na 300000 (590000-290000)
    snímek 51 na 600000 (stálé použití delta)
    ...
    snímek 75 na 890000 (použití hodnoty (entry), která je stejná jako použití big_delta)
    ...
    snímek 100 na 1190000 (použití big_delta)
    snímek 101 na 1200000 (použití delta)
    ...
    snímek 125 na 1490000 (použití big_delta)
      0:  5000
      1: 15000
     25:290000
     50:590000
     75:890000

    100:950000
    stejné jako v předchozím příkladu

    snímek 75 na 890000
    >> protože 890000+300000 > 950000 nyní je big_delta resetováno na 0.
    snímek 100 na 950000
    snímek 101 na 960000 (použití delta)
    ...
    snímek 125 na 1200000 (není ŽÁDNÉ big_delta)

Řetězec index je zpracován jako jméno souboru, pokud je uvnitř "." . Data jsou pak čtena z tohoto souboru, zalomení řádků nevadí.

#### Nalezení těchto bajtových pozicí:

Pomocí yuvscan.exe můžete zkusit analyzovat soubory, které obsahují YUV-data s jen platnými jasovými (luma) a barevnostními (chroma) daty (~16-240).
Program hledá velké nepřerušené bloky bez bajtů < 16 nebo >240 a generuje soubor "index.txt", který může být použit přímo s rawsource (pokud máte opravdu štěstí, přinejmenším).
Je to jen verze příkazového řádku, můžete změnit výchozí parametry. Pokud znáte výšku a šířku dat, výstup bude mnohem lepší.

Použití:
`yuvscan.exe filename triggerlength threshold round_by_bytes`
`triggerlength`: jak dlouhý musí být jeden snímek (v bajtech)
`threshold`: co je považováno za platná YUV data (výchozí 10, což znamená 10 ... 255-10)
`round_by_bytes`: protože většina dat je uložena v pěkných pozicích, výstup může být zaokrouhlen. výchozí 9 což znamená 2^9 = $100

#### Ernst Peché, 2005-10-13

Verze 2006-07-28 - Přidána Y8 podpora (by Fizick, http://avisynth.org.ru)

`Český překlad:17.2.2009`