České vysoké učení technické v Praze Fakulta elektrotechnická
ˇ VUT FEL katedra pocˇı´tacˇu˚ C
Bakalářská práce
Rozšíření formátu MPEG pro stereoskopické video Radim Šoustal
Vedoucí práce: Ing. Berka Roman, Ph.D.
Studijní program: Elektrotechnika a informatika strukturovaný bakalářský Obor: Informatika a výpočetní technika květen 2006
ii
Poděkování Rád bych poděkoval všem, kteří se podíleli na vzniku a implementaci a všem, kteří mne v této práci podporovali. Děkuji panu Ing. Romanu Berkovi Ph.D., svému vedoucímu práce za podporu a zasvěcení do tajů formátu MPEG, panu Danielu Laubrovi, který mi poskytl videomateriál pro stereoskopii. iii
iv
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Praze dne 27.6. 2006
.............................................................
v
vi
Abstract This work deals with the principle of storing 3D-video signal into MPEG formats. It describes method for storing fully dimensional video into MPEG-2 format so that it could be used also by players without that do not support stereoscopic formats. One possible variant of player implementation and playing technique for video production is presented here. Implementation part deals with the program for converting standard video MPEG-2 format into stereoscopic format. Results of work and its future elaboration are discussed in the conclusion of the work.
Abstrakt Práce pojednává o principu ukládání 3D-video signálu do formátu MPEG 1,2,4. Ukazuje způsob uložení třírozměrného videa do formátu MPEG-2, tak aby mohl byt použit i na přehrávačích, které nepodporují přehrávání stereoskopických formátů. Pro produkci videa je zde uvedena jedna možná varianta implementace přehrávače a způsob přehrávání. Implementační část tvoří program pro převod obyčejného videa ve formátu MPEG-2 do stereoskopického formátu. Zhodnocení práce a její možné rozšíření je uvedeno v diskusi.
vii
viii
Obsah Seznam obrázků
xi
Seznam tabulek
xiii
1 Úvod 1.1 Stereoskopie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 MPEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Záměr a struktura práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1 1
2 Současný stav 2.1 IMAX . . . . . . . . . . . . . . . . . . 2.1.1 Analogový systém – IMAX 3D 2.1.2 IMAX Solido . . . . . . . . . . 2.1.3 IMAX SANDDET M . . . . . . 2.2 Digitální systém – 3dtv.at . . . . . . . 2.2.1 Princip Side-by-Side . . . . . . 2.2.2 Princip Dual-stream . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
2 2 2 2 2 3 3 3
3 MPEG-2 3.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Základní pojmy . . . . . . . . . . . . . . . . . . 3.1.2 Použité symboly . . . . . . . . . . . . . . . . . 3.2 Elementární stream a jeho struktura . . . . . . . . . . 3.2.1 Startovní kódy struktur elementárního streamu 3.2.2 Sequence header - sekvenční hlavička . . . . . . 3.2.3 Extension header a User data header . . . . . . 3.2.4 Group of Picture (GOP) - sekvence snímků . . 3.2.5 Picture header - snímková struktura . . . . . . 3.2.6 Picture Data . . . . . . . . . . . . . . . . . . . 3.3 Programový Stream a jeho struktura . . . . . . . . . . 3.3.1 Startovní kódy struktur programového streamu 3.3.2 Pack header . . . . . . . . . . . . . . . . . . . . 3.3.3 System header - Systémová hlavička . . . . . . 3.3.4 Program stream map . . . . . . . . . . . . . . . 3.3.5 PES paket . . . . . . . . . . . . . . . . . . . . . 3.3.6 PES - prezentační a dekódovací značky . . . . 3.3.7 Padding stream . . . . . . . . . . . . . . . . . . 3.3.8 Program end . . . . . . . . . . . . . . . . . . . 3.4 Program stream kodér a dekodér . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
4 4 5 5 5 5 7 7 8 8 9 10 10 11 12 12 14 15 16 16 16
4 Rozbor řešení 4.1 Výběr způsobu ukládání obrazového signálu 4.1.1 Prokládaný formát - Interlaced video 4.1.2 Side-by-Side,Above-Below . . . . . . 4.1.3 Streaming . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
18 18 18 18 19
5 Implementace 5.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Použité programy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20 20 20
ix
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . .
5.3 5.4
Dekodér . . . . . . . . . . . . . . . Kodér . . . . . . . . . . . . . . . . 5.4.1 Scan elementárního streamu 5.4.2 Implementace Pack headeru 5.4.3 Implementace PES streamu
6 Testování 6.1 VLC . . . . . . . . . . . . . . . 6.2 Běžné přehrávače . . . . . . . . 6.2.1 MPlayer . . . . . . . . . 6.2.2 Xine . . . . . . . . . . . 6.2.3 Windows Media Player 6.2.4 Classic Media Player . . 6.2.5 Výsledky testování . . . 6.3 Porovnání s jinou implementací
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
21 22 22 23 23
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
25 25 25 25 25 26 26 26 26
7 Diskuze - problémy do budoucna 7.1 Možnosti rozšíření . . . . . . . . 7.1.1 Rozšíření Demux kodéru . 7.1.2 Rozšíření přehrávače . . . 7.2 CAVE . . . . . . . . . . . . . . . 7.3 Využití grafické akcelerace . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
28 28 28 28 28 28
8 Závěr
30
9 Použité programy
31
10 Literatura
33
11 Příloha 11.1 Instalace a použití nástroje pro práci 11.1.1 Instalace . . . . . . . . . . . . 11.1.2 Použití . . . . . . . . . . . . . 11.2 Obsah CD . . . . . . . . . . . . . . . 11.3 Obrázková příloha . . . . . . . . . .
34 34 34 34 35 36
se stereo MPEGem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
x
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Seznam obrázků 2.1 2.2
Reklamní plakát na IMAX 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ukázka obrazu Side-by-Side v běžném přehrávači; [2] . . . . . . . . . . . . . . .
2 3
3.1 3.2 3.3 3.4
4 5 9
3.5 3.6 3.7
Strom závislostí streamů a jejich hlaviček . . . . . . . . . . . . . . . . . . . . . Ukázka možného pořadí v elementárním video streamu . . . . . . . . . . . . . . Ukázka uložení Slice struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pořadí struktur v programovém streamu; v závorkách jsou uvedena čísla kapitol příslušných struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozdíly mezi prezentací a dekódováním snímku obrázek z [5] . . . . . . . . . . Blokové schéma program stream dekodéru [5] . . . . . . . . . . . . . . . . . . . Základní struktura kodéru programového streamu [5] . . . . . . . . . . . . . . .
10 16 17 17
4.1 4.2 4.3 4.4
Prokládané video obrazy . . . . . . . . . . . . . Video typu Side-by-Side . . . . . . . . . . . . . Princip časového multiplexu - střídání streamů Princip dekódování více video streamů . . . . .
. . . .
18 18 19 19
5.1 5.2 5.3
Vývojový diagram implementovaného dekodéru . . . . . . . . . . . . . . . . . . Vývojový diagram implementovaného kodéru . . . . . . . . . . . . . . . . . . . Ukázka rozdílné prezentace otevřené a uzavřené sekvence snímků . . . . . . . .
21 22 23
6.1 6.2
Ukázka zobrazení dvou video streamů . . . . . . . . . . . . . . . . . . . . . . . Ukázka přehrávání v Clasic Media Player . . . . . . . . . . . . . . . . . . . . .
25 26
11.1 11.2 11.3 11.4 11.5
Ukázka Ukázka Ukázka Ukázka Ukázka
34 36 36 37 37
GUI . . . . . . . . . . . . filtru True anaglyf . . . . filtru pro Sharp 3D . . . horizontálního prokládání Half anaglyfu . . . . . . .
. . . . .
. . . . .
. . . . .
xi
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . . .
xii
Seznam tabulek 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15
Startovní kódy pro elementární stream . . . . . . . . . . . . . . . Struktura Sequence header . . . . . . . . . . . . . . . . . . . . . Tabulka hodnot aspect radio – poměr stran obrazu . . . . . . . . Tabulka hodnot frame rate code – obnovovací frekvence záznamu Struktura hlavičky GOP . . . . . . . . . . . . . . . . . . . . . . . Část struktury hlavičky snímku . . . . . . . . . . . . . . . . . . . Startovní kódy pro program stream . . . . . . . . . . . . . . . . . Struktura programového streamu . . . . . . . . . . . . . . . . . . Struktura systémové hlavičky . . . . . . . . . . . . . . . . . . . . Struktura mapy programového streamu . . . . . . . . . . . . . . Tabulka typů streamů z položky stream type z programové mapy Struktura PES - Packet Elementar Stream head . . . . . . . . . . Hodnoty z položky Id stream . . . . . . . . . . . . . . . . . . . . Pole rozšíření pro PTS a DTS . . . . . . . . . . . . . . . . . . . . Struktura Padding streamu . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
6 6 7 7 8 8 10 11 12 13 13 14 14 15 16
6.1 6.2
Porovnání video přehrávačů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Porovnání multiplexních programů pro MPEG-2 . . . . . . . . . . . . . . . . .
26 27
xiii
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
xiv
KAPITOLA 1. ÚVOD
1
1 Úvod V první kapitole jsou vysvětleny hlavní pojmy z oblasti stereoskopie a ukládání videa. Jsou zde vymezeny cíle a obsah této práce.
1.1
Stereoskopie
Stereoskopie nebo třírozměrné (3D) zobrazení je technologie schopná ukládání a zobrazení třírozměrné iluze v obraze. Iluze hloubky v obraze je docíleno nepatrnou změnou pohledu na scénu, která se promítá do každého oka zvlášť. Tato metoda byla objevena a patentována fyzikem a vynálezcem Sirem Charlesem Wheatstonem v roce 1832. Wheatstone experimentoval s jednoduchými stereoskopickými obrázky, ještě o několik let dříve než byla vynalezena fotografie. O tuto technologii v počátku neměl nikdo zájem, až v roce 1881 ji představil Oliver Wendell Holmes. Vytvořil přístroj pro stereoskopické zobrazení, který nazval Holmes Stereo Viewer (Holmesův stereo prohlížeč). Zkombinoval technologii stereoskopie s fotografií. Tyto stereogramy byly velmi oblíbené až do 80. let 20. století.
1.2
MPEG
MPEG (Moving Picture Experts Group) je jméno rodiny standardů používaných pro kompresi video a audio signálů v digitálním formátu. Velká výhoda formátů MPEG oproti jiným formátům je, že soubory jsou mnohem menší při zachování stejné kvality. MPEGy jsou zahrnuty v normách ISO/IEC JTC1/SC29 WG11. • MPEG-1 je prvním zástupcem této rodiny. Byl představen v roce 1988. První standart určený ke kompresi zvuku a obrazu. Později z něho vznikl standard Video CD určený pro distribuci videa na CD. • MPEG-2: Zvukový a obrazový standard upravený pro širší účely jako například plošné vysílání televize, satelitní vysílání, streamování videa přes internet nebo ukládání videa na DVD. • MPEG-3: Oficiálně nebyl nikdy vydán. Byl navržený pro podporu HDTV (Vysílání ve vysoké kvalitě). Některé jeho části byly začleněny do formátu MPEG-2 • MPEG-4: Rozšiřuje formát o takzvané objekty, které umožňují zobrazovat například 3D obsah. Rozšiřuje podporu pro plošné vysílání, podporu pro interaktivní grafické aplikace a interaktivní média (World Wide Web) – internet. • MPEG-21: Popisuje možný budoucí standard.
1.3
Záměr a struktura práce
Cílem této práce je popsat a porovnat současné techniky pro uložení stereoskopického videa. Práce se především zaměřuje na nejrozšířenější formát MPEG-2. Ukládání do formátu MPEG je rozebráno ve 3. kapitole. Analýzou způsobu ukládání videa se zabývá kapitola 4. Výstupem implementační části je program Demux, který je schopen multiplexovat a demultiplexovat programový stream.
2
KAPITOLA 2. SOUČASNÝ STAV
2 Současný stav Kapitola pojednává o současném stavu stereoskopického zobrazování a ukládání obrazu, a to nejen v digitálním formátu.
2.1
IMAX
Jedná se o analogový systém. IMAX by se dal přirovnat k vlajkové lodi kinematografie. Jde o jeden z fyzicky největších formátů. Používá 65 mm negativní filmový materiál pro záznam a 70 mm pozitivní filmový materiál pro distribuci kopií. Pyšní se také největší promítací plochou, která je v IMAX Theatre v Sydney a má úctyhodných 29,5 metru na výšku a 36 metrů na šířku. Více o 2D IMAXu lze nalézt na webu [1]. 2.1.1
Analogový systém – IMAX 3D
Jde o stereoskopické řešení, založené na principu polarizační separace obrazů doplňující informaci o binokulárním prostorovém vjemu. Toho je docíleno promítáním odlišných obrazů pro levé a pravé oko. Projekci obstarávají dva projektory IMAX umístěné vedle sebe nebo speciální projektor IMAX GT se dvěma rotory a dvěma optickými drahami nad sebou. Pro stereoskopický efekt je podstatná správná orientace polarizačních filtrů na projekčních objektivech a na speciálních brýlích. v roce 2003 bylo v Praze otevřeno první kino tohoto typu.
Obrázek 2.1: Reklamní plakát na IMAX 3D
2.1.2
IMAX Solido
IMAX Solido je alternativní verzí IMAX 3D. Pro promítání je použita jen jedna videostopa s dvojnásobnou obnovovací frekvencí. Informace pro pravé a levé oko se střídají. K prohlížení jsou potřeba speciální brýle s elektronickými závěrkami na bázi tekutých krystalů, které se zatmavují a zprůhledňují podle synchronního souběhu s promítaným filmem. 2.1.3
IMAX SANDDET M
SANDDET M (Stereo Animation Drawing Device) je technologie vyvinutá společností IMAX pro tvorbu 3D animací. Pomocí této technologie byly například vyrobeny filmy Cyberworld 3D a Santa Claus vs. Sněhulák.
KAPITOLA 2. SOUČASNÝ STAV
2.2
3
Digitální systém – 3dtv.at
Skupina 3dtv.at si vytvořila vlastní stereoskopický systém. Na svých stránkách www.3dtv.at má ke stažení volně šiřitelnou verzi pro přehrávání stereoskopických záznamů a testovací verzi k vytváření stereoskopických záznamů. Je zde i plno testovacích a ukázkových videí. 3dtv.at využívají principů Side-by-Side a Dual-stream k ukládání obrazů viz [6]. 2.2.1
Princip Side-by-Side
Side-by-Side je stereoskopický záznam skládající se ze dvou obrazů, které jsou zaznamenány v jedné video stopě a to tak, že tyto obrazy jsou umístěny vedle sebe. (viz obr. 2.2) Takto uložené stereoskopické video je nezávislé na použitém kodeku, ale je závislé na přehrávači. Při prohlížení v běžném přehrávači jsou vidět vedle sebe oba obrazy, avšak nedosáhneme žádného třírozměrného zobrazení. Speciální přehrávač je konstruován tak, že tyto sekvence od sebe dokáže oddělit a zobrazit na jednotlivých zařízeních zvlášť nebo při aplikaci filtrů vytvořit z obou obrazů anaglyf.
Obrázek 2.2: Ukázka obrazu Side-by-Side v běžném přehrávači; [2]
2.2.2
Princip Dual-stream
V jednom souboru je více videostop takzvaných streamů. 3dtv.at používá pro tento způsob formát WMV (Windows Media Video). Při přehrávání v běžném přehrávači se promítá jen první videostopa. Při použití speciálního přehrávače lze přehrávat obě stopy zároveň. Zobrazení výstupu a použití filtrů je pak podobné jako v prvním případě. Na webových stránkách je uveden i postup, jak vytvořit stereoskopické video ve formátu WMV.
4
KAPITOLA 3. MPEG-2
3 MPEG-2 3.1
Úvod
MPEG-2 je rozdělen do tří vrstev transportní, programová a elementární vrstva. Každá z těchto vrstev zajišťuje MPEGu určité vlastnosti. Nejzákladnější je elementární vrstva. Je stavebním kamenem celého systému, jelikož jsou v ní obsažené veškeré informace o obraze nebo zvuku. Tato vrstva se používá při kódování jen jedné obrazové či zvukové stopy. Struktura elementárního streamu a jeho vlastnosti jsou blíže uvedené v kapitole 3.2 Programová vrstva je postavená na základní elementární vrstvě. Dokáže pojmout a synchronizovat více zvukových a obrazových elementárních streamů. Je určená pro nechybové prostředí, neboť neobsahuje žádně opravné nebo kontrolní informace. Z tohoto důvodu je nevhodná pro širokopásmové a internetové vysílání. Podrobné popsání struktur programového streamu je v kapitole 3.3. Transportní vrstva pracuje nad programovou vrstvou. Je určena pro širokopásmové a internetové vysílání. Rozšiřuje vlastnosti například o programové schéma, možnost kódování programů a další. Pro zabezpečení dat se používá Reed-Solomonův algoritmus, který je také používán pro zabezpečení CD a DVD. Stereoskopické řešení nespadá do Transportní vrstvy, a proto se touto problematikou publikace nezabývá. Transportní vrstva je zde uvedena jen pro ucelení informací.
Obrázek 3.1: Strom závislostí streamů a jejich hlaviček
KAPITOLA 3. MPEG-2
5
Na obrázku 3.1 jsou uvedené závislosti struktur a jejich rozdělení do vrstev. U každé struktury je uvedeno číslo kapitoly pro jednodušší orientaci a přehlednost v hlavičkách a streamech MPEGu. Existence transportního streamu a elementárního audio streamu jsou zde jen naznačeny. 3.1.1
Základní pojmy
datový tok (bitrate) – tok komprimovaných dat dodávaných do dekodéru za jednotku času CRC – (Cyclic redundancy Check) kontrolní součet slouží pro kontrolu správnosti dat komprimace – zmenšení počtu bitů používaných k prezentaci určitých dat paket – struktura skládající se většinou z hlavičky a datové části; v hlavičce jsou uloženy konfigurační informace, v datové části jsou samotná přenášená či ukládaná data stream – datový proud, stopa video stream – obrazová stopa audio stream – zvuková stopa PES stream – datový proud paketů elementárního streamu 3.1.2
Použité symboly
0x-- – číselná hodnota uvedená v šestnáctkové číselné soustavě [-- ] – číselná hodnota uvedená v binární číselné soustavě
3.2
Elementární stream a jeho struktura
Elementární Stream je všeobecný název pro základní strukturu kódovaného obrazu či zvuku nazývaného také jako bit-stream v PES paketech. Příklad obyčejného elementárního streamu je třeba zvukový soubor kódovaný ve formátu mp2 (starší formát mp3) nebo MPEG-2 video nedělené do paketů (většinou s koncovkou m2v). Ukázka obrazového elementárního streamu je na obr. 3.2 spolu s čísly kapitol uvedených hlaviček. Znalost konstrukce elementárního streamu je důležitá pro konstrukci a pochopení programového streamu. Vychází se z publikace [7].
Obrázek 3.2: Ukázka možného pořadí v elementárním video streamu
3.2.1
Startovní kódy struktur elementárního streamu
Každá MPEG struktura je uvozena určitou startovací sekvencí znaků. V případě, že by se část dat poškodila, je možné se rychle zasynchronizovat na následující startovací sekvenci. Má to výhody i při vyhledávání v souboru. Rovněž lze vytvořit relativně jednoduchý automat, který dokáže přijímat tato data. Startovací sekvence začíná znaky 0x000001XX. Poslední hodnota ”XX” určuje následující strukturu. V tabulce 3.1 jsou vypsány všechny startovní znaky a jejich struktury.
6
KAPITOLA 3. MPEG-2
Název picture start code slice start code rezervováno rezervováno user data start code sequence header code sequence error code extension start code rezervováno sequence end code group start code
Startovní hodnota 0x00 0x01-0xAF 0xB0 0xB1 0xB2 0xB2 0xB4 0xB5 0xB6 0xB7 0xB8
Poznámka uvozuje strukturu snímku (3.2.5) uvozuje část snímku (3.2.6) rezervováno pro budoucí využití rezervováno pro budoucí využití informace o streamu (3.2.3) uvozuje dekódovací informace (3.2.2) uvozuje sekvenční chybové kódy uvozuje rozšiřující informace pro dekodér rezervováno pro budoucí využití zakončovací sekvence streamu uvozuje sekvenci obrázků (3.2.4)
Tabulka 3.1: Startovní kódy pro elementární stream
Položka Sequence header startovní kód horizontal size value
Počet bitů 32 12
vertical size value
12
aspect radio information
4
frame rate code bit rate value
4 18
marker bit vbv buffer size value constrained parameters flag
1 10 1
load intra quantiser matrix intra quantiser matrix[64] load non quantiser matrix non intra quantiser matrix[64]
1 512 1 512
Poznámka startovní kód 0x000001B3 určuje šířku snímku v obrazových bodech (pixelech). určuje výšku snímku v obrazových bodech informace o poměru stran; hodnota je nepřímo kódovaná viz tabulka 3.3. určuje obnovovací frekvenci; tab. 3.4 informace o datovém toku streamu. stream bit rate = bit rate value × 400[kb/s] [1] určuje délku VBV vyrovnávací paměti není přímo specifikován v MPEG-2 normě, bývá hodnoty [0] kvantizační matice pokud load intra quantiser matrix=1 kvantizační matice pokud load non quantiser matrix=1
Tabulka 3.2: Struktura Sequence header
7
KAPITOLA 3. MPEG-2 3.2.2
Sequence header - sekvenční hlavička
Jedná se o informační strukturu, jejíž celá konstrukce je uvedena v tabulce 3.2. Bývá hned na začátku stopy a udává přehrávači důležité parametry videa (výšku, šířku, poměr stran, obnovovací frekvenci, datový tok, . . . ). Obnovovací frekvence a poměr stran jsou kódovány nepřímo, k jejich dekódování je potřeba dekódovací tabulky. Hodnoty pro obnovovací frekvenci jsou uvedeny v tabulce 3.4 a pro poměr stran v tabulce 3.3. Za sekvenční strukturou bývá rozšiřující sekvenční struktura Sequence extension. Hodnota 0 1 2 3 4 5
Poměr stran [šířka:výška] nepovolený stav 1:1 4:3 16:9 2,21:1 rezervovaný pro budoucí využití .. .
15
rezervovaný pro budoucí využití
Tabulka 3.3: Tabulka hodnot aspect radio – poměr stran obrazu
Hodnota 0 1 2 3 4 5 6 7 8 9
Obnovovací frekvence [snímky/sek.] nepovolený stav 24000/1001 (23,975) 24 25 30000/1001 (29,97) 30 50 60000/1001(59,94) 60 rezervovaný pro budoucí využití .. .
15
rezervovaný pro budoucí využití
Tabulka 3.4: Tabulka hodnot frame rate code – obnovovací frekvence záznamu
3.2.3
Extension header a User data header
Extension header - rozšířená sekvenční hlavička obsahuje důležité informace pro dekodér. Je několik variant rozšířených hlaviček. Každá varianta obsahuje jiné informace, které jsou od sebe odděleny startovní sekvencí. User data header slouží pro uložení 8bitového čísla, je specifikována kodérem a je používána pro specifické aplikace. Tyto hlavičky nejsou důležité pro vytváření programového streamu tak není potřeba znát jejich strukturu.
8
KAPITOLA 3. MPEG-2
3.2.4
Group of Picture (GOP) - sekvence snímků
Uvozuje sekvenci snímků. V tabulce 3.5 je kompletníGOP struktura. Jak název napovídá, nachází se na začátku jedné sekvence obrázků. Délka jedné sekvence není standardem určena, je určena jen jeho struktura. Struktury GOP jsou dvě a jsou definovány hodnotou closed GOP. Takzvaná uzavřená (closed) varianta obsahuje snímky v pořadí IPBBPBBPBB. . . a otevřená (open) obsahuje snímky v pořadí IBBPBBPBB. . . (snímky I,P,B jsou blíže vysvětleny v kapitole 3.3.6). Znalost typu snímků je důležitá pro výpočet PTS a DTS viz kapitola 3.3.5. Položka Picture header startovní kód time code drop frame flag hour minute marker second frame closed GOP broken link startovací kód picture header . . .
Počet bitů 32 25 1 5 6 1 6 6 1 1
Poznámka startovní kód je 0x000001B8 při hodnotě 0 je frekvence zaokrouhlena na celé číslo (0-23) reference hodin (0-59) reference minut [1] (0-59) reference sekund (0-59) číslo snímku určuje styl prokládání snímků v GOP pro určení predikce B-snímků
Tabulka 3.5: Struktura hlavičky GOP
3.2.5
Picture header - snímková struktura
Uvozuje začátek snímku. V tabulce 3.6 je uvedena jen důležitá část pro naše řešení. Důležité hodnoty pro vytváření programového streamu jsou picture coding type a temporal reference. Položka startovní kód Picture header temporal reference picture coding type vbv delay
Počet bitů 32 10 3 16 .. .
Poznámka startovní kód je hodnota 0x00000100 číslo snímku určení typu snímku I=1, P=2, B=3, D=4 je číslo, jak dlouho musí video buffering verifier čekat, než bude obrázek dekódován
Tabulka 3.6: Část struktury hlavičky snímku
KAPITOLA 3. MPEG-2 3.2.6
9
Picture Data
Nacházejí se ihned za Snímkovou hlavičkou. Obsahují jen struktury Slice očíslované 0x01-0xAF. Ve Slice strukturách se nacházejí makrobloky, které souvisejí s kompresní metodou MPEGu. Slice struktury jsou očíslovány tak, jak je ukázáno na obrázku 3.3 (z důvodu přehlednosti jsou struktury zarovnány).
Obrázek 3.3: Ukázka uložení Slice struktur
10
3.3
KAPITOLA 3. MPEG-2
Programový Stream a jeho struktura
Programový stream je stream, který je určen pro komunikaci a ukládání dat v rámci jednoho programu. Může obsahovat maximálně 16 obrazových a 16 zvukových stop, toho se hojně využívá ve standardu video DVD při vícejazyčném dabingu. Využití více videostop DVD je méně časté. Nevýhodou programového streamu je, že není zabezpečen proti možným chybám. Program stream může mít konstantní nebo proměnný datový tok stejně jako elementární stream, který je v něm obsažen. Datový tok programového streamu je definován hodnotou mux rate – programovým datovým tokem a System Clock Reference (SCR) – systémovou časovou referencí. Vychází se z publikace [4].
Obrázek 3.4: Pořadí struktur v programovém streamu; v závorkách jsou uvedena čísla kapitol příslušných struktur
3.3.1
Startovní kódy struktur programového streamu
Používá se stejný princip jako v elementárním streamu viz 3.2.1. Startovní kód začíná 0x000001XX. Poslední hodnota tab. 3.7 uvozuje následující strukturu. Název struktury Program end Pack header System header Program Stream Map Private stream 1 Padding stream Private stream 2 MPEG audio stream MPEG video stream ECM Stream EMM Stream ITU-T Rec. H.222.0 ISO/IEC 13522 stream ITU-T Rec. H.222.1 type a ITU-T Rec. H.222.1 type B ITU-T Rec. H.222.1 type C ITU-T Rec. H.222.1 type D ITU-T Rec. H.222.1 type E ancillary stream rezervováno Program Stream Directory
Startovní hodnota 0xB9 0xBA 0xBB 0xBC 0xBD 0xBE 0xBF 0xC0 – 0xDF 0xE0 – 0xEF 0xF0 0xF1 0xF2 0xF3 0xF4 0xF5 0xF6 0xF7 0xF8 0xF9 0xFA – 0xFE 0xFF
Tabulka 3.7: Startovní kódy pro program stream
11
KAPITOLA 3. MPEG-2 3.3.2
Pack header
Základní struktura programového streamu je obsažena v tabulce 3.8. Obaluje všechny ostatní struktury kromě ukončující struktury End program viz kapitola 3.3.8. Pomocí této struktury se přehrávače orientují v souboru. Položka start code marker SCR 32–30 marker SCR 29–15 marker SCR 14–0 marker SCR extension marker program mux Rate marker rezervováno pack stuffing length
Počet bitů 32 2 3 1 15 1 15 1 10 1 22 2 5 3
Poznámka hodnota 0x00 0x00 0x01 0xBA hodnota 01 část SCR hodnota 1 část SCR hodnota 1 část SCR hodnota 1 SCR rozšíření hodnota 1 programový tok hodnoty 11 pro budoucí využití délka vyplňovacích bytů
Tabulka 3.8: Struktura programového streamu
Vysvětlení pojmů z tabulky 3.8: SCR – System clock reference – systémové hodiny jsou počítány s frekvencí 27 MHz, používají se pro synchronizaci streamů. Základní SCR (rovnice 3.3) je rozdělen na dvě části, SCR a SCR extension. SCR je děleno 300 (podobně jako u PTS a DTS kapitola 3.3.5) a udáno modulo 33 bitů. Výpočet pro základní SCR je v rovnici 3.1. SCR extension – SCR extension je rozšíření pro přesnější výpočet základní SCR. Je počítán modulo 9 bitů. Výpočet rozšířené část je uveden v rovnici 3.2. systemove hodiny × ti 33 %2 300 = (systemove hodiny × ti )%300
SCR zakladi =
(3.1)
SCR exti
(3.2)
SCRi = SCR zakladi × 300 + SCR exti
(3.3)
ti je čas programového streamu program mux rate – 22 bitové celé číslo, které určuje datový tok program streamu. Hodnota datového toku je udána v jednotkách 50 bytů/sekundu (rovnice 3.4). realny multiplexovy tok = program mux rate × 50
[B/s]
(3.4)
Pack stuffing length – tří bitové celé číslo určuje stuffing - vyplňovací byty následovaných za tímto polem. Stuffing byty jsou hodnoty 0xFF. Jsou vkládány kodérem a zahazovány dekodérem.
12
KAPITOLA 3. MPEG-2
Položka start code header length marker rate bound marker audio bound fixed flag CSPS flag system audio lock flag
Počet bitů 32 16 1 22 1 6 1 1 1
system vide lock flag
1
marker video bound packet rate restriction flag rezervováno Pro všechny obsažené streamy - stopy ID streamu marker P-STD buffer bound scale
1 5 1 7 8 2 1
P-STD buffer size bound
14
Poznámka hodnota 0x00 0x00 0x01 0xBB délka následující části hlavičky [1] maximální hodnota datového toku [1] počet zvukových stop
určuje vztah mezi vzorkovací frekvencí zvuku a systémovými hodinami určuje vztah mezi obnovovací frekvencí videa a systémovými hodinami [1] počet video stop v program streamu
hodnota v rozmezí 0xC0-0xEF [11] slouží pro výpočet velikosti vyrovnávací paměti. Pokud je tato hodnota 0, násobič je roven 128 b, je 1024 b. druhá část pro výpočet vyrovnávací paměti; vyrovnávací paměť se vypočítá podle vzorce 3.5
Tabulka 3.9: Struktura systémové hlavičky
3.3.3
System header - Systémová hlavička
Datová struktura definovaná v tabulce 3.9 obsahuje systémové a souhrnné informace o multiplexovaném toku dat. buffer size = PSTD buffer size bound × nasobic(P − STD buffer bound scalen) 3.3.4
(3.5)
Program stream map
Programová mapa popisuje všechny elementární streamy v programovém streamu a jejich vztahy s ostatními. Je nutná pro dynamicky se měnící počet zvukových a obrazových stop ve streamu.
13
KAPITOLA 3. MPEG-2
Položka start code length map
current next indicator rezervováno program stream map version
1 2 5
rezervováno marker program stream info length Informační blok elementary stream map length pro všechny obsažené streamy stream type
7 1 16
Poznámka 0x000001BC udává délku následující strukturní části mapy, maximální hodnota tohoto pole je 1018 bytů indikuje, jestli je stream používán pro budoucí využití inkrementální hodnota od 1 do 32. Pokud se změní mapa program streamu tato hodnota se inkrementuje pro budoucí využití [1] délka informačního bloku
16
délka mapy elementárních streamů
8
elementary stream id elementary stream info length Informační blok o streamu
8 16
identifikuje typ streamu, zda se jedná o video, audio nebo jiný typ. Všechny možnosti jsou uvedeny v tabulce 3.3.4 ID streamu v mapě informace o streamu
32
kontrolní součet
CRC
Počet bitů 32 16
Tabulka 3.10: Struktura mapy programového streamu
0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F-0x7F 0x80-0xFF
ITU-T — ISO/IEC Reserved ISO/IEC 11172 Video ITU-T Rec. H.262 — ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream ISO/IEC 11172 Audio ISO/IEC 13818-3 Audio ITU-T Rec. H.222.0 — ISO/IEC 13818-1 private sections ITU-T Rec. H.222.0 — ISO/IEC 13818-1 PES packets containing private data ISO/IEC 13522 MHEG ITU-T Rec. H.222.0 — ISO/IEC 13818-1 Annex a DSM CC ITU-T Rec. H.222.1 ISO/IEC 13818-6 type a ISO/IEC 13818-6 type B ISO/IEC 13818-6 type C ISO/IEC 13818-6 type D ISO/IEC 13818-1 auxiliary ITU-T Rec. H.222.0 — ISO/IEC 13818-1 Reserved User Private
Tabulka 3.11: Tabulka typů streamů z položky stream type z programové mapy
14 3.3.5
KAPITOLA 3. MPEG-2 PES paket
PES stream obsahuje v sobě elementární stream. PES hlavička 3.12 slouží k výčtu informací, které se nacházejí v jeho datové části. Položka start code stream id PES packet length marker PES scrambling control
Počet bitů 32 8 16 2 2
PES priority
1
data alignment indicator copyright original or copy PTS DTS flags ESCR flag
1 1 1 2 1
ES rate flag
1
DSM trick mode flag
1
additional copy info flag
1
PES CRC flag PES extension flag PES header data length
1 1 8
Poznámka hodnota 0x000001 číslo stopy určuje délku pes paketu hodnota [1][0] indikuje scrambling mod, při hodnotě nula se scrambling v obsahu nepoužívá nastavení priority; prioritní streamy se dekódují přednostně vysvětleno pod tabulkou stream je chráněn copyrightem identifikace originálu či kopie vysvětleno pod tabulkou indikátor zobrazení pole ESCR; pokud je 0 tak pole ESCR není zobrazeno indikátor ES rate; pokud je nastaveno na 0 tak pole ES není zobrazeno indikátor trick modu; pokud je nastaveno na 0 tak DSM pole není zobrazeno indikátor přídavného pole pro informace o kopii; pokud je hodnoty 0, pole není zobrazeno indikátor pole kontrolního součtu indikátor rozšíření PES hlavičky dálka všech rozšiřujících polí v bytech
Tabulka 3.12: Struktura PES - Packet Elementar Stream head
stream id – Identifikace streamů viz tab. 3.13 Hodnota 0xBD 0xBE 0xBF 0xC0-0xCF 0XE0-0xEF
Typ streamu Private stream 1 Padding stream Private stream 2 ID zvukového streamu ID obrazového streamu
Obsahuje rozšíření ANO NE NE ANO ANO
Tabulka 3.13: Hodnoty z položky Id stream
data alignment indicator – indikátor zarovnání. Při hodnotě 0 není zarovnání definované. Pokud je indikátorem hodnota 1, tak se bezprostředně za hlavičkou nacházejí synchronizační data. PTS DTS flags – Pokud je hodnota [1][0], je v hlavičce definován jen PTS. Při hodnotě [1][1] jsou definovány PTS i DTS, při hodnotě [0][0] hlavička neobsahuje žádně informace o dekódování a prezentaci. Rozšíření PES paketu je definováno v tabulce 3.14
15
KAPITOLA 3. MPEG-2 Název marker id field
marker PTS—DTS 32-30 marker PTS—DTS 29-15 marker PTS—DTS 14-0 marker
Počet bitů 2 2
1 3 1 15 1 15 1
Poznámka [0][0] identifikuje pole pro samotné pole PTS =[1][0] pole PTS&DTS-PTS=[1][1] pole PTS&DTS-DTS=[0][1] [1] [1] [1] [1]
Tabulka 3.14: Pole rozšíření pro PTS a DTS
PTS – (presentation time stamp) Prezentační časové značky souvisejí s dekódováním. Je to 33 bitové číslo rozdělená na tři části. Představuje čas, kdy je snímek obsažený PES paketu zobrazen. Blíže jsou rozebrány v kap. 3.3.6. Výpočet prezentačního času je uveden v rovnici 3.6. DTS – (decoding time stamp) Dekódovací časová značka souvisí s dekódováním. Je podobně jako PTS 33 bitová a rozdělená na tři části. Představuje čas, kdy se snímek obsažený PES paketu dekódován. Blíže jsou rozebrány v kap. 3.3.6. Výpočet času dekódování je uveden v rovnici 3.7 . 3.3.6
PES - prezentační a dekódovací značky
Jsou to značky, které jsou obsažené v PES paketech a udávají, kdy se tato část bude dekódovat a kdy se bude prezentovat. Ukázka na obrázku 3.5. Výpočet hodnot PTS a DTS je uveden v rovnicích 3.6 a 3.7.
Rozdělení snímků: I-frame – (Intraframe) Také se nazývá klíčový snímek. Z uvedených je velikostně největší, protože obsahuje celou informaci o obraze. Snímek je komprimován metodou Join Photographic Experts Group (JPEG). P-frame – (Predictive frame) Vychází z předcházejícího snímku a jsou v něm uloženy jen změny v obraze. B-frame – (Bi-directional) Vychází z předchozího i následujícího snímku. Má nejmenší velikost z uvedených snímku. D-frame – Tento typ snímku je v ISO normách definován, ale nepoužívá se. Je určen pro budoucí použití.
16
KAPITOLA 3. MPEG-2
system clock ref erence × tp %23 3 300 tp představuje čas zobrazení snímku, system clock reference má hodnotu 27 MHz PTS =
DT S =
system clock ref erence × td %23 3 300
(3.6)
(3.7)
td představuje čas dekódování snímku, system clock reference má hodnotu 27 MHz
Obrázek 3.5: Rozdíly mezi prezentací a dekódováním snímku obrázek z [5]
3.3.7
Padding stream
Stream udržující průměrný datový tok v určitých mezích. Struktura je uvedená v tabulce 3.15. Název start code Padding length payload - výplň
Počet bitů 32 16 8 .. .
payload - výplň
8
Poznámka 0x000001BE dálka výplně v bytech 0xFF 0xFF
Tabulka 3.15: Struktura Padding streamu
3.3.8
Program end
Zakončuje program stream. Jeho struktura je 0x000001B9.
3.4
Program stream kodér a dekodér
Základní princip program stream dekodéru je ukázán v blokovém schématu na obr. 3.6. Jak již bylo řečeno v úvodu, programový stream se skládá ze dvou vrstev. Programové - řídící a kompresní - elementární. Do dekodéru vstupují obě vrstvy a z dekodéru vystupuje jen kompresníelementární část rozdělená na jednotlivé části audio/video spolu s řídícími signály synchronizace.
KAPITOLA 3. MPEG-2
17
Obrázek 3.6: Blokové schéma program stream dekodéru [5]
Obrázek 3.7: Základní struktura kodéru programového streamu [5]
Základní princip kodéru programového streamu spočívá v rozdělení elementárního streamu na pakety (balíčky), poté jsou pakety vkládány spolu s řídícími informacemi do programového streamu. Základní blokové schéma dekodéru je zobrazeno na obr. 3.7
18
KAPITOLA 4. ROZBOR ŘEŠENÍ
4 Rozbor řešení 4.1
Výběr způsobu ukládání obrazového signálu
V kapitole 2 byly naznačeny některé principy ukládání obrazu. V této části budou rozšířeny a uvedeny jejich výhody a nevýhody. 4.1.1
Prokládaný formát - Interlaced video
Tento formát vychází z principu televizního zobrazování, kdy jsou zobrazovány zvlášť liché a sudé řádky. Obraz pro levé oko je zobrazován v lichých řádcích a pro pravé oko v sudých řádcích. Pro demultiplexaci se používají speciální brýle. Obraz není příliš kvalitní, protože obnovovací frekvence pro jedno oko je jen 25 Hz, což je při blikající obrazovce nedostačující. Obraz musí být uložen v málo komprimovaném formátu, aby nedocházelo k prolínání sudých a lichých půlsnímků. Při zobrazení celého snímku je obraz roztřesený. Tato metoda není vhodná pro naše řešení.
Obrázek 4.1: Prokládané video obrazy
4.1.2
Side-by-Side,Above-Below
Side-by-Side formát již byl zmíněn v kapitole 2.2.1. Jedná se o formát uložený v jednom obrazovém snímku. Ve formátu Side-by-Side jsou uloženy obrazy vedle sebe nebo ve formátu Above-Below pod sebou. Pro uložení v plném formátu mají dvojnásobnou šířku či výšku. Používá se také i 50% formát. Výsledný obraz má původní velikost, což znamená, že se z plného formátu zahodily všechny liché nebo sudé řádky, či liché nebo sudé sloupce ve formátu Sideby-Side. 50% formát je spíše přizpůsoben pro zobrazování v prokládaném režimu, při plném zobrazení se musejí chybějící řádky dopočítat.
Obrázek 4.2: Video typu Side-by-Side
KAPITOLA 4. ROZBOR ŘEŠENÍ 4.1.3
19
Streaming
Některá formáty jako MPEG nebo WMA mohou obsahovat více obrazových a zvukových stop v jednom souboru. Využívá se toho například u DVD pro vícejazyčný dabing, u zvuku nebo zobrazení scén ve více úhlech u videa. Vyžívá se časového multiplexu, kdy jsou jednotlivé stopy prokládány - viz obr. 4.3 (nejsou zde zobrazeny řídící hlavičky a pakety). Při dekódování se soubor prochází lineárně, části streamů jsou ukládány do vyrovnávací paměti. Odtud jsou postupně vyzvedávány, dekódovány a zobrazovány. Při zobrazování běžnými přehrávači je standardně přehrávána jen první video stopa a první audio stopa, ostatní stopy jsou ignorovány.
Obrázek 4.3: Princip časového multiplexu - střídání streamů Dekodér pro stereoskopické zobrazení musí dekódovat obě stopy zároveň obr. 4.4.
Obrázek 4.4: Princip dekódování více video streamů Toto řešení odpovídá nejvíce zadanému problému a dále ho budeme rozvíjet.
20
KAPITOLA 5. IMPLEMENTACE
5 Implementace V teto kapitole je popsána konstrukce kodéru a dekodéru programové streamu.
5.1
Úvod
Pro implementaci jsem si vybral programovací jazyk C++ s knihovnami QT. Programovací jazyk C++ asi není třeba představovat. Knihovny QT jsou multiplatformní, to znamená že jsou nezávislé na operačním systému. Výsledný program bude fungovat např. jak na systému MS Windows tak na Linuxu nebo Mac-OS. V kapitole implementace jsou vypsány jen podstatné části, které nejsou jednoduše odvoditelné z kapitoly 3.
5.2
Použité programy
• KDeveloper [p1]– programovací prostředí, které má v sobě implementovanou podporu pro knihovny QT. • GHex [p2] – editor binárních souborů sloužil k prohlížení multiplexovaného výstupu a hledání chyb. • Video Lan Client (VLC) [p9] – testování výsledného stereoskopického videa.
KAPITOLA 5. IMPLEMENTACE
5.3
21
Dekodér
Princip implementovaného dekodéru je naznačen na obrázku 5.2. Jedná se o jednoduchý automat, který nejprve ze systémového headeru zjistí informace o stopách, poté prochází postupně soubor. Pokud narazí na PES paket, tak ho identifikuje a uloží jeho obsah do souboru. Pokud najde některý z řídících headerů tak je přeskočí. Výsledkem jsou rozdělené jednotlivé stopy.
Obrázek 5.1: Vývojový diagram implementovaného dekodéru
22
5.4
KAPITOLA 5. IMPLEMENTACE
Kodér
Obrázek 5.2: Vývojový diagram implementovaného kodéru
5.4.1
Scan elementárního streamu
Proč je důležité prozkoumávat elementární stream ještě dříve než se s ním začne pracovat? Je to dáno kompresním algoritmem. Některé snímky mohou předbíhat ostatní a nebo naopak se zpožďovat (princip předbíhání a čekání je ukázán v kapitole 3.3.6). Prozkoumáním jednotlivých elementárních video streamů se zjistí mapa posloupnosti I,P,B - snímku (frame mapa), to je důležité pro výpočet PTS a DTS.
23
KAPITOLA 5. IMPLEMENTACE 5.4.2
Implementace Pack headeru
Výpočet multiplexního datového toku (mux rate): Multiplexní datový tok musí být větší nebo roven součtu všech elementárních toků v něm obsažených. K součtu je přidáno 5% jako režie na hlavičky a poděleno 50, abychom dostali hodnotu v jednotkách 50kB/s (rovnice 5.1). mux rate =
Pn
(
0
element rate) × 1, 05 50
(5.1)
Výpočet SCR: Vychází se základních vzorců 3.1 a 3.2. Po úpravě pro náš případ dostaneme: SCR zaklad(i) =
systemove hodiny × 300
SCR ext(i) = (systemove hodiny ×
pn (i) mux rate
%233
pn (i) )%300 mux rate
(5.2) (5.3)
Systémové hodiny mají hodnotu 27 MHz p(i) je pozice v souboru – vzdálenost od počátku souboru v bytech. 5.4.3
Implementace PES streamu
Pokud má program stream více elementárních streamů, tak se elementární streamy mezi sebe prokládají. Musí být zaručeno, aby nedošlo vlivem menšího datového toku jednoho streamu k předběhnutí druhého o několik snímků. Toho je docíleno počítadlem snímků u obou stop. Jako hlavní stopa byla určena stopa pro levé oko, je to určitá analogie stereofonním zvukem. Prezentační značky PTS a DTS se vypočítávají z rovnic 3.6 a 3.7, kde se čas dekódování určuje z čísla snímku, frame mapy (kap. 5.4.1) a obnovovací frekvence videa.
Obrázek 5.3: Ukázka rozdílné prezentace otevřené a uzavřené sekvence snímků
P T SB
f rame
=
27000000 ×
cislo snimku obnovovaci f rekv
300
%233
(5.4)
24
KAPITOLA 5. IMPLEMENTACE
P T SI DT SI DT SP P T SP
f rame
f rame
f rame
f rame
= = = =
27000000 ×
cislo snimku obnovovaci f rekv
300 27000000 ×
cislo snimku obnovovaci f rekv
300 27000000 ×
cislo snimku obnovovaci f rekv
300 27000000 ×
%233
(5.5)
%233
(5.6)
%233
(5.7)
cislo dalsiho i|p snimku ) obnovovaci f rekv
300
%233
(5.8)
Upravené řešení pro uzavřený tvar sekvence obrázků (closed GOP) je v rovnici 5.8. Číslo snímku je pořadové číslo obrázku od počátku souboru. Pro otevřený tvar sekvence (open GOP) se mění jen rovnice prezentační značky klíčového snímku. DT SI
f rame open GOP
=
27000000 ×
cislo dalsiho i|p snimku ) obnovovaci f rekv
300
%233
(5.9)
KAPITOLA 6. TESTOVÁNÍ
25
6 Testování V této kapitole jsou uvedeny způsoby testování správného provedení stereoskopického záznamu. Je zde uvedeno srovnáni naší metody s metodami podobnými.
6.1
VLC
Jde se o multiplatformní přehrávač Video Lan Client [p9], který má mnoho funkcí včetně příjmu streamovaného signálu z internetu. Jedna jeho funkce je pro naše řešení velmi vhodná, je to zobrazení dvou nebo více obrazových stop najednou. (obr. 6.1.)
Obrázek 6.1: Ukázka zobrazení dvou video streamů V hlavním okně přehrávače je zobrazován stream pro levé oko. Jelikož tento přehrávač dovoluje přehrávat každý obraz v odděleném okně, tak je možné při využití grafické karty s více výstupy vytvořit výstup pro dva projektory pro stereoskopické zobrazení.
6.2 6.2.1
Běžné přehrávače MPlayer
MPlayer [p7] je opensource přehrávač pro systém Linux. Není přizpůsoben pro přehrávání stereoskopického videa. Při testování scény otáčející se modré konvičky bylo vše v pořádku. Byla přehrána jen scéna pro levé oko. Při druhé testovací scéně Mplayer napsal následující chybu. Too many video packets in the buffer: (638 in 8393366 bytes). Maybe you are playing a~non-interleaved stream/file or the codec failed? For AVI files, try to force non-interleaved mode with the -ni option. Scéna šla přesto přehrát. Totéž hlášení se objevilo i při přehrávání videa vytvořeném v programu mplex. 6.2.2
Xine
Další z opensource přehrávačů pro Linux. Xine [p11] není přizpůsoben pro přehrávání stereoskopických videí. Testované video sice dokáže přehrát, ale v obraze vznikají chyby, které jsou nejspíše způsobeny mísením více stop nebo jen kontrolních signálů do jednoho.
26 6.2.3
KAPITOLA 6. TESTOVÁNÍ Windows Media Player
Media Player [p10] je integrovaný přehrávač operačního systému MS Windows. Nebyly zjištěny žádné problémy. Přehrávač nepodporuje stereoskopické přehrávání, takže se přehrával jen jeden (levý) video stream. 6.2.4
Classic Media Player
Classic Media Player [p6] je opensource přehrávač pro operační systém MS Windows. Přehrávač nepodporuje stereoskopické zobrazení ani přehrávání dvou video streamů současně. Zde se nevyskytly žádné problémy. V menu byla možnost vybrat, který z video streamů se má přehrávat.
Obrázek 6.2: Ukázka přehrávání v Clasic Media Player
6.2.5
Výsledky testování
Přehrávač
Operační systém
Podpora stereoskopie
Video Lan Client Mplayer Xine Classic Media Player Windows Media Player
Multiplatformní Linux Linux Windows Windows
Je Není Není Není Není
Přehrávání jednoho streamu ze stereovidea – levý stream chybové zobrazování možnost výběru levý stream
Tabulka 6.1: Porovnání video přehrávačů
6.3
Porovnání s jinou implementací
Naše řešení můžeme porovnat s podobným řešením od MJPEGu. Jedná se konkretně o program Mplex [p4]. Mplex je konzolová aplikace podporující různé formáty včetně MPEG-2.
27
KAPITOLA 6. TESTOVÁNÍ
Velikost souboru Počet MPEG Paketů Počet systémových hlaviček Rate Bound Video Bound Audio Bound Velikost MPEG paketů Padding Stream paketů Celkový počet PES paketů PES paketů v E0 PES paketů v E1 Výsledek
demux 17,83 MB 1391 1 6045 Kbps 2 0 16435 0 1397 698 699 Neprošel
mplex (MJPEG tools) 18,11 MB 9272 2 15946 Kbps 2 0 2048 114 9385 4652 4619 Neprošel
Tabulka 6.2: Porovnání multiplexních programů pro MPEG-2
Výsledky v tabulce jsou vypsány pomocí programu MPEG Validator [p5]. Obě řešení se prakticky liší jen ve velikosti paketů. Podle normy může mít PES paket velikost až 64kB. Rozdílná velikost je způsobena režií na větší počet PES hlaviček a použití padding streamu - výplně. Důvody proč neprošly testem jsou následující: Program stream: *Number of Video Streams: 2 *Number of Audio Streams: 0 Elementar stream: *Horizontal Size = 480 *Top Field First = No *DCT Type = Frame *Duration Difference from Video to Audio = 26440 msec *Compliance Test: Fail!! Důvodem hlášení chyb u počtu video a audio streamů může být absence programové mapy. Horizontal Size, Top Field First, DCT Type jsou nesrovnalostmi v elementárním streamu a mohou byt způsobeny při kódování elementárního streamu (kap. 3.2). V tomto případě se testovací videa kódovala programem Ulead Video Studio 9 [p3], který má vlastní kodér do formátu MPEG. Duration Difference from Video to Audio je způsobeno absencí zvukové stopy. Program asi nepředpokládá video bez zvukové stopy.
28
KAPITOLA 7. DISKUZE - PROBLÉMY DO BUDOUCNA
7 Diskuze - problémy do budoucna 7.1 7.1.1
Možnosti rozšíření Rozšíření Demux kodéru
Navržený a implementovaný kodér lze ještě rozšířit o programovou mapu (kap. 3.3.4, která není v programu implementovaná. Tím by se zajistila větší kompatibilita s různými videopřehrávači. Další rozšíření MPEGu by mohlo spočívat v ukládání jednoho celého video streamu a v druhém by byly uloženy jen rozdíly mezi nimi. K tomu by se daly využít buď klasické MPEG video streamy (0xE1-0xEF) nebo rezervované (0xFA, 0xFE). Při použití klasických hlaviček by struktura MPEGu zůstala zachována, jen druhá stopa by nebyla přehrávatelná standardními dekodéry MPEGu. Pro stereoskopické přehrávání by se musel využít speciální přehrávač, který by rekonstruoval druhou stopu z první. Při použití nedefinované hlavičky (0xFA, 0xFE) by se musela vytvořit nová struktura. Některé vlastnosti by byly zachovány - například synchronizační značky nebo informace o stopě. Mohly by přibýt i některé nové informace pro dekódování nebo zobrazování stereoskopické stopy. 7.1.2
Rozšíření přehrávače
Pro přehrávání na dvou zobrazovacích zařízeních nám přehrávač VLC plně dostačuje, ale při použití na jednom grafickém zařízení s nim nelze dosáhnout stereoskopického zobrazení. K tomu by se hodil přehrávač, který dokáže dekódovat obě stopy a použít na ně spojovací filtr. Filtrem by se dosáhlo stereoskopického obrazu pro určitý způsob projekce. Obdobné řešení používá přehrávač Stereo Player. Možné implementované filtry: • Monoskopické zobrazení levé a pravé stopy • Obrazový výstup na různá zařízení (projektory, 3D brýle) • Řádkové prokládání obrazů • Sloupcové prokládání obrazů • Vytvoření anaglyfu • Zobrazení pro specifické zařízení, NVidia Stereoscopy, Sharp 3D display nebo SiS attachment.
7.2
CAVE
CAVE, jak se uvádí v internetové publikaci [3], je soustavou stereoskopických projektorů, které promítají stereoskopické obrazy na stěny krychle. S použitím speciálních brýlí vzniká kolem pozorovatele ze všech stran stereoskopický svět. U tohoto řešení by se také dal využít formát MPEG. Při využití všech video streamů klasickým způsobem (jeden obraz v jedné stopě), je možno zobrazit jen 8 stěn na krychli. Při sloučení dvou obrazů do jednoho (Side-by-Side, řádkové prokládání, snímkové prokládání) je možné do jednoho souboru uložit všechny informace pro všechny strany krychle.
7.3
Využití grafické akcelerace
Každá modernější grafická karta obsahuje v sobě implementovaný akcelerátor (grafický urychlovač), a to z důvodu menších výpočetních nároků na procesor. Grafické akcelerátory dříve umožňovaly plynulé přehrávání formátů MPEG i na velmi pomalých počítačích. Grafické firmy
KAPITOLA 7. DISKUZE - PROBLÉMY DO BUDOUCNA
29
se pořád snaží vylepšovat podporu pro přehrávání videa např. různými filtry pro vyhlazení, zostření videa. Obyčejný grafický akcelerátor může urychlovat v jednu chvíli jen jednu videostopu, druhá videostopa je urychlována softwarově – procesorem. To může způsobit barevné odchylky obou obrazů. Podobná situace může nastat se dvěma grafickými kartami jiného typu nebo od jiného výrobce. Aby byly oba obrazy stejně barevně interpretovány je nejjednodušší použít dvou stejných grafických karet nebo jedné grafické karty s více výstupy v kombinaci se dvěma videodekodéry. Je také možné nevyužívat grafickou akceleraci, ale tím se podstatně zvýší nároky na procesor.
30
KAPITOLA 8. ZÁVĚR
8 Závěr Podařilo se prostudovat základní struktury formátu MPEG-2. To nám umožňuje chápat formát až na bitové vrstvě. Znalost struktur právě umožnila výrobu programu Demux. Implementovaný program Demux umožňuje kódování dvou elementárních streamů do jednoho programového streamu. Umí také opačný proces, kdy z programového streamu demultiplexuje a uloží zvlášť všechny elementární video i audio stopy.
KAPITOLA 9. POUŽITÉ PROGRAMY
9 Použité programy [p1] – Kdevelop, verze. 3.3.3, Janet Casey, http://www.kdevelop.org/ [p2] – GHex2, verze. 2.8.1, Jaka Močnik, http://directory.fsf.org/all/ghex.html [p3] – Video Studio 9, verze 9.0 , Ulead, http://www.ulead.com/ [p4] – Mplex, verze 1.8.9, součástí MJPEG Tools , http://mjpeg.sourceforge.net/ [p5] – MPEG Validator, verze 1.4.0.131, Ing. Gabriel Carro, http://www.videohelp.com/tools?tool=MPEG Validator [p6] – Clasic Media Player, verze 6.4.9.0, Gabest, http://sourceforge.net/projects/guliverkli/ [p7] – MPlayer, verze 2:0.99+1.0, http://www.mplayerhq.hu/ [p8] – Stereoscopic Player – verze 0.99, Peter Wimmer, http://www.3dtv.at/ [p9] – Video Lan Client – verze 0.8.4, The VideoLAN team, http://www.videolan.org/ [p10] – Windows Media Player – verze 11 beta 2, Microsoft, www.microsoft.com/windows/windowsmedia/ [p11] – Xine – verze 0.5.1, The Xine team, http://xinehq.de/
31
32
KAPITOLA 9. POUŽITÉ PROGRAMY
KAPITOLA 10. LITERATURA
33
10 Literatura [1] Imax. http://www.film.wz.cz/imax.htm, [Online], poslední úpravy 18.3.2004, [cit. 20.5.2006]. [2] Werner Bloos. Stereoskopie, 2006. http://www.wbloos.de/hobbys/stereoskopie, [Online] , [cit. 10.5.2006]. [3] Dave Pape. The cave virtual reality system, 2006. http://www.evl.uic.edu/pape/CAVE/, [Online], poslední úpravy 28.5.2001, [cit. 15.6.2006]. [4] Peter Schirling. Coding of Moving Pictures and Associated Audio. International Organisation for Standardisation, Case Postale 56, CH1211 Geneve 20, Switzerland, 1994. [5] John Walkinson. The MPEG Handbook – MPEG-1, MPEG-2, MPEG-4. UK, Rochester, Kent, 1 edition, 2001. [6] Peter Wimmer. 3dtv.at, 2006. http://www.3dtv.at, [Online], poslední úpravy 2.5.2006, [cit. 15.5.2006]. [7] Adrian Wise. Generic Coding Moving Pictures. International Organisation for Standardisation, Case Postale 56, CH1211 Geneve 20, Switzerland, 1994.
34
KAPITOLA 11. PŘÍLOHA
11 Příloha 11.1 11.1.1
Instalace a použití nástroje pro práci se stereo MPEGem Instalace
Pro operační systém MS Windows není potřeba žádná instalace, stačí jen rozbalit archiv se spustitelným souborem spolu s QT knihovnami. U operačního systému Linux se v některých případech musí doinstalovat balíčky knihoven QT verze 4. Jedná se konkrétně o libqt4-core a libqt4-gui. To lze provést různými způsoby, například programem Synaptic využívající GUI prostředí nebo příkazy apt-get install libqt4-core, apt-get install libqt4-gui. Pokud jsou balíčky nainstalovány, stačí jen rozbalit archiv s programem. 11.1.2
Použití
Grafické rozhraní je rozděleno na 2 části - multiplexace a demultipexace. Do demultiplexní části se vkládá cesta k souboru, který má být rozdělen na jednotlivé streamy. Streamy jsou poté uloženy v adresáři s programem pod názvy stream-EXX.m2v pro obraz nebo stream-CXX.mp2 pro zvukovou stopu, XX představuje identifikační číslo stopy. Multiplexní část se nachází hned pod demultiplexní. Tuto část tvoří dvě okénka na zadání cesty dvou videí pro stereoskopické zobrazení. Výstupem je soubor se jménem mpeg stereo.mpeg vytvořený v adresáři s programem.
Obrázek 11.1: Ukázka GUI
KAPITOLA 11. PŘÍLOHA
11.2
Obsah CD
• DATA – headry3.xls - poznámky k hlavičkám MPEG – test2 stereo.mpeg - testovací video (modra konvička) – test l.m2v - testovací elementární stream pro levé oko – test r.m2v - testovací elementární stream pro pravé oko – test stereo.mpeg - programový stream vytvořený z test r.m2v a test l.m2v • EXE – WIN KNIHOVNY - QT knihovny pro Windows – mpegdemux.exe - program přeložený pro MS Windows – mpegdemux - program přeložený pro Linux (x86) • HTML – RABSTRAJ ∗ index.html - rozšířený abstrakt v angličtině – RABSTRCZ ∗ index.html - rozšířený abstrakt v češtině – ABSTRACT ∗ index.html - krátký abstrakt – WWW ∗ index.html - webové stránky bakalářské práce • SRC – Kdevelop Project - projekt z programu KDevelop se zdrojovými kódy – *.* - zdrojové kódy programu demux • TEXT – BP.pdf - text bakalářské práce v PDF a PS • index.html - výchozí stránka projektu • readme.txt - popis struktury tohoto CD • install.txt- postup instalace programu
35
36
11.3
KAPITOLA 11. PŘÍLOHA
Obrázková příloha
Uvedené obrázky jsou sejmuty z programu StereoPlayer [p8] a jako předloha posloužilo video z webových stránek [2]
Obrázek 11.2: Ukázka filtru True anaglyf
Obrázek 11.3: Ukázka filtru pro Sharp 3D
37
KAPITOLA 11. PŘÍLOHA
Obrázek 11.4: Ukázka horizontálního prokládání
Obrázek 11.5: Ukázka Half anaglyfu