gstreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf ·...

74
GStreamer base classes … or how to make your life easier

Upload: others

Post on 07-Aug-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GStreamer base classes… or how to make your life easier

Page 2: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Introduction

Page 3: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Who Am I?

Page 4: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Sebastian Dröge <[email protected]>• GStreamer developer since 2006• Working on GStreamer, GNOME and related projects• Working for Collabora Ltd.

Page 5: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

About this talk

Page 6: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Why base classes?

Page 7: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

✔ Solves common problems once

Page 8: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 9: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

✔ Coherent behaviour of elements

Page 10: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

✔ Faster results, less code

Page 11: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 12: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

✔ Easier API✘ Different API (but we try to keep it coherent)

Page 13: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 14: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Why talk about this at all?!

Page 15: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Introduce all the important base classes

Page 16: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 17: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Explain their basic concepts

Page 18: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 19: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

What is simplified and taken care of?

Page 20: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 21: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Also …

Page 22: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Developers still don't use them as oftenas they should ☹

Page 23: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 24: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Why? Possible reasons include

Page 25: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Still in gst-plugins-bad

(this is not a reason)

Page 26: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 27: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 28: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Developers don't know of their existence

Page 29: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 30: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Developers don't know if they suit their needs

Page 31: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 32: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Missing feature → do everything yourself ☹

Page 33: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 34: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Let's start

Page 35: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

What's common in all base classes?

Page 36: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 37: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

• open(), start(), stop(), close() vfuncs• set_caps() or set_format() vfunc• negotiation, state, event & query handling• Overriding of default behaviour with vfuncs

Page 38: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Now the specifics but let's stay media agnostic

Page 39: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

First the (hopefully) well-known ones

Page 40: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 41: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstBaseSrc + GstPushSrc• For single source pad sources• create() or alloc() and fill() vfuncs for providing buffers• Multi-source pad sources as GstBins or container format

Page 42: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstBaseSink• For single sink pad sinks• render() vfunc• Handles synchronization, events, …• Multi-sink pad sinks as GstBins

Page 43: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstBaseTransform• For 1:1 buffer transformations• transform_caps() and transform() / transform_ip() vfuncs• Simplifies (re-)negotiation and buffer handling a lot• GstAudioFilter and GstVideoFilter subclasses

Page 44: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstCollectPads* (* not a base class)• Sink pad controller for N:1 elements• collected() function called whenever all pads have data• Simplifies event, state & data (waiting) handling

Page 45: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Now to the slightly newer, less-known ones

Page 46: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 47: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstBaseParse• For parser elements• handle_frame() vfunc for parsing/skipping• finish_frame() function when frame complete• Handles push/pull mode, seeking, reverse playback, … ☺

Page 48: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstTagDemux• For demuxers of tags at the start/end of a file• identify_tag() vfunc for detecting a tag• parse_tag() for parsing it• Transparent for downstream elements, can even pull

Page 49: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstTagMux• Basically inverse to GstTagDemux• render_{start,end}_tag() vfuncs converting a GstTagList to a GstBuffer• Transparent for upstream elements

Page 50: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

… but media agnostic is boring.Let's work with audio ♫

Page 51: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 52: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstAudioSink & GstAudioSrc• write() or read() vfuncs• Implement a threaded ringbuffer (GstAudioRingBuffer) for storing audio• Up/downsampling for trick modes

Page 53: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

And finally the brand new newcomers

Page 54: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 55: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstAudioEncoder & GstAudioDecoder• handle_frame() vfunc + finish_frame() function• Simplify negotiation & raw caps handling a lot (GstAudioInfo)• Timestamp & segment handling• Decoder: minimal parsing functionality, reverse playback, …• Porting to base classes reduced LOC by 40%-60%

Page 56: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 57: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

… and now something for the eyes. Video!

Page 58: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 59: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstVideoEncoder & GstVideoDecoder• handle_frame() vfunc + finish_frame() function• Simplify negotiation & raw caps handling a lot (GstVideoInfo)• Codec & frame state tracking (GstVideoCodecFrame, GstVideoCodecState)• Handles frame reordering, timestamp & segments, …• Decoder: minimal parsing functionality, reverse playback, …• Porting to base classes reduced LOC by 40%-60%

Page 60: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 61: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Look into the future, what's missing?What's on the horizon?

Page 62: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 63: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

First some useful base classes that alreadyexist in gst-plugins-bad

Page 64: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstAudioVisualizer• For audio visualizers• Helpers for drawing and shading• Takes care of negotiation and everything

Page 65: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstBaseCameraSrc• For camera sources inside camerabin• Allows usage of zoom, snapshot & preview features• camerabin wraps around this and provides a nice API

Page 66: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

… and the following ones are just ideas so far

Page 67: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 68: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstBaseDemuxer• Similar to GstBaseParse on the input side• Tracking of multiple streams with a stream object• Should reduce demuxer LOC a lot• Segment handling, seeking, reverse playback, …• Lots of copy & pasted code could be removed• Many small behaviour differences disappear

Page 69: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstBaseMuxer• On top of GstCollectPads• Tracking multiple streams and their information• Handling of rewriting of headers, bitrate/duration estimations, …

Page 70: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

GstVideoSubOverlay• For elements rendering sparse streams on top of video• Synchronizing/waiting for sparse stream buffers• Segment handling• Complex code currently duplicated in many elements

Page 71: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Want to help?Need one of these?

Need help with existing base classes?Just talk to us!

Page 72: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction
Page 73: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

¿Questions?

Page 74: GStreamer base classes … or how to make your life easierslomo/talks/gstconf-2012/slides.pdf · 2016. 2. 17. · GStreamer base classes … or how to make your life easier. Introduction

Feel free to contact meMail: [email protected]: slomo on Freenode and others

Thanks to Vivia Nikolaidou for suggestions andideas, Reynaldo Verdejo for the pinpoint template,memegenerator.net, memebase, etc. for the pictures