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