diff --git a/pes-march-2024/Makefile b/pes-march-2024/Makefile new file mode 100644 index 0000000..8e32bab --- /dev/null +++ b/pes-march-2024/Makefile @@ -0,0 +1,11 @@ +all: + make slide slideshow + +slide: + pandoc -t beamer pes-march-2024.md -f markdown-implicit_figures -V colorlinks=true -V linkcolor=blue -V urlcolor=red -o pes-march-2024.pdf + +slideshow: + pandoc -t beamer pes-march-2024.md -f markdown-implicit_figures -V colorlinks=true -V linkcolor=blue -V urlcolor=red -i -o pes-march-2024-slideshow.pdf + +view: + zathura --mode=presentation pes-march-2024.pdf & diff --git a/pes-march-2024/RGB-image-consisting-of-three-layers.png b/pes-march-2024/RGB-image-consisting-of-three-layers.png new file mode 100644 index 0000000..eb2c24e Binary files /dev/null and b/pes-march-2024/RGB-image-consisting-of-three-layers.png differ diff --git a/pes-march-2024/bunny.mp4 b/pes-march-2024/bunny.mp4 new file mode 100644 index 0000000..348ccb2 Binary files /dev/null and b/pes-march-2024/bunny.mp4 differ diff --git a/pes-march-2024/pes-march-2024-slideshow.pdf b/pes-march-2024/pes-march-2024-slideshow.pdf new file mode 100644 index 0000000..1811886 Binary files /dev/null and b/pes-march-2024/pes-march-2024-slideshow.pdf differ diff --git a/pes-march-2024/pes-march-2024.md b/pes-march-2024/pes-march-2024.md new file mode 100644 index 0000000..18bd201 --- /dev/null +++ b/pes-march-2024/pes-march-2024.md @@ -0,0 +1,104 @@ +--- +title: +- A Day in the Life of a Media Plumber +author: +- Sanchayan Maity +theme: +- default +classoption: +- aspectratio=169 +--- + +# Who + +- Who am I? + * Embedded Systems background + * Prefer C, Haskell and Rust + * Organize and speak at Rust and Haskell meet-ups in Bangalore +- Work? + * Software Engineer @ [asymptotic](https://asymptotic.io/) + * Open source consulting firm based out of Bangalore and Toronto + * Work on low level systems software centred around multimedia + * GStreamer, PipeWire, PulseAudio + * Language Polyglots + + +# Open source contributions + +- [GStreamer](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests?scope=all&state=all&author_username=SanchayanMaity) +- [gst-plugins-rs](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests?scope=all&state=all&author_username=SanchayanMaity) +- [PipeWire](https://gitlab.freedesktop.org/pipewire/pipewire/-/merge_requests?scope=all&state=all&author_username=SanchayanMaity) +- [PulseAudio](https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests?scope=all&state=all&author_username=SanchayanMaity) +- [Linux](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=author&q=Sanchayan+Maity) +- [u-boot](https://source.denx.de/u-boot/u-boot/-/commits/master?search=Sanchayan%20Maity) + +# GStreamer + +- Multiplatform Pipeline based multimedia framework +- Bindings for various languages +- Allows building complex media processing workflows +- Some applications + * PiTiVi (Video Editor) + * amaroK, Banshee, Clementine (audio players) + * Empathy (VOIP and video conferencing) + * GstLAL (gravitational wave data analysis) + * Rygel (DLNA streaming server and renderer) + * Totem (movie player for the GNOME desktop) + + +# Simple pipeline + + ```bash + gst-launch-1.0 videotestsrc ! autovideosink + gst-launch-1.0 audiotestsrc ! autoaudiosink + ``` + +# Media pipeline[^1] + +![*_Simple Player_*](simple-player.png){width=80%} + +[^1]: [Dynamic Pipelines](https://gstreamer.freedesktop.org/documentation/tutorials/basic/dynamic-pipelines.html?gi-language=c) + + +# Internals[^2] + +![*_RGB_*](RGB-image-consisting-of-three-layers.png){width=60%} + +[^2]: [Raw Video Media Types](https://gstreamer.freedesktop.org/documentation/additional/design/mediatype-video-raw.html?gi-language=c) + + +# Alpha compositing[^3] + +- How does it look? + +[^3]: [Alpha Compositing - Bartosz Ciechanowski](https://ciechanow.ski/alpha-compositing/) + + +# Demo + +- Using Cairo[^4][^5] + +[^4]: [GStreamer Cairo example](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-good/tests/examples/cairo/cairo_overlay.c?ref_type=heads) +[^5]: [GStreamer Cairo example project](https://git.sanchayanmaity.net/sanchayanmaity/cairo-overlay-example) + +# Rounded corners + +![*_Rounded Corners_*](roundedcorners.jpg){width=60%} + +```bash +gst-launch-1.0 filesrc location=bunny.mp4 ! decodebin ! videoconvert ! +roundedcorners border-radius-px=100 ! videoconvert ! gtksink +``` + +# Getting started + +- [GStreamer Basic Tutorial](https://gstreamer.freedesktop.org/documentation/tutorials/basic/index.html?gi-language=c) +- [GStreamer Application Development](https://gstreamer.freedesktop.org/documentation/application-development/index.html?gi-language=c) + +# Questions + +- Reach out on + * Email: sanchayan@sanchayanmaity.net + * Mastodon: https://sanchayanmaity.com/@sanchayan + * Telegram: https://t.me/SanchayanMaity + * Blog: sanchayanmaity.net diff --git a/pes-march-2024/pes-march-2024.pdf b/pes-march-2024/pes-march-2024.pdf new file mode 100644 index 0000000..54f1e9f Binary files /dev/null and b/pes-march-2024/pes-march-2024.pdf differ diff --git a/pes-march-2024/roundedcorners.jpg b/pes-march-2024/roundedcorners.jpg new file mode 100644 index 0000000..6fc080f Binary files /dev/null and b/pes-march-2024/roundedcorners.jpg differ diff --git a/pes-march-2024/roundedcorners.sh b/pes-march-2024/roundedcorners.sh new file mode 100755 index 0000000..6ab5736 --- /dev/null +++ b/pes-march-2024/roundedcorners.sh @@ -0,0 +1,2 @@ +#!/bin/sh +GST_PLUGIN_PATH=~/GitSources/gst-plugins-rs/target/debug gst-launch-1.0 filesrc location=bunny.mp4 ! decodebin ! videoconvert ! video/x-raw,width=1280,height=720 ! roundedcorners border-radius-px="$1" ! videoconvert ! gtksink diff --git a/pes-march-2024/simple-player.png b/pes-march-2024/simple-player.png new file mode 100644 index 0000000..b3b3ca1 Binary files /dev/null and b/pes-march-2024/simple-player.png differ