GPU-Based Video Processing in the Context of TV Broadcasting
Total Page:16
File Type:pdf, Size:1020Kb
GPU-based Video Processing in the Context of TV Broadcasting DIPLOMARBEIT zur Erlangung des akademischen Grades Diplom-Ingenieur im Rahmen des Studiums Visual Computing eingereicht von Heinrich Fink Matrikelnummer 0425503 an der Fakultät für Informatik der Technischen Universität Wien Betreuung: Associate Prof. Dipl.-Ing. Dipl.-Ing. Dr.techn. Michael Wimmer Mitwirkung: Dipl.-Ing. Dr. Anton Fuhrmann Wien, 14.08.2013 (Unterschrift Verfasser) (Unterschrift Betreuung) Technische Universität Wien A-1040 Wien Karlsplatz 13 Tel. +43-1-58801-0 www.tuwien.ac.at GPU-based Video Processing in the Context of TV Broadcasting MASTER’S THESIS submitted in partial fulfillment of the requirements for the degree of Diplom-Ingenieur in Visual Computing by Heinrich Fink Registration Number 0425503 to the Faculty of Informatics at the Vienna University of Technology Advisor: Associate Prof. Dipl.-Ing. Dipl.-Ing. Dr.techn. Michael Wimmer Assistance: Dipl.-Ing. Dr. Anton Fuhrmann Vienna, 14.08.2013 (Signature of Author) (Signature of Advisor) Technische Universität Wien A-1040 Wien Karlsplatz 13 Tel. +43-1-58801-0 www.tuwien.ac.at Erklärung zur Verfassung der Arbeit Heinrich Fink Schwarzingergasse 1/7, 1020 Wien Hiermit erkläre ich, dass ich diese Arbeit selbständig verfasst habe, dass ich die verwen- deten Quellen und Hilfsmittel vollständig angegeben habe und dass ich die Stellen der Arbeit - einschließlich Tabellen, Karten und Abbildungen -, die anderen Werken oder dem Internet im Wortlaut oder dem Sinn nach entnommen sind, auf jeden Fall unter Angabe der Quelle als Entlehnung kenntlich gemacht habe. (Ort, Datum) (Unterschrift Verfasser) i Acknowledgements I thank my supervisor Michael Wimmer. I was working with him for many years at the Institute of Computer Graphics, TU Vienna. His encouragement and exceptional support during this time was invaluable. While working as his teaching assistant, he trusted me with the task to redesign his practical course Introduction to computer graphics and helped me to publish this work as a journal paper. He has been a great mentor and teacher. This thesis was written while I was working as a researcher at VRVis, Vienna. I thank my supervisor, Anton Fuhrmann. We had many inspiring conversations about the topics of this thesis, and he provided me with a lot of good advice. I would also like to thank Walter Kuntner, CEO of ToolsOnAir, for providing me with the time and flexibility necessary to finish my thesis, and for his trust in my work. He made it possible for me to attend the SigGraph 2013 conference, which influenced my work in many aspects. Without him, this thesis would not have been possible. I thank Thomas True at NVIDIA for taking time to discuss the results of this thesis with me, and for sharing his expertise in the area of GPU-based broadcast engineering. NVIDIA and AMD generously provided hardware devices that I was able to test with the implementation of my thesis. I thank them for their support. During the time of writing this thesis, I spent a lot of time at the Institute of Computer Graphics. I would like to thank the head of this institute, Werner Purgathofer, and everyone working there for their support. I have many great memories of my time studying there. Finally, I would like to thank Lena and Lilja for being there. iii Abstract This thesis investigates GPU-based video processing in the context of a graphics system for live TV broadcasting. Upcoming TV standards like UHD-1 result in much higher data rates than existing formats. Processing such data rates while satisfying the real-time requirement of live TV poses a particular challenge for the implementation of a software-based broadcast graphics system. In order to reach the required data rates, the software needs to process image data concurrently on the central processing unit (CPU) and graphics processing unit (GPU) of the machine. In particular, the transfers of image data between main and graphics memory need to be overlapped with CPU-based and GPU-based executions in order to maximize data throughput. In this thesis, we therefore investigate the following questions: Which methods are available to a software implementation in order to reach this level of parallelism? Which data rates can actually be reached using these methods? In order to answer these questions, we implement a prototype of a software for rendering TV graphics. To take advantage of the GPU’s ability to efficiently process image data, we use the OpenGL application programming interface (API). We use advanced methods of OpenGL programming to render high-quality video and increase the level of employed parallelism of the GPU. We implement the transcoding between RGB and the professional video format V210, which is more complex to process than conventional consumer-oriented image formats. In our software, we apply the pipeline programming pattern in order to distribute stages of the video processing algorithm to different threads. As a result, those stages execute concurrently on dif- ferent hardware units of the system. Our prototype exposes the applied degree of concurrency to the user as a collection of different optimization settings. In order to evaluate these optimiza- tions, we integrate a profiling mechanism directly into the execution of the pipeline. This allows us to automatically create performance profiles while running our prototype with various test scenarios. The results of this thesis are based on the analysis of these traces. Our prototype shows that the methods described in this thesis enable a software program to process high-resolution video in high quality. The results of our evaluations also show that there is no single best optimization setting for every GPU architecture. Different driver implemen- tations and hardware features require our prototype to apply different optimization settings for each device. The ability of our software structure to dynamically change the degree of concur- rency is therefore an important feature. For broadcasting software that is expected to perform well on a range of hardware devices, this is ultimately an essential feature. v Kurzfassung Diese Arbeit beschäftigt sich mit GPU-basierter Verarbeitung von Video im Kontext des Grafik- systems eines Live-TV Senders. Kommende TV Spezifikationen, wie UHD-1, haben eine beson- ders hohe Datenrate an Bildinformationen zur Folge. Die Echtzeitverarbeitung solcher Daten- raten stellt eine besondere Herausforderung für die Implementierung eines Software-basierten TV-Grafiksystems dar. Um die erforderten Datenraten zu erreichen, muss das Programm seine Berechnungen auf Haupt- und Grafikprozessor (CPU und GPU) parallel ausführen. Insbeson- dere müssen die Übertragungen der Videobilder zwischen Haupt- und Grafikspeicher über den PCIe-Bus mit den Berechnungen der CPU und GPU überlappt werden, um eine effiziente Aus- führung zu garantieren. Diese Arbeit beschäftigt sich daher mit der Frage, welche Methoden für die Implementierung eines solchen Grafikprogramms zur Verfügung stehen, und welche Daten- raten damit effektiv erzielt werden können. Um diese Fragen zu beantworten, implementieren wir den Prototypen einer Software für das Rendering von TV-Grafiken. Dabei setzen wir die Programmierschnittstelle OpenGL ein, um die Fähigkeiten des Grafikprozessors für die effiziente Verarbeitung von Bilddaten auszunützen. Wir zeigen fortgeschrittene Methoden der OpenGL-Programmierung, welche die Bearbeitung von professionellem Videomaterial erleichtern, und helfen, den maximalen Grad an Parallelität in der Ausführung des Grafikprozessors zu erreichen. Insbesondere zeigen wir die GPU-basierte Verarbeitung des Studioformates V210, das im Vergleich zu herkömmlichen Bildformaten be- sondere Herausforderungen an die Implementierung stellt. Unser Prototyp basiert auf dem Soft- waremodell einer Pipeline. Das Programm ist dadurch in der Lage, einzelne Schritte der Bild- verarbeitung zu parallelisieren, und auf mehrere Prozessoren dynamisch zu verteilen. Dadurch können wir verschiedene Optimierungsverfahren einsetzen, um den Datendurchsatz des Pro- gramms zu maximieren. Um diese Verfahren und generell die Implementierung des Prototyps zu analysieren, integrieren wir die Messung des Laufzeitverhaltens direkt in unsere Software. Das ermöglicht die automatisierte Erstellung von Profilen verschiedener Testszenarios, deren Analyse die Basis für die Resultate dieser Arbeit bilden. Unser Prototyp zeigt, dass die in dieser Arbeit vorgestellten Methoden die Echtzeitverar- beitung von hochauflösendem Videomaterial in hoher Qualität ermöglichen. Unsere Ergebnisse zeigen auch, dass für verschiedene GPU-Architekturen unterschiedliche Optimierungsverfahren eingesetzt werden müssen, um den optimalen Durchsatz zu erreichen. Die Fähigkeit unserer Software, die Optimierung der Videopipeline dynamisch anzupassen, ist also eine besonders wichtige Eigenschaft, und letztendlich Vorraussetzung für die Implementierung eines marktrei- fen Grafikproduktes, das auf unterschiedlichen Hardware-Konfigurationen effizient laufen soll. vii Contents 1 Introduction 1 1.1 Motivation . 1 1.2 Research question . 2 1.3 Contributions . 3 1.4 Overview . 4 2 Background 5 2.1 Video engineering . 5 2.1.1 Perceptual coding . 5 2.1.2 Image reproduction . 7 2.1.3 sRGB . 8 2.1.4 BT.709 Y’CbCr coding . 9 2.1.5 Chroma subsampling . 10 2.1.6 Converting between R’G’B’ and 10-bit BT.709 Y’CbCr . 11 2.1.7 Mixing sRGB with BT.709 content . 13 2.2 Hardware . 13 2.2.1 Graphics processing units . 13 2.2.2 Video interfaces . 14 2.3 OpenGL . 15 2.3.1 Version 3.3 . 16 2.3.2 Version 4.0 . 17 2.3.3 Version 4.1 . 17 2.3.4 Version 4.2 . 18 2.3.5 Version 4.3 . 18 2.3.6 Transferring texture data . 19 2.3.7 Vendor-specific optimizations . 20 2.4 Related software . 22 3 Design 23 3.1 Pipeline model . 23 3.1.1 Stage . 23 3.1.2 Simplified model of the video processing pipeline . 25 3.1.3 Timing properties of the video processing pipeline . 27 ix 3.1.4 Live playback constraints . 28 3.2 Targeted scenario . 32 3.3 FrameBender application . 34 4 Video Pipeline Implementation 37 4.1 C++ pipeline infrastructure . 37 4.1.1 CircularFifo implementation . 37 4.1.2 WaitingCircularFifo wrapper . 39 4.1.3 The Stage C++ template class .