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.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
andStaticPadTemplate
- Bindings for
deep-notify
signal onObject
- Support for directly creating
Error
/Warning
/Info
Messages
and posting them from an element with context information (file, line, module, etc.) similar to the CGST_ELEMENT_ERROR
macro - Support for setting custom fields in
Messages
/Events
during construction - Support for creating Buffers out of anything that is
AsRef<[u8]>
orAsMut<[u8]>
- Support for using the
Read
trait onAdapter
- Functions for getting all sink/src/all pads of an
Element
, and all children of aBin
- Builder for
Caps
andStructures
in addition to the existing functions AppSrc
/AppSink
implementBaseSrc
/BaseSink
andURIHandler
- 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 aroundOption<u64>
to handle theCLOCK_TIME_NONE
case better. This wrapper implements all the arithmetic and other traits as needed and ensures that no accidential calculations withCLOCK_TIME_NONE
can happen -
"Values with format", like in
Duration
/Position
/Convert
queries orSeek
events now return aFormatValue
type. This contains the actualFormat
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 implementClone
/Copy
anymore -
Property notify watches return a custom type instead of ulong
-
Error
/Warning
/Info
Messages
can only be created with specific kinds ofglib::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 nowglib::SendValue
instead, e.g. inCaps
andStructures
, as their content must be possible to send to different threads safely -
Message::get_src()
can returnNone
-
Allow
None
asCaps
inAppSrc
/AppSink
-
Allow everything implementing
Into<Option<&str>>
to be used as a pad name -
Moved
copy()
fromGstRc
directly toMiniObject
-
Success/Error enums (like
FlowReturn
,PadLinkReturn
,StateChangeReturn
) now implement aninto_result()
function that splits them into aResult
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.