1# Changelog
2All notable changes to this project will be documented in this file.
3
4The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
6specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
7
8## [0.15.0] - 2019-12-18
9### Added
10- `StructureRef::get_optional()` for returning `None` if the field does not
11  exist instead of `Err`
12- Bindings for `gstreamer-rtp` library, mostly `RTPBuffer`
13- Support for writing `Preset`, `TagSetter`, `Clock`, `SystemClock` subclasses
14- Bindings for `Typefind::get_length()`
15- Bindings for `BaseSrcImpl::get_times()`
16- Bindings (incl. subclassing) for `AudioSink` and `AudioSrc`
17- Missing `Send`/`Sync` impl for various types
18
19### Fixed
20- Cleanup of cargo features/dependencies to improve build times
21- Serde serialization with optional values.
22  Attention: This changes the format of the serialization!
23- `VideoEncoder`/`VideoDecoder` `proxy_getcaps()` can't return `None`
24- Use non-panicking UTF8 conversion in log handler. We don't want to panic
25  just because some C code printed a non-UTF8 string
26- Re-rexport all traits from the crate level and also ensure that all traits
27  are actually included in the preludes
28- Actually export `is_video_overlay_prepare_window_handle_message()` function
29- Use `FnMut` for the `appsink` callbacks instead of `Fn`
30- `Promise` change function returns the actual reply to the promise now
31  instead of just passing the promise itself
32- Memory leak in `Iterator::filter()`
33- `BinImpl::add()` takes ownership of floating references
34- `DeviceImpl::create_element()` preserves floating flag
35- `BinImpl::remove()` takes a strong reference of the element now as the last
36  reference might be owned by the bin and otherwise we would potentially have
37  a use-after-free afterwards
38- `BaseParseFrame` and `VideoCodecFrame` take a `&mut self` now for various
39  functions that actually change the frame
40
41### Changed
42- Minimum supported Rust version is 1.39
43- Allow passing `None` to `VideoEncoder::finish_frame()`
44- Various `to_string()` methods were moved into the `Display` trait impl and
45  for some types `to_str()` was added to return a `&'static str`
46- .gir files were updated to 1.16.2 release
47- `Sample` constructor uses the builder pattern now
48- `VideoMeta::add_full()` is simplified and requires parameters
49- `BasetransformImpl::set_caps()` returns a `Result` instead of `bool`
50- SDP data type getters for strings return an `Option` now as these can be
51  `None` in practice although not allowed by the SDP spec
52- Various functions returning `Option`s were changed to return `Results` if
53  `None` actually signalled an error instead of just a missing value
54
55### Removed
56- "subclassing" and "futures" cargo features. These are enabled by default now
57
58## [0.14.5] - 2019-09-17
59### Added
60- Support subclassing of `gst::Device`, `gst::DeviceProvider`,
61  `gst_audio::AudioDecoder` and `::AudioEncoder`
62- Support for `Element::set_clock` and `::provide_clock` virtual methods
63- `ElementClass::add_metadata` was added
64- `gst_video::VideoDecoder` and `::VideoEncoder` got support for `get_caps`,
65  `negotiate`, `src/sink_query/event` and the `drain` virtual methods
66- `Element::num_pads`, `::num_src_pads` and `::num_sink_pads` functions
67- `gst_video::VideoDecoder` and `::VideoEncoder` got `get_allocator` bindings
68- `gst::Iterator` implements `IntoIterator` now for providing
69  `std::iter::Iterator<Item=<Result<T, IteratorError>>` adapter
70- Error macros for audio/video decoder subclasses to handle decoding errors
71  more gracefully and only actually error out after many consecutive errors
72
73### Fixed
74- Macros now also work in Rust 2018 edition without `#[macro_use]` but
75  explicit imports
76- The log handler unit test runs reliable in parallel with other tests
77- Manually implement `Debug` for `gst::Iterator` to allow it for any `T`
78  instead of `T: Debug`
79- `Device::create_element` has correct reference count handling now
80- Return `NotNegotiated` in the video codec base classes if setting the output
81  state fails instead of `Error`
82
83## [0.14.4] - 2019-08-14
84### Added
85- Bindings for adding/removing custom log functions
86- Bindings for `calculate_linear_regression()`
87- Constants for base class custom flow returns
88
89### Fixed
90- Ownership of pad in `Element::release_pad()` virtual method implementations
91
92## [0.14.3] - 2019-07-16
93### Added
94- `Buffer::unset_flags()` for unsetting specific buffer flags
95- `VideoBufferFlags` flags type and `VideoBufferExt::set_video_flags()`,
96  `unset_video_flags()` and `get_video_flags()` for working with video buffer
97  flags from safe code.
98
99### Fixed
100- Setting buffer flags does not override arbitrary other flags anymore but
101  only sets the flags in question. This is necessary to not override extension
102  buffer flags like `gst_video::VideoBufferFlags`.
103
104## [0.14.2] - 2019-07-15
105### Added
106- Support for `ReferenceTimestampMeta`
107
108## [0.14.1] - 2019-07-06
109### Added
110- Various new WebRTC enum types from 1.14.1/1.16.0
111
112### Fixed
113- Correctly generate interlaced `VideoInfo` by using
114  `gst_video_info_set_interlaced_format()` instead of the generic function.
115- serde serialization unit tests for `gst::format` succeed again now.
116
117### Changed
118- `Debug` impls for `VideoFormatInfo` and `AudioFormatInfo` now print all the
119  details of the format instead of only the name, and the `Debug` impls for
120  `VideoInfo` and `AudioInfo` also print the format now.
121
122## [0.14.0] - 2019-06-24
123### Added
124- Bindings for `GLSyncMeta`.
125- Bindings for setting/getting `TagScope` on a `TagList`
126- Bindings for `GLDisplayWayland` and `GLDisplayX11` in addition to the
127  already existing `GLDisplayEGL`
128- Bindings for `Bus::pop_filtered()` and related functions
129- Bindings for getting/setting `Object`, `Element`, `Bin`, `Pipeline` and
130  `Plugin` flags
131- Bindings for `VideoCaptionMeta`
132- `Debug` impl of `Buffer` now also shows the metas of the buffers
133- Expose flow return in `PadProbeInfo` for overriding the return value
134- Bindings for `VideoDecoder` and `VideoEncoder`, including subclassing
135  support
136- Bindings for `Memory`, `Allocator` and `VideoBufferPool`
137- Bindings for `VideoFormatInfo::pack` and `::unpack` for format conversion
138- Bindings for `BaseParse`, including subclassing support
139- Various new arithmetic operation impls for fractions, formatted values and
140  `ClockTime`
141- Bindings for `VideoInfo::align()`
142
143### Changed
144- The `SDPMessage` and `SDPMedia` bindings were completely rewritten as they
145  were broken before and caused crashes in various usages. As part of this
146  there's also some more convenience API available on these types, like
147  iterators for example, and API to modify the `SDPMedia` contained in a
148  `SDPMessage`.
149- Update to GStreamer 1.16.
150- Regenerate with latest gir.
151- Run all autogenerated code through rustfmt after generation too.
152- Updated to latest versions of GLib/GIO/etc crates.
153- Updated to futures 0.3 / `std::future`
154- `ProxyPad` default functions moved to an extension trait instead of plain
155  functions on `ProxyPad`, making them more in sync with the default `Pad`
156  functions
157- GStreamer plugins are now exporting the new 1.14+ plugin symbols if they
158  were configured for GStreamer 1.14+
159- Arithmetic operations on formatted values and `ClockTime` do overflow checks
160  now and replace the result with the `NONE` value on overflow
161- `TryFrom`/`TryInto` traits are used in various places now instead of the
162  previous ad-hoc implementations of them.
163- Registering element/typefind/device monitor factories requires passing a
164  value of `gst::Rank` now instead of an arbitrary `u32`
165
166### Fixed
167- Use correct type for destroying pad task closure data. This was previously
168  using the wrong type, causing crashes at runtime.
169- `DeviceAdded`/`DeviceRemoved` message getters are transfer full so we don't
170  need to take an additional reference that would be leaked.
171- `AppSink` callbacks are correctly marked as `Send` instead of `Send+Sync`,
172  allowing a wider range of closures to be used for them.
173- Handle `PadProbeReturn::Handled` return values from pad probes more
174  correctly.
175- `ToOwned::to_owned()` on miniobjects has to create copies instead of
176  only increasing the reference count. Otherwise it was possible to create
177  multiple mutable and immutable references to the same object at the same
178  time.
179- Various functions take references to owned miniobjects instead of borrowed
180  references as it was otherwise possible to create multiple mutable or
181  immutable references to the same object at the same time.
182- `URIHandler::set_uri` does not accept `None` anymore as this is not allowed
183  by the C function.
184- Comparisons and addition of `TypeFindProbability` and `Rank` work correctly now
185- Various `Display` implementations were fixed to not cause a stack overflow
186  due to infinite recursion anymore
187- Various `::to_string()` functions don't take ownership of C strings anymore
188  that they do not own, which caused double frees before
189
190### Removed
191- MIKEY related bindings from the SDP library. The bindings were broken and
192  until someone needs them these are not available anymore.
193
194## [0.13.0] - 2019-02-22
195### Added
196- Subclassing infrastructure was moved directly into the bindings,
197  making the `gst-plugin` crate deprecated. This involves many API
198  changes but generally cleans up code and makes it more flexible.
199  Take a look at the `gst-plugins-rs` crate for various examples.
200- Bindings for GStreamer GL library
201- Bindings for `CapsFeatures` and `Meta`
202- Bindings for `ParentBufferMeta, `VideoMeta` and `VideoOverlayCompositionMeta`
203- Bindings for `VideoOverlayComposition` and `VideoOverlayRectangle`
204- Bindings for `VideoTimeCode`
205- Bindings for `NetAddressMeta`
206- Bindings for registering custom tags
207- `UniqueFlowCombiner` and `UniqueAdapter` wrappers that make use of
208  the Rust compile-time mutability checks and expose more API in a safe
209  way, and as a side-effect implement `Sync` and `Send` now
210- `Bus::add_watch_local()` and `gst_video::convert_frame_async_local()` that
211  allows to use a closure that does not implement `Send` but can only be
212  called from the thread owning the main context.
213- More complete bindings for `Allocation` `Query`
214- `pbutils` functions for codec descriptions
215- `TagList::iter()` for iterating over all tags while getting a single
216   value per tag. The old `::iter_tag_list()` function was renamed to
217   `::iter_generic()` and still provides access to each value for a tag
218- `Bus::iter()` and `Bus::iter_timed()` iterators around the
219  corresponding `::pop*()` functions
220- Getters for `VideoColorimetry` to access its fields
221- `Debug` impls for various missing types.
222- serde serialization of `Value` can also handle `Buffer` now
223- Extensive comments to all examples with explanations
224- Transmuxing example showing how to use `typefind`, `multiqueue` and
225  dynamic pads
226- basic-tutorial-12 was ported and added
227
228### Changed
229- Rust 1.31 is the minimum supported Rust version now
230- Update to latest gir code generator and glib bindings
231- Functions returning e.g. `gst::FlowReturn` or other "combined" enums
232  were changed to return split enums like `Result<gst::FlowSuccess,
233  gst::FlowError>` to allow usage of the standard Rust error handling.
234- Various functions and callbacks returning `bool` or `Option<_>` were
235  changed to return a `Result<_, glib::BoolError>` or
236  `Result<_, gst::LoggableError>` or `Result<_, gst::ErrorMessage>` for
237  better integration with Rust's error handling infrastructure.
238- Some infallible functions returning `bool` were changed to return `()`.
239- `MiniObject` subclasses are now newtype wrappers around the
240   underlying `GstRc<FooRef>` wrapper. This does not change the
241   API in any breaking way for the current usages, but allows
242   `MiniObject`s to also be implemented in other crates and
243   makes sure `rustdoc` places the documentation in the right places.
244- `BinExt` extension trait was renamed to `GstBinExt` to prevent
245  conflicts with `gtk::Bin` if both are imported
246- `Buffer::from_slice()` can't possible return `None`
247
248### Fixed
249- `gst::tag::Album` is the album tag now instead of artist sortname
250- Return `0` for the channel mask corresponding to negative
251  `AudioChannelPosition`s.
252- `PartialOrd` and related traits are implemented via pointer equality on
253  `ClockId` instead of using the compare function. Two clock ids with the same
254  timestamp are not necessarily the same.
255- Various functions that are actually fallible are now returning an
256  `Option<_>`.
257- Various `clippy` warnings
258
259## [0.12.2] - 2018-11-26
260### Fixed
261- PTP clock constructor actually creates a PTP instead of NTP clock
262
263### Added
264- Bindings for GStreamer Editing Services
265- Bindings for GStreamer Check testing library
266- Bindings for the encoding profile API (encodebin)
267- VideoFrame, VideoInfo, AudioInfo, StructureRef implements Send and Sync now
268- VideoFrame has a function to get the raw FFI pointer
269- From impls from the Error/Success enums to the combined enums like
270  FlowReturn
271- Bin-to-dot file functions were added to the Bin trait
272- gst_base::Adapter implements SendUnique now
273
274### Changed
275- All references were updated from GitHub to freedesktop.org GitLab
276- Fix various links in the README.md
277- Link to the correct location for the documentation
278- Remove GitLab badge as that only works with gitlab.com currently
279
280## [0.12.1] - 2018-09-21
281### Added
282- More complete bindings for the gst_video::VideoOverlay interface, especially
283  gst_video::is_video_overlay_prepare_window_handle_message()
284
285## [0.12.0] - 2018-09-08
286### Added
287- Bindings for the GStreamer SDP and WebRTC libraries
288- Generic API for working with tags that is based on string tag names and
289  glib::Value for the tag values
290- Bindings for Aggregator and AggregatorPad
291- Bindings for BaseTransform/BaseSrc::get_buffer_pool()
292- Optional serde implementations for the basic GStreamer data flow and metadata types
293
294### Changed
295- Use ptr::NonNull in various places
296- Updated to muldiv 0.2, num-rational 0.2
297- Bus::create_watch() can't return None
298- Remove CallbackGuard as unwinding across FFI boundaries is not undefined
299  behaviour anymore but will directly cause a panic
300- Changed from the futures to the futures-preview crate as an optional
301  dependency
302- Various Caps operations take a &CapsRef instead of &Caps
303- "deep-notify" signal takes the whole ParamSpec as parameter instead of only
304  the signal name
305- Some structs were changed from empty struct to empty enums
306- Pad probe code does not take an additional reference to the data anymore,
307  potentially passing writable events/buffers into the probe
308- ValueExt::compare() is implemented around std::cmp::Ordering now instead of
309  a custom enum that was basically the same
310
311### Fixed
312- Pad::add_probe() can return None if an IDLE probe was already called and
313  removed in the meantime
314- Various compiler and clippy warnings
315
316### Removed
317- std::Iterator impl for gst::Iterator. It was awkward to use because the
318  gst::Iterator could fail at each iteration
319
320## [0.11.6] - 2018-08-27
321### Fixed
322- Build with NLL/two-phase borrows
323- Explicitly define [bin] section for discoverer example to fix a cargo
324  warning
325
326### Added
327- Add unsafe gst::deinit() function
328- Ord/PartialOrd impls on gst::Seqnum
329- Getter for current pad mode
330- gst::Pad::sticky_events_foreach() for iterating over all sticky events
331  in a thread-safe way
332
333## [0.11.5] - 2018-07-24
334### Fixed
335- `gst::Bus`'s sync handler must unref every message if
336  `gst::BusSyncReply::Drop` is returned, otherwise they are all leaked
337
338## [0.11.4] - 2018-07-19
339### Fixed
340- `gst::Caps::subtract()` does not leak its arguments anymore
341- `gst::Caps::get_structure()` gracefully returns `None` if the index
342  is out of bounds instead of a `g_return_val_if_fail()`
343- `gst::Structure::new()` has to give away ownership of the info structure
344  but didn't. For 0.11 we internally copy, in 0.12 it will take the info
345  structure by value
346- Typefind tests don't fail anymore if the system has typefind factories
347  without caps
348
349### Added
350- An additional assertion that ensures that miniobjects are actually
351  writable before creating a mutable reference
352
353## [0.11.3] - 2018-06-08
354### Added
355- `gst::Bus::remove_watch()` is now available to remove a bus watch again
356- `fmt::Debug` impls for `AudioInfo` and `VideoInfo` were added
357- `fmt::Debug` impls for mini objects also print the pointer value now to make
358  it easier to track them in debug logs
359- `PlayerVisualization` has accessors for the name and description fields now,
360  without which there is no sensible way to use them or to set a player
361  visualization
362
363## [0.11.2] - 2018-05-09
364### Fixed
365- Work-around various floating reference handling changes between 1.12 and
366  1.14 to be able to run with both versions without memory leaks or other
367  reference count problems.
368  This affects NetTimeProvider, BufferPool, DeviceMonitor, Stream,
369  StreamCollection, and Player, NetClientClock, NetClock, PtpClock which were
370  already previously fixed.
371
372### Changed
373- Change the appsrc need-data and all appsink callbacks to not require the
374  Sync bound anymore and change from Fn to FnMut. They can only be called from
375  a single thread at a time. This change is only done for the corresponding
376  callbacks, not the signals.
377
378## [0.11.1] - 2018-04-07
379### Fixed
380- Fix Structure::to_string() to not run into an infinite recursion but call
381  the method on the contained StructureRef instead of on itself
382
383## [0.11.0] - 2018-03-20
384### Changed
385- Updated everything to GStreamer 1.14.0
386- Event, Message and Query types were refactored to improve usability.
387  Especially newly constructed queries allow to directly use the type-specific
388  functions to be used without first creating a view
389- VideoFrameRef::copy_to_ref() and ::copy_plane_to_ref() are gone now and the
390  original functions work with refs instead of full frames
391- PadProbeId and NotifyIds are not Copy/Clone anymore and are taken by value
392- GstPlayer has GstObject as parent class now
393
394### Added
395- GstPbutils, GstSdp, GstRtsp and GstRtspServer bindings
396- GstPromise, GstAudioStreamAlign and various other 1.14 API
397- GstVideoFilter and GstBufferPool bindings
398- Element::call_async()
399- Debug impl For Toc and TocEntry
400- Various new examples (RTP FEC, RTSP server, tag usage, ...)
401
402### Fixed
403- Memory leak in gst_video::convert_sample_async()
404
405## [0.10.2] - 2018-02-18
406### Fixed
407- Fix building of messages with custom fields for types that don't have a
408  GstStructure
409
410### Added
411- VideoFrameRef::copy_to_ref() and ::copy_plane_to_ref(), which work with
412  VideoFrameRefs instead of full VideoFrames
413- Getters for the BaseSrc/Sink/Transform configured segment
414- Document the gstreamer-player-1.0 dependency in the README.md
415
416## [0.10.1] - 2018-01-03
417### Fixed
418- Don't require &mut self for TagSetterExtManual::add()
419
420### Added
421- A TagSetter example application
422- Bindings for gst_video::convert_sample() and ::convert_sample_async()
423- Bindings for gst_video::VideoRectangle
424- Debug impl for Sample and ::with_buffer_list() constructor
425- A borrowing version of VideoFrame: VideoFrameRef
426- Bindings for GstVideoFilter
427
428### Changed
429- Deprecated Sample::get_info() in favour of ::get_structure()
430- Player has gst::Object as another parent class now
431
432## [0.10.0] - 2017-12-22
433### Fixed
434- Various clippy warnings
435- Memory leak of the tag list in Toc::merge_tags()
436- Property getters use Values of the correct type
437- Event::get_structure(), Message::get_structure() and
438  Query::get_structure() can return None for the structure
439- Various other nullability fixes all over the API, changing functions to
440  accept Option<> or returning Option<>, or only plain types
441- Functions taking paths/filenames now actually take Paths instead of &strs
442- Element::remove_pad() is not giving away a new reference to the pad
443  anymore, which caused a memory leak of all pads ever removed
444- Precision handling in ClockTime's Display impl
445- Video/AudioInfo are only Send, not Sync
446
447### Added
448- Various enums now also derive useful traits like Copy, Clone and Hash in
449  addition to PartialEq, Eq and Debug
450- TagList::merge() and insert() for combining tag lists
451- EventType gained many useful functions to work with event types and
452  a PartialOrd impl to check expected event order of event types where it matters
453- MessageRef/EventRef/QueryRef implement ToOwned
454- Bindings for Registry and PluginFeature
455- Event::set_running_time_offset() for adjusting the offset while events
456  pass through the pipeline
457- Event/Message GroupIds and Seqnums now have a newtype wrapper around u32
458  instead of the plain value, making usage of them slightly more typesafe.
459  Also add an "invalid" value for both, as exists in latest GStreamer now.
460- FormattedValue, GenericFormattedValue and related types were
461  implemented now, which allows more convenient and type-safe usage of
462  formatted values (time, bytes, etc)
463- Bindings for force-keyunit and still-frame events were added
464- MappedBuffer/BufferMap now implement various other useful traits, including
465  AsRef<[u8]>, AsMut, Deref, DerefMut, Debug, PartialEq and Eq
466- Add VideoMultiviewFramePacking enum, and use it in Player
467- Bindings for the GStreamer Net library, including PTP/NTP/network client
468  clocks and the GStreamer NetClock provider for network synchronization of
469  pipelines
470- IteratorError implements std::error:Error
471- Plugin::add_dependency() and ::add_dependency_simple() was added
472- Rank and TypeFindProbability implement PartialOrd/Ord now
473- Bindings for TypeFind, TypeFindFactory and the typefind helpers
474- StreamCollection::iter() for iterating over all contained streams
475- ErrorMessage type that can be used e.g. in a Result for passing an error
476  message from somewhere to upper layers to then be posted on an element the
477  same way gst_element_error!() would've done
478
479### Changed
480- Sample::new(), TagList::add(), Structure::set() and similar
481  functions take the values (ToSendValue impls) by reference instead of value.
482  They were not consumed by the function before.
483- The Debug impls of various types, including Event/Buffer/Message/Query/Structure
484  were improved to print all the fields, similar to what GST_PTR_FORMAT would
485  do in C
486- Switched to lazy_static 1.0
487- Gap event and Duration tag are using ClockTimes now, as well as various
488  Player signals
489- Segment is now based on a generic type FormattedSegment that can
490  take any format (time, bytes, etc) or a GenericFormattedValue for more
491  type-safety and convenience. Also functions for "casting" between a generic
492  segment and a segment with a specific format exist on this now
493- AppSrc and AppSink now have a builder for the callbacks, making it
494  unnecessary to always provide all callbacks even if only one is actually
495  needed
496- Various functions that returned bool for errors, are now returning a Result
497- Player configuration is now a custom type with more convenient API
498- Player VideoInfo uses a Fraction instead of (u32,u32) for the framerate and
499  pixel-aspect-ratio
500- VideoFrame API has more consistent API between writable and read-only
501  variants
502- Buffer::copy_into() was added, and ::copy_region() now takes a
503  BufferCopyFlags parameter instead of always using the default flags
504- ChildProxy::set_child_property() takes a &ToValue now to follow the API of
505  Object::set_property() and improve usability
506- Proxy/GhostPad default pad functions use the correct specific pad type now
507  instead of a generic Pad
508- Bus::add_signal_watch_full() takes a Priority for the priority instead of u32
509- Clock::(un)adjust_with_calibration() takes no clock parameter anymore
510
511### Removed
512- FormatValue was removed in favour of GenericFormattedValue and the
513  connected traits and specific format impls
514
515## [0.9.1] - 2017-11-26
516### Fixed
517- Export `FlowError`/`FlowSuccess`, `ClockError`/`ClockSuccess`,
518  `PadLinkError`/`PadLinkSuccess` too
519
520## [0.9.0] - 2017-11-26
521### Added
522- Bindings for (outputting to) the GStreamer logging system
523- Bindings for the GStreamer base library
524- Bindings for all the `Pad` functions to override pad behaviour, and pad task
525  functions
526- Bindings for `StaticCaps` and `StaticPadTemplate`
527- Bindings for `deep-notify` signal on `Object`
528- Support for directly creating `Error`/`Warning`/`Info` `Messages` and posting them
529  from an element with context information (file, line, module, etc.) similar
530  to the C `GST_ELEMENT_ERROR` macro
531- Support for setting custom fields in `Messages`/`Events` during construction
532- Support for creating Buffers out of anything that is `AsRef<[u8]>` or
533  `AsMut<[u8]>`
534- Support for using the `Read` trait on `Adapter`
535- Functions for getting all sink/src/all pads of an `Element`, and all children
536  of a `Bin`
537- Builder for `Caps` and `Structures` in addition to the existing functions
538- `AppSrc`/`AppSink` implement `BaseSrc`/`BaseSink` and `URIHandler`
539- Rust ports of the basic tutorials 1 to 8 from
540  https://gstreamer.freedesktop.org/documentation/tutorials/
541- "Getting started" and "Installation" sections to the README.md
542- "dox" feature for generating documentation for all available configurations
543
544### Fixed
545- `StackTraceFlags` are only available since 1.12
546- Worked around macOS requiring a `NSRunLoop` running on the main thread in all
547  examples and tutorials, to be able to show a window or anything else
548
549### Changed
550- `ClockTime` is now a wrapper around `Option<u64>` to handle the
551  `CLOCK_TIME_NONE` case better. This wrapper implements all the arithmetic
552  and other traits as needed and ensures that no accidential calculations with
553  `CLOCK_TIME_NONE` can happen
554- "Values with format", like in `Duration`/`Position`/`Convert` queries or
555  `Seek` events now return a `FormatValue` type. This contains the actual
556  `Format` together with the value and does any required conversions. This
557  also makes it harder to accidentially mix e.g. values in bytes and time
558- `PadProbeId` does not implement `Clone`/`Copy` anymore
559- Property notify watches return a custom type instead of ulong
560- `Error`/`Warning`/`Info` `Messages` can only be created with specific kinds of
561  `glib::Error` now. Using arbitrary ones does not work
562- `Iterator` bindings were completely rewritten and provide the item type as a
563  generic type parameter now, greatly simplifying its usage
564- All `glib::Values` are now `glib::SendValue` instead, e.g. in `Caps` and
565  `Structures`, as their content must be possible to send to different threads
566  safely
567- `Message::get_src()` can return `None`
568- Allow `None` as `Caps` in `AppSrc`/`AppSink`
569- Allow everything implementing `Into<Option<&str>>` to be used as a pad name
570- Moved `copy()` from `GstRc` directly to `MiniObject`
571- Success/Error enums (like `FlowReturn`, `PadLinkReturn`, `StateChangeReturn`) now
572  implement an `into_result()` function that splits them into a `Result` with
573  the good and bad cases. Also mark them as `#[must_use]` to make it harder to
574  accidentially ignore errors.
575- Error enums implement the `Error` trait
576- Many examples use the `failure` crate for error handling now, cleaning up the
577  error handling code quite a bit
578- Lots of other code cleanup, compiler/clippy warning cleanup, etc.
579
580## [0.8.2] - 2017-11-11
581### Fixed
582- Implement StaticType of BufferRef instead of Buffer. Buffer aka
583  GstRc<BufferRef> already implements StaticType if BufferRef does, and
584  without this it was not possible to use Buffers in GValues.
585- Free memory of the appsink/appsrc callbacks with the correct type. It was
586  crashing because of using the wrong type before.
587- Fix documentation URLs in Cargo.toml.
588
589### Added
590- Installation instructions and links to documentation for getting started to
591  README.md.
592
593## [0.8.1] - 2017-09-15
594### Added
595- Implement Send+Sync for Query, Message and Event, and their corresponding
596  Ref types.
597
598### Fixed
599- Constructor for gst_player::Player now works properly with GStreamer 1.12
600  when passing a video renderer or signal dispatcher. There was a reference
601  counting bug.
602- Instead of returning &'static references from functions, return references
603  with a generic, unbound lifetime instead.
604  See https://github.com/rust-lang/rust/pull/42417#issue-233404573
605- Various "unused external crate" warnings and clippy warnings everywhere.
606
607### Changed
608- Remove Cargo.lock from GIT, it's not very useful for library crates.
609- Run everything through latest rustfmt-nightly.
610- Use while-let (instead of loop and if-let) and CLOCK_TIME_NONE (instead of
611  u64::MAX) in the examples.
612
613## 0.8.0 - 2017-08-31
614
615- Initial release of the autogenerated GStreamer bindings. Older versions
616  (< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
617  The API of the two is incompatible.
618
619[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.0...HEAD
620[0.15.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.14.2...0.15.0
621[0.14.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.14.1...0.14.2
622[0.14.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.14.0...0.14.1
623[0.14.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.13.0...0.14.0
624[0.13.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.12.2...0.13.0
625[0.12.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.12.1...0.12.2
626[0.12.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.12.0...0.12.1
627[0.12.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.6...0.12.0
628[0.11.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.5...0.11.6
629[0.11.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.4...0.11.5
630[0.11.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.3...0.11.4
631[0.11.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.2...0.11.3
632[0.11.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.1...0.11.2
633[0.11.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.0...0.11.1
634[0.11.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.10.2...0.11.0
635[0.10.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.10.1...0.10.2
636[0.10.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.10.0...0.10.1
637[0.10.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.9.1...0.10.0
638[0.9.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.9.0...0.9.1
639[0.9.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.8.1...0.9.0
640[0.8.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.8.1...0.8.2
641[0.8.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.8.0...0.8.1
642