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.17.3] - 2021-08-23
9### Fixed
10- `gst::Value::deserialize()` takes the target type as parameter now. This is
11  technically an API change but the function would've never worked previously.
12
13### Added
14- The release date-time parameter to `gst::plugin_define!` is optional now
15  like in the C version of the macro.
16- Bindings to `gst::Tracer` and `gst::TracerFactory` for allowing to implement
17  custom tracers in Rust.
18- Bindings for the new `gst::Value::deserialize_with_psec()` function from
19  GStreamer 1.20.
20- serde `Serialize`/`Deserialize` impls for `gst::PadDirection`,
21  `gst::PadPresence`, `gst::URIType` and `gst::Rank`.
22
23## [0.17.2] - 2021-08-05
24
25### Fixed
26- Various new clippy warnings.
27- Compilation of `gstreamer-audio` on big-endian platforms.
28
29### Added
30- Support for 1.20 `Gap` event `GapFlags`.
31- Support for 1.20 `Structure::serialize()` / `Caps::serialize()`.
32
33## [0.17.1] - 2021-07-13
34
35### Fixed
36- Store 1.19 as plugin version when building plugins with `v1_20`. Otherwise
37  plugins fail to load with GStreamer versions below 1.20.0.
38- Fix documentation for `gst::Element::request_pad_simple()` to actually show
39  up.
40
41## [0.17.0] - 2021-06-28
42
43### Fixed
44- Use `#[repr(transparent)]` where it is more correct and remove unneeded
45  `#[repr(C)]` annotations.
46- Don't provide direct access to the logged object in logging functions as the
47  object might currently be finalized and might be unsafe to access.
48- Moved X11/EGL/Wayland-specific GL APIs into their own crates instead of
49  having them inside gstreamer-gl and behind feature flags. This simplifies
50  conditional usage of them in applications.
51- Various nullability issues: parameters and return values that should've been
52  or shouldn't have been nullable were fixed.
53- Print source object correctly in `gst::Message` `Debug` impl.
54- `gst_rtsp_server::RTSPServer::attach()` is fallible.
55- `gst::ElementFactoryListType` is a proper bitflags type now instead of
56  generic `u64`.
57- `gst::PluginFeature::load()` returns the same type as the one passed in.
58- Value returned by `gst::PromiseFuture` can no longer be freed while still
59  in scope.
60- Only assign to `GError**`s in subclassing code if they're not `NULL`.
61
62### Added
63- Bindings for the GStreamer Controller library and the corresponding core API.
64- Subclassing support for `gst_player::PlayerVideoRenderer`.
65- `gst::PARAM_FLAG_CONTROLLABLE` and related bindings.
66- `gst_video::VideoOrientation` and `VideoOrientationMethod` bindings.
67- Support for removing pad probes from inside the pad probe callback.
68- `gst_check::Harness::pull_until_eos()` bindings.
69- `ges::TransitionClip` and `OperationClip`.
70- Bindings for `gst_gl::GLMemory` and related APIs.
71- Subclassing support for `gst_gl::GLFilter` and `gst_gl::BaseSrc`.
72- `gst::TagList::remove()`.
73- `gst::CapsFeatures` and `gst::Structure` API based on `glib::Quark`s instead
74  of strings.
75- Subclassing support for `gst_video::VideoFilter`.
76- Bindings for various new 1.20 APIs: `gst_app::LeakyType`,
77  `gst_video::VideoDecoderRequestSyncPointFlags`,
78  `gst_rtp::RTPHeaderExtension`, `gst_audio::AudioLevelMeta`,
79  `gst_webrtc::WebRTCKind` and various other new flags/enum types.
80- Subclassing support for `gst_rtsp_server::RTSPMountPoints`.
81
82### Removed
83- Deprecated APIs in 0.16.
84- Don't declare that `gst_app::AppSink` and `AppSrc` inherit from
85  `gst_base::BaseSink` and `BaseSrc` to avoid exposing API that is meant for
86  subclasses to applications.
87- `gst_app::AppSrc` and `AppSink` signals that are also covered by the
88  callbacks. The callbacks are more flexible and have lower overhead.
89- Duplicated getters/setters for `gst_base::BaseSink` and `BaseTransform`
90  properties.
91
92### Changed
93- Compatible with the 0.14 gtk-rs release.
94- Updated to the new GStreamer 1.20 APIs while still supporting up to GStreamer
95  1.8. Any new 1.20 APIs might still change until the stable 1.20 release.
96- FFI and safe high-level bindings are in the same repository now and use the
97  same version numbers.
98- The .gir files are shared with gtk-rs and the GStreamer-specific ones are in
99  a separate git submodule.
100- Update all code to the Rust 2018 edition. As part of this, most macros lost
101  their `gst_` prefix.
102- Re-export dependency crates from the different preludes.
103- Getter functions don't have a `get_` prefix anymore and GObject property
104  accessors don't include the `_property_` part in the middle of their
105  function names anymore. Applications developers should use
106  [`fix-getters-calls`](https://crates.io/crates/fix-getters-calls) to ease
107  migration of their applications.
108  Use [`fix-getters-def`](https://crates.io/crates/fix-getters-def) if you also
109  want your `get` functions definition to comply with the API standards applied
110  in this release.
111- Lots of changes to the subclassing API. Check the various elements in
112  [gst-plugins-rs](https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs)
113  for examples.
114- Major improvements to the documentation infrastructure and generated
115  documentation.
116- `gst::ClockID` bindings are refactored to use different types for
117  single-shot and periodic clock ids, which makes misuse harder.
118- `gst::ProxyPad` extension trait uses trait functions instead of associated
119  functions now for usability reasons.
120- Use `Result<gst::FlowSuccess, gst::FlowError>` for overriding flow returns
121  from pad probes.
122- `gst_video::VideoInfo::align()` returns a `Result` instead of a `bool`.
123- Use actual error types instead of `()` in `gst_sdp` APIs.
124- `Display` impl for `gst::ClockTime` provides better human-readable strings.
125- `gst::Element::link_filtered()` and `link_pads_filtered()` takes a
126  non-optional caps now. That's easier to use and for not providing caps the
127  non-filtered variants of the functions exist.
128- Replace various manual bindings with auto-generated ones.
129- `gst::Element::get_request_pad()` is replaced by `request_pad_simple()` as a
130  simpler version of `request_pad()` and in accordance with the deprecation in
131  GStreamer 1.20.
132- `gst::ClockTime` and APIs working on it were changed to make possibility of
133  using `GST_CLOCK_TIME_NONE` expressed in the type system.
134  `Option<gst::ClockTime>` can be `None` while `gst::ClockTime` is always a
135  valid time.
136
137## [0.16.7] - 2021-02-13
138### Fixed
139- Usage of the logging system with a GStreamer library with the logging system
140  compiled out does not crash any longer.
141- Double-free in `gst_video::VideoTimeCode` API when converting between
142  validated and unvalidated timecodes.
143
144### Added
145- `gst::Element::get_current_state()` and `get_pending_state()` convenience APIs.
146- `gst_audio::AudioConverterConfig` for setting the configuration on e.g. the
147  `audiomixer` element. The low-level `AudioConverter` API is still not
148  included in the bindings.
149
150## [0.16.6] - 2020-12-20
151### Fixed
152- `VideoTimeCodeInterval`'s `Ord` and `PartialEq` implementations compare
153  against the correct fields now.
154- `SDPMessage::medias_mut()` iterator does not crash any longer.
155
156### Added
157- `PartialEq` and `Eq` implementations on `VideoAlignment`.
158- Alignment API for `VideoMeta` and `get_plane_height()` / `get_plane_size()`.
159- `VideoInfo::align_full()`.
160
161## [0.16.5] - 2020-11-23
162### Fixed
163- Make sure to use `$crate` in more macros to allow them to work without
164  anything special in scope already.
165- Update documentation location.
166- Don't panic if C code stores invalid seqnums in events and the seqnum is
167  used directly or via the `Display` impl.
168- Fix docs build for some crates on docs.rs.
169- Fix `Debug` impl for `gst_video::VideoTimeCode` to print the correct type
170  name.
171- Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
172  `v1_18`.
173
174### Added
175- Event handling support in pad probes, that is returning
176  `PadProbeReturn::Handled` for events.
177- `EventRef::get_structure_mut()` getter that allows changing the events'
178  structures.
179
180### Changed
181- Remove unnecessary `PhantomData` markers and use `repr(transparent)` instead
182  of `repr(C)` where it is more correct.
183
184## [0.16.4] - 2020-10-09
185### Fixed
186- Correctly implement `ExactSizeIterator` on the `AudioFormat` and
187  `VideoFormat` iterators. Previously they returned the overall size instead
188  of the remaining size, and they didn't implement `Iterator::size_hint()`.
189- Don't implement `ExactSizeIterator` on the buffer `gst::Meta` iterator. The
190  overall length is not known easily and the implementation would've simply
191  panicked in the past.
192
193### Added
194- `gst::ClockID::wait_async_stream()` for async integration for clock waiting.
195- `From` / `TryFrom` impls for converting between `gst::ClockTime` and
196  `std::time::Duration`.
197
198## [0.16.3] - 2020-09-08
199### Fixed
200- Reset vfuncs if calling `BaseTransformClass::configure()` multiple times.
201- Fix `gst::debug_remove_default_log_function()` to actually remove the
202  default log function.
203
204### Added
205- Some more new APIs added in 1.18.
206- API for getting an owned buffer from a readable `gst_video::VideoFrame` /
207  `VideoFrameRef`.
208
209### Changed
210- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any
211  API behind the "v1_18" feature is considered stable now.
212- Factor out some common code from `gst::Pad::ProbeInfo` code. This reduces
213  the code generated for each pad probe considerably.
214- Update paste dependency to 1.0 and pretty-hex to 0.2.
215
216## [0.16.2] - 2020-07-27
217### Fixed
218- Use correct pointer for the plane data in `gst_audio::AudioBuffer`.
219
220### Added
221- Add `gst::GhostPad` convenience constructors that take a target pad, similar
222  to the ones that existed in 0.15 and before.
223- Add `gst::parse_bin_from_description_with_name` that allows setting a name
224  for the created bin without having to use unsafe code in application code.
225
226## [0.16.1] - 2020-07-10
227### Fixed
228- Allow calling `gst::DebugCategory::new()` before `gst::init()` again.
229
230## [0.16.0] - 2020-07-06
231### Added
232- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be
233  opted-in via the "v1_18" feature flag but there might still be API changes
234  in the newly added API.
235- `gst::MemoryRef::dump()` for dumping contents of a memory.
236- `gst::Bus::stream()` instead of a custom constructor on the `BusStream`.
237- Use more accurate types for `Seqnum`, `GroupId` and `MetaSeqnum`. These are
238  now proper wrapper types instead of plain integers, which makes mis-use
239  harder.
240- Provide `TryFrom` impls for conversion between `glib::DateTime` and
241  `gst::DateTime`.
242- Add `get_allocator()` functions to `gst_base::{Aggregator, BaseTransform,
243  BaseSrc}`, and allow overriding `BaseSrc::alloc()`.
244- Add subclassing bindings for `gst_base::PushSrc`.
245- Add new `gst::BufferCursor` API that allows to handle a buffer as `Read`,
246  `Write` and `Seek` and accesses the underlying memories of the buffer
247  individually without mapping them all together.
248- Add `gst::Plugin::get_plugin_name()`.
249- Support for `gst_video::VideoAFDMeta` and `VideoBarMeta`.
250- API for getting all / iterating over all `gst_audio::AudioFormat` and
251  `gst_video::VideoFormat`.
252- Bindings and subclassing bindings for `gst_video::VideoSink`.
253- `gst::Pad` can be constructed via the builder pattern and `gst::PadBuilder`
254  now, which allows to safely set the pad functions and various other fields
255  during construction. The `PadBuilder` works on any `gst::Pad` subclass and
256  also has special support for `GhostPad`s by allowing to set pad functions of
257  the proxy pad.
258- `gst::Message`, `gst::Event` and `gst::Query` type constructors are now on
259  the specific target type instead of various `new_XXX()` functions on the
260  basic type. E.g. `gst::message::Eos::new()`.
261- Support for overriding `gst_audio::AudioSrc/Sink::reset()`.
262- Support for overriding `gst_base::BaseParse::stop()`.
263- Support for overriding `gst::Element::post_message()`.
264- Added bindings for `gst::BufferList::foreach()` and `foreach_mut()`.
265- Added bindings for `gst::Buffer::foreach_meta()` and `foreach_meta_mut()`.
266
267### Fixed
268- Allow using any `glib::Object` as target object for logging instead of just
269  `gst::Object`.
270- Remove restriction API from `gst_pbutils::EncodingContainerProfile`. They
271  are supposed to be used only with the other encoding profiles.
272- Return `&'static str` for various `gst::StructureRef` functions where the
273  string is backed by a `glib::Quark`.
274- Fix various `gst::DateTime` functions to actually return `Option`s.
275- Add support for filling in a buffer passed to the `gst::Pad` getrange
276  function, allow passing one in into `get_range()` and `pull_range()` and
277  provide the corresponding API on `gst_base::BaseSrc` too.
278- Allocator in audio/video `Decoder` base classes is optional and can return
279  `None`.
280- `gst_video::ValidVideoTimeCode::add_interval()` always returns a valid
281  timecode again.
282- Allow resolving a `gst::Promise` with `None` and also handle that correctly
283  in the callback. This is allowed by the API.
284- Allow calling various debugging related functions before `gst::init()`.
285- Various enum/function versions were fixed to only show up if the
286  corresponding version feature is enabled.
287- `gst::Pad` function setters are marked unsafe now as changing the functions
288  is not thread-safe.
289- Remove `gst::Object::set_name()` as changing the name after construction
290  generally causes problems and is potentially unsafe.
291- Remove `gst::Pad::set_pad_template()` as changing the pad template after
292  construction is generally unsafe.
293- `gst::Pad::stream_lock()` borrows the pad now instead of taking a new
294  reference.
295- Unimplemented `Jitter` and `Buffer` queries were removed from the bindings.
296  These are not implemented in C and only have a type registered.
297- Various `LAST`, `NONE` variants of enums and flags were removed as these
298  only make sense in C.
299- Call the parent impl of various vfuncs that were omitted before to not
300  require further subclasses of them to implement them but automatically call
301  the parent ones.
302
303### Changed
304- Use `NonZeroU64/U32` for various ID types to allow further optimizations.
305- Use `thiserror` crate for deriving error types.
306- Switch from `lazy_static` to `once_cell`.
307- Change various miniobject functions like `gst::Caps::append()` from taking
308  the object by value to modifying it internally. This makes them easier to
309  use and only applies to functions that are defined on the non-reference type
310  and take ownership of the values passed in.
311- Use `mem::ManuallyDrop` instead of `mem::forget()` everywhere.
312- Replace most `mem::transmute()` calls with safer alternatives.
313- `gst:StreamCollection` API was changed to the builder pattern for
314  construction as the collection must not be changed after construction.
315- `gst::ProxyPad` default functions are plain functions on `ProxyPad` now
316  instead of trait functions to allow easier usage of them.
317- Use proper error types in various `TryFrom` impls.
318- `gst_video::VideoMeta::add()` returns a `Result` now instead of panicking.
319- Various constructors were renamed from `new_with_XXX()` and `new_from_XXX()`
320  to the more idiomatic `with_XXX()` and `from_XXX()`.
321- Miniobject bindings are simplified now and there is no `gst::GstRc` type
322  anymore, instead everything is directly implemented on the concrete types.
323  As part of this the `gst::MiniObject` trait was also removed as it was
324  unneeded now.
325
326## [0.15.7] - 2020-06-08
327### Fixed
328- Allow multiple filter types per process with `gst::Iterator::filter()`.
329- Check that `VideoInfo` is valid when creating a `VideoFrame`.
330- Don't potentially dereference a `NULL` pointer when getting the format
331  from an invalid `VideoInfo` or `AudioInfo`.
332- Don't unmap borrowed `VideoFrameRef`s.
333
334### Added
335- `gst::ProtectionMeta`, `gst_video::VideoAffineTransformationMeta`,
336  `VideoCropMeta` and `VideoRegionOfInterestMeta` bindings.
337- Various new `gst_rtp::RTPBuffer` methods.
338- `gst_audio::audio_buffer_truncate()`, `AudioMeta` and `AudioBuffer`
339  bindings.
340
341## [0.15.6] - 2020-05-28
342### Fixed
343- Assert that the data passed to `VideoCaptionMeta::add()` is not empty.
344- Don't store strong references to the object in the bus, appsink and appsrc
345  futures `Stream` / `Sink` adapters. This would keep them alive unnecessarily
346  and would prevent the `Stream` / `Sink` to ever "finish" on its own.
347- Handle receiving a `None` reply in the change function of `gst::Promise`.
348  This is apparently valid. For backwards compatibility reasons this is
349  currently replaced with an empty structure but in 0.16 the API will
350  explicitly handle `None`.
351
352### Added
353- `gst::Stream::debug()` and `gst::StreamCollection::debug()` for converting
354  into a structured string with the actual contents of each.
355- `gst::Structure::from_iter()` and `gst::Caps::from_iter()` to create
356  structures/caps from iterators.
357- `gst::Event` support for getting/setting the `gst::Stream` in the
358  `StreamStart` event.
359- `gst_video::calculate_display_ratio()` and `::guess_framerate()`.
360- Various video related `gst::CapsFeatures` in `gst_video`.
361- `TryFrom`/`From` impls for converting between `gst::Structure` and
362  `gst_video::VideoConverterConfig`.
363- Various `glib::Value` trait impls for `SDPMessage`, `StructureRef`,
364  `CapsFeatureRef` and all borrowed variants of miniobjects to be able to
365  work with the borrowed, non-owned variants when handling `glib::Value`s.
366
367## [0.15.5] - 2020-05-03
368### Fixed
369- Revert: Allow logging any `glib::Object` and not just `gst::Object`. This
370  broke API in subtile ways and needs to wait until 0.16
371- Replace `%` in log output with `%%` to prevent accidental C formatting
372- Add missing manual traits to the documentation
373
374### Added
375- `BufferRef::peek_memory_mut()` to give a mutable reference to a given memory
376- Different iterators for iterating over the memories of a buffer
377- Support for `gst_audio::AudioClippingMeta`
378- `gst::Plugin::get_plugin_name()` was added
379- `gst::Element::get_current_clock_time()` and
380  `gst::Element::get_current_running_time() helper functions
381- `gst::State` and `StateChange` API for calculating next/previous state and
382  convert from/to the components of a state change
383
384### Changed
385- Use `mem::ManuallyDrop` instead of `mem::forget` everywhere
386
387## [0.15.4] - 2020-03-09
388### Fixed
389- Allow logging any `glib::Object` and not just `gst::Object`
390- Fix floating reference handling in `RTSPMedia::take_pipeline()`
391- Hold `GMutex` guards for the remainder of the function and warn if they're
392  directly dropped
393- Work around empty/any caps handling bugs in `Caps::fixate()`
394
395### Added
396- Add `BaseTransform::prepare_output_buffer()` subclassing support
397- `RTSPServer`, `RTSPClient`, `RTSPMedia` and `RTSPMediaFactory` subclassing
398  support
399- Handle panicking in `appsrc`/`appsink` callbacks by posting an error message
400  instead of killing the process
401
402## [0.15.3] - 2020-02-15
403### Fixed
404- `UniqueFlowCombiner::clear()` should take a mutable reference.
405- `AudioStreamAlign` doesn't require mutable references for getters anymore.
406- Don't use bool return value of `gst_video_info_set_format()` and
407  `gst_video_info_align()` with GStreamer < 1.11.1 as it returned void back
408  then. We'd otherwise use some random value.
409- Make `VideoInfo::align()` is available since 1.8.
410- Fix changing/clearing of `AppSrc`, `AppSink` callbacks and `Bus` sync
411  handler. Before 1.16.3 this was not thread-safe and caused crashes. When
412  running with older versions changing them causes a panic now and unsetting
413  the bus sync handler has not effect. With newer versions it works correctly.
414
415### Added
416- Add `Clone` impls for `BufferPoolConfig` and `PlayerConfig`.
417- Add `VideoConverter` bindings.
418- Add `Future`s variant for `gst::Promise` constructor.
419- Add `Future`s variant for `gst_video::convert_sample_async()`.
420- Add `submit_input_buffer()`, `generate_output()`, `before_transform()`,
421  `copy_metadata()` and `transform_meta()` virtual method support for
422  `BaseTransform`.
423- Add `AppSink` `Stream` adapter and `AppSrc` `Sink` adapter for integrating
424  both into Rust async contexts.
425
426### Changed
427- More generic implementations of `VideoFrame` / `VideoFrameRef` functions to
428  allow usage in more generic contexts.
429
430## [0.15.2] - 2020-01-30
431### Fixed
432- Fix another race condition in the `gst::Bus` `Stream` that could cause it to
433  not wake up although a message is available.
434
435## [0.15.1] - 2020-01-23
436### Added
437- Use static inner lifetime for `VideoCodecState<Readable>` so that it can be
438  stored safely on the heap.
439- Getters/setters for `BinFlags` on `gst::Bin`.
440- `gst::Caps::builder_full()` for building caps with multiple structures
441  conveniently.
442- `gst::Element::call_async_future()` for asynchronously spawning a closure
443  and returning a `Future` for awaiting its return value.
444
445### Fixed
446- Various clippy warnings.
447- Getters/setters for `PadFlags` on `gst::Pad` now provide the correct
448  behaviour.
449- Take mutex before popping messages in the `gst::Bus` `Stream` to close a
450  small race condition that could cause it to not be woken up.
451- `gst::ChildProxy` implementers do not have to provide `child_added()` and
452  `child_removed()` functions anymore but these are optional now.
453- Manually implement `Debug` impls for various generic types where to `Debug`
454  impl should not depend on their type parameters also implementing `Debug`.
455
456## [0.15.0] - 2019-12-18
457### Added
458- `StructureRef::get_optional()` for returning `None` if the field does not
459  exist instead of `Err`
460- Bindings for `gstreamer-rtp` library, mostly `RTPBuffer`
461- Support for writing `Preset`, `TagSetter`, `Clock`, `SystemClock` subclasses
462- Bindings for `Typefind::get_length()`
463- Bindings for `BaseSrcImpl::get_times()`
464- Bindings (incl. subclassing) for `AudioSink` and `AudioSrc`
465- Missing `Send`/`Sync` impl for various types
466
467### Fixed
468- Cleanup of cargo features/dependencies to improve build times
469- Serde serialization with optional values.
470  Attention: This changes the format of the serialization!
471- `VideoEncoder`/`VideoDecoder` `proxy_getcaps()` can't return `None`
472- Use non-panicking UTF8 conversion in log handler. We don't want to panic
473  just because some C code printed a non-UTF8 string
474- Re-rexport all traits from the crate level and also ensure that all traits
475  are actually included in the preludes
476- Actually export `is_video_overlay_prepare_window_handle_message()` function
477- Use `FnMut` for the `appsink` callbacks instead of `Fn`
478- `Promise` change function returns the actual reply to the promise now
479  instead of just passing the promise itself
480- Memory leak in `Iterator::filter()`
481- `BinImpl::add()` takes ownership of floating references
482- `DeviceImpl::create_element()` preserves floating flag
483- `BinImpl::remove()` takes a strong reference of the element now as the last
484  reference might be owned by the bin and otherwise we would potentially have
485  a use-after-free afterwards
486- `BaseParseFrame` and `VideoCodecFrame` take a `&mut self` now for various
487  functions that actually change the frame
488
489### Changed
490- Minimum supported Rust version is 1.39
491- Allow passing `None` to `VideoEncoder::finish_frame()`
492- Various `to_string()` methods were moved into the `Display` trait impl and
493  for some types `to_str()` was added to return a `&'static str`
494- .gir files were updated to 1.16.2 release
495- `Sample` constructor uses the builder pattern now
496- `VideoMeta::add_full()` is simplified and requires parameters
497- `BasetransformImpl::set_caps()` returns a `Result` instead of `bool`
498- SDP data type getters for strings return an `Option` now as these can be
499  `None` in practice although not allowed by the SDP spec
500- Various functions returning `Option`s were changed to return `Results` if
501  `None` actually signalled an error instead of just a missing value
502
503### Removed
504- "subclassing" and "futures" cargo features. These are enabled by default now
505
506## [0.14.5] - 2019-09-17
507### Added
508- Support subclassing of `gst::Device`, `gst::DeviceProvider`,
509  `gst_audio::AudioDecoder` and `::AudioEncoder`
510- Support for `Element::set_clock` and `::provide_clock` virtual methods
511- `ElementClass::add_metadata` was added
512- `gst_video::VideoDecoder` and `::VideoEncoder` got support for `get_caps`,
513  `negotiate`, `src/sink_query/event` and the `drain` virtual methods
514- `Element::num_pads`, `::num_src_pads` and `::num_sink_pads` functions
515- `gst_video::VideoDecoder` and `::VideoEncoder` got `get_allocator` bindings
516- `gst::Iterator` implements `IntoIterator` now for providing
517  `std::iter::Iterator<Item=<Result<T, IteratorError>>` adapter
518- Error macros for audio/video decoder subclasses to handle decoding errors
519  more gracefully and only actually error out after many consecutive errors
520
521### Fixed
522- Macros now also work in Rust 2018 edition without `#[macro_use]` but
523  explicit imports
524- The log handler unit test runs reliable in parallel with other tests
525- Manually implement `Debug` for `gst::Iterator` to allow it for any `T`
526  instead of `T: Debug`
527- `Device::create_element` has correct reference count handling now
528- Return `NotNegotiated` in the video codec base classes if setting the output
529  state fails instead of `Error`
530
531## [0.14.4] - 2019-08-14
532### Added
533- Bindings for adding/removing custom log functions
534- Bindings for `calculate_linear_regression()`
535- Constants for base class custom flow returns
536
537### Fixed
538- Ownership of pad in `Element::release_pad()` virtual method implementations
539
540## [0.14.3] - 2019-07-16
541### Added
542- `Buffer::unset_flags()` for unsetting specific buffer flags
543- `VideoBufferFlags` flags type and `VideoBufferExt::set_video_flags()`,
544  `unset_video_flags()` and `get_video_flags()` for working with video buffer
545  flags from safe code.
546
547### Fixed
548- Setting buffer flags does not override arbitrary other flags anymore but
549  only sets the flags in question. This is necessary to not override extension
550  buffer flags like `gst_video::VideoBufferFlags`.
551
552## [0.14.2] - 2019-07-15
553### Added
554- Support for `ReferenceTimestampMeta`
555
556## [0.14.1] - 2019-07-06
557### Added
558- Various new WebRTC enum types from 1.14.1/1.16.0
559
560### Fixed
561- Correctly generate interlaced `VideoInfo` by using
562  `gst_video_info_set_interlaced_format()` instead of the generic function.
563- serde serialization unit tests for `gst::format` succeed again now.
564
565### Changed
566- `Debug` impls for `VideoFormatInfo` and `AudioFormatInfo` now print all the
567  details of the format instead of only the name, and the `Debug` impls for
568  `VideoInfo` and `AudioInfo` also print the format now.
569
570## [0.14.0] - 2019-06-24
571### Added
572- Bindings for `GLSyncMeta`.
573- Bindings for setting/getting `TagScope` on a `TagList`
574- Bindings for `GLDisplayWayland` and `GLDisplayX11` in addition to the
575  already existing `GLDisplayEGL`
576- Bindings for `Bus::pop_filtered()` and related functions
577- Bindings for getting/setting `Object`, `Element`, `Bin`, `Pipeline` and
578  `Plugin` flags
579- Bindings for `VideoCaptionMeta`
580- `Debug` impl of `Buffer` now also shows the metas of the buffers
581- Expose flow return in `PadProbeInfo` for overriding the return value
582- Bindings for `VideoDecoder` and `VideoEncoder`, including subclassing
583  support
584- Bindings for `Memory`, `Allocator` and `VideoBufferPool`
585- Bindings for `VideoFormatInfo::pack` and `::unpack` for format conversion
586- Bindings for `BaseParse`, including subclassing support
587- Various new arithmetic operation impls for fractions, formatted values and
588  `ClockTime`
589- Bindings for `VideoInfo::align()`
590
591### Changed
592- The `SDPMessage` and `SDPMedia` bindings were completely rewritten as they
593  were broken before and caused crashes in various usages. As part of this
594  there's also some more convenience API available on these types, like
595  iterators for example, and API to modify the `SDPMedia` contained in a
596  `SDPMessage`.
597- Update to GStreamer 1.16.
598- Regenerate with latest gir.
599- Run all autogenerated code through rustfmt after generation too.
600- Updated to latest versions of GLib/GIO/etc crates.
601- Updated to futures 0.3 / `std::future`
602- `ProxyPad` default functions moved to an extension trait instead of plain
603  functions on `ProxyPad`, making them more in sync with the default `Pad`
604  functions
605- GStreamer plugins are now exporting the new 1.14+ plugin symbols if they
606  were configured for GStreamer 1.14+
607- Arithmetic operations on formatted values and `ClockTime` do overflow checks
608  now and replace the result with the `NONE` value on overflow
609- `TryFrom`/`TryInto` traits are used in various places now instead of the
610  previous ad-hoc implementations of them.
611- Registering element/typefind/device monitor factories requires passing a
612  value of `gst::Rank` now instead of an arbitrary `u32`
613
614### Fixed
615- Use correct type for destroying pad task closure data. This was previously
616  using the wrong type, causing crashes at runtime.
617- `DeviceAdded`/`DeviceRemoved` message getters are transfer full so we don't
618  need to take an additional reference that would be leaked.
619- `AppSink` callbacks are correctly marked as `Send` instead of `Send+Sync`,
620  allowing a wider range of closures to be used for them.
621- Handle `PadProbeReturn::Handled` return values from pad probes more
622  correctly.
623- `ToOwned::to_owned()` on miniobjects has to create copies instead of
624  only increasing the reference count. Otherwise it was possible to create
625  multiple mutable and immutable references to the same object at the same
626  time.
627- Various functions take references to owned miniobjects instead of borrowed
628  references as it was otherwise possible to create multiple mutable or
629  immutable references to the same object at the same time.
630- `URIHandler::set_uri` does not accept `None` anymore as this is not allowed
631  by the C function.
632- Comparisons and addition of `TypeFindProbability` and `Rank` work correctly now
633- Various `Display` implementations were fixed to not cause a stack overflow
634  due to infinite recursion anymore
635- Various `::to_string()` functions don't take ownership of C strings anymore
636  that they do not own, which caused double frees before
637
638### Removed
639- MIKEY related bindings from the SDP library. The bindings were broken and
640  until someone needs them these are not available anymore.
641
642## [0.13.0] - 2019-02-22
643### Added
644- Subclassing infrastructure was moved directly into the bindings,
645  making the `gst-plugin` crate deprecated. This involves many API
646  changes but generally cleans up code and makes it more flexible.
647  Take a look at the `gst-plugins-rs` crate for various examples.
648- Bindings for GStreamer GL library
649- Bindings for `CapsFeatures` and `Meta`
650- Bindings for `ParentBufferMeta, `VideoMeta` and `VideoOverlayCompositionMeta`
651- Bindings for `VideoOverlayComposition` and `VideoOverlayRectangle`
652- Bindings for `VideoTimeCode`
653- Bindings for `NetAddressMeta`
654- Bindings for registering custom tags
655- `UniqueFlowCombiner` and `UniqueAdapter` wrappers that make use of
656  the Rust compile-time mutability checks and expose more API in a safe
657  way, and as a side-effect implement `Sync` and `Send` now
658- `Bus::add_watch_local()` and `gst_video::convert_frame_async_local()` that
659  allows to use a closure that does not implement `Send` but can only be
660  called from the thread owning the main context.
661- More complete bindings for `Allocation` `Query`
662- `pbutils` functions for codec descriptions
663- `TagList::iter()` for iterating over all tags while getting a single
664   value per tag. The old `::iter_tag_list()` function was renamed to
665   `::iter_generic()` and still provides access to each value for a tag
666- `Bus::iter()` and `Bus::iter_timed()` iterators around the
667  corresponding `::pop*()` functions
668- Getters for `VideoColorimetry` to access its fields
669- `Debug` impls for various missing types.
670- serde serialization of `Value` can also handle `Buffer` now
671- Extensive comments to all examples with explanations
672- Transmuxing example showing how to use `typefind`, `multiqueue` and
673  dynamic pads
674- basic-tutorial-12 was ported and added
675
676### Changed
677- Rust 1.31 is the minimum supported Rust version now
678- Update to latest gir code generator and glib bindings
679- Functions returning e.g. `gst::FlowReturn` or other "combined" enums
680  were changed to return split enums like `Result<gst::FlowSuccess,
681  gst::FlowError>` to allow usage of the standard Rust error handling.
682- Various functions and callbacks returning `bool` or `Option<_>` were
683  changed to return a `Result<_, glib::BoolError>` or
684  `Result<_, gst::LoggableError>` or `Result<_, gst::ErrorMessage>` for
685  better integration with Rust's error handling infrastructure.
686- Some infallible functions returning `bool` were changed to return `()`.
687- `MiniObject` subclasses are now newtype wrappers around the
688   underlying `GstRc<FooRef>` wrapper. This does not change the
689   API in any breaking way for the current usages, but allows
690   `MiniObject`s to also be implemented in other crates and
691   makes sure `rustdoc` places the documentation in the right places.
692- `BinExt` extension trait was renamed to `GstBinExt` to prevent
693  conflicts with `gtk::Bin` if both are imported
694- `Buffer::from_slice()` can't possible return `None`
695
696### Fixed
697- `gst::tag::Album` is the album tag now instead of artist sortname
698- Return `0` for the channel mask corresponding to negative
699  `AudioChannelPosition`s.
700- `PartialOrd` and related traits are implemented via pointer equality on
701  `ClockId` instead of using the compare function. Two clock ids with the same
702  timestamp are not necessarily the same.
703- Various functions that are actually fallible are now returning an
704  `Option<_>`.
705- Various `clippy` warnings
706
707## [0.12.2] - 2018-11-26
708### Fixed
709- PTP clock constructor actually creates a PTP instead of NTP clock
710
711### Added
712- Bindings for GStreamer Editing Services
713- Bindings for GStreamer Check testing library
714- Bindings for the encoding profile API (encodebin)
715- VideoFrame, VideoInfo, AudioInfo, StructureRef implements Send and Sync now
716- VideoFrame has a function to get the raw FFI pointer
717- From impls from the Error/Success enums to the combined enums like
718  FlowReturn
719- Bin-to-dot file functions were added to the Bin trait
720- gst_base::Adapter implements SendUnique now
721
722### Changed
723- All references were updated from GitHub to freedesktop.org GitLab
724- Fix various links in the README.md
725- Link to the correct location for the documentation
726- Remove GitLab badge as that only works with gitlab.com currently
727
728## [0.12.1] - 2018-09-21
729### Added
730- More complete bindings for the gst_video::VideoOverlay interface, especially
731  gst_video::is_video_overlay_prepare_window_handle_message()
732
733## [0.12.0] - 2018-09-08
734### Added
735- Bindings for the GStreamer SDP and WebRTC libraries
736- Generic API for working with tags that is based on string tag names and
737  glib::Value for the tag values
738- Bindings for Aggregator and AggregatorPad
739- Bindings for BaseTransform/BaseSrc::get_buffer_pool()
740- Optional serde implementations for the basic GStreamer data flow and metadata types
741
742### Changed
743- Use ptr::NonNull in various places
744- Updated to muldiv 0.2, num-rational 0.2
745- Bus::create_watch() can't return None
746- Remove CallbackGuard as unwinding across FFI boundaries is not undefined
747  behaviour anymore but will directly cause a panic
748- Changed from the futures to the futures-preview crate as an optional
749  dependency
750- Various Caps operations take a &CapsRef instead of &Caps
751- "deep-notify" signal takes the whole ParamSpec as parameter instead of only
752  the signal name
753- Some structs were changed from empty struct to empty enums
754- Pad probe code does not take an additional reference to the data anymore,
755  potentially passing writable events/buffers into the probe
756- ValueExt::compare() is implemented around std::cmp::Ordering now instead of
757  a custom enum that was basically the same
758
759### Fixed
760- Pad::add_probe() can return None if an IDLE probe was already called and
761  removed in the meantime
762- Various compiler and clippy warnings
763
764### Removed
765- std::Iterator impl for gst::Iterator. It was awkward to use because the
766  gst::Iterator could fail at each iteration
767
768## [0.11.6] - 2018-08-27
769### Fixed
770- Build with NLL/two-phase borrows
771- Explicitly define [bin] section for discoverer example to fix a cargo
772  warning
773
774### Added
775- Add unsafe gst::deinit() function
776- Ord/PartialOrd impls on gst::Seqnum
777- Getter for current pad mode
778- gst::Pad::sticky_events_foreach() for iterating over all sticky events
779  in a thread-safe way
780
781## [0.11.5] - 2018-07-24
782### Fixed
783- `gst::Bus`'s sync handler must unref every message if
784  `gst::BusSyncReply::Drop` is returned, otherwise they are all leaked
785
786## [0.11.4] - 2018-07-19
787### Fixed
788- `gst::Caps::subtract()` does not leak its arguments anymore
789- `gst::Caps::get_structure()` gracefully returns `None` if the index
790  is out of bounds instead of a `g_return_val_if_fail()`
791- `gst::Structure::new()` has to give away ownership of the info structure
792  but didn't. For 0.11 we internally copy, in 0.12 it will take the info
793  structure by value
794- Typefind tests don't fail anymore if the system has typefind factories
795  without caps
796
797### Added
798- An additional assertion that ensures that miniobjects are actually
799  writable before creating a mutable reference
800
801## [0.11.3] - 2018-06-08
802### Added
803- `gst::Bus::remove_watch()` is now available to remove a bus watch again
804- `fmt::Debug` impls for `AudioInfo` and `VideoInfo` were added
805- `fmt::Debug` impls for mini objects also print the pointer value now to make
806  it easier to track them in debug logs
807- `PlayerVisualization` has accessors for the name and description fields now,
808  without which there is no sensible way to use them or to set a player
809  visualization
810
811## [0.11.2] - 2018-05-09
812### Fixed
813- Work-around various floating reference handling changes between 1.12 and
814  1.14 to be able to run with both versions without memory leaks or other
815  reference count problems.
816  This affects NetTimeProvider, BufferPool, DeviceMonitor, Stream,
817  StreamCollection, and Player, NetClientClock, NetClock, PtpClock which were
818  already previously fixed.
819
820### Changed
821- Change the appsrc need-data and all appsink callbacks to not require the
822  Sync bound anymore and change from Fn to FnMut. They can only be called from
823  a single thread at a time. This change is only done for the corresponding
824  callbacks, not the signals.
825
826## [0.11.1] - 2018-04-07
827### Fixed
828- Fix Structure::to_string() to not run into an infinite recursion but call
829  the method on the contained StructureRef instead of on itself
830
831## [0.11.0] - 2018-03-20
832### Changed
833- Updated everything to GStreamer 1.14.0
834- Event, Message and Query types were refactored to improve usability.
835  Especially newly constructed queries allow to directly use the type-specific
836  functions to be used without first creating a view
837- VideoFrameRef::copy_to_ref() and ::copy_plane_to_ref() are gone now and the
838  original functions work with refs instead of full frames
839- PadProbeId and NotifyIds are not Copy/Clone anymore and are taken by value
840- GstPlayer has GstObject as parent class now
841
842### Added
843- GstPbutils, GstSdp, GstRtsp and GstRtspServer bindings
844- GstPromise, GstAudioStreamAlign and various other 1.14 API
845- GstVideoFilter and GstBufferPool bindings
846- Element::call_async()
847- Debug impl For Toc and TocEntry
848- Various new examples (RTP FEC, RTSP server, tag usage, ...)
849
850### Fixed
851- Memory leak in gst_video::convert_sample_async()
852
853## [0.10.2] - 2018-02-18
854### Fixed
855- Fix building of messages with custom fields for types that don't have a
856  GstStructure
857
858### Added
859- VideoFrameRef::copy_to_ref() and ::copy_plane_to_ref(), which work with
860  VideoFrameRefs instead of full VideoFrames
861- Getters for the BaseSrc/Sink/Transform configured segment
862- Document the gstreamer-player-1.0 dependency in the README.md
863
864## [0.10.1] - 2018-01-03
865### Fixed
866- Don't require &mut self for TagSetterExtManual::add()
867
868### Added
869- A TagSetter example application
870- Bindings for gst_video::convert_sample() and ::convert_sample_async()
871- Bindings for gst_video::VideoRectangle
872- Debug impl for Sample and ::with_buffer_list() constructor
873- A borrowing version of VideoFrame: VideoFrameRef
874- Bindings for GstVideoFilter
875
876### Changed
877- Deprecated Sample::get_info() in favour of ::get_structure()
878- Player has gst::Object as another parent class now
879
880## [0.10.0] - 2017-12-22
881### Fixed
882- Various clippy warnings
883- Memory leak of the tag list in Toc::merge_tags()
884- Property getters use Values of the correct type
885- Event::get_structure(), Message::get_structure() and
886  Query::get_structure() can return None for the structure
887- Various other nullability fixes all over the API, changing functions to
888  accept Option<> or returning Option<>, or only plain types
889- Functions taking paths/filenames now actually take Paths instead of &strs
890- Element::remove_pad() is not giving away a new reference to the pad
891  anymore, which caused a memory leak of all pads ever removed
892- Precision handling in ClockTime's Display impl
893- Video/AudioInfo are only Send, not Sync
894
895### Added
896- Various enums now also derive useful traits like Copy, Clone and Hash in
897  addition to PartialEq, Eq and Debug
898- TagList::merge() and insert() for combining tag lists
899- EventType gained many useful functions to work with event types and
900  a PartialOrd impl to check expected event order of event types where it matters
901- MessageRef/EventRef/QueryRef implement ToOwned
902- Bindings for Registry and PluginFeature
903- Event::set_running_time_offset() for adjusting the offset while events
904  pass through the pipeline
905- Event/Message GroupIds and Seqnums now have a newtype wrapper around u32
906  instead of the plain value, making usage of them slightly more typesafe.
907  Also add an "invalid" value for both, as exists in latest GStreamer now.
908- FormattedValue, GenericFormattedValue and related types were
909  implemented now, which allows more convenient and type-safe usage of
910  formatted values (time, bytes, etc)
911- Bindings for force-keyunit and still-frame events were added
912- MappedBuffer/BufferMap now implement various other useful traits, including
913  AsRef<[u8]>, AsMut, Deref, DerefMut, Debug, PartialEq and Eq
914- Add VideoMultiviewFramePacking enum, and use it in Player
915- Bindings for the GStreamer Net library, including PTP/NTP/network client
916  clocks and the GStreamer NetClock provider for network synchronization of
917  pipelines
918- IteratorError implements std::error:Error
919- Plugin::add_dependency() and ::add_dependency_simple() was added
920- Rank and TypeFindProbability implement PartialOrd/Ord now
921- Bindings for TypeFind, TypeFindFactory and the typefind helpers
922- StreamCollection::iter() for iterating over all contained streams
923- ErrorMessage type that can be used e.g. in a Result for passing an error
924  message from somewhere to upper layers to then be posted on an element the
925  same way gst_element_error!() would've done
926
927### Changed
928- Sample::new(), TagList::add(), Structure::set() and similar
929  functions take the values (ToSendValue impls) by reference instead of value.
930  They were not consumed by the function before.
931- The Debug impls of various types, including Event/Buffer/Message/Query/Structure
932  were improved to print all the fields, similar to what GST_PTR_FORMAT would
933  do in C
934- Switched to lazy_static 1.0
935- Gap event and Duration tag are using ClockTimes now, as well as various
936  Player signals
937- Segment is now based on a generic type FormattedSegment that can
938  take any format (time, bytes, etc) or a GenericFormattedValue for more
939  type-safety and convenience. Also functions for "casting" between a generic
940  segment and a segment with a specific format exist on this now
941- AppSrc and AppSink now have a builder for the callbacks, making it
942  unnecessary to always provide all callbacks even if only one is actually
943  needed
944- Various functions that returned bool for errors, are now returning a Result
945- Player configuration is now a custom type with more convenient API
946- Player VideoInfo uses a Fraction instead of (u32,u32) for the framerate and
947  pixel-aspect-ratio
948- VideoFrame API has more consistent API between writable and read-only
949  variants
950- Buffer::copy_into() was added, and ::copy_region() now takes a
951  BufferCopyFlags parameter instead of always using the default flags
952- ChildProxy::set_child_property() takes a &ToValue now to follow the API of
953  Object::set_property() and improve usability
954- Proxy/GhostPad default pad functions use the correct specific pad type now
955  instead of a generic Pad
956- Bus::add_signal_watch_full() takes a Priority for the priority instead of u32
957- Clock::(un)adjust_with_calibration() takes no clock parameter anymore
958
959### Removed
960- FormatValue was removed in favour of GenericFormattedValue and the
961  connected traits and specific format impls
962
963## [0.9.1] - 2017-11-26
964### Fixed
965- Export `FlowError`/`FlowSuccess`, `ClockError`/`ClockSuccess`,
966  `PadLinkError`/`PadLinkSuccess` too
967
968## [0.9.0] - 2017-11-26
969### Added
970- Bindings for (outputting to) the GStreamer logging system
971- Bindings for the GStreamer base library
972- Bindings for all the `Pad` functions to override pad behaviour, and pad task
973  functions
974- Bindings for `StaticCaps` and `StaticPadTemplate`
975- Bindings for `deep-notify` signal on `Object`
976- Support for directly creating `Error`/`Warning`/`Info` `Messages` and posting them
977  from an element with context information (file, line, module, etc.) similar
978  to the C `GST_ELEMENT_ERROR` macro
979- Support for setting custom fields in `Messages`/`Events` during construction
980- Support for creating Buffers out of anything that is `AsRef<[u8]>` or
981  `AsMut<[u8]>`
982- Support for using the `Read` trait on `Adapter`
983- Functions for getting all sink/src/all pads of an `Element`, and all children
984  of a `Bin`
985- Builder for `Caps` and `Structures` in addition to the existing functions
986- `AppSrc`/`AppSink` implement `BaseSrc`/`BaseSink` and `URIHandler`
987- Rust ports of the basic tutorials 1 to 8 from
988  https://gstreamer.freedesktop.org/documentation/tutorials/
989- "Getting started" and "Installation" sections to the README.md
990- "dox" feature for generating documentation for all available configurations
991
992### Fixed
993- `StackTraceFlags` are only available since 1.12
994- Worked around macOS requiring a `NSRunLoop` running on the main thread in all
995  examples and tutorials, to be able to show a window or anything else
996
997### Changed
998- `ClockTime` is now a wrapper around `Option<u64>` to handle the
999  `CLOCK_TIME_NONE` case better. This wrapper implements all the arithmetic
1000  and other traits as needed and ensures that no accidential calculations with
1001  `CLOCK_TIME_NONE` can happen
1002- "Values with format", like in `Duration`/`Position`/`Convert` queries or
1003  `Seek` events now return a `FormatValue` type. This contains the actual
1004  `Format` together with the value and does any required conversions. This
1005  also makes it harder to accidentially mix e.g. values in bytes and time
1006- `PadProbeId` does not implement `Clone`/`Copy` anymore
1007- Property notify watches return a custom type instead of ulong
1008- `Error`/`Warning`/`Info` `Messages` can only be created with specific kinds of
1009  `glib::Error` now. Using arbitrary ones does not work
1010- `Iterator` bindings were completely rewritten and provide the item type as a
1011  generic type parameter now, greatly simplifying its usage
1012- All `glib::Values` are now `glib::SendValue` instead, e.g. in `Caps` and
1013  `Structures`, as their content must be possible to send to different threads
1014  safely
1015- `Message::get_src()` can return `None`
1016- Allow `None` as `Caps` in `AppSrc`/`AppSink`
1017- Allow everything implementing `Into<Option<&str>>` to be used as a pad name
1018- Moved `copy()` from `GstRc` directly to `MiniObject`
1019- Success/Error enums (like `FlowReturn`, `PadLinkReturn`, `StateChangeReturn`) now
1020  implement an `into_result()` function that splits them into a `Result` with
1021  the good and bad cases. Also mark them as `#[must_use]` to make it harder to
1022  accidentially ignore errors.
1023- Error enums implement the `Error` trait
1024- Many examples use the `failure` crate for error handling now, cleaning up the
1025  error handling code quite a bit
1026- Lots of other code cleanup, compiler/clippy warning cleanup, etc.
1027
1028## [0.8.2] - 2017-11-11
1029### Fixed
1030- Implement StaticType of BufferRef instead of Buffer. Buffer aka
1031  GstRc<BufferRef> already implements StaticType if BufferRef does, and
1032  without this it was not possible to use Buffers in GValues.
1033- Free memory of the appsink/appsrc callbacks with the correct type. It was
1034  crashing because of using the wrong type before.
1035- Fix documentation URLs in Cargo.toml.
1036
1037### Added
1038- Installation instructions and links to documentation for getting started to
1039  README.md.
1040
1041## [0.8.1] - 2017-09-15
1042### Added
1043- Implement Send+Sync for Query, Message and Event, and their corresponding
1044  Ref types.
1045
1046### Fixed
1047- Constructor for gst_player::Player now works properly with GStreamer 1.12
1048  when passing a video renderer or signal dispatcher. There was a reference
1049  counting bug.
1050- Instead of returning &'static references from functions, return references
1051  with a generic, unbound lifetime instead.
1052  See https://github.com/rust-lang/rust/pull/42417#issue-233404573
1053- Various "unused external crate" warnings and clippy warnings everywhere.
1054
1055### Changed
1056- Remove Cargo.lock from GIT, it's not very useful for library crates.
1057- Run everything through latest rustfmt-nightly.
1058- Use while-let (instead of loop and if-let) and CLOCK_TIME_NONE (instead of
1059  u64::MAX) in the examples.
1060
1061## 0.8.0 - 2017-08-31
1062
1063- Initial release of the autogenerated GStreamer bindings. Older versions
1064  (< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
1065  The API of the two is incompatible.
1066
1067[Unreleased]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.17.0...HEAD
1068[0.17.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.7...0.17.0
1069[0.16.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.6...0.16.7
1070[0.16.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.5...0.16.6
1071[0.16.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.4...0.16.5
1072[0.16.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.3...0.16.4
1073[0.16.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.2...0.16.3
1074[0.16.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.1...0.16.2
1075[0.16.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.16.0...0.16.1
1076[0.16.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.7...0.16.0
1077[0.15.7]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.6...0.15.7
1078[0.15.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.5...0.15.6
1079[0.15.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.4...0.15.5
1080[0.15.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.3...0.15.4
1081[0.15.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.2...0.15.3
1082[0.15.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.1...0.15.2
1083[0.15.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.15.0...0.15.1
1084[0.15.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.14.2...0.15.0
1085[0.14.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.14.1...0.14.2
1086[0.14.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.14.0...0.14.1
1087[0.14.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.13.0...0.14.0
1088[0.13.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.12.2...0.13.0
1089[0.12.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.12.1...0.12.2
1090[0.12.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.12.0...0.12.1
1091[0.12.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.6...0.12.0
1092[0.11.6]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.5...0.11.6
1093[0.11.5]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.4...0.11.5
1094[0.11.4]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.3...0.11.4
1095[0.11.3]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.2...0.11.3
1096[0.11.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.1...0.11.2
1097[0.11.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.11.0...0.11.1
1098[0.11.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.10.2...0.11.0
1099[0.10.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.10.1...0.10.2
1100[0.10.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.10.0...0.10.1
1101[0.10.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.9.1...0.10.0
1102[0.9.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.9.0...0.9.1
1103[0.9.0]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.8.1...0.9.0
1104[0.8.2]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.8.1...0.8.2
1105[0.8.1]: https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/compare/0.8.0...0.8.1
1106