gstreamer-base
Rust bindings for GStreamer Base library
0.25.3
8.7M downloads/mo
#3362 most downloaded on crates.io
source
What this package is like to depend on
Last release 1 months ago
29 Jun 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 43 of 44 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
46 releases · first in 2017
8 releases in the last 12 months
see the full history below
Release timeline
46 releases · Nov 2017 to Jun 2026Releases
latest 46-
0.25.329 Jun 2026Nothing published for this version
-
0.25.211 May 2026Release notes
Open source →Fixed
- Only enable
gst_allocators::FdAllocatoron UNIX platforms. - Add
gst::Padas parent class forgst_audio::AudioAggregatorPad. - Fix inverted logic in
gst_audio::AudioAggregatorPad::audio_info().
Changed
- Various new Rust 1.94 / 1.95 clippy warnings.
Added
gst_base::BaseParse::sink_caps()vfunc.- Bindings for various new 1.30 APIs.
Displayimpl forgst::PadFlags.- Various new API to
gst-mpegtsandgst-tag. Read+Seekimpl forgst::TypeFind.
- Only enable
-
0.25.020 Feb 2026Release notes
Open source →Fixed
gst_video::dma_drm_fourcc_to_string()doesn't do a NULL pointer dereference on invalid fourccs anymore.gst::Bus::timed_pop_filtered()timeout semantics are consistent with the C implementation now.gst_validate::setup_test_file()return value ownership semantics.- Fix
gst::Object::set_parent()behaviour and mark it asunsafe, and add a corresponding unsafeunset_parent(). - Allow construction of
gst_app::AppSinkwithdrop-out-of-segmentproperty.
Added
- Initial bindings for the gstreamer-vulkan library, including XCB and Wayland API support.
gst_audio::AudioChannelPositionimplementsDisplaynow.- Support for wrapping e.g. a
Vec<u8>in aMemoryorBufferand retrieving it again later with its original type. gst::Memory::default_alignment()for returning the default memory alignment.- Implement
Allocator::alloc()on the Rust wrapped memory allocator. gst::segtrap_is_enabled()/segtrap_set_enabled().gst::MiniObject::mark_may_be_leaked().gst_utils::StreamProducerevent types API for forwarding upstream events.gst_tag::image_data_to_image_sample().gst_taggot implementations for all the tags provided by the library.- Various missing
gst::Memory/gst::BufferAPIs that are rarely used.
Changed
-
Updated to gtk-rs-core 0.22 APIs.
-
Updated with final GStreamer 1.28.0 APIs and upcoming 1.30 APIs.
-
Updated minimum supported Rust version to 1.92.
-
Cleanup of
gst::Metatransform APIs. -
Change
gst_app::AppSrcmax-timeconfiguration to be non-optional. -
GES
AssetAPIs take generic type parameters now. -
gst_video::convert_sample()timeout parameter is optional now. -
gst::Allocatorsubclassing API was fixed to be actually usable.
-
0.25.0-alpha.205 Feb 2026 pre-releaseNothing published for this version
-
0.25.0-alpha.101 Jan 2026 pre-releaseNothing published for this version
-
0.24.528 Feb 2026Release notes
Open source →Added
- Add bindings for
gst::segtrap_is_enabled()andsegtrap_set_enabled(). - Add
gst::MiniObject::mark_may_be_leaked(). - Add bindings for
gst::DynamicTypeFactory. - Add bindings for
gst_tag::image_data_to_image_sample(). - Add bindings for all tags from
gst_tag. - Add various missing
gst::Memory/gst::Buffermethod bindings. - Add some missing message types to
gst::MessageType. - Add some more acccessors to
gst::Query,MessageandEventtypes.
Fixed
- Add assertions for invalid fourcc/modifiers in
gst_video::dma_drm_fourcc_to_string(). - Fix
gst::Bus::timed_pop_filtered()timeout semantics. - Fix return value ownership transfer in
gst_validate::setup_test_file(). - Fix setting
out-of-segmentvia thegst_app::AppSinkbuilder. - Fix setting user-set pad name being overwritten in
gst::GhostPadbuilder.
Changed
- Update to latest 1.28 and upcoming 1.30 APIs.
- Add bindings for
-
0.24.402 Dec 2025Release notes
Open source →Added
- Add
Buffer::try_into_inner()andMemory::try_into_inner()to extract a wrapped Rust value (e.g. aVec<u8>). - Add
Memory::default_alignment(), implementalloc()for the Rust allocator and addgst::rust_allocator()for getting a reference to the allocator.
Fixed
- Export
automodule ingstreamer-tagso thatTagImageTypeis actually accessible. - Fix
gst::Allocatorsubclassing API. This was not actually usable before and as such the fixing required a couple of breaking changes. - Fix docs build on docs.rs.
Changed
- Update
gst_analytics::AnalyticsBatchMetaandgst_validateto the latest API. - Fix various new clippy / compiler warnings.
- Various cleanups to wrapped memory implementation.
- Add
-
0.24.218 Sep 2025Release notes
Open source →Fixed
- Allow using
DMA_DRMandENCODEDformats withgst_video::VideoMetaandVideoInfoAPIs by improving / relaxing parameter validation. - Refer to
gst::IdStrby full path ingst::id_str!()macro.
Added
gst::MiniObject::downcast_ref()anddowncast_mut()that operate on the non-ref type.- More documentation and convenience constructors for
gst::formattypes. Defaultimpl forgst_appenums.gst_utils::StreamProducerposts an element message whenever buffers are dropped.gst_utils::StreamProducerhas new API to configure theappsrclimits and to configuresync=falseon theappsink.
Changed
- Update to latest GStreamer 1.28 APIs.
- Allow using
-
0.24.015 Jul 2025Release notes
Open source →Changed
- Compatible with gtk-rs-core 0.21 / gtk4-rs 0.10.
- Update GStreamer gir files to latest (upcoming) 1.28 APIs.
- Minimum support Rust version is updated from 1.71.1 to 1.83.
gst::Structurefields and fields of related API are usinggst::IdStrwhen built against GStreamer 1.26 and use a local implementation of that as fallback on older versions to offer the same API.- Rework of
gst_validateaction and action type API. - Rework of
gst_play::PlayMessageAPI to be easier to use correctly. - Remove
boolresult fromgst::BufferList::foreach()as return values are more flexibly handled via mutable variables captured by the closure. gst::Element::foreach_pad()returnsControlFlowinstead ofboolfrom callback now.- Return iterators instead of
Vecs from more functions. - Make
gst::event::SelectStreamsbuilder API for convenient. - Add
#[must_use]annotations to all iterator structs. - Return
gst_video::VideoInfoandgst_audio::AudioInforeferences from more functions instead of copies. - Change some
gst::Clockfunctions to not returnOptions anymore. - Change
gst_sdp::SDPMedia::set_media_from_caps()to a method. - Various
gst_allocatorsallocator API was moved to extension traits and renamed to not have the same name as a method of the parent class.
Added
- Allow setting generic properties as part of the
gst_app::AppSinkandAppSrc,gst::Binandgst::Pipelinebuilders. - Bindings for the
gstreamer-mselibrary. - Bindings for the
gstreamer-d3d12library.
Removed
- API deprecated in previous releases was removed.
gst_webrtc::DataChannelduplicated signal API was removed.
-
0.23.613 May 2025Release notes
Open source →Fixed
- Lower debug message level when allocation queries in subclasses fail.
- Catch panics from typefinders implemented in Rust.
- Use correctly aligned arrays in
gst_audiotests. - Drop pad probes and callbacks from
appsinkwhen releasing agst_utils::StreamProducer. - Leak in
gst::ElementImpl::parent_request_new_pad(). - Request a new keyframe from
gst_utils::StreamProducerwhen discarding a buffer.
Added
- Implement
gst::ByteSliceExtover allAsRef<[u8]>instead of just&[u8]and&mut [u8]. gst::Allocator::memory_type()getter.- Setters for
gst::AllocationParamsand implementCopy,PartialEqandEq. - New API for creating a
gst_audio::AudioInfoandgst_video::VideoInfobuilder from an existing value. - Setters for
gst_video::VideoAlignmentand implementDefault. - Implement
Default,CopyandCloneforgst::BufferPoolAcquireParamsand add setters. gst::ChildProxy::set_child_property_from_str()convenience API.gst::BufferList::drain()for iterating over a buffer list while draining it.gst_utils::StreamProducer::wait_for_keyframe()configuration.gst_utils::ConsumptionLinkgetter for the stream producer.- Bindings for
gst_taglanguage code API.
Changed
- Update various dependencies.
- Update to GStreamer 1.26.1 gir files.
-
0.23.517 Feb 2025Release notes
Open source →Fixed
- Properly validate
gst::IntRange::with_step()step size - Fix
gst::Bufferserde serialization - Forward gap events by default in
gst_utils::StreamProducer. - Correctly account for alternate interlace mode in
gst_video::VideoMeta::add_full(). - Return
Results instead ofbools in newgst_playAPI.
Added
- Support for
TracerImpl::USE_STRUCTURE_PARAMSwith GStreamer < 1.26. - Bindings for
gst_analytics::ODMtd. - Bindings for
TopSurroundRightandTopSurroundLeftaudio channels. - Bindings for AV1 and H266 codec helpers API.
- Bindings for
gst_audio::reorder_channels_with_reorder_map().
Changed
- Updated GStreamer gir files for latest 1.26 APIs.
- Documentation links URL was updated.
- Properly validate
-
0.23.421 Dec 2024Release notes
Open source →Fixed
gst_video::VideoFrame::plane_data()does not return a truncated buffer for the alpha plane in A420 and similar formats anymore.FnMutclosures are now correctly passed via a mutable reference to FFI code.- Order of arguments in
gst_video::VideoFormat::from_mask()was corrected.
Added
- Bindings for 1.26
gst_analytics::TensorAPI. gst::DebugCategory::as_ptr()andHashimpl,gst::DebugMessage::as_ptr().- Support for hex-dumping
&mut [u8]in addition to&[u8],gst::Buffer, etc. - Functions to work with meta
glib::Types.
Changed
- Updated GStreamer gir files for latest 1.26 APIs.
-
0.23.301 Nov 2024Release notes
Open source →Fixed
- Bind
gst::Pad::proxy_query_caps()to the correct C function. - Update
gst_utils::StreamProducerappsrc latency upon appsink latency event. - Fix type of
gst_app::AppSinkBuilder::processing_deadline().
Added
- Various new
gst::Iteratorconstructors for convenience.
Changed
- Updated GStreamer gir files for latest 1.26 APIs.
- Bind
-
0.23.228 Sep 2024Release notes
Open source →Fixed
- Lifetime of
gst::TagList::index()return value is correctly bound to&selfnow. - Don't assume
gst::Structurename / field names have'staticlifetime. - Set pad probe data to
NULLifHANDLEDis returned and the item is an event, buffer or buffer list. - Don't unnecessarily add
#[link]attribute to theextern "C"sections to allow linking against gstreamer-full and make static linking easier.
Changed
- Add
#[must_use]togst_video::VideoTimeCode::add_interval().
Added
- Add API to take events/buffers from a
gst::PadProbeInfo. - Add
gst::EventViewMutandgst::Event::view_mut(), and a few setters for event fields. - Add
gst::MessageViewMutandgst::Message::view_mut(), and a few setters for message fields.
- Lifetime of
-
0.23.127 Aug 2024Release notes
Open source →Fixed
- Support
gst_utils::StreamProducerAPI on platforms without 64 bit atomics. - Fix off-by-one in
gst::BufferList::remove()range end handling. - Pass an empty tag array instead of NULL in
gst::CustomMeta::register_simple(). - Fix various new clippy warnings.
Added
- Add getters for
gst::format::Percent.
- Support
-
0.23.011 Jul 2024Release notes
Open source →Changed
- Compatible with gtk-rs-core 0.20 / gtk4-rs 0.9.
- Update GStreamer gir files to latest (upcoming) 1.26 APIs.
- Minimum support Rust version is updated from 1.70 to 1.71.1.
- Move
gst::Metatags into separate modules and improve API around them. - Improve
gst::Metatransform functions and make the API more generic, and as part of that add support the video meta transform. - Pass an immutable instead of mutable output buffer reference to
gst_rtp::RtpHeaderExtension::write()function. - Make
gst_net::PtpClock::new()constructor fallible. - Change
gst_rtsp_server::RTSPTokenAPI to be consistent withgst::Structure, specifically add a builder. - Change
from_glib_ptr_borrow()functions to work with references instead of raw pointers for improved safety. - Improve code generation when building with
panic=abort. - Change
gst::BufferListAPIs to work with ranges instead of index+length. - Use various
usizeinstead ofu32for various indices ingst::Buffer,gst::Caps,gst::Structureand related APIs. gst::Clockcalibration-related API uses plainu64instead ofgst::ClockTimefor the clock rate.gst::debug!and related macros useobj = xinstead ofobj: xfor specifying the target object now. Similar forimpandid. The old syntax is still supported but deprecated. The new syntax works better with tooling, especially rustfmt.
Added
- Mutable access to the
gst_webrtc::WebRTCSessionDescriptionfields. gst::StructureBuilder::field_if_some()and the same for related builders to only set a value ifSome(x)is provided.gst::StructureBuilder::field_from_iter()andfield_if_not_empty()for various builders.gst::PadBuilderAPI for selecting an automatically generated name.- Adapter for the
logcrate around the GStreamer debug log system. This allows the macros from thelogcrate to be output via the GStreamer debug log system. - Bindings for the double click
gst_video::Navigationevent. - Bindings for
gst_pbutilsmissing/install plugins API. - Setters for
gst_editing_services::FrameCompositionMeta. ges::UriClipAsset::new().
-
0.22.619 Jun 2024Release notes
Open source →Fixed
- When logging with an id and a formatted log message this would previously panic.
- A couple of clippy warnings.
-
0.22.008 Feb 2024Release notes
Open source →Changed
- Compatible with gtk-rs-core 0.19 / gtk4-rs 0.8.
- Update GStreamer gir files to latest (upcoming) 1.24 APIs.
- Various standalone functions were moved to separate modules or methods.
gst::Rankis not implemented as an enum but as a struct with associated constants now.- Optimized
gst::Buffer::from_slice()andMemory::from_slice()implementations that have one heap allocation fewer. - Various
gst::Bufferandgst::Memoryfunctions take ranges now instead of offset/size parameters.
Added
- Bindings for
gst_gl::GLContext::thread_add(),GLFrameBuffer::draw_to_texture(). - New
gst_gl::GLVideoFrametype that replacesgst_video::VideoFramefor GL-specific API, and comes with mostly the same interface. - Basic gstreamer-tag bindings.
gst::Buffer:dump()anddump_range()together with the same API ongst::Memoryfor hex-dumping the whole buffer/memory content.- Implement
Cloneongst::MetaRef. - Bindings for
gst::Buffer::map_range_readable()and its writable variant. - Array-based accessor for
gst_video::VideoFrameandgst_audio::AudioBufferplane data. - Support for handling custom authentication in
gstreamer-rtsp-server. - Accessors for various base class struct fields.
- Owned buffer getter for
AudioBuffer/VideoFrame. gst_rtp::RTPSourceMetabindings.gst::macos_main()bindings.- gstreamer-analytics bindings.
Fixed
- API typo in owned
gst::ReferenceTimestampMetareference getter. - Allow variable expansion in
gst::loggable_error!macro. gstreamer-gl-*crates can build docs again on stable.
Removed
gst::Pad::caps()property getter. Usecurrent_caps()instead which does the same thing.- Various deprecated APIs that were deprecated in previous releases.
- Getter for a mutable buffer reference from
AudioBuffer/VideoFrameas that allowed invalidating the buffer map.
Fixed
-
0.21.211 Nov 2023Release notes
Open source →Changed
- Update GStreamer gir files to latest (upcoming) 1.24 APIs.
- Update to latest gir code generator from the gtk-rs 0.18 branch.
Fixed
- Big endian video format order is correct again.
gst::MetaRef::has_tags()andtags()API actually works and works based on the tags of the concrete meta instance.gst::MetaRef::tags()returns strings with arbitrary lifetimes now because they're statically stored anyway.- Fix another potential deadlock in
gst_utils::StreamProducerwhen sending force-keyunit events.
Added
- Bindings for
gst_video::VBIEncoderandVBIParser. - Accessors for the different
gst::PadProbeDatatypes onPadProbeInfo. Defaultimpl forgst::AllocationParams.From/TryFromimplementations between formatted types (e.g.gst::Bytes) andusize.gst::MetaRef::copy()to copy metas from one buffer to another.gst::ElementImpl::catch_panic_future()to wrap aFuturein such a way that panics are converted to GStreamer error messages and the element is marked as unusable.gst_gl::GLDisplay::handle()to get a raw display handle.
-
0.21.008 Aug 2023Release notes
Open source →Changed
- Minimum supported Rust version is updated to 1.70.0.
- Compatible with gtk-rs-core 0.18.
gst::Bin::add_many(),remove_many()andgst::Element::link_many(),unlink_many()are more generic now.gst_base::Aggregator::src_pad()returns anAggregatorPad.gst::Bus::add_watch()now returns a guard value that automatically removes the watch when it goes out of scope.gst::Bin,PipelineandPadconstructors don't take the optional name parameter anymore but it can instead be provided via the builder API.gst::PadandGhostPadbuilders inherit name from the pad template (or target) if possible and no other name is provided explicitly.- The preroll samples and selected sticky events are forwarded to
StreamProducerconsumers.
Added
- Support for the upcoming GStreamer 1.24 APIs.
- Support for inline variable names in format strings for error/warning/info messages.
- Methods for converting between floating point seconds and
gst::ClockTime. - Various additions to the gst-validate bindings.
Displayimplementations for error/warning/info messages.- More useful
Debugimplementations for messages, events and queries andgst_pbutils::DiscovererInforelated structs. - API for listing/checking
gst::Metatags.
-
0.20.705 Jul 2023Release notes
Open source →Fixed
- Fix
wait-for-eosproperty name string inappsink. - Fix various memory leaks in
BaseTransformsubclassing bindings. - Mark some GES APIs as
Send+Sync.
Added
- Implement
DiscovererInfo::debug()and on related structs.
- Add subclassing bindings for
GESFormatter.
- Fix
-
0.20.522 Apr 2023Release notes
Open source →Added
glib::HasParamSpecimpl for miniobjects to allow using them with the properties derive macro.Defaultimpl forgst_player::Player.
-
0.20.009 Feb 2023Release notes
Open source →Fixed
- Make
gst_gL::GLDisplay::create_context()other_contextparameter optional. - Make allocation query caps optional.
Added
- Conversions between
gst::Signed<T>andTand signed integer types. - Bindings for the object lock via
gst::Object::lock(). - Various
FromIterator,ExtendandFromimpls for creatingCaps,Structure,Buffer,BufferList,CapsFeaturesand other types. PartialEqimpls between owned/borrowed miniobjects/structures.- API for appending items to
gst::Arrayandgst::List.
Changed
- Compatible with the 0.17 gtk-rs release.
- Updated minimum supported Rust version to 1.64.
- Require GStreamer 1.22.0 or newer when enabling the
v1_22feature. - Require the object lock to be taken for various
gst_gl::GLDisplaymethods. - Renamed
gst::TagSetter::add()toadd_tags()to avoid name conflict withBin::add(). - Mark various un-extendable enums as exhaustive.
- Make use of
glib::GStrand related API in caps, structure, tags and logging API to reduce temporary string allocations. - Various code optimizations to reduce generated code size and allow more optimal code to be generated.
- Reduce size of various types, including reduction of
gst_audio::AudioInfofrom 832 to 320 bytes. - Use actual function name instead of module name in log output.
- Change
gst_utils::StreamProducerAPI to forward buffers by default and allow temporarily discarding via newset_discard()function.
- Make
-
0.19.328 Nov 2022Release notes
Open source →Added
FromIterator<Caps>andExtend<Caps>forCaps.PartialEqimpls between owned/borrowed miniobjects/structures.
Fixed
- Sticky event ordering for instant-rate-change.
Changed
- Updated GStreamer .gir files to post 1.22.2 release.
-
0.19.213 Nov 2022Release notes
Open source →Added
- Subclassing support for
gst::Allocator. gst_gl::GLBaseMemory::context()to retrieve the GL context used by the memory.
Changed
- Updated GStreamer .gir files to 1.22.2 release.
Fixed
gst::Allocator::register()does not cause use-after free with GStreamer < 1.20.5 anymore.- Don't generate version constants in
gstreamer-editing-services-sysas they are useless and change with every update.
Changed
- Fixed various new clippy warnings.
- Subclassing support for
-
0.19.124 Oct 2022Release notes
Open source →Changed
- Make it possible to use objects not just as reference in the logging macros.
-
0.19.022 Oct 2022Release notes
Open source →Added
-
Builders for element construction.
gst::ElementFactory::make()returns a builder now that allows to easily set the name or any other property at construction time. The old API is available asmake_with_name(). -
Builders for
BinandPipelineas well as aDefaulttrait implementation to simplify object construction. -
Builders for
appsrcandappsink, which allow type-safe construction of both elements while also allowing to easily set all their properties at construction time. -
Builders for the GStreamer-specific fraction/array param/property specs.
-
Infrastructure for casting between
gst::Memorysubtypes/supertypes, and make use of it for GL memory. -
Bindings for the
gstreamer-allocatorlibrary with support for file descriptor-based and DMABUF memory. -
Complete bindings for
gst_videoNavigationevents. -
Constructors for error/warning/info messages with a pre-built
glib::Error. This also leads to some minor simplification of the existing API. -
Accessors for static pads of various base classes for making accessing them cheaper and less error-prone than getting them by name.
-
Builder for pad templates.
-
Static PTP clock API for statistics, initialization and deinitialization.
-
New
gstreamer-utilscrate that currently contains only aStreamProducerAPI. This allows building 1:N bridges between live pipelines viaappsink/appsrcelements. -
Bindings for the new
gstreamer-playlibrary that was added in 1.20. -
gst::Caps::new_empty_simple()to create caps without fields and just a name. -
gst_audio::AudioCapsBuilderandgst_video::VideoCapsBuilderfor building (possibly) unfixed raw audio/videos caps with typed setters for the various fields. This makes it impossible to mix up types and e.g. use anu32instead of ani32for the width of video caps. -
gst::Buffer::ptr_eq()to compare buffers by pointer instead of doing a deep comparison, and alsoptr_eq()on all other miniobject types. -
Accessors for
gst_webrtc::WebRTCICECandidateStatsfields. -
Bindings for the
gstreamer-validateAPI. -
Subclassing bindings for
gst_audio::AudioVisualizerbase class for easily writing audio visualization elements. -
gst_pbutils::EncodingProfileAPI for element properties. -
Support for returning buffer lists from
BaseSrc/PushSrcsubclasses. -
Support for implementing
gst::Bin::do_latency(). -
Minimal bindings for the
gstreamer-mpegtslibrary.
Fixed
-
Signature for
gst_base::Aggregator::connect_samples_selected()to remove unnecessary generic parameter and make it straightforward to use. -
Various APIs had optional parameters/return types corrected to match the C API more closely.
-
Logging does not evaluate its arguments anymore if the debug category is not enabled or below the current threshold.
-
Registering custom metas is now possible without transform function.
-
gst::subclass::ElementImpl::request_new_pad()signature uses a&strinstead of an ownedStringnow.
Removed
-
fragiledependency and instead use the same functionality fromglib. -
gst_audio::AudioAggregatorignore_inactive_padsproperty, which was duplicated from theAggregatorbase class.
Changed
-
Compatible with the 0.16 gtk-rs release.
-
Updated minimum supported GStreamer version from 1.8 to 1.14.
-
Updated to the latest GStreamer 1.22 APIs while still supporting up to GStreamer 1.14. Any new 1.22 APIs might still change until the stable 1.22 release.
-
Updated minimum supported Rust version to 1.63.
-
In
EventView/QueryView, getters that return references now return references that can outlive the view and are only bound by the lifetime of the corresponding event/query. -
In addition
Query,EventandMessageviews are implemented more consistently now, which makes them easier to use and as a side effect allows to pass e.g. more strongly typed queries to functions that only accept a single query type. -
Various improvements to
gst::ClockTime,gst::format::Bytes,gst::format::Signedand related types and their usage in the API, which should make its use from applications easier and less error-prone. Check thegst::formatmodule-level documentation for details. -
gst::StreamsSelectedevent builder takes the selected streams as iterator instead of slice. -
For consistency with other macros the
gstprefix of the logging macros was also removed. -
Various iterator implementations were added and the existing ones were optimized by implementing more specialized traits and custom implementations for a couple of iterator functions.
-
GStreamer initialization safety checks were optimized.
-
gst::Bus::post()takes ownership of the passed messages like the C API. -
Better and easier to read
Debugimpls forCaps,TagList,StructureandPromise. -
ser_defeature was renamed toserde. -
gst::Tracerimplementations get result enums passed asResults now instead of single enums. -
gst::Pad,ProxyPad,GhostPaddefault functions are all associated functions instead of methods now to avoid conflicts between multiple types with the same method. -
Padtasks are catching panics from the task function and if the parent of the pad is an element then the panic is converted into an error message and the task is simply stopped. Otherwise the panic is rethrown.
-
-
0.18.016 Jan 2022Release notes
Open source →Added
gst_rtp::RtpHeaderExtension::read()andwrite().gst::ElementMetadatahas aconstconstructor now.gst_rtp::RtpBufferAPI works on buffer references instead of plain buffers for statically enforcing writability and usage in more places.gst_video::VideoCodecAlphaMetaandgst::CustomMeta.gst::MiniObjectfor generically passing around mini objects instead of their concrete types.gst_app::AppSinknew-eventcallback andpull_object()function.gst_pbutils::PbUtilsCapsDescriptionFlagsandpb_utils_get_caps_description_flags().gst_rtp::RtpBuffer::remove_extension_data().gst_video::VideoDecodersubframe API.gst_webrtc::WebRTCSCTPTransport.gst::ElementFactorycreate_with_properties()/make_with_properties().gst_video::VideoContentLightLevelandVideoMasteringDisplayInfofor HDR signalling.- Lots of missing
GESAPI. gst::AllocationParamsand support in the allocation query.propose_allocation()anddecide_allocation()support in the various base classes.Iteratorimplementation forgst_video::VideoOverlayComposition.Extend,IntoIteratorandFromIteratorimplementations forBuffer,Caps,BufferList,CapsFeatures,StreamCollectionandStructurefor more natural Rust APIs.instant-rate-changeevents/messages bindings.- Support for arithmetic operations on
Option<gst::ClockTime>and related types. gst_video::ColorBalance.gst::MetaFlags.gst_base::Aggregator::set_position().- Convenience getters for
gst::ElementFactoryandgst::DeviceProviderFactorymetadata. gst_rtp::RtpBuffer::set_padding(),get_padding()andpayload_mut().#[must_use]to many types and functions.gst::Event,gst::Messageandgst::Structurehas_name().gst_video::Navigationsubclassing support and API improvements.gst::Structureandgst::Capsforeach(),map_in_place()andfilter_map_in_place().gst_gl::GLBufferPooland various GL constants and functions.gst_pbutilscodec utils APIs.
Fixed
gst_base::BaseTransform::prepare_output_buffer()correctly reflects buffer writability.
Changed
- Compatible with the 0.15 gtk-rs release.
- Updated to the latest GStreamer 1.20 APIs while still supporting up to GStreamer 1.8. Any new 1.20 APIs might still change until the stable 1.20 release.
- Update all code to the Rust 2021 edition. This causes no user-facing changes.
gst::Sample::segment()returns a reference instead of a copy of the segment.gst::Object::set_property_from_str()returns aResultnow instead of silently failing like the C version.- Allow handling passed in buffers in
gst_base::PushSrc::create. - Allow passing in
Noneingst_player::Player::set_uri(). - Use
[[f32; 4]; 4]instead of[f32; 16]for affine transformation matrix. gst::Pad::sticky_event()statically gets the event of the requested type instead of requiring to match on it afterwards.- Clean up
gst_pbutilsEncodingProfileAPI to be harder to misuse and less confusing. - Various
gst::Array,gst::List,gst::IntRangeandgst::FractionAPI improvements that should reduce some friction. - Directly generate
NUL-terminated C strings in debug log API instead of having multiple allocations per message. - Various functions return
glib::SListandglib::Listnow to avoid copying into aVecif only iteration is needed. gst::ChildProxyAPI is more consistent with object property API.- Improved
gst::Buffer::foreach(),gst::Pad::sticky_events_foreach()andgst::BufferList::foreach()APIs. - Don't post error messages from
propose_allocation()anddecide_allocation().
-
0.17.205 Aug 2021Release notes
Open source →Fixed
- Various new clippy warnings.
- Compilation of
gstreamer-audioon big-endian platforms.
Added
- Support for 1.20
GapeventGapFlags. - Support for 1.20
Structure::serialize()/Caps::serialize().
-
0.17.028 Jun 2021Release notes
Open source →Fixed
- Use
#[repr(transparent)]where it is more correct and remove unneeded#[repr(C)]annotations. - Don't provide direct access to the logged object in logging functions as the object might currently be finalized and might be unsafe to access.
- Moved X11/EGL/Wayland-specific GL APIs into their own crates instead of having them inside gstreamer-gl and behind feature flags. This simplifies conditional usage of them in applications.
- Various nullability issues: parameters and return values that should've been or shouldn't have been nullable were fixed.
- Print source object correctly in
gst::MessageDebugimpl. gst_rtsp_server::RTSPServer::attach()is fallible.gst::ElementFactoryListTypeis a proper bitflags type now instead of genericu64.gst::PluginFeature::load()returns the same type as the one passed in.- Value returned by
gst::PromiseFuturecan no longer be freed while still in scope. - Only assign to
GError**s in subclassing code if they're notNULL.
Added
- Bindings for the GStreamer Controller library and the corresponding core API.
- Subclassing support for
gst_player::PlayerVideoRenderer. gst::PARAM_FLAG_CONTROLLABLEand related bindings.gst_video::VideoOrientationandVideoOrientationMethodbindings.- Support for removing pad probes from inside the pad probe callback.
gst_check::Harness::pull_until_eos()bindings.ges::TransitionClipandOperationClip.- Bindings for
gst_gl::GLMemoryand related APIs. - Subclassing support for
gst_gl::GLFilterandgst_gl::BaseSrc. gst::TagList::remove().gst::CapsFeaturesandgst::StructureAPI based onglib::Quarks instead of strings.- Subclassing support for
gst_video::VideoFilter. - Bindings for various new 1.20 APIs:
gst_app::LeakyType,gst_video::VideoDecoderRequestSyncPointFlags,gst_rtp::RTPHeaderExtension,gst_audio::AudioLevelMeta,gst_webrtc::WebRTCKindand various other new flags/enum types. - Subclassing support for
gst_rtsp_server::RTSPMountPoints.
Removed
- Deprecated APIs in 0.16.
- Don't declare that
gst_app::AppSinkandAppSrcinherit fromgst_base::BaseSinkandBaseSrcto avoid exposing API that is meant for subclasses to applications. gst_app::AppSrcandAppSinksignals that are also covered by the callbacks. The callbacks are more flexible and have lower overhead.- Duplicated getters/setters for
gst_base::BaseSinkandBaseTransformproperties.
Changed
- Compatible with the 0.14 gtk-rs release.
- Updated to the new GStreamer 1.20 APIs while still supporting up to GStreamer 1.8. Any new 1.20 APIs might still change until the stable 1.20 release.
- FFI and safe high-level bindings are in the same repository now and use the same version numbers.
- The .gir files are shared with gtk-rs and the GStreamer-specific ones are in a separate git submodule.
- Update all code to the Rust 2018 edition. As part of this, most macros lost
their
gst_prefix. - Re-export dependency crates from the different preludes.
- Getter functions don't have a
get_prefix anymore and GObject property accessors don't include the_property_part in the middle of their function names anymore. Applications developers should usefix-getters-callsto ease migration of their applications. Usefix-getters-defif you also want yourgetfunctions definition to comply with the API standards applied in this release. - Lots of changes to the subclassing API. Check the various elements in gst-plugins-rs for examples.
- Major improvements to the documentation infrastructure and generated documentation.
gst::ClockIDbindings are refactored to use different types for single-shot and periodic clock ids, which makes misuse harder.gst::ProxyPadextension trait uses trait functions instead of associated functions now for usability reasons.- Use
Result<gst::FlowSuccess, gst::FlowError>for overriding flow returns from pad probes. gst_video::VideoInfo::align()returns aResultinstead of abool.- Use actual error types instead of
()ingst_sdpAPIs. Displayimpl forgst::ClockTimeprovides better human-readable strings.gst::Element::link_filtered()andlink_pads_filtered()takes a non-optional caps now. That's easier to use and for not providing caps the non-filtered variants of the functions exist.- Replace various manual bindings with auto-generated ones.
gst::Element::get_request_pad()is replaced byrequest_pad_simple()as a simpler version ofrequest_pad()and in accordance with the deprecation in GStreamer 1.20.gst::ClockTimeand APIs working on it were changed to make possibility of usingGST_CLOCK_TIME_NONEexpressed in the type system.Option<gst::ClockTime>can beNonewhilegst::ClockTimeis always a valid time.
- Use
-
0.16.523 Nov 2020Release notes
Open source →Fixed
- Make sure to use
$cratein more macros to allow them to work without anything special in scope already. - Update documentation location.
- Don't panic if C code stores invalid seqnums in events and the seqnum is
used directly or via the
Displayimpl. - Fix docs build for some crates on docs.rs.
- Fix
Debugimpl forgst_video::VideoTimeCodeto print the correct type name. - Fix plugin version to be 1.18 instead of 1.17 when compiling a plugin with
v1_18.
Added
- Event handling support in pad probes, that is returning
PadProbeReturn::Handledfor events. EventRef::get_structure_mut()getter that allows changing the events' structures.
Changed
- Remove unnecessary
PhantomDatamarkers and userepr(transparent)instead ofrepr(C)where it is more correct.
- Make sure to use
-
0.16.308 Sep 2020Release notes
Open source →Fixed
- Reset vfuncs if calling
BaseTransformClass::configure()multiple times. - Fix
gst::debug_remove_default_log_function()to actually remove the default log function.
Added
- Some more new APIs added in 1.18.
- API for getting an owned buffer from a readable
gst_video::VideoFrame/VideoFrameRef.
Changed
- Updated bindings to 1.18.0. This stabilized GStreamer 1.18 support and any API behind the "v1_18" feature is considered stable now.
- Factor out some common code from
gst::Pad::ProbeInfocode. This reduces the code generated for each pad probe considerably. - Update paste dependency to 1.0 and pretty-hex to 0.2.
- Reset vfuncs if calling
-
0.16.006 Jul 2020Release notes
Open source →Added
- Updated bindings to 1.17.2, adding experimental 1.18 support. This can be opted-in via the "v1_18" feature flag but there might still be API changes in the newly added API.
gst::MemoryRef::dump()for dumping contents of a memory.gst::Bus::stream()instead of a custom constructor on theBusStream.- Use more accurate types for
Seqnum,GroupIdandMetaSeqnum. These are now proper wrapper types instead of plain integers, which makes misuse harder. - Provide
TryFromimpls for conversion betweenglib::DateTimeandgst::DateTime. - Add
get_allocator()functions togst_base::{Aggregator, BaseTransform, BaseSrc}, and allow overridingBaseSrc::alloc(). - Add subclassing bindings for
gst_base::PushSrc. - Add new
gst::BufferCursorAPI that allows to handle a buffer asRead,WriteandSeekand accesses the underlying memories of the buffer individually without mapping them all together. - Add
gst::Plugin::get_plugin_name(). - Support for
gst_video::VideoAFDMetaandVideoBarMeta. - API for getting all / iterating over all
gst_audio::AudioFormatandgst_video::VideoFormat. - Bindings and subclassing bindings for
gst_video::VideoSink. gst::Padcan be constructed via the builder pattern andgst::PadBuildernow, which allows to safely set the pad functions and various other fields during construction. ThePadBuilderworks on anygst::Padsubclass and also has special support forGhostPads by allowing to set pad functions of the proxy pad.gst::Message,gst::Eventandgst::Querytype constructors are now on the specific target type instead of variousnew_XXX()functions on the basic type. E.g.gst::message::Eos::new().- Support for overriding
gst_audio::AudioSrc/Sink::reset(). - Support for overriding
gst_base::BaseParse::stop(). - Support for overriding
gst::Element::post_message(). - Added bindings for
gst::BufferList::foreach()andforeach_mut(). - Added bindings for
gst::Buffer::foreach_meta()andforeach_meta_mut().
Fixed
- Allow using any
glib::Objectas target object for logging instead of justgst::Object. - Remove restriction API from
gst_pbutils::EncodingContainerProfile. They are supposed to be used only with the other encoding profiles. - Return
&'static strfor variousgst::StructureReffunctions where the string is backed by aglib::Quark. - Fix various
gst::DateTimefunctions to actually returnOptions. - Add support for filling in a buffer passed to the
gst::Padgetrange function, allow passing one in intoget_range()andpull_range()and provide the corresponding API ongst_base::BaseSrctoo. - Allocator in audio/video
Decoderbase classes is optional and can returnNone. gst_video::ValidVideoTimeCode::add_interval()always returns a valid timecode again.- Allow resolving a
gst::PromisewithNoneand also handle that correctly in the callback. This is allowed by the API. - Allow calling various debugging related functions before
gst::init(). - Various enum/function versions were fixed to only show up if the corresponding version feature is enabled.
gst::Padfunction setters are marked unsafe now as changing the functions is not thread-safe.- Remove
gst::Object::set_name()as changing the name after construction generally causes problems and is potentially unsafe. - Remove
gst::Pad::set_pad_template()as changing the pad template after construction is generally unsafe. gst::Pad::stream_lock()borrows the pad now instead of taking a new reference.- Unimplemented
JitterandBufferqueries were removed from the bindings. These are not implemented in C and only have a type registered. - Various
LAST,NONEvariants of enums and flags were removed as these only make sense in C. - Call the parent impl of various vfuncs that were omitted before to not require further subclasses of them to implement them but automatically call the parent ones.
Changed
- Use
NonZeroU64/U32for various ID types to allow further optimizations. - Use
thiserrorcrate for deriving error types. - Switch from
lazy_statictoonce_cell. - Change various miniobject functions like
gst::Caps::append()from taking the object by value to modifying it internally. This makes them easier to use and only applies to functions that are defined on the non-reference type and take ownership of the values passed in. - Use
mem::ManuallyDropinstead ofmem::forget()everywhere. - Replace most
mem::transmute()calls with safer alternatives. gst:StreamCollectionAPI was changed to the builder pattern for construction as the collection must not be changed after construction.gst::ProxyPaddefault functions are plain functions onProxyPadnow instead of trait functions to allow easier usage of them.- Use proper error types in various
TryFromimpls. gst_video::VideoMeta::add()returns aResultnow instead of panicking.- Various constructors were renamed from
new_with_XXX()andnew_from_XXX()to the more idiomaticwith_XXX()andfrom_XXX(). - Miniobject bindings are simplified now and there is no
gst::GstRctype anymore, instead everything is directly implemented on the concrete types. As part of this thegst::MiniObjecttrait was also removed as it was unneeded now.
-
0.15.410 Mar 2020Release notes
Open source →Fixed
- Allow logging any
glib::Objectand not justgst::Object - Fix floating reference handling in
RTSPMedia::take_pipeline() - Hold
GMutexguards for the remainder of the function and warn if they're directly dropped - Work around empty/any caps handling bugs in
Caps::fixate()
Added
- Add
BaseTransform::prepare_output_buffer()subclassing support RTSPServer,RTSPClient,RTSPMediaandRTSPMediaFactorysubclassing support- Handle panicking in
appsrc/appsinkcallbacks by posting an error message instead of killing the process
- Allow logging any
-
0.15.315 Feb 2020Release notes
Open source →Fixed
UniqueFlowCombiner::clear()should take a mutable reference.AudioStreamAligndoesn't require mutable references for getters anymore.- Don't use bool return value of
gst_video_info_set_format()andgst_video_info_align()with GStreamer < 1.11.1 as it returned void back then. We'd otherwise use some random value. - Make
VideoInfo::align()is available since 1.8. - Fix changing/clearing of
AppSrc,AppSinkcallbacks andBussync handler. Before 1.16.3 this was not thread-safe and caused crashes. When running with older versions changing them causes a panic now and unsetting the bus sync handler has not effect. With newer versions it works correctly.
Added
- Add
Cloneimpls forBufferPoolConfigandPlayerConfig. - Add
VideoConverterbindings. - Add
Futures variant forgst::Promiseconstructor. - Add
Futures variant forgst_video::convert_sample_async(). - Add
submit_input_buffer(),generate_output(),before_transform(),copy_metadata()andtransform_meta()virtual method support forBaseTransform. - Add
AppSinkStreamadapter andAppSrcSinkadapter for integrating both into Rust async contexts.
Changed
- More generic implementations of
VideoFrame/VideoFrameReffunctions to allow usage in more generic contexts.
-
0.15.018 Dec 2019Release notes
Open source →Added
StructureRef::get_optional()for returningNoneif the field does not exist instead ofErr- Bindings for
gstreamer-rtplibrary, mostlyRTPBuffer - Support for writing
Preset,TagSetter,Clock,SystemClocksubclasses - Bindings for
Typefind::get_length() - Bindings for
BaseSrcImpl::get_times() - Bindings (incl. subclassing) for
AudioSinkandAudioSrc - Missing
Send/Syncimpl for various types
Fixed
- Cleanup of cargo features/dependencies to improve build times
- Serde serialization with optional values. Attention: This changes the format of the serialization!
VideoEncoder/VideoDecoderproxy_getcaps()can't returnNone- Use non-panicking UTF8 conversion in log handler. We don't want to panic just because some C code printed a non-UTF8 string
- Re-rexport all traits from the crate level and also ensure that all traits are actually included in the preludes
- Actually export
is_video_overlay_prepare_window_handle_message()function - Use
FnMutfor theappsinkcallbacks instead ofFn Promisechange function returns the actual reply to the promise now instead of just passing the promise itself- Memory leak in
Iterator::filter() BinImpl::add()takes ownership of floating referencesDeviceImpl::create_element()preserves floating flagBinImpl::remove()takes a strong reference of the element now as the last reference might be owned by the bin and otherwise we would potentially have a use-after-free afterwardsBaseParseFrameandVideoCodecFrametake a&mut selfnow for various functions that actually change the frame
Changed
- Minimum supported Rust version is 1.39
- Allow passing
NonetoVideoEncoder::finish_frame() - Various
to_string()methods were moved into theDisplaytrait impl and for some typesto_str()was added to return a&'static str - .gir files were updated to 1.16.2 release
Sampleconstructor uses the builder pattern nowVideoMeta::add_full()is simplified and requires parametersBasetransformImpl::set_caps()returns aResultinstead ofbool- SDP data type getters for strings return an
Optionnow as these can beNonein practice although not allowed by the SDP spec - Various functions returning
Options were changed to returnResultsifNoneactually signalled an error instead of just a missing value
Removed
- "subclassing" and "futures" cargo features. These are enabled by default now
-
0.14.414 Aug 2019Release notes
Open source →Added
- Bindings for adding/removing custom log functions
- Bindings for
calculate_linear_regression() - Constants for base class custom flow returns
Fixed
- Ownership of pad in
Element::release_pad()virtual method implementations
-
0.14.024 Jun 2019Release notes
Open source →Added
- Bindings for
GLSyncMeta. - Bindings for setting/getting
TagScopeon aTagList - Bindings for
GLDisplayWaylandandGLDisplayX11in addition to the already existingGLDisplayEGL - Bindings for
Bus::pop_filtered()and related functions - Bindings for getting/setting
Object,Element,Bin,PipelineandPluginflags - Bindings for
VideoCaptionMeta Debugimpl ofBuffernow also shows the metas of the buffers- Expose flow return in
PadProbeInfofor overriding the return value - Bindings for
VideoDecoderandVideoEncoder, including subclassing support - Bindings for
Memory,AllocatorandVideoBufferPool - Bindings for
VideoFormatInfo::packand::unpackfor format conversion - Bindings for
BaseParse, including subclassing support - Various new arithmetic operation impls for fractions, formatted values and
ClockTime - Bindings for
VideoInfo::align()
Changed
- The
SDPMessageandSDPMediabindings were completely rewritten as they were broken before and caused crashes in various usages. As part of this there's also some more convenience API available on these types, like iterators for example, and API to modify theSDPMediacontained in aSDPMessage. - Update to GStreamer 1.16.
- Regenerate with latest gir.
- Run all autogenerated code through rustfmt after generation too.
- Updated to latest versions of GLib/GIO/etc crates.
- Updated to futures 0.3 /
std::future ProxyPaddefault functions moved to an extension trait instead of plain functions onProxyPad, making them more in sync with the defaultPadfunctions- GStreamer plugins are now exporting the new 1.14+ plugin symbols if they were configured for GStreamer 1.14+
- Arithmetic operations on formatted values and
ClockTimedo overflow checks now and replace the result with theNONEvalue on overflow TryFrom/TryIntotraits are used in various places now instead of the previous ad-hoc implementations of them.- Registering element/typefind/device monitor factories requires passing a
value of
gst::Ranknow instead of an arbitraryu32
Fixed
- Use correct type for destroying pad task closure data. This was previously using the wrong type, causing crashes at runtime.
DeviceAdded/DeviceRemovedmessage getters are transfer full so we don't need to take an additional reference that would be leaked.AppSinkcallbacks are correctly marked asSendinstead ofSend+Sync, allowing a wider range of closures to be used for them.- Handle
PadProbeReturn::Handledreturn values from pad probes more correctly. ToOwned::to_owned()on miniobjects has to create copies instead of only increasing the reference count. Otherwise it was possible to create multiple mutable and immutable references to the same object at the same time.- Various functions take references to owned miniobjects instead of borrowed references as it was otherwise possible to create multiple mutable or immutable references to the same object at the same time.
URIHandler::set_uridoes not acceptNoneanymore as this is not allowed by the C function.- Comparisons and addition of
TypeFindProbabilityandRankwork correctly now - Various
Displayimplementations were fixed to not cause a stack overflow due to infinite recursion anymore - Various
::to_string()functions don't take ownership of C strings anymore that they do not own, which caused double frees before
Removed
- MIKEY related bindings from the SDP library. The bindings were broken and until someone needs them these are not available anymore.
- Bindings for
-
0.13.022 Feb 2019Release notes
Open source →Added
- Subclassing infrastructure was moved directly into the bindings,
making the
gst-plugincrate deprecated. This involves many API changes but generally cleans up code and makes it more flexible. Take a look at thegst-plugins-rscrate for various examples. - Bindings for GStreamer GL library
- Bindings for
CapsFeaturesandMeta - Bindings for
ParentBufferMeta,VideoMetaandVideoOverlayCompositionMeta` - Bindings for
VideoOverlayCompositionandVideoOverlayRectangle - Bindings for
VideoTimeCode - Bindings for
NetAddressMeta - Bindings for registering custom tags
UniqueFlowCombinerandUniqueAdapterwrappers that make use of the Rust compile-time mutability checks and expose more API in a safe way, and as a side-effect implementSyncandSendnowBus::add_watch_local()andgst_video::convert_frame_async_local()that allows to use a closure that does not implementSendbut can only be called from the thread owning the main context.- More complete bindings for
AllocationQuery pbutilsfunctions for codec descriptionsTagList::iter()for iterating over all tags while getting a single value per tag. The old::iter_tag_list()function was renamed to::iter_generic()and still provides access to each value for a tagBus::iter()andBus::iter_timed()iterators around the corresponding::pop*()functions- Getters for
VideoColorimetryto access its fields Debugimpls for various missing types.- serde serialization of
Valuecan also handleBuffernow - Extensive comments to all examples with explanations
- Transmuxing example showing how to use
typefind,multiqueueand dynamic pads - basic-tutorial-12 was ported and added
Changed
- Rust 1.31 is the minimum supported Rust version now
- Update to latest gir code generator and glib bindings
- Functions returning e.g.
gst::FlowReturnor other "combined" enums were changed to return split enums likeResult<gst::FlowSuccess, gst::FlowError>to allow usage of the standard Rust error handling. - Various functions and callbacks returning
boolorOption<_>were changed to return aResult<_, glib::BoolError>orResult<_, gst::LoggableError>orResult<_, gst::ErrorMessage>for better integration with Rust's error handling infrastructure. - Some infallible functions returning
boolwere changed to return(). MiniObjectsubclasses are now newtype wrappers around the underlyingGstRc<FooRef>wrapper. This does not change the API in any breaking way for the current usages, but allowsMiniObjects to also be implemented in other crates and makes surerustdocplaces the documentation in the right places.BinExtextension trait was renamed toGstBinExtto prevent conflicts withgtk::Binif both are importedBuffer::from_slice()can't possible returnNone
Fixed
gst::tag::Albumis the album tag now instead of artist sortname- Return
0for the channel mask corresponding to negativeAudioChannelPositions. PartialOrdand related traits are implemented via pointer equality onClockIdinstead of using the compare function. Two clock ids with the same timestamp are not necessarily the same.- Various functions that are actually fallible are now returning an
Option<_>. - Various
clippywarnings
- Subclassing infrastructure was moved directly into the bindings,
making the
-
0.12.226 Nov 2018Release notes
Open source →Fixed
- PTP clock constructor actually creates a PTP instead of NTP clock
Added
- Bindings for GStreamer Editing Services
- Bindings for GStreamer Check testing library
- Bindings for the encoding profile API (encodebin)
- VideoFrame, VideoInfo, AudioInfo, StructureRef implements Send and Sync now
- VideoFrame has a function to get the raw FFI pointer
- From impls from the Error/Success enums to the combined enums like FlowReturn
- Bin-to-dot file functions were added to the Bin trait
- gst_base::Adapter implements SendUnique now
Changed
- All references were updated from GitHub to freedesktop.org GitLab
- Fix various links in the README.md
- Link to the correct location for the documentation
- Remove GitLab badge as that only works with gitlab.com currently
-
0.12.009 Sep 2018Release notes
Open source →Added
- Bindings for the GStreamer SDP and WebRTC libraries
- Generic API for working with tags that is based on string tag names and glib::Value for the tag values
- Bindings for Aggregator and AggregatorPad
- Bindings for BaseTransform/BaseSrc::get_buffer_pool()
- Optional serde implementations for the basic GStreamer data flow and metadata types
Changed
- Use ptr::NonNull in various places
- Updated to muldiv 0.2, num-rational 0.2
- Bus::create_watch() can't return None
- Remove CallbackGuard as unwinding across FFI boundaries is not undefined behaviour anymore but will directly cause a panic
- Changed from the futures to the futures-preview crate as an optional dependency
- Various Caps operations take a &CapsRef instead of &Caps
- "deep-notify" signal takes the whole ParamSpec as parameter instead of only the signal name
- Some structs were changed from empty struct to empty enums
- Pad probe code does not take an additional reference to the data anymore, potentially passing writable events/buffers into the probe
- ValueExt::compare() is implemented around std::cmp::Ordering now instead of a custom enum that was basically the same
Fixed
- Pad::add_probe() can return None if an IDLE probe was already called and removed in the meantime
- Various compiler and clippy warnings
Removed
- std::Iterator impl for gst::Iterator. It was awkward to use because the gst::Iterator could fail at each iteration
-
0.11.020 Mar 2018Release notes
Open source →Changed
- Updated everything to GStreamer 1.14.0
- Event, Message and Query types were refactored to improve usability. Especially newly constructed queries allow to directly use the type-specific functions to be used without first creating a view
- VideoFrameRef::copy_to_ref() and ::copy_plane_to_ref() are gone now and the original functions work with refs instead of full frames
- PadProbeId and NotifyIds are not Copy/Clone anymore and are taken by value
- GstPlayer has GstObject as parent class now
Added
- GstPbutils, GstSdp, GstRtsp and GstRtspServer bindings
- GstPromise, GstAudioStreamAlign and various other 1.14 API
- GstVideoFilter and GstBufferPool bindings
- Element::call_async()
- Debug impl For Toc and TocEntry
- Various new examples (RTP FEC, RTSP server, tag usage, ...)
Fixed
- Memory leak in gst_video::convert_sample_async()
-
0.10.218 Feb 2018Release notes
Open source →Fixed
- Fix building of messages with custom fields for types that don't have a GstStructure
Added
- VideoFrameRef::copy_to_ref() and ::copy_plane_to_ref(), which work with VideoFrameRefs instead of full VideoFrames
- Getters for the BaseSrc/Sink/Transform configured segment
- Document the gstreamer-player-1.0 dependency in the README.md
-
0.10.103 Jan 2018Release notes
Open source →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.022 Dec 2017Release notes
Open source →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.026 Nov 2017Release notes
Open source →Added
- Bindings for (outputting to) the GStreamer logging system
- Bindings for the GStreamer base library
- Bindings for all the
Padfunctions to override pad behaviour, and pad task functions - Bindings for
StaticCapsandStaticPadTemplate - Bindings for
deep-notifysignal onObject - Support for directly creating
Error/Warning/InfoMessagesand posting them from an element with context information (file, line, module, etc.) similar to the CGST_ELEMENT_ERRORmacro - Support for setting custom fields in
Messages/Eventsduring construction - Support for creating Buffers out of anything that is
AsRef<[u8]>orAsMut<[u8]> - Support for using the
Readtrait onAdapter - Functions for getting all sink/src/all pads of an
Element, and all children of aBin - Builder for
CapsandStructuresin addition to the existing functions AppSrc/AppSinkimplementBaseSrc/BaseSinkandURIHandler- 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
StackTraceFlagsare only available since 1.12- Worked around macOS requiring a
NSRunLooprunning on the main thread in all examples and tutorials, to be able to show a window or anything else
Changed
ClockTimeis now a wrapper aroundOption<u64>to handle theCLOCK_TIME_NONEcase better. This wrapper implements all the arithmetic and other traits as needed and ensures that no accidental calculations withCLOCK_TIME_NONEcan happen- "Values with format", like in
Duration/Position/Convertqueries orSeekevents now return aFormatValuetype. This contains the actualFormattogether with the value and does any required conversions. This also makes it harder to accidentally mix e.g. values in bytes and time PadProbeIddoes not implementClone/Copyanymore- Property notify watches return a custom type instead of ulong
Error/Warning/InfoMessagescan only be created with specific kinds ofglib::Errornow. Using arbitrary ones does not workIteratorbindings were completely rewritten and provide the item type as a generic type parameter now, greatly simplifying its usage- All
glib::Valuesare nowglib::SendValueinstead, e.g. inCapsandStructures, as their content must be possible to send to different threads safely Message::get_src()can returnNone- Allow
NoneasCapsinAppSrc/AppSink - Allow everything implementing
Into<Option<&str>>to be used as a pad name - Moved
copy()fromGstRcdirectly toMiniObject - Success/Error enums (like
FlowReturn,PadLinkReturn,StateChangeReturn) now implement aninto_result()function that splits them into aResultwith the good and bad cases. Also mark them as#[must_use]to make it harder to accidentally ignore errors. - Error enums implement the
Errortrait - Many examples use the
failurecrate for error handling now, cleaning up the error handling code quite a bit - Lots of other code cleanup, compiler/clippy warning cleanup, etc.