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