SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
Centricular Ltd
Nirbheek Chauhan
(nirbheek on IRC)
GNOME contributor since 2007
http://nirbheek.in
nirbheek@centricular.com
nirbheek.chauhan@gmail.com
Centricular Ltd
An introduction to using GStreamer
in your GNOME application
Centricular Ltd
What is GStreamer?
Centricular Ltd
GStreamer 1.0
GStreamer 0.10
Centricular Ltd
How does it work?
Centricular Ltd
filter2
sink src
filter1
sink src
bin
sink
sink
source
src
Centricular Ltd
pipeline
mp3 decoder
sink src
audio sink
sink
file source
src
Centricular Ltd
How do you use it?
Centricular Ltd
gst-launch-1.0
Centricular Ltd
$ gst-launch-1.0 
filesrc location=audio.mp3 ! 
mad ! 
pulsesink
Centricular Ltd
GstElement *pipeline;
GstElement *src, *decoder, *sink;
gst_init (&argc, &argv);
src = gst_element_factory_make ("filesrc", NULL);
decoder = gst_element_factory_make ("mad", NULL);
sink = gst_element_factory_make ("pulsesink", NULL);
g_object_set (src, "location", "audio.mp3", NULL);
pipeline = gst_pipeline_new ();
gst_bin_add_many (GST_BIN (pipeline), src, decoder,
sink, NULL);
gst_element_link_many (src, decoder, sink, NULL);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
do {} while (1); /* Wait forever */
Centricular Ltd
Element States
Centricular Ltd
Element States
NULL READY PAUSED PLAYING→ → →
Centricular Ltd
Element States
PLAYING PAUSED PLAYING→ →
Centricular Ltd
Element States
PLAYING [...] NULL→ →
Centricular Ltd
Video files?
Centricular Ltd
“Sometimes” pads.
Centricular Ltd
pipeline
URI Decoder queue
sink src
audio sink
sinksrc_0
queue
sink src
video sink
sinksrc_1
Centricular Ltd
$ gst-launch-1.0 
uridecodebin name=d 
uri=file://.../video.mp4 
d. ! queue ! pulsesink 
d. ! queue ! xvimagesink
Centricular Ltd
GstElement *pipeline, *d;
gst_init (&argc, &argv);
d = gst_element_factory_make ("uridecodebin", NULL);
g_object_set (d, "uri", "file://.../video.mp4", NULL);
pipeline = gst_pipeline_new ();
gst_bin_add (GST_BIN (pipeline), d);
g_signal_connect (d, "pad-added", pad_added_cb,
pipeline);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
do {} while (1); /* Wait forever */
Centricular Ltd
static void
pad_added_cb (GstElement * d, GstPad * newsrcpad,
GstElement * pipeline)
{
GstCaps *caps;
GstStructure *s;
caps = gst_pad_get_current_caps (newsrcpad);
s = gst_caps_get_structure (caps, 0);
if (gst_structure_has_name (s, "audio/x-raw"))
pipeline_add_audio_sink (pipeline, newsrcpad);
else if (gst_structure_has_name (s, "video/x-raw"))
pipeline_add_video_sink (pipeline, newsrcpad);
gst_caps_unref (caps);
/* ignore other types of pads */
}
Centricular Ltd
What the hell are “caps”?!
Centricular Ltd
static void
pad_added_cb (GstElement * d, GstPad * newsrcpad,
GstElement * pipeline)
{
GstCaps *caps;
GstStructure *s;
caps = gst_pad_get_current_caps (newsrcpad);
s = gst_caps_get_structure (caps, 0);
if (gst_structure_has_name (s, "audio/x-raw"))
pipeline_add_audio_sink (pipeline, newsrcpad);
else if (gst_structure_has_name (s, "video/x-raw"))
pipeline_add_video_sink (pipeline, newsrcpad);
gst_caps_unref (caps);
/* ignore other types of pads */
}
Centricular Ltd
static void
pipeline_add_audio_sink (GstElement * pipeline,
GstPad * srcpad)
{
GstElement *q, *sink;
GstPad *sinkpad;
q = gst_element_factory_make ("queue", NULL);
sink = gst_element_factory_make ("pulsesink", NULL);
gst_bin_add_many (GST_BIN (pipeline), q, sink, NULL);
sinkpad = gst_element_get_static_pad (q, "sink");
gst_pad_link (srcpad, sinkpad)
gst_element_link (q, sink);
gst_element_sync_state_with_parent (q);
gst_element_sync_state_with_parent (sink);
gst_object_unref (sinkpad);
}
Centricular Ltd
static void
pipeline_add_video_sink (GstElement * pipeline,
GstPad * srcpad)
{
GstElement *q, *sink;
GstPad *sinkpad;
q = gst_element_factory_make ("queue", NULL);
sink = gst_element_factory_make ("xvimagesink", NULL);
gst_bin_add_many (GST_BIN (pipeline), q, sink, NULL);
sinkpad = gst_element_get_static_pad (q, "sink");
gst_pad_link (srcpad, sinkpad)
gst_element_link (q, sink);
gst_element_sync_state_with_parent (q);
gst_element_sync_state_with_parent (sink);
gst_object_unref (sinkpad);
}
Centricular Ltd
Seems like a lot of work for something so common
☹
Centricular Ltd
playbin
Centricular Ltd
$ gst-launch-1.0 playbin uri=file://.../video.mp4
$ gst-launch-1.0 playbin uri=http://.../audio.mp3
Centricular Ltd
GstElement *playbin;
gst_init (&argc, &argv);
playbin = gst_element_factory_make ("playbin", NULL);
g_object_set (p, "uri", "file://.../video.mp4", NULL);
gst_element_set_state (playbin, GST_STATE_PLAYING);
do {} while (1); /* Wait forever */
Centricular Ltd
One more thing.
Centricular Ltd
Static Pads & Request Pads
Centricular Ltd
$ gst-launch-1.0 
qtmux name=m ! filesink location=file.mp4 
pulsesrc ! queue ! faac ! m. 
v4l2src ! queue ! x264enc ! m.
Centricular Ltd
/* Insert similar code as earlier slides */
srcpad = gst_element_get_static_pad (faac, "src");
audio_pad = gst_element_get_request_pad (qtmux,
"audio_%d");
gst_pad_link (srcpad, audio_pad);
srcpad = gst_element_get_static_pad (x264enc, "src");
video_pad = gst_element_get_request_pad (qtmux,
"video_%d");
gst_pad_link (srcpad, video_pad);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
do {} while (1); /* Wait forever */
Centricular Ltd
I lied. There’s a lot more.
GStreamer is quite versatile!
Centricular Ltd
Events, Queries, Messages
Action Signals, Pad Probes, Threading
Mainloop integration, Platform-specific quirks
...
45 min is only enough for a taste.
Centricular Ltd
The rest is left as an exercise for the reader.
☺
Centricular Ltd
Too much?
Centricular Ltd
$ gst-play-1.0 file://.../video.mp4
Centricular Ltd
$ gst-launch-1.0 playbin uri=file://.../video.mp4
Centricular Ltd
GstElement *playbin;
gst_init (&argc, &argv);
playbin = gst_element_factory_make ("playbin", NULL);
g_object_set (p, "uri", "file://.../video.mp4", NULL);
gst_element_set_state (playbin, GST_STATE_PLAYING);
do {} while (1); /* Wait forever */
Centricular Ltd
Questions?

Mais conteúdo relacionado

Mais procurados

PFIセミナー資料 H27.10.22
PFIセミナー資料 H27.10.22PFIセミナー資料 H27.10.22
PFIセミナー資料 H27.10.22Yuya Takei
 
f9-microkernel-ktimer
f9-microkernel-ktimerf9-microkernel-ktimer
f9-microkernel-ktimerViller Hsiao
 
カメラアプリ実装のコツ
カメラアプリ実装のコツカメラアプリ実装のコツ
カメラアプリ実装のコツtac0x2a
 
Yet another introduction to Linux RCU
Yet another introduction to Linux RCUYet another introduction to Linux RCU
Yet another introduction to Linux RCUViller Hsiao
 
X64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newX64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newYiwei Ma
 
Linux fundamental - Chap 09 pkg
Linux fundamental - Chap 09 pkgLinux fundamental - Chap 09 pkg
Linux fundamental - Chap 09 pkgKenny (netman)
 
Make the prompt great again
Make the prompt great againMake the prompt great again
Make the prompt great againjtyr
 
Introduction to cuda geek camp singapore 2011
Introduction to cuda   geek camp singapore 2011Introduction to cuda   geek camp singapore 2011
Introduction to cuda geek camp singapore 2011Raymond Tay
 
LSA2 - 02 Control Groups
LSA2 - 02   Control GroupsLSA2 - 02   Control Groups
LSA2 - 02 Control GroupsMarian Marinov
 
CUDA Deep Dive
CUDA Deep DiveCUDA Deep Dive
CUDA Deep Divekrasul
 
Nvvp streams-2
Nvvp streams-2Nvvp streams-2
Nvvp streams-2Josh Wyatt
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computingArka Ghosh
 
Intro to GPGPU Programming with Cuda
Intro to GPGPU Programming with CudaIntro to GPGPU Programming with Cuda
Intro to GPGPU Programming with CudaRob Gillen
 
How to Burn Multi-GPUs using CUDA stress test memo
How to Burn Multi-GPUs using CUDA stress test memoHow to Burn Multi-GPUs using CUDA stress test memo
How to Burn Multi-GPUs using CUDA stress test memoNaoto MATSUMOTO
 
No more (unsecure) secrets, Marty
No more (unsecure) secrets, MartyNo more (unsecure) secrets, Marty
No more (unsecure) secrets, MartyMathias Herberts
 

Mais procurados (17)

PFIセミナー資料 H27.10.22
PFIセミナー資料 H27.10.22PFIセミナー資料 H27.10.22
PFIセミナー資料 H27.10.22
 
f9-microkernel-ktimer
f9-microkernel-ktimerf9-microkernel-ktimer
f9-microkernel-ktimer
 
カメラアプリ実装のコツ
カメラアプリ実装のコツカメラアプリ実装のコツ
カメラアプリ実装のコツ
 
Yet another introduction to Linux RCU
Yet another introduction to Linux RCUYet another introduction to Linux RCU
Yet another introduction to Linux RCU
 
X64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 newX64服务器 lnmp服务器部署标准 new
X64服务器 lnmp服务器部署标准 new
 
Bash tricks
Bash tricksBash tricks
Bash tricks
 
Linux fundamental - Chap 09 pkg
Linux fundamental - Chap 09 pkgLinux fundamental - Chap 09 pkg
Linux fundamental - Chap 09 pkg
 
Make the prompt great again
Make the prompt great againMake the prompt great again
Make the prompt great again
 
Introduction to cuda geek camp singapore 2011
Introduction to cuda   geek camp singapore 2011Introduction to cuda   geek camp singapore 2011
Introduction to cuda geek camp singapore 2011
 
LSA2 - 02 Control Groups
LSA2 - 02   Control GroupsLSA2 - 02   Control Groups
LSA2 - 02 Control Groups
 
CUDA Deep Dive
CUDA Deep DiveCUDA Deep Dive
CUDA Deep Dive
 
Nvvp streams-2
Nvvp streams-2Nvvp streams-2
Nvvp streams-2
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computing
 
Intro to GPGPU Programming with Cuda
Intro to GPGPU Programming with CudaIntro to GPGPU Programming with Cuda
Intro to GPGPU Programming with Cuda
 
How to Burn Multi-GPUs using CUDA stress test memo
How to Burn Multi-GPUs using CUDA stress test memoHow to Burn Multi-GPUs using CUDA stress test memo
How to Burn Multi-GPUs using CUDA stress test memo
 
No more (unsecure) secrets, Marty
No more (unsecure) secrets, MartyNo more (unsecure) secrets, Marty
No more (unsecure) secrets, Marty
 
Moment.js overview
Moment.js overviewMoment.js overview
Moment.js overview
 

Semelhante a An introduction to using GStreamer in your GNOME application

Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basicsidrajeev
 
Un monde où 1 ms vaut 100 M€ - Devoxx France 2015
Un monde où 1 ms vaut 100 M€ - Devoxx France 2015Un monde où 1 ms vaut 100 M€ - Devoxx France 2015
Un monde où 1 ms vaut 100 M€ - Devoxx France 2015ThierryAbalea
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Platonov Sergey
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰KAI CHU CHUNG
 
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang) [Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang) Johnny Sung
 
Process Management using Circus
Process Management using CircusProcess Management using Circus
Process Management using Circussamof76
 
Let Grunt do the work, focus on the fun! [Open Web Camp 2013]
Let Grunt do the work, focus on the fun! [Open Web Camp 2013]Let Grunt do the work, focus on the fun! [Open Web Camp 2013]
Let Grunt do the work, focus on the fun! [Open Web Camp 2013]Dirk Ginader
 
Compose로 Android:Desktop 멀티플랫폼 만들기.pdf
Compose로 Android:Desktop 멀티플랫폼 만들기.pdfCompose로 Android:Desktop 멀티플랫폼 만들기.pdf
Compose로 Android:Desktop 멀티플랫폼 만들기.pdfssuserb6c2641
 
2012 02-04 fosdem 2012 - drools planner
2012 02-04 fosdem 2012 - drools planner2012 02-04 fosdem 2012 - drools planner
2012 02-04 fosdem 2012 - drools plannerGeoffrey De Smet
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleGeoffrey De Smet
 
Ganglia Overview-v2
Ganglia Overview-v2Ganglia Overview-v2
Ganglia Overview-v2Chris Westin
 
A brand new documentation infrastructure for the GStreamer framework (GStream...
A brand new documentation infrastructure for the GStreamer framework (GStream...A brand new documentation infrastructure for the GStreamer framework (GStream...
A brand new documentation infrastructure for the GStreamer framework (GStream...Igalia
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構Bo-Yi Wu
 
The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 130 of 210
The Ring programming language version 1.9 book - Part 130 of 210The Ring programming language version 1.9 book - Part 130 of 210
The Ring programming language version 1.9 book - Part 130 of 210Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 95 of 212
The Ring programming language version 1.10 book - Part 95 of 212The Ring programming language version 1.10 book - Part 95 of 212
The Ring programming language version 1.10 book - Part 95 of 212Mahmoud Samir Fayed
 

Semelhante a An introduction to using GStreamer in your GNOME application (20)

Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
Un monde où 1 ms vaut 100 M€ - Devoxx France 2015
Un monde où 1 ms vaut 100 M€ - Devoxx France 2015Un monde où 1 ms vaut 100 M€ - Devoxx France 2015
Un monde où 1 ms vaut 100 M€ - Devoxx France 2015
 
Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.Евгений Крутько, Многопоточные вычисления, современный подход.
Евгений Крутько, Многопоточные вычисления, современный подход.
 
Google tv
Google tv Google tv
Google tv
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
 
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang) [Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
[Golang] 以 Mobile App 工程師視角,帶你進入 Golang 的世界 (Introduction of GoLang)
 
Process Management using Circus
Process Management using CircusProcess Management using Circus
Process Management using Circus
 
Becoming a Git Master
Becoming a Git MasterBecoming a Git Master
Becoming a Git Master
 
Let Grunt do the work, focus on the fun! [Open Web Camp 2013]
Let Grunt do the work, focus on the fun! [Open Web Camp 2013]Let Grunt do the work, focus on the fun! [Open Web Camp 2013]
Let Grunt do the work, focus on the fun! [Open Web Camp 2013]
 
Qt Workshop
Qt WorkshopQt Workshop
Qt Workshop
 
Compose로 Android:Desktop 멀티플랫폼 만들기.pdf
Compose로 Android:Desktop 멀티플랫폼 만들기.pdfCompose로 Android:Desktop 멀티플랫폼 만들기.pdf
Compose로 Android:Desktop 멀티플랫폼 만들기.pdf
 
2012 02-04 fosdem 2012 - drools planner
2012 02-04 fosdem 2012 - drools planner2012 02-04 fosdem 2012 - drools planner
2012 02-04 fosdem 2012 - drools planner
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
 
Ganglia Overview-v2
Ganglia Overview-v2Ganglia Overview-v2
Ganglia Overview-v2
 
A brand new documentation infrastructure for the GStreamer framework (GStream...
A brand new documentation infrastructure for the GStreamer framework (GStream...A brand new documentation infrastructure for the GStreamer framework (GStream...
A brand new documentation infrastructure for the GStreamer framework (GStream...
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196
 
The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184
 
The Ring programming language version 1.9 book - Part 130 of 210
The Ring programming language version 1.9 book - Part 130 of 210The Ring programming language version 1.9 book - Part 130 of 210
The Ring programming language version 1.9 book - Part 130 of 210
 
The Ring programming language version 1.10 book - Part 95 of 212
The Ring programming language version 1.10 book - Part 95 of 212The Ring programming language version 1.10 book - Part 95 of 212
The Ring programming language version 1.10 book - Part 95 of 212
 

Último

Burning Issue presentation of Zhazgul N. , Cycle 54
Burning Issue presentation of Zhazgul N. , Cycle 54Burning Issue presentation of Zhazgul N. , Cycle 54
Burning Issue presentation of Zhazgul N. , Cycle 54ZhazgulNurdinova
 
Juan Pablo Sugiura - eCommerce Day Bolivia 2024
Juan Pablo Sugiura - eCommerce Day Bolivia 2024Juan Pablo Sugiura - eCommerce Day Bolivia 2024
Juan Pablo Sugiura - eCommerce Day Bolivia 2024eCommerce Institute
 
The Real Story Of Project Manager/Scrum Master From Where It Came?!
The Real Story Of Project Manager/Scrum Master From Where It Came?!The Real Story Of Project Manager/Scrum Master From Where It Came?!
The Real Story Of Project Manager/Scrum Master From Where It Came?!Loay Mohamed Ibrahim Aly
 
Communication Accommodation Theory Kaylyn Benton.pptx
Communication Accommodation Theory Kaylyn Benton.pptxCommunication Accommodation Theory Kaylyn Benton.pptx
Communication Accommodation Theory Kaylyn Benton.pptxkb31670
 
ISO 25964-1Working Group ISO/TC 46/SC 9/WG 8
ISO 25964-1Working Group ISO/TC 46/SC 9/WG 8ISO 25964-1Working Group ISO/TC 46/SC 9/WG 8
ISO 25964-1Working Group ISO/TC 46/SC 9/WG 8Access Innovations, Inc.
 
Communication Accommodation Theory Kaylyn Benton.pptx
Communication Accommodation Theory Kaylyn Benton.pptxCommunication Accommodation Theory Kaylyn Benton.pptx
Communication Accommodation Theory Kaylyn Benton.pptxkb31670
 
Machine learning workshop, CZU Prague 2024
Machine learning workshop, CZU Prague 2024Machine learning workshop, CZU Prague 2024
Machine learning workshop, CZU Prague 2024Gokulks007
 
Dynamics of Professional Presentationpdf
Dynamics of Professional PresentationpdfDynamics of Professional Presentationpdf
Dynamics of Professional Presentationpdfravleel42
 

Último (8)

Burning Issue presentation of Zhazgul N. , Cycle 54
Burning Issue presentation of Zhazgul N. , Cycle 54Burning Issue presentation of Zhazgul N. , Cycle 54
Burning Issue presentation of Zhazgul N. , Cycle 54
 
Juan Pablo Sugiura - eCommerce Day Bolivia 2024
Juan Pablo Sugiura - eCommerce Day Bolivia 2024Juan Pablo Sugiura - eCommerce Day Bolivia 2024
Juan Pablo Sugiura - eCommerce Day Bolivia 2024
 
The Real Story Of Project Manager/Scrum Master From Where It Came?!
The Real Story Of Project Manager/Scrum Master From Where It Came?!The Real Story Of Project Manager/Scrum Master From Where It Came?!
The Real Story Of Project Manager/Scrum Master From Where It Came?!
 
Communication Accommodation Theory Kaylyn Benton.pptx
Communication Accommodation Theory Kaylyn Benton.pptxCommunication Accommodation Theory Kaylyn Benton.pptx
Communication Accommodation Theory Kaylyn Benton.pptx
 
ISO 25964-1Working Group ISO/TC 46/SC 9/WG 8
ISO 25964-1Working Group ISO/TC 46/SC 9/WG 8ISO 25964-1Working Group ISO/TC 46/SC 9/WG 8
ISO 25964-1Working Group ISO/TC 46/SC 9/WG 8
 
Communication Accommodation Theory Kaylyn Benton.pptx
Communication Accommodation Theory Kaylyn Benton.pptxCommunication Accommodation Theory Kaylyn Benton.pptx
Communication Accommodation Theory Kaylyn Benton.pptx
 
Machine learning workshop, CZU Prague 2024
Machine learning workshop, CZU Prague 2024Machine learning workshop, CZU Prague 2024
Machine learning workshop, CZU Prague 2024
 
Dynamics of Professional Presentationpdf
Dynamics of Professional PresentationpdfDynamics of Professional Presentationpdf
Dynamics of Professional Presentationpdf
 

An introduction to using GStreamer in your GNOME application