abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 22:22 | Upozornění Ladislav Hagara | Komentářů: 2
    včera 17:44 | Nová verze

    Firma Murena představila /e/OS verze 2.0. Jde o  alternativní sestavení Androidu bez aplikací Google. Mezi novinkami je podrobnější nastavení ochrany soukromí před sledováním aplikacemi. Murena prodává několik smartphonů s předinstalovaným /e/OS (Fairphone, repasovaný Google Pixel 5).

    Fluttershy, yay! | Komentářů: 0
    včera 14:33 | Zajímavý software

    Do 30. května lze v rámci akce Warhammer Skulls 2024 získat na Steamu zdarma hru Warhammer 40,000: Gladius - Relics of War.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | Nová verze

    HelenOS (Wikipedie), tj. svobodný operační systém českého původu založený na architektuře mikrojádra, byl vydán ve verzi 0.14.1. Přehled novinek v poznámkách k vydání. Vypíchnou lze nabídku Start. Videopředstavení na YouTube.

    Ladislav Hagara | Komentářů: 2
    23.5. 23:22 | Zajímavý software

    BreadboardOS je firmware pro Raspberry Pi Pico (RP2040) umožňující s tímto MCU komunikovat pomocí řádkového rozhraní (CLI). Využívá FreeRTOS a Microshell.

    Ladislav Hagara | Komentářů: 0
    23.5. 16:55 | Nová verze

    Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 24.05. Přehled novinek i s náhledy a videi v oficiálním oznámení. Do balíku se dostalo 5 nových aplikací: Audex, Accessibility Inspector, Francis, Kalm a Skladnik.

    Ladislav Hagara | Komentářů: 6
    23.5. 12:55 | Nová verze

    Byla vydána (𝕏) nová verze 18.0.0 open source webového aplikačního frameworku Angular (Wikipedie). Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    22.5. 23:44 | Pozvánky

    V neděli 26. května lze navštívit Maker Faire Rychnov nad Kněžnou, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    22.5. 16:33 | Nová verze

    Byla vydána nová stabilní verze 3.20.0, tj. první z nové řady 3.20, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Z novinek lze vypíchnou počáteční podporu 64bitové architektury RISC-V.

    Ladislav Hagara | Komentářů: 0
    22.5. 14:11 | IT novinky

    Společnost Jolla na akci s názvem Jolla Love Day 2 - The Jolla comeback představila telefon se Sailfish OS 5.0 Jolla Community Phone (ve spolupráci se společností Reeder) a počítač Jolla Mind2 Community Edition AI Computer.

    Ladislav Hagara | Komentářů: 18
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (82%)
     (4%)
     (7%)
     (7%)
    Celkem 524 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    Rozcestník

    Jaderné noviny - Video4Linux2 - 4: vstupy a výstupy

    16. 1. 2007 | Robert Krátký | Jaderné noviny | 3669×

    Čtvrtý článek z nepravidelné série o psaní video ovladačů pro Linux. Tato část popisuje, jak může aplikace zjistit, jaké vstupy a výstupy daný adaptér poskytuje, a jak si z nich vybrat.

    Pokud jste ještě nečetli první díl, možná by stálo zato začít tam.

    V mnoha případech videoadaptér příliš možností vstupu a výstupu nenabízí. Například řadič kamery může nabízat samotnou kameru a nic moc dalšího. V jiných případech je však situace komplikovanější. TV karta může mít několik vstupů odpovídajících různým konektorům na desce; může mít dokonce i více tunerů schopných nezávislého fungování. Tyto vstupy někdy mívají odlišné charakteristiky; některé mohou být schopny naladit širší rozsah video standardů než ostatní. Totéž platí pro výstupy.

    Je zřejmé, že aby mohla aplikace videoadaptér plně využívat, musí mít možnost se dozvědět o dostupných vstupech a výstupech a zároveň ji musí být umožněno si zvolit ten, se kterým si přeje pracovat. Pro tento účel nabízí Video4Linux2 API tři různá ioctl() volání pro vstupy a tři pro výstupy. Ovladače by měly implementovat všechny tři (pro každou z podporovaných funkcí). U jednoduchého hardwaru jde většinou o jednoduchý kód. Kromě toho by ovladače měly poskytovat rozumné výchozí hodnoty nastavené po zapnutí. Co by však ovladače dělat neměly, to je reset informací o vstupu a výstupu po ukončení aplikace; podobně jako u dalších video parametrů by tato nastavení měla zůstat zachována.

    Video standardy

    Než se však dostaneme k podrobnostem o vstupech a výstupech, musíme se podívat na video standardy. Tyto standardy popisují, jak je videosignál formátován pro přenos - rozlišení, počet snímků za vteřinu atd. Většinou jsou standardy určovány příslušnými úřady v každé zemi. Na světě se používají tři hlavní typy video standardů: NTSC (používán převážně v Severní Americe), PAL (většina Evropy, Afrika a Asie) a SECAM (Francie, Rusko, části Afriky). V různých zemích se však standardy mírně liší a některá zařízení jsou v tomto ohledu přizpůsobivější než jiná.

    Vrstva V4L2 reprezentuje video standardy pomocí typu v4l2_std_id, což je 64bitová maska. Každá varianta je pak jeden bit masky. Takže "standard" NTSC je V4L2_STD_NTSC_M s hodnotou 0x1000, ale japonská varianta je V4L2_STD_NTSC_M_JP (0x2000). Pokud si zařízení poradí se všemi variantami NTSC, může nastavit typ standardu V4L2_STD_NTSC, který má nastaveny všechny relevantní bity. Podobné sady bitů jsou k dispozici pro varianty PAL a SECAM. Vizte kompletní seznam.

    Pro uživatelský prostor poskytuje V4L2 ioctl() příkaz (VIDIOC_ENUMSTD), který aplikaci umožňuje zjistit, které standardy zařízení implementuje. Ovladač nemusí na takovou otázku odpovídat přímo - místo toho prostě naplní pole tvnorm struktury video_device všemi standardy, které podporuje. Vrstva V4L2 pak pro aplikaci vyčlení podporované standardy. Příkaz VIDIOC_G_STD, používaný pro zjišťování toho, který standard je právě aktivní, je v rámci vrstvy V4L2 také obsluhován vracením příslušné hodnoty v poli current_norm struktury video_device. Při spuštění by měl ovladač inicializovat current_norm, aby odpovídalo skutečnosti; některé aplikace jsou zmateny, pokud není nějaký standard nastaven - ačkoliv samy žádný nenastavovaly.

    Pokud si chce aplikace vyžádat určitý standard, použije volání VIDIOC_S_STD, které je ovladači předáno prostřednictvím:

        int (*vidioc_s_std) (struct file *file, void *private_data,
                             v4l2_std_id std);
    

    Ovladač by měl hardware naprogramovat tak, aby použil daný standard a vrátil nulu (nebo záporný chybový kód). Vrstva V4L2 se postará o nastavení current_norm na novou hodnotu.

    Aplikace by mohla chtít vědět, jaký signál vlastně hardware na svém vstupu vidí. Odpověď lze nalézt pomocí VIDIOC_QUERYSTD, který k ovladači přistupuje takto:

        int (*vidioc_querystd) (struct file *file, void *private_data,
                                v4l2_std_id *std);
    

    Ovladač by měl toto pole vyplnit co nejpodrobněji. Pokud hardware neposkytuje moc informací, pole std by mělo ukazovat některý ze standardů, které by to mohly být.

    Za zmínku ještě stojí jedna věc: všechna video zařízení musí podporovat (nebo alespoň tvrdit, že podporují) přinejmenším jeden standard. Video standardy sice nedávají smysl u kamer, které nejsou vázány na nějaké konkrétní předpisy, ale neexistuje žádný standard, který by říkal "Jsem kamera a umím skoro všechno, co si můžeš přát". Takže vrstva V4L2 má několik ovladačů, které tvrdí, že vracejí buď PAL nebo NTSC data.

    Vstupy

    Aplikace pro získávání videa začne očíslováním dostupných video vstupů pomocí příkazu VIDIOC_ENUMINPUT. V rámci vrstvy V4L2 bude tento příkaz převeden na volání odpovídajícího zpětného volání ovladače:

        int (*vidioc_enum_input)(struct file *file, void *private_data,
    			     struct v4l2_input *input);
    

    V tomto volání je file to otevřené video zařízení a private_data je soukromé pole nastavené ovladačem. Skutečné informace jsou předávány struktuře input; má několik polí, která nás zajímají:

    • __u32 index: indexové číslo vstupu, o který má aplikace zájem; jediné pole nastavované z uživatelského prostoru. Ovladače by vstupům měly přiřadit indexová čísla, přičemž první je nula. Aplikace, která se chce dozvědět o všech dostupných vstupech, zavolá VIDIOC_ENUMINPUT s indexovými čísly začínajícími na nule; jakmile ovladač vrátí EINVAL, aplikace ví, že dosáhla na konec seznamu. Vstup číslo nula by měl existovat u všech zařízení schopných vstupu.
    • __u8 name[32]: název vstupu nastavený ovladačem; v jednoduchých případech to může být prostě "Camera" nebo něco podobného; má-li karta vstupů více, měl by název odpovídat tomu, co říká konektor.
    • __u32 type: druh vstupu. V současné době jsou jen dva: V4L2_INPUT_TYPE_TUNER a V4L2_INPUT_TYPE_CAMERA.
    • __u32 audioset: popisuje, které audio vstupy je možné přiřadit k tomuto video vstupu. Audio vstupy jsou, stejně jako video vstupy, očíslovány indexovými čísly (k audiu se dostaneme v nějakém dalším díle), ale ne všechny kombinace audia a videa jsou možné. Toto pole je bitová maska, která má nastaven bit pro každý audio vstup, který funguje s právě číslovaným video vstupem. Pokud nejsou podporovány žádné audio vstupy, nebo pokud je možné zvolit jen jeden, ovladač může v tomto poli ponechat nulu.
    • __u32 tuner: je-li tento vstup tuner (type je nastaven na V4L2_INPUT_TYPE_TUNER), bude toto pole obsahovat indexové číslo odpovídající zařízení tuneru. Číslování a ovládání tunerů bude také popsáno v některém z dalších dílů.
    • v4l2_std_id std: popisuje, které video standardy zařízení podporuje.
    • __u32 status: udává stav vstupu. V dokumentaci k V4L2 je k mání kompletní seznam příznaků; ve zkratce jde o to, že každý bit nastavený v status popisuje problém. Patří k nim například: výpadek napájení, žádný signál, žádný synchronizační zámek nebo třeba přítomnost Macrovision.
    • __u32 reserved[4]: rezervovaná pole. Ovladače by je měly nastavit na nulu.

    Za normálních okolností nastaví ovladač všechna uvedená pole a vrátí nulu. Je-li index mimo rozsah podporovaných vstupů, bude vrácena -EINVAL; nic moc dalšího už se u tohoto volání pokazit nemůže.

    Když chce aplikace aktuální vstup změnit, obdrží ovladač volání svého zpětného volání vidioc_s_input():

        int (*vidioc_s_input) (struct file *file, void *private_data, 
                               unsigned int index);
    

    Hodnota index má stejný význam jako předtím - určuje vstup, o který má aplikace zájem. Ovladač by měl hardware naprogramovat tak, aby tento vstup použil a vrátil nulu. Další možné hodnoty jsou -EINVAL (v případě nesmyslného indexového čísla) nebo -EIO (pro potíže s hardwarem). Toto zpětné volání by ovladače měly implementovat i v případě, že podporují jen jediný vstup.

    K dispozici je také zpětné volání pro zjištění toho, který vstup je právě aktivní:

        int (*vidioc_g_input) (struct file *file, void *private_data, 
                               unsigned int *index);
    

    V tomto případě ovladač nastaví *index na indexové číslo právě aktivního vstupu.

    Výstupy

    Proces číslování a vybírání výstupů je velmi podobný jako u vstupů, takže popis bude stručnější. Zpětné volání pro očíslování výstupů vypadá takto:

        int (*vidioc_enumoutput) (struct file *file, void *private_data
        			      struct v4l2_output *output);
    

    Pole struktury v4l2_output jsou:

    • __u32 index: hodnota indexu odpovídající výstupu. Tento index funguje stejně jako index vstupu: začíná na nule a jde nahoru.
    • __u8 name[32]: název výstupu.
    • __u32 type: druh výstupu. Podporovanými druhy výstupu jsou V4L2_OUTPUT_TYPE_MODULATOR pro analogový TV modulátor, V4L2_OUTPUT_TYPE_ANALOG pro základní analogový video výstup a V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY pro analogová VGA overlay zařízení.
    • __u32 audioset: sada audio výstupů, které mohou být provozovány s tímto video výstupem.
    • __u32 modulator: index modulátoru přiřazeného k tomuto zařízení (pro ty, které jsou druh V4L2_OUTPUT_TYPE_MODULATOR).
    • v4l2_std_id std: video standardy podporované tímto výstupem.
    • __u32 reserved[4]: rezervovaná pole, měla by být nastaven a na nulu.

    K dispozici jsou rovněž zpětná volání pro nastavování a zjišťování aktuálního nastavení výstupů; odpovídají zpětným voláním u vstupů:

        int (*vidioc_g_output) (struct file *file, void *private_data, 
                                unsigned int *index);
        int (*vidioc_s_output) (struct file *file, void *private_data, 
                                unsigned int index);
    

    Všechna zařízení, která podporují výstup videa, by měla mít každé z těchto tří zpětných volání definována - i když je možný jen jediný výstup.

    Jsou-li tyto metody po ruce, může V4L2 aplikace zjistit, které vstupy a výstupy jsou na daném zařízení dostupné, a vybrat si z nich. Trochu komplikovanější je pak určování, jaký druh video dat těmito vstupy a výstupy teče. Další díl tohoto seriálu se zaměří na video formáty a to, jak se na video formátu dohodnout s uživatelským prostředím.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    17.1.2007 08:56 myles | skóre: 8 | blog: Zápisníček
    Rozbalit Rozbalit vše Re: Jaderné noviny - Video4Linux2 - 4: vstupy a výstupy
    Pouzivam kartu Leadtek DTV2000H. Je to hybrid. Nevedel by nekdo jak prepinat tuto kartu mezi analog a digital? Karta se po restartu systemu jakoby vyrestartuje a prepne se pravdepodobne do digitalu, ktery tu zatim u nas neni. Jeste vcera jsem fungoval v analogu, stanice nalazene. Ted obraz sumi a nic. :-(
    17.1.2007 09:10 myles | skóre: 8 | blog: Zápisníček
    Rozbalit Rozbalit vše Re: Jaderné noviny - Video4Linux2 - 4: vstupy a výstupy
    Tak se omlouvam. Spatne jsem koukal. Vyse popsany problem uz je tu http://www.abclinuxu.cz/forum/show/154938 vyresen.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.