GStreamer. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Podobne dokumenty
Zasoby, pliki graficzne

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Praca z aplikacją designer

Weryfikatory, zasoby graficzne

Schemat konstrukcja pliku Makefile

GStreamer. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Qt sygnały i designer

Czujniki PSD i dalmierze triangulacyjne

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wprowadzenie do szablonów klas

Czujniki PSD i dalmierze triangulacyjne

Dalmierze optyczne. Bogdan Kreczmer.

Szablony funkcji i szablony klas

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Dźwięk w IOS. Wykład 8. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.

Operacje wejścia/wyjścia (odsłona druga) - pliki

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Operacje wejścia/wyjścia odsłona pierwsza

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do UML, przykład użycia kolizja

Wprowadzenie do szablonów szablony funkcji

Pola i metody statyczne

Powłoki systemu operacyjnego i intepretery

Pobieranie argumentów wiersza polecenia

Diagramy UML, przykład problemu kolizji

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Geneza C++, manipulatory

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

Qt - podstawowe cechy

Lista dwukierunkowa - przykład implementacji destruktorów

Struktury. Przykład W8_1

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Style programowania - krótki przeglad

Szablon klasy std::list

Qt po polsku. Bogdan Kreczmer.

Konstruktor kopiujacy

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Programowanie obiektowe zastosowanie języka Java SE

Referencje do zmiennych i obiektów

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Narzędzia internacjonalizacji programów

Programowanie Komponentowe WebAPI

Podstawy Programowania Obiektowego

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

Programowanie Procedurale. Pliki w języku C++

Szablon klasy std::vector

Język Java część 2 (przykładowa aplikacja)

Wyliczanie wyrażenia obiekty tymczasowe

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Wykład :37 PP2_W9

I - Microsoft Visual Studio C++

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Style programowania - krótki przeglad

Organizacja kursu, paradygmaty, ogólnie o C i C++

1. Aplikacja LOGO! App do LOGO! 8 i LOGO! 7


Podstawy programowania w Qt4

Wykład 3 Składnia języka C# (cz. 2)

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Podstawy programowania skrót z wykładów:

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Instrukcja konfiguracji dekodera strumienia IP H.264 na sygnał: Video (BNC), VGA, YPbPr, HDMI typ. IN-IP-5904, IN-IP-5904-MP

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

XML-RPC: Zdalne wykonywanie procedur

Programowanie Proceduralne

Microsoft Interface Definition Language

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Wstęp. Ale po co? Implementacja

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie współbieżne i rozproszone

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

76.Struktura oprogramowania rozproszonego.

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Qt hierarchia elementów graficznych

Podejście obiektowe wprowadzenie

Język Java część 2 (przykładowa aplikacja)

Znaki globalne w Linuxie

Programowanie obiektowe

Kopia zapasowa DVD w programie DivX Converter

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wywoływanie metod zdalnych

Programowanie obiektowe

Argumenty wywołania programu, operacje na plikach

JavaFX. Technologie Biznesu Elektronicznego. Wydział Informatyki i Zarządzania Politechnika Wrocławska

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

IBM SPSS Statistics Wersja 22. Linux - Instrukcja instalacji (licencja autoryzowanego użytkownika)

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Transkrypt:

Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową.

Niniejsza prezentacja została wykonana przy użyciu systemu składu PDFL A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net

1 GLib 2 3

cechy GLib Biblioteka GLib dostarcza: definicje struktur takich jak: jedno i dwukierunkowe listy, tablice haszowe, napisy dynamiczne, dynamiczne tablice, drzewa binarne, N-drzewa, kwarki (dwustronne powiązanie napisu i identyfikatora), listy z kluczem, struktury relacyjne i tuple. narzędzia operujące na napisach takie jak skanery leksykalne.

GLib rola i lokalizacja

GObject GLib GLib Object System GObject Jest to biblioteka oparta na bibliotece GLib. Dostarcza przenośny system obiektowy i przezroczysty pod względem języka programowania system operacji na obiektach. Pozwala to tworzyć odpowiednie dowiązania na poziomie innych języków, np. Python (PyGObject).

ogólnie

Pakiety GLib gstreamer główny pakiet, gst-plugins-good zbiór pluginów o dobrej jakości na licencji LGPL, gst-plugins-ugly zbiór pluginów o dobrej jakości udostępnianych na licencjach mogących ograniczać ich dystrubucję, gst-plugins-bad zbiór pluginów o niezbyt dobrej jakości, gst-libav zbiór pluginów, które są nakładami na elementy biblioteki libav udostępnianych na potrzeby kodowania i dekodowania.

Potoki GLib

Komunikacja GLib

Tworzenie GstElement #include <gst/gst.h> int main (int argc, char *argv[]) { GstElementFactory *factory; GstElement *element; gst_init(&argc, &argv); /* init */ element = gst_element_factory_make ("fakesrc", "source"); if (!element) { g_print("failed to create element of type fakesrc \n"); return -1; } gst_object_unref(gst_object(element)); return 0; }

Tworzenie GstElement #include <gst/gst.h> int main (int argc, char *argv[]) { GstElementFactory *factory; GstElement *element; gst_init(&argc, &argv); /* init */ factory = gst_element_factory_find("fakesrc"); /* tworzy element */ if (!factory) { g_print("failed to find factory of type fakesrc \n"); return -1; } element = gst_element_factory_create(factory, "source"); if (!element) { g_print("failed to create element, even though its factory exists!\n"); return -1; } gst_object_unref(gst_object(element)); return 0; }

Własności obiektów GLib #include <gst/gst.h> int main (int argc, char *argv[]) { GstElement *element; gchar *name; gst_init(&argc, &argv); element = gst_element_factory_make ("fakesrc", "source"); g_object_get(g_object (element), "name", &name, NULL); /* get name */ g_print("the name of the element is %s.\n", name); g_free(name); gst_object_unref(gst_object(element)); return 0; }

Wyświetlanie informacji o elemencie lub pluginie Program gst-inspect umożliwia wyświetlenie informacji o elemencie lub pluginie. Ogólna postać składni wywołania: gst-inspect [OPTION...] [PLUGIN ELEMENT] jkowalsk@noxon:img$ gst-inspect-0.10 fakesrc Factory Details: Rank none (0) Long-name Fake Source Klass Source Description Push empty (no data) buffers around Author Erik Walthinsen <omega@cse.ogi.edu>, Wim Taymans <wim@fluendo.com> Plugin Details: Name coreelements Description core elements Filename /usr/lib/i386-linux-gnu/gstreamer-1.0/libgstcoreelements.so Version 1.2.4 License LGPL Source module gstreamer Source release date 2014-02-18 Binary package (Ubuntu) Origin URL https://launchpad.net/distros/ubuntu/+source/gstreamer1.0 GObject +----GInitiallyUnowned +----GstObject +----GstElement...

Połączenia elementów

Łączenie elementów GLib int main (int argc, char *argv[]) { GstElement *pipeline; GstElement *source, *filter, *sink; gst_init(&argc, &argv); pipeline = gst_pipeline_new("my-pipeline"); /*-- tworzenie potoku --*/ source = gst_element_factory_make("fakesrc", "source"); filter = gst_element_factory_make("identity", "filter"); sink = gst_element_factory_make("fakesink", "sink"); /*------ Aby połączyć, elementy muszą być w pojemniku --------------*/ gst_bin_add_many(gst_bin(pipeline), source, filter, sink, NULL); if (!gst_element_link_many(source, filter, sink, NULL)) {/*- połączenie --*/ g_warning("failed to link elements!"); } [...] }

Stany elementów GLib GST STATE NULL domyślny stan elementu. W tym stanie element nie ma zaalokwanych żadnych zasobów. Element, aby mógł być zwolniony, musi być w tym stanie. GST STATE READY element ma zaalokowane wszystkie niezbędne globalne zasoby, np. otwarte urządzenia. Jednak same strumienie nie są otwarte. GST STATE PAUSE element ma zaalokowane wszystkie niezbędne globalne zasoby, np. otwarte urządzenia. Otwarty jest również strumień. GST STATE PLAYING element ma zaalokowane wszystkie niezbędne globalne zasoby, np. otwarte urządzenia. Otwarty jest również strumień. Uruchomiony jest również zegar taktujący przetwarzanie strumienia.

Pojemniki GLib

Elementy w pojemniku int main (int argc, char *argv[]) { GstElement *pipeline, *bin, *source, *sink; gst_init(&argc, &argv); pipeline = gst_pipeline_new("my-pipeline"); /*-- tworzenie potoku --*/ bin = gst_bin_new("my_bin"); source = gst_element_factory_make("fakesrc", "source"); sink = gst_element_factory_make("fakesink", "sink"); /*--- Dodajemy elementy do pojemnika ------*/ gst_bin_add_many(gst_bin (bin), source, sink, NULL); /*--- Dodajemy pojemnik do potoku ---------*/ gst_bin_add(gst_bin (pipeline), bin); /*--- Łączymy elementy --------------------*/ gst_element_link(source, sink); } [...]

Synchronizacja stanu Elementy gdy znajdą się w jednym pojemniku, muszą mieć zsynchronizowany stan.

Pojemniki specjalizowane int main (int argc, char *argv[]) { GstElement *player; gst_init(&argc, &argv); /*--- Tworzymy player a ----------------*/ player = gst_element_factory_make("oggvorbisplayer", "player"); /*---- Ustawienie źródła nagrania ------*/ g_object_set (player, "location", "helloworld.ogg", NULL); /*---- Start odtwarzania ---------------*/ gst_element_set_state(gst_element(player), GST_STATE_PLAYING); } [...]

gst-launch GLib Framework dostarczany jest z zestawem programów pomocniczych ułatwiających tworzenie prostych aplikacji. Zestaw aplikacji dla 1.8.1 gst-codec-info, gst-inspect, gst-typefind, gst-device-monitor, gst-install, gst-typefind, gst-discoverer, gst-launch, gst-visualise, gst-feedback, gst-xmlinspect, gst-play, gst-xmllaunch, gst-stats

Przykład prostego potoku gst-launch-1.0 audiotestsrc! audioconvert! audioresample! pulsesink audiotestsrc (base plugin) generuje dźwięk o zadanym kształcie, głośności i częstotliwości audioconvert konwertuje strumień audio do różnych formatów audioresample zmiania próbkowanie sygnału pulsesink odtwarza strumień audio wykorzystując serwer PulseAudio

Koniec prezentacji Dziękuję za uwagę