gstreamer-video
Rust bindings for GStreamer Video library
0.25.3
7.2M downloads/mo
#3734 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 6 weeks
Nearly every release is documented
notes for 72 of 74 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
76 releases · first in 2017
9 releases in the last 12 months
see the full history below
Release timeline
76 releases · Aug 2017 to Jun 2026Releases
latest 60 of 76-
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.331 Oct 2025Release notes
Open source →Added
gst_video::is_dma_drm_caps()helper function.gst_tag::TagImageTypeenum.gst::ControlBindingproperty_name()andproperty_pspec()accessors.- Remove some unused imports and dead code warnings on macOS.
- New
gst_controller::TimedValueControlSource::list_control_points()1.28.
Changed
ges::TimelineElementaccepts anyInto<glib::Value>inset_child_property()now.
-
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.110 Aug 2025Release notes
Open source →Fixed
- Removed incomplete offset/stride checks in
gst_video::VideoInfobuilder. - Various new 1.89 clippy warnings
- Mark allocator used by
gst::Memory::from_slice()and related API asMAY_BE_LEAKEDas it's a singleton and otherwise shows up in the leaks tracer, for example. - Don't unnecessarily check if validate is initialized to build action types.
Added
- Added
gst_video::VideoMeta::add_from_info()that takes aVideoInfoinstead of individual parameters.
- Removed incomplete offset/stride checks in
-
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.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.818 Oct 2024Nothing published for this version
-
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.523 May 2024Release notes
Open source →Fixed
- A couple of clippy warnings and compiler warnings about unused imports with latest rustc.
- Memory leak in builder for the
SelectStreamsevent. - Add parameter validity assertions to various
BufferListandCapsAPIs where these assertions were missing to avoid assertions in C.
Added
StreamProducer::set_forward_preroll()API to configure if the preroll buffer should be directly forwarded or not yet.
Changed
- Remove nonsensical gstreamer-video test that fails with latest GStreamer main.
- Update to itertools 0.13.
-
0.22.408 Apr 2024Release notes
Open source →Added
- Implement
From<glib::Value>/ToValueforgst_audio::AudioConverterConfigandgst_video::VideoConverterConfig.
Changed
- Fixed various 1.77 clippy warnings.
- Implement
-
0.22.113 Feb 2024Release notes
Open source →Changed
- Update GStreamer gir files and add more new 1.24 API.
Fixed
- Make
AnalyticsODLocationstruct fields public. MetaRefMut::upcast_mut()returns a mutable reference now.
-
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.104 Oct 2023Release notes
Open source →Changed
- Update GStreamer gir files to latest (upcoming) 1.24 APIs.
Fixed
- Use correct media links in the tutorials code.
- Fix a couple of new 1.72/1.73 clippy warnings.
- Fix description of gstreamer-validate crate.
- Copyright/license files for the gstreamer-gl were added.
- Ordering of raw video formats follows the rules of latest libgstvideo now.
- Fix potential deadlock in
gst_utils::StreamProducerwhen sending force-keyunit events.
Added
max-time/max-bytessetters togst_app::AppSinkbuilder.gst::CustomMeta::register_simple().
-
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.407 Apr 2023Release notes
Open source →Fixed
- Work around
gst_webrtc::WebRTCICE::add_candidate()API breakage in 1.24.
Changed
- Reduce size of
gst_audio::AudioBufferandgst_video::VideoFrameby a factor of two by not storing an unnecessary copy of the audio/video info.
- Work around
-
0.20.314 Mar 2023Release notes
Open source →Fixed
gst::ParamSpecArrayuses the correctglib::Typenow.- Work around accidental ABI breakage in 1.18 gst-rtsp-server
GstRTSPClient.
Added
- Document
gst_utils::StreamProducer::forward_eos()default value.
-
0.20.221 Feb 2023Release notes
Open source →Added
glib::HasParamSpecimpl forgst::ClockTimeDefaultimpl forgst_play::Play- Constructors for non-raw
gst_audio::AudioCapsBuilder/gst_video::VideoCapsBuilder
-
0.20.113 Feb 2023Release notes
Open source →Fixed
- Fix memory leaks when converting a
gst_audio::AudioBufferorgst_video::VideoFrameto agst::Bufferor FFI type.
- Fix memory leaks when converting a
-
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.527 Dec 2022Release notes
Open source →Fixed
- Clear video frame values when mapping as GL texture to avoid out of bounds reads when trying to access the GL texture as raw video frame.
- Allow returning
HandledfromBufferListpad probes.
Changed
- Update GStreamer .gir files to latest 1.21 git.
-
0.19.416 Dec 2022Release notes
Open source →Added
- Subclassing bindings for
gst_audio::AudioFilter.
Fixed
- Various new clippy warnings.
Changed
- Update GStreamer .gir files to 1.21.3 release.
- Subclassing bindings for
-
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.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.704 Apr 2022Release notes
Open source →Added
- Bindings for
VideoAggregatorand theVideoAggregatorPads. - Bindings for
AudioAggregatorand theAudioAggregatorPads. - Bindings for
TaskPool. - Various helper functions for
VideoFormatInfo,VideoInfoandVideoFrame.
- Bindings for
-
0.18.520 Feb 2022Release notes
Open source →Changed
- Require GStreamer 1.20.0 at least when building with
v1_20. Earlier versions were already going to fail due to API mismatches before.
Added
gst::BufferPoolsubclassing support.Debugimpl forgst::MiniObject.gst_rtsp_server::RTSPOnvifServerand related API, including subclassing support.
Fixed
- Handle empty slices correctly at the FFI layer.
MiniObjectRef::downcast_ref()and similar functions return the correct type now. While this is an API change, the previous API would've never worked.
- Require GStreamer 1.20.0 at least when building with
-
0.18.404 Feb 2022Release notes
Open source →Changed
- Update gir files to GStreamer 1.20.0 release.
Added
gst_video::VideoCodecFrame::input_buffer_owned()for getting an owned reference.
Fixed
- All documentation links in the
README.mds are correct again.
-
0.18.331 Jan 2022Release notes
Open source →Added
Defaultimplementation forgst_video::VideoOverlayCompositionwhen targeting GStreamer 1.20.gst_video::VideoOverlayComposition::add_rectangle()in addition to the addition of all rectangles via an iterator during construction.- Subclassing support for
gst_rtp::RTPHeaderExtension. gst_webrtc::WebRTCErrorfor programmatically handling WebRTC errors.
Fixed
gst_rtp::RTPHeaderExtensionhasgst::Elementset as parent class now.- Global functions are re-exported from the
gst_rtpcrate root.
Changed
- GIO-style async operations in GES no longer need
Send-able closures.
Removed
fragileis no longer a dependency and instead the corresponding GLib API is used.
-
0.18.118 Jan 2022Release notes
Open source →Fixed
Message::view()also handles the redirect message now.MessageandQueryview variants that return references now borrow again from the underlying query and not the view enum, allowing to use them in a wider scope.
Changed
- All miniobjects,
VideoTimeCode,StructureandCapsFeaturesare marked as#[repr(transparent)]now to ensure that their memory representation is exactly the underlying raw pointer.
-
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.713 Feb 2021Release notes
Open source →Fixed
- Usage of the logging system with a GStreamer library with the logging system compiled out does not crash any longer.
- Double-free in
gst_video::VideoTimeCodeAPI when converting between validated and unvalidated timecodes.
Added
gst::Element::get_current_state()andget_pending_state()convenience APIs.gst_audio::AudioConverterConfigfor setting the configuration on e.g. theaudiomixerelement. The low-levelAudioConverterAPI is still not included in the bindings.
-
0.16.620 Dec 2020Release notes
Open source →Fixed
VideoTimeCodeInterval'sOrdandPartialEqimplementations compare against the correct fields now.SDPMessage::medias_mut()iterator does not crash any longer.
Added
PartialEqandEqimplementations onVideoAlignment.- Alignment API for
VideoMetaandget_plane_height()/get_plane_size(). VideoInfo::align_full().
-
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.409 Oct 2020Release notes
Open source →Fixed
- Correctly implement
ExactSizeIteratoron theAudioFormatandVideoFormatiterators. Previously they returned the overall size instead of the remaining size, and they didn't implementIterator::size_hint(). - Don't implement
ExactSizeIteratoron the buffergst::Metaiterator. The overall length is not known easily and the implementation would've simply panicked in the past.
Added
gst::ClockID::wait_async_stream()for async integration for clock waiting.From/TryFromimpls for converting betweengst::ClockTimeandstd::time::Duration.
- Correctly implement
-
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.708 Jun 2020Release notes
Open source →Fixed
- Allow multiple filter types per process with
gst::Iterator::filter(). - Check that
VideoInfois valid when creating aVideoFrame. - Don't potentially dereference a
NULLpointer when getting the format from an invalidVideoInfoorAudioInfo. - Don't unmap borrowed
VideoFrameRefs.
Added
gst::ProtectionMeta,gst_video::VideoAffineTransformationMeta,VideoCropMetaandVideoRegionOfInterestMetabindings.- Various new
gst_rtp::RTPBuffermethods. gst_audio::audio_buffer_truncate(),AudioMetaandAudioBufferbindings.
- Allow multiple filter types per process with
-
0.15.628 May 2020Release notes
Open source →Fixed
- Assert that the data passed to
VideoCaptionMeta::add()is not empty. - Don't store strong references to the object in the bus, appsink and appsrc
futures
Stream/Sinkadapters. This would keep them alive unnecessarily and would prevent theStream/Sinkto ever "finish" on its own. - Handle receiving a
Nonereply in the change function ofgst::Promise. This is apparently valid. For backwards compatibility reasons this is currently replaced with an empty structure but in 0.16 the API will explicitly handleNone.
Added
gst::Stream::debug()andgst::StreamCollection::debug()for converting into a structured string with the actual contents of each.gst::Structure::from_iter()andgst::Caps::from_iter()to create structures/caps from iterators.gst::Eventsupport for getting/setting thegst::Streamin theStreamStartevent.gst_video::calculate_display_ratio()and::guess_framerate().- Various video related
gst::CapsFeaturesingst_video. TryFrom/Fromimpls for converting betweengst::Structureandgst_video::VideoConverterConfig.- Various
glib::Valuetrait impls forSDPMessage,StructureRef,CapsFeatureRefand all borrowed variants of miniobjects to be able to work with the borrowed, non-owned variants when handlingglib::Values.
- Assert that the data passed to
-
0.15.503 May 2020Release notes
Open source →Fixed
- Revert: Allow logging any
glib::Objectand not justgst::Object. This broke API in subtle ways and needs to wait until 0.16 - Replace
%in log output with%%to prevent accidental C formatting - Add missing manual traits to the documentation
Added
BufferRef::peek_memory_mut()to give a mutable reference to a given memory- Different iterators for iterating over the memories of a buffer
- Support for
gst_audio::AudioClippingMeta gst::Plugin::get_plugin_name()was addedgst::Element::get_current_clock_time()and `gst::Element::get_current_running_time() helper functionsgst::StateandStateChangeAPI for calculating next/previous state and convert from/to the components of a state change
Changed
- Use
mem::ManuallyDropinstead ofmem::forgeteverywhere
- Revert: 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.123 Jan 2020Release notes
Open source →Added
- Use static inner lifetime for
VideoCodecState<Readable>so that it can be stored safely on the heap. - Getters/setters for
BinFlagsongst::Bin. gst::Caps::builder_full()for building caps with multiple structures conveniently.gst::Element::call_async_future()for asynchronously spawning a closure and returning aFuturefor awaiting its return value.
Fixed
- Various clippy warnings.
- Getters/setters for
PadFlagsongst::Padnow provide the correct behaviour. - Take mutex before popping messages in the
gst::BusStreamto close a small race condition that could cause it to not be woken up. gst::ChildProxyimplementers do not have to providechild_added()andchild_removed()functions anymore but these are optional now.- Manually implement
Debugimpls for various generic types where toDebugimpl should not depend on their type parameters also implementingDebug.
- Use static inner lifetime for
-
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.517 Sep 2019Release notes
Open source →Added
- Support subclassing of
gst::Device,gst::DeviceProvider,gst_audio::AudioDecoderand::AudioEncoder - Support for
Element::set_clockand::provide_clockvirtual methods ElementClass::add_metadatawas addedgst_video::VideoDecoderand::VideoEncodergot support forget_caps,negotiate,src/sink_query/eventand thedrainvirtual methodsElement::num_pads,::num_src_padsand::num_sink_padsfunctionsgst_video::VideoDecoderand::VideoEncodergotget_allocatorbindingsgst::IteratorimplementsIntoIteratornow for providingstd::iter::Iterator<Item=<Result<T, IteratorError>>adapter- Error macros for audio/video decoder subclasses to handle decoding errors more gracefully and only actually error out after many consecutive errors
Fixed
- Macros now also work in Rust 2018 edition without
#[macro_use]but explicit imports - The log handler unit test runs reliable in parallel with other tests
- Manually implement
Debugforgst::Iteratorto allow it for anyTinstead ofT: Debug Device::create_elementhas correct reference count handling now- Return
NotNegotiatedin the video codec base classes if setting the output state fails instead ofError
- Support subclassing of
-
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.316 Jul 2019Release notes
Open source →Added
Buffer::unset_flags()for unsetting specific buffer flagsVideoBufferFlagsflags type andVideoBufferExt::set_video_flags(),unset_video_flags()andget_video_flags()for working with video buffer flags from safe code.
Fixed
- Setting buffer flags does not override arbitrary other flags anymore but
only sets the flags in question. This is necessary to not override extension
buffer flags like
gst_video::VideoBufferFlags.