gstreamer-rs/gstreamer-video/CHANGELOG.md
2018-01-03 17:08:10 +02:00

10 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning, specifically the variant used by Rust.

0.10.1 - 2018-01-03

Fixed

  • Don't require &mut self for TagSetterExtManual::add()

Added

  • A TagSetter example application
  • Bindings for gst_video::convert_sample() and ::convert_sample_async()
  • Bindings for gst_video::VideoRectangle
  • Debug impl for Sample and ::with_buffer_list() constructor
  • A borrowing version of VideoFrame: VideoFrameRef
  • Bindings for GstVideoFilter

Changed

  • Deprecated Sample::get_info() in favour of ::get_structure()
  • Player has gst::Object as another parent class now

0.10.0 - 2017-12-22

Fixed

  • Various clippy warnings
  • Memory leak of the tag list in Toc::merge_tags()
  • Property getters use Values of the correct type
  • Event::get_structure(), Message::get_structure() and Query::get_structure() can return None for the structure
  • Various other nullability fixes all over the API, changing functions to accept Option<> or returning Option<>, or only plain types
  • Functions taking paths/filenames now actually take Paths instead of &strs
  • Element::remove_pad() is not giving away a new reference to the pad anymore, which caused a memory leak of all pads ever removed
  • Precision handling in ClockTime's Display impl
  • Video/AudioInfo are only Send, not Sync

Added

  • Various enums now also derive useful traits like Copy, Clone and Hash in addition to PartialEq, Eq and Debug
  • TagList::merge() and insert() for combining tag lists
  • EventType gained many useful functions to work with event types and a PartialOrd impl to check expected event order of event types where it matters
  • MessageRef/EventRef/QueryRef implement ToOwned
  • Bindings for Registry and PluginFeature
  • Event::set_running_time_offset() for adjusting the offset while events pass through the pipeline
  • Event/Message GroupIds and Seqnums now have a newtype wrapper around u32 instead of the plain value, making usage of them slightly more typesafe. Also add an "invalid" value for both, as exists in latest GStreamer now.
  • FormattedValue, GenericFormattedValue and related types were implemented now, which allows more convenient and type-safe usage of formatted values (time, bytes, etc)
  • Bindings for force-keyunit and still-frame events were added
  • MappedBuffer/BufferMap now implement various other useful traits, including AsRef<[u8]>, AsMut, Deref, DerefMut, Debug, PartialEq and Eq
  • Add VideoMultiviewFramePacking enum, and use it in Player
  • Bindings for the GStreamer Net library, including PTP/NTP/network client clocks and the GStreamer NetClock provider for network synchronization of pipelines
  • IteratorError implements std::error:Error
  • Plugin::add_dependency() and ::add_dependency_simple() was added
  • Rank and TypeFindProbability implement PartialOrd/Ord now
  • Bindings for TypeFind, TypeFindFactory and the typefind helpers
  • StreamCollection::iter() for iterating over all contained streams
  • ErrorMessage type that can be used e.g. in a Result for passing an error message from somewhere to upper layers to then be posted on an element the same way gst_element_error!() would've done

Changed

  • Sample::new(), TagList::add(), Structure::set() and similar functions take the values (ToSendValue impls) by reference instead of value. They were not consumed by the function before.
  • The Debug impls of various types, including Event/Buffer/Message/Query/Structure were improved to print all the fields, similar to what GST_PTR_FORMAT would do in C
  • Switched to lazy_static 1.0
  • Gap event and Duration tag are using ClockTimes now, as well as various Player signals
  • Segment is now based on a generic type FormattedSegment that can take any format (time, bytes, etc) or a GenericFormattedValue for more type-safety and convenience. Also functions for "casting" between a generic segment and a segment with a specific format exist on this now
  • AppSrc and AppSink now have a builder for the callbacks, making it unnecessary to always provide all callbacks even if only one is actually needed
  • Various functions that returned bool for errors, are now returning a Result
  • Player configuration is now a custom type with more convenient API
  • Player VideoInfo uses a Fraction instead of (u32,u32) for the framerate and pixel-aspect-ratio
  • VideoFrame API has more consistent API between writable and read-only variants
  • Buffer::copy_into() was added, and ::copy_region() now takes a BufferCopyFlags parameter instead of always using the default flags
  • ChildProxy::set_child_property() takes a &ToValue now to follow the API of Object::set_property() and improve usability
  • Proxy/GhostPad default pad functions use the correct specific pad type now instead of a generic Pad
  • Bus::add_signal_watch_full() takes a Priority for the priority instead of u32
  • Clock::(un)adjust_with_calibration() takes no clock parameter anymore

Removed

  • FormatValue was removed in favour of GenericFormattedValue and the connected traits and specific format impls

0.9.1 - 2017-11-26

Fixed

  • Export FlowError/FlowSuccess, ClockError/ClockSuccess, PadLinkError/PadLinkSuccess too

0.9.0 - 2017-11-26

Added

  • Bindings for (outputting to) the GStreamer logging system
  • Bindings for the GStreamer base library
  • Bindings for all the Pad functions to override pad behaviour, and pad task functions
  • Bindings for StaticCaps and StaticPadTemplate
  • Bindings for deep-notify signal on Object
  • Support for directly creating Error/Warning/Info Messages and posting them from an element with context information (file, line, module, etc.) similar to the C GST_ELEMENT_ERROR macro
  • Support for setting custom fields in Messages/Events during construction
  • Support for creating Buffers out of anything that is AsRef<[u8]> or AsMut<[u8]>
  • Support for using the Read trait on Adapter
  • Functions for getting all sink/src/all pads of an Element, and all children of a Bin
  • Builder for Caps and Structures in addition to the existing functions
  • AppSrc/AppSink implement BaseSrc/BaseSink and URIHandler
  • Rust ports of the basic tutorials 1 to 8 from https://gstreamer.freedesktop.org/documentation/tutorials/
  • "Getting started" and "Installation" sections to the README.md
  • "dox" feature for generating documentation for all available configurations

Fixed

  • StackTraceFlags are only available since 1.12
  • Worked around macOS requiring a NSRunLoop running on the main thread in all examples and tutorials, to be able to show a window or anything else

Changed

  • ClockTime is now a wrapper around Option<u64> to handle the CLOCK_TIME_NONE case better. This wrapper implements all the arithmetic and other traits as needed and ensures that no accidential calculations with CLOCK_TIME_NONE can happen

  • "Values with format", like in Duration/Position/Convert queries or Seek events now return a FormatValue type. This contains the actual Format together with the value and does any required conversions. This also makes it harder to accidentially mix e.g. values in bytes and time

  • PadProbeId does not implement Clone/Copy anymore

  • Property notify watches return a custom type instead of ulong

  • Error/Warning/Info Messages can only be created with specific kinds of glib::Error now. Using arbitrary ones does not work

  • Iterator bindings were completely rewritten and provide the item type as a generic type parameter now, greatly simplifying its usage

  • All glib::Values are now glib::SendValue instead, e.g. in Caps and Structures, as their content must be possible to send to different threads safely

  • Message::get_src() can return None

  • Allow None as Caps in AppSrc/AppSink

  • Allow everything implementing Into<Option<&str>> to be used as a pad name

  • Moved copy() from GstRc directly to MiniObject

  • Success/Error enums (like FlowReturn, PadLinkReturn, StateChangeReturn) now implement an into_result() function that splits them into a Result with the good and bad cases. Also mark them as #[must_use] to make it harder to accidentially ignore errors.

  • Error enums implement the Error trait

  • Many examples use the failure crate for error handling now, cleaning up the error handling code quite a bit

  • Lots of other code cleanup, compiler/clippy warning cleanup, etc.

0.8.2 - 2017-11-11

Fixed

  • Implement StaticType of BufferRef instead of Buffer. Buffer aka GstRc already implements StaticType if BufferRef does, and without this it was not possible to use Buffers in GValues.
  • Free memory of the appsink/appsrc callbacks with the correct type. It was crashing because of using the wrong type before.
  • Fix documentation URLs in Cargo.toml.

Added

  • Installation instructions and links to documentation for getting started to README.md.

0.8.1 - 2017-09-15

Added

  • Implement Send+Sync for Query, Message and Event, and their corresponding Ref types.

Fixed

  • Constructor for gst_player::Player now works properly with GStreamer 1.12 when passing a video renderer or signal dispatcher. There was a reference counting bug.
  • Instead of returning &'static references from functions, return references with a generic, unbound lifetime instead. See https://github.com/rust-lang/rust/pull/42417#issue-233404573
  • Various "unused external crate" warnings and clippy warnings everywhere.

Changed

  • Remove Cargo.lock from GIT, it's not very useful for library crates.
  • Run everything through latest rustfmt-nightly.
  • Use while-let (instead of loop and if-let) and CLOCK_TIME_NONE (instead of u64::MAX) in the examples.

[0.8.0] - 2017-08-31

  • Initial release of the autogenerated GStreamer bindings. Older versions (< 0.8.0) of the bindings can be found here. The API of the two is incompatible.