forked from mirrors/gstreamer-rs
Compare commits
20 commits
Author | SHA1 | Date | |
---|---|---|---|
|
7ceff5bafd | ||
|
927b1ac822 | ||
|
aa275d5ddb | ||
|
affc53a515 | ||
|
ec900d7e3f | ||
|
bc991708e5 | ||
|
6f09e5c791 | ||
|
85e1d84784 | ||
|
67e47b0cbf | ||
|
291193c1ad | ||
|
98ca60b684 | ||
|
0483d0881f | ||
|
a4eea8734d | ||
|
918b34fb7a | ||
|
2b0674b7cb | ||
|
124564d6f0 | ||
|
1d63b0d89b | ||
|
4e2f89835b | ||
|
d09dd828d6 | ||
|
1d80323b58 |
110 changed files with 1972 additions and 950 deletions
|
@ -39,7 +39,7 @@ to avoid polling.
|
|||
|
||||
# Implements
|
||||
|
||||
[`ElementExt`](trait.ElementExt.html), [`ObjectExt`](trait.ObjectExt.html), [`ObjectExt`](trait.ObjectExt.html)
|
||||
[`BaseSinkExt`](trait.BaseSinkExt.html), [`ElementExt`](trait.ElementExt.html), [`ObjectExt`](trait.ObjectExt.html), [`ObjectExt`](trait.ObjectExt.html), [`URIHandlerExt`](trait.URIHandlerExt.html)
|
||||
<!-- impl AppSink::fn get_buffer_list_support -->
|
||||
Check if `self` supports buffer lists.
|
||||
|
||||
|
@ -235,6 +235,125 @@ the maximum amount of time to wait for a sample
|
|||
|
||||
a `gst::Sample` or NULL when the appsink is stopped or EOS or the timeout expires.
|
||||
Call `gst_sample_unref` after usage.
|
||||
<!-- trait AppSinkExt::fn connect_eos -->
|
||||
Signal that the end-of-stream has been reached. This signal is emitted from
|
||||
the streaming thread.
|
||||
<!-- trait AppSinkExt::fn connect_new_preroll -->
|
||||
Signal that a new preroll sample is available.
|
||||
|
||||
This signal is emitted from the streaming thread and only when the
|
||||
"emit-signals" property is `true`.
|
||||
|
||||
The new preroll sample can be retrieved with the "pull-preroll" action
|
||||
signal or `AppSink::pull_preroll` either from this signal callback
|
||||
or from any other thread.
|
||||
|
||||
Note that this signal is only emitted when the "emit-signals" property is
|
||||
set to `true`, which it is not by default for performance reasons.
|
||||
<!-- trait AppSinkExt::fn connect_new_sample -->
|
||||
Signal that a new sample is available.
|
||||
|
||||
This signal is emitted from the streaming thread and only when the
|
||||
"emit-signals" property is `true`.
|
||||
|
||||
The new sample can be retrieved with the "pull-sample" action
|
||||
signal or `AppSink::pull_sample` either from this signal callback
|
||||
or from any other thread.
|
||||
|
||||
Note that this signal is only emitted when the "emit-signals" property is
|
||||
set to `true`, which it is not by default for performance reasons.
|
||||
<!-- trait AppSinkExt::fn connect_pull_preroll -->
|
||||
Get the last preroll sample in `appsink`. This was the sample that caused the
|
||||
appsink to preroll in the PAUSED state. This sample can be pulled many times
|
||||
and remains available to the application even after EOS.
|
||||
|
||||
This function is typically used when dealing with a pipeline in the PAUSED
|
||||
state. Calling this function after doing a seek will give the sample right
|
||||
after the seek position.
|
||||
|
||||
Note that the preroll sample will also be returned as the first sample
|
||||
when calling `AppSink::pull_sample` or the "pull-sample" action signal.
|
||||
|
||||
If an EOS event was received before any buffers, this function returns
|
||||
`None`. Use gst_app_sink_is_eos () to check for the EOS condition.
|
||||
|
||||
This function blocks until a preroll sample or EOS is received or the appsink
|
||||
element is set to the READY/NULL state.
|
||||
|
||||
# Returns
|
||||
|
||||
a `gst::Sample` or NULL when the appsink is stopped or EOS.
|
||||
<!-- trait AppSinkExt::fn connect_pull_sample -->
|
||||
This function blocks until a sample or EOS becomes available or the appsink
|
||||
element is set to the READY/NULL state.
|
||||
|
||||
This function will only return samples when the appsink is in the PLAYING
|
||||
state. All rendered samples will be put in a queue so that the application
|
||||
can pull samples at its own rate.
|
||||
|
||||
Note that when the application does not pull samples fast enough, the
|
||||
queued samples could consume a lot of memory, especially when dealing with
|
||||
raw video frames. It's possible to control the behaviour of the queue with
|
||||
the "drop" and "max-buffers" properties.
|
||||
|
||||
If an EOS event was received before any buffers, this function returns
|
||||
`None`. Use gst_app_sink_is_eos () to check for the EOS condition.
|
||||
|
||||
# Returns
|
||||
|
||||
a `gst::Sample` or NULL when the appsink is stopped or EOS.
|
||||
<!-- trait AppSinkExt::fn connect_try_pull_preroll -->
|
||||
Get the last preroll sample in `appsink`. This was the sample that caused the
|
||||
appsink to preroll in the PAUSED state. This sample can be pulled many times
|
||||
and remains available to the application even after EOS.
|
||||
|
||||
This function is typically used when dealing with a pipeline in the PAUSED
|
||||
state. Calling this function after doing a seek will give the sample right
|
||||
after the seek position.
|
||||
|
||||
Note that the preroll sample will also be returned as the first sample
|
||||
when calling `AppSink::pull_sample` or the "pull-sample" action signal.
|
||||
|
||||
If an EOS event was received before any buffers or the timeout expires,
|
||||
this function returns `None`. Use gst_app_sink_is_eos () to check for the EOS
|
||||
condition.
|
||||
|
||||
This function blocks until a preroll sample or EOS is received, the appsink
|
||||
element is set to the READY/NULL state, or the timeout expires.
|
||||
|
||||
Feature: `v1_10`
|
||||
|
||||
## `timeout`
|
||||
the maximum amount of time to wait for the preroll sample
|
||||
|
||||
# Returns
|
||||
|
||||
a `gst::Sample` or NULL when the appsink is stopped or EOS or the timeout expires.
|
||||
<!-- trait AppSinkExt::fn connect_try_pull_sample -->
|
||||
This function blocks until a sample or EOS becomes available or the appsink
|
||||
element is set to the READY/NULL state or the timeout expires.
|
||||
|
||||
This function will only return samples when the appsink is in the PLAYING
|
||||
state. All rendered samples will be put in a queue so that the application
|
||||
can pull samples at its own rate.
|
||||
|
||||
Note that when the application does not pull samples fast enough, the
|
||||
queued samples could consume a lot of memory, especially when dealing with
|
||||
raw video frames. It's possible to control the behaviour of the queue with
|
||||
the "drop" and "max-buffers" properties.
|
||||
|
||||
If an EOS event was received before any buffers or the timeout expires,
|
||||
this function returns `None`. Use gst_app_sink_is_eos () to check
|
||||
for the EOS condition.
|
||||
|
||||
Feature: `v1_10`
|
||||
|
||||
## `timeout`
|
||||
the maximum amount of time to wait for a sample
|
||||
|
||||
# Returns
|
||||
|
||||
a `gst::Sample` or NULL when the appsink is stopped or EOS or the timeout expires.
|
||||
<!-- struct AppSrc -->
|
||||
The appsrc element can be used by applications to insert data into a
|
||||
GStreamer pipeline. Unlike most GStreamer elements, appsrc provides
|
||||
|
@ -303,7 +422,7 @@ occurs or the state of the appsrc has gone through READY.
|
|||
|
||||
# Implements
|
||||
|
||||
[`ElementExt`](trait.ElementExt.html), [`ObjectExt`](trait.ObjectExt.html), [`ObjectExt`](trait.ObjectExt.html)
|
||||
[`BaseSrcExt`](trait.BaseSrcExt.html), [`ElementExt`](trait.ElementExt.html), [`ObjectExt`](trait.ObjectExt.html), [`ObjectExt`](trait.ObjectExt.html), [`URIHandlerExt`](trait.URIHandlerExt.html)
|
||||
<!-- impl AppSrc::fn end_of_stream -->
|
||||
Indicates to the appsrc element that the last buffer queued in the
|
||||
element is the last buffer of the stream.
|
||||
|
@ -458,6 +577,56 @@ be connected to.
|
|||
A stream_type stream
|
||||
## `type_`
|
||||
the new state
|
||||
<!-- trait AppSrcExt::fn connect_end_of_stream -->
|
||||
Notify `appsrc` that no more buffer are available.
|
||||
<!-- trait AppSrcExt::fn connect_enough_data -->
|
||||
Signal that the source has enough data. It is recommended that the
|
||||
application stops calling push-buffer until the need-data signal is
|
||||
emitted again to avoid excessive buffer queueing.
|
||||
<!-- trait AppSrcExt::fn connect_need_data -->
|
||||
Signal that the source needs more data. In the callback or from another
|
||||
thread you should call push-buffer or end-of-stream.
|
||||
|
||||
`length` is just a hint and when it is set to -1, any number of bytes can be
|
||||
pushed into `appsrc`.
|
||||
|
||||
You can call push-buffer multiple times until the enough-data signal is
|
||||
fired.
|
||||
## `length`
|
||||
the amount of bytes needed.
|
||||
<!-- trait AppSrcExt::fn connect_push_buffer -->
|
||||
Adds a buffer to the queue of buffers that the appsrc element will
|
||||
push to its source pad. This function does not take ownership of the
|
||||
buffer so the buffer needs to be unreffed after calling this function.
|
||||
|
||||
When the block property is TRUE, this function can block until free space
|
||||
becomes available in the queue.
|
||||
## `buffer`
|
||||
a buffer to push
|
||||
<!-- trait AppSrcExt::fn connect_push_sample -->
|
||||
Extract a buffer from the provided sample and adds the extracted buffer
|
||||
to the queue of buffers that the appsrc element will
|
||||
push to its source pad. This function set the appsrc caps based on the caps
|
||||
in the sample and reset the caps if they change.
|
||||
Only the caps and the buffer of the provided sample are used and not
|
||||
for example the segment in the sample.
|
||||
This function does not take ownership of the
|
||||
sample so the sample needs to be unreffed after calling this function.
|
||||
|
||||
When the block property is TRUE, this function can block until free space
|
||||
becomes available in the queue.
|
||||
## `sample`
|
||||
a sample from which extract buffer to push
|
||||
<!-- trait AppSrcExt::fn connect_seek_data -->
|
||||
Seek to the given offset. The next push-buffer should produce buffers from
|
||||
the new `offset`.
|
||||
This callback is only called for seekable stream types.
|
||||
## `offset`
|
||||
the offset to seek to
|
||||
|
||||
# Returns
|
||||
|
||||
`true` if the seek succeeded.
|
||||
<!-- enum AppStreamType -->
|
||||
The stream type.
|
||||
<!-- enum AppStreamType::variant Stream -->
|
||||
|
|
|
@ -949,6 +949,66 @@ render function.
|
|||
|
||||
`gst::FlowReturn::Ok` if the preroll completed and processing can
|
||||
continue. Any other return value should be returned from the render vmethod.
|
||||
<!-- trait BaseSinkExt::fn get_property_async -->
|
||||
If set to `true`, the basesink will perform asynchronous state changes.
|
||||
When set to `false`, the sink will not signal the parent when it prerolls.
|
||||
Use this option when dealing with sparse streams or when synchronisation is
|
||||
not required.
|
||||
<!-- trait BaseSinkExt::fn set_property_async -->
|
||||
If set to `true`, the basesink will perform asynchronous state changes.
|
||||
When set to `false`, the sink will not signal the parent when it prerolls.
|
||||
Use this option when dealing with sparse streams or when synchronisation is
|
||||
not required.
|
||||
<!-- trait BaseSinkExt::fn get_property_blocksize -->
|
||||
The amount of bytes to pull when operating in pull mode.
|
||||
<!-- trait BaseSinkExt::fn set_property_blocksize -->
|
||||
The amount of bytes to pull when operating in pull mode.
|
||||
<!-- trait BaseSinkExt::fn get_property_enable-last-sample -->
|
||||
Enable the last-sample property. If `false`, basesink doesn't keep a
|
||||
reference to the last buffer arrived and the last-sample property is always
|
||||
set to `None`. This can be useful if you need buffers to be released as soon
|
||||
as possible, eg. if you're using a buffer pool.
|
||||
<!-- trait BaseSinkExt::fn set_property_enable-last-sample -->
|
||||
Enable the last-sample property. If `false`, basesink doesn't keep a
|
||||
reference to the last buffer arrived and the last-sample property is always
|
||||
set to `None`. This can be useful if you need buffers to be released as soon
|
||||
as possible, eg. if you're using a buffer pool.
|
||||
<!-- trait BaseSinkExt::fn get_property_last-sample -->
|
||||
The last buffer that arrived in the sink and was used for preroll or for
|
||||
rendering. This property can be used to generate thumbnails. This property
|
||||
can be `None` when the sink has not yet received a buffer.
|
||||
<!-- trait BaseSinkExt::fn get_property_max-bitrate -->
|
||||
Control the maximum amount of bits that will be rendered per second.
|
||||
Setting this property to a value bigger than 0 will make the sink delay
|
||||
rendering of the buffers when it would exceed to max-bitrate.
|
||||
<!-- trait BaseSinkExt::fn set_property_max-bitrate -->
|
||||
Control the maximum amount of bits that will be rendered per second.
|
||||
Setting this property to a value bigger than 0 will make the sink delay
|
||||
rendering of the buffers when it would exceed to max-bitrate.
|
||||
<!-- trait BaseSinkExt::fn get_property_render-delay -->
|
||||
The additional delay between synchronisation and actual rendering of the
|
||||
media. This property will add additional latency to the device in order to
|
||||
make other sinks compensate for the delay.
|
||||
<!-- trait BaseSinkExt::fn set_property_render-delay -->
|
||||
The additional delay between synchronisation and actual rendering of the
|
||||
media. This property will add additional latency to the device in order to
|
||||
make other sinks compensate for the delay.
|
||||
<!-- trait BaseSinkExt::fn get_property_throttle-time -->
|
||||
The time to insert between buffers. This property can be used to control
|
||||
the maximum amount of buffers per second to render. Setting this property
|
||||
to a value bigger than 0 will make the sink create THROTTLE QoS events.
|
||||
<!-- trait BaseSinkExt::fn set_property_throttle-time -->
|
||||
The time to insert between buffers. This property can be used to control
|
||||
the maximum amount of buffers per second to render. Setting this property
|
||||
to a value bigger than 0 will make the sink create THROTTLE QoS events.
|
||||
<!-- trait BaseSinkExt::fn get_property_ts-offset -->
|
||||
Controls the final synchronisation, a negative value will render the buffer
|
||||
earlier while a positive value delays playback. This property can be
|
||||
used to fix synchronisation in bad files.
|
||||
<!-- trait BaseSinkExt::fn set_property_ts-offset -->
|
||||
Controls the final synchronisation, a negative value will render the buffer
|
||||
earlier while a positive value delays playback. This property can be
|
||||
used to fix synchronisation in bad files.
|
||||
<!-- struct BaseSrc -->
|
||||
This is a generic base class for source elements. The following
|
||||
types of sources are supported:
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -4,15 +4,15 @@ version = "0.9.0"
|
|||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||
|
||||
[dependencies]
|
||||
glib = { version = "0.3", git = "https://github.com/gtk-rs/glib" }
|
||||
gstreamer = { path = "../gstreamer" }
|
||||
gstreamer-app = { path = "../gstreamer-app" }
|
||||
gstreamer-audio = { path = "../gstreamer-audio" }
|
||||
gstreamer-video = { path = "../gstreamer-video" }
|
||||
gstreamer-player = { path = "../gstreamer-player", optional = true }
|
||||
gtk = { version = "0.2", git = "https://github.com/gtk-rs/gtk", features = ["v3_6"], optional = true }
|
||||
gdk = { version = "0.6", git = "https://github.com/gtk-rs/gdk", optional = true }
|
||||
gio = { version = "0.2", git = "https://github.com/gtk-rs/gio", optional = true }
|
||||
glib = "0.4"
|
||||
gstreamer = { version = "0.9", path = "../gstreamer" }
|
||||
gstreamer-app = { version = "0.9", path = "../gstreamer-app" }
|
||||
gstreamer-audio = { version = "0.9", path = "../gstreamer-audio" }
|
||||
gstreamer-video = { version = "0.9", path = "../gstreamer-video" }
|
||||
gstreamer-player = { version = "0.9", path = "../gstreamer-player", optional = true }
|
||||
gtk = { version = "0.3", features = ["v3_6"], optional = true }
|
||||
gdk = { version = "0.7", optional = true }
|
||||
gio = { version = "0.3", optional = true }
|
||||
futures = { version = "0.1", optional = true }
|
||||
tokio-core = { version = "0.1", optional = true }
|
||||
send-cell = "0.1"
|
||||
|
|
|
@ -142,7 +142,7 @@ fn main_loop(pipeline: gst::Pipeline) -> Result<(), Error> {
|
|||
Err(ErrorMessage {
|
||||
src: msg.get_src()
|
||||
.map(|s| s.get_path_string())
|
||||
.unwrap_or(String::from("None")),
|
||||
.unwrap_or_else(|| String::from("None")),
|
||||
error: err.get_error().description().into(),
|
||||
debug: err.get_debug(),
|
||||
cause: err.get_error(),
|
||||
|
|
|
@ -113,7 +113,7 @@ fn main_loop(pipeline: gst::Pipeline, appsrc: gst_app::AppSrc) -> Result<(), Err
|
|||
Err(ErrorMessage {
|
||||
src: msg.get_src()
|
||||
.map(|s| s.get_path_string())
|
||||
.unwrap_or(String::from("None")),
|
||||
.unwrap_or_else(|| String::from("None")),
|
||||
error: err.get_error().description().into(),
|
||||
debug: err.get_debug(),
|
||||
cause: err.get_error(),
|
||||
|
|
|
@ -39,7 +39,7 @@ fn example_main() -> Result<(), Error> {
|
|||
args[1].as_ref()
|
||||
} else {
|
||||
println!("Usage: decodebin file_path");
|
||||
std::process::exit(-1);
|
||||
std::process::exit(-1)
|
||||
};
|
||||
|
||||
let pipeline = gst::Pipeline::new(None);
|
||||
|
@ -177,7 +177,7 @@ fn example_main() -> Result<(), Error> {
|
|||
ErrorMessage {
|
||||
src: msg.get_src()
|
||||
.map(|s| s.get_path_string())
|
||||
.unwrap_or(String::from("None")),
|
||||
.unwrap_or_else(|| String::from("None")),
|
||||
error: err.get_error().description().into(),
|
||||
debug: err.get_debug(),
|
||||
cause: err.get_error(),
|
||||
|
@ -190,7 +190,7 @@ fn example_main() -> Result<(), Error> {
|
|||
Err(ErrorMessage {
|
||||
src: msg.get_src()
|
||||
.map(|s| s.get_path_string())
|
||||
.unwrap_or(String::from("None")),
|
||||
.unwrap_or_else(|| String::from("None")),
|
||||
error: err.get_error().description().into(),
|
||||
debug: err.get_debug(),
|
||||
cause: err.get_error(),
|
||||
|
|
|
@ -16,7 +16,7 @@ fn example_main() {
|
|||
args[1].as_ref()
|
||||
} else {
|
||||
println!("Usage: playbin uri");
|
||||
std::process::exit(-1);
|
||||
std::process::exit(-1)
|
||||
};
|
||||
|
||||
let playbin = gst::ElementFactory::make("playbin", None).unwrap();
|
||||
|
|
|
@ -75,13 +75,13 @@ fn example_main() {
|
|||
args[1].as_ref()
|
||||
} else {
|
||||
println!("Usage: player uri");
|
||||
std::process::exit(-1);
|
||||
std::process::exit(-1)
|
||||
};
|
||||
|
||||
#[cfg(not(feature = "gst-player"))]
|
||||
{
|
||||
eprintln!("Feature gst-player is required. Please rebuild with --features gst-player");
|
||||
std::process::exit(-1);
|
||||
std::process::exit(-1)
|
||||
}
|
||||
|
||||
#[cfg(feature = "gst-player")]
|
||||
|
|
|
@ -16,7 +16,7 @@ fn example_main() {
|
|||
args[1].as_ref()
|
||||
} else {
|
||||
println!("Usage: toc file_path");
|
||||
std::process::exit(-1);
|
||||
std::process::exit(-1)
|
||||
};
|
||||
|
||||
let pipeline = gst::Pipeline::new(None);
|
||||
|
|
|
@ -5,6 +5,85 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||
|
||||
## [0.9.1] - 2017-11-26
|
||||
### Fixed
|
||||
- Export `FlowError`/`FlowSuccess`, `ClockError`/`ClockSuccess`,
|
||||
`PadLinkError`/`PadLinkSuccess` too
|
||||
|
||||
## [0.9.0] - 2017-11-26
|
||||
### Added
|
||||
- Bindings for (outputting to) the GStreamer logging system
|
||||
- Bindings for the GStreamer base library
|
||||
- Bindings for all the `Pad` functions to override pad behaviour, and pad task
|
||||
functions
|
||||
- Bindings for `StaticCaps` and `StaticPadTemplate`
|
||||
- Bindings for `deep-notify` signal on `Object`
|
||||
- Support for directly creating `Error`/`Warning`/`Info` `Messages` and posting them
|
||||
from an element with context information (file, line, module, etc.) similar
|
||||
to the C `GST_ELEMENT_ERROR` macro
|
||||
- Support for setting custom fields in `Messages`/`Events` during construction
|
||||
- Support for creating Buffers out of anything that is `AsRef<[u8]>` or
|
||||
`AsMut<[u8]>`
|
||||
- Support for using the `Read` trait on `Adapter`
|
||||
- Functions for getting all sink/src/all pads of an `Element`, and all children
|
||||
of a `Bin`
|
||||
- Builder for `Caps` and `Structures` in addition to the existing functions
|
||||
- `AppSrc`/`AppSink` implement `BaseSrc`/`BaseSink` and `URIHandler`
|
||||
- Rust ports of the basic tutorials 1 to 8 from
|
||||
https://gstreamer.freedesktop.org/documentation/tutorials/
|
||||
- "Getting started" and "Installation" sections to the README.md
|
||||
- "dox" feature for generating documentation for all available configurations
|
||||
|
||||
### Fixed
|
||||
- `StackTraceFlags` are only available since 1.12
|
||||
- Worked around macOS requiring a `NSRunLoop` running on the main thread in all
|
||||
examples and tutorials, to be able to show a window or anything else
|
||||
|
||||
### Changed
|
||||
- `ClockTime` is now a wrapper around `Option<u64>` to handle the
|
||||
`CLOCK_TIME_NONE` case better. This wrapper implements all the arithmetic
|
||||
and other traits as needed and ensures that no accidential calculations with
|
||||
`CLOCK_TIME_NONE` can happen
|
||||
- "Values with format", like in `Duration`/`Position`/`Convert` queries or
|
||||
`Seek` events now return a `FormatValue` type. This contains the actual
|
||||
`Format` together with the value and does any required conversions. This
|
||||
also makes it harder to accidentially mix e.g. values in bytes and time
|
||||
- `PadProbeId` does not implement `Clone`/`Copy` anymore
|
||||
- Property notify watches return a custom type instead of ulong
|
||||
- `Error`/`Warning`/`Info` `Messages` can only be created with specific kinds of
|
||||
`glib::Error` now. Using arbitrary ones does not work
|
||||
- `Iterator` bindings were completely rewritten and provide the item type as a
|
||||
generic type parameter now, greatly simplifying its usage
|
||||
- All `glib::Values` are now `glib::SendValue` instead, e.g. in `Caps` and
|
||||
`Structures`, as their content must be possible to send to different threads
|
||||
safely
|
||||
- `Message::get_src()` can return `None`
|
||||
- Allow `None` as `Caps` in `AppSrc`/`AppSink`
|
||||
- Allow everything implementing `Into<Option<&str>>` to be used as a pad name
|
||||
- Moved `copy()` from `GstRc` directly to `MiniObject`
|
||||
- Success/Error enums (like `FlowReturn`, `PadLinkReturn`, `StateChangeReturn`) now
|
||||
implement an `into_result()` function that splits them into a `Result` with
|
||||
the good and bad cases. Also mark them as `#[must_use]` to make it harder to
|
||||
accidentially ignore errors.
|
||||
- Error enums implement the `Error` trait
|
||||
|
||||
- Many examples use the `failure` crate for error handling now, cleaning up the
|
||||
error handling code quite a bit
|
||||
- Lots of other code cleanup, compiler/clippy warning cleanup, etc.
|
||||
|
||||
## [0.8.2] - 2017-11-11
|
||||
### Fixed
|
||||
- Implement StaticType of BufferRef instead of Buffer. Buffer aka
|
||||
GstRc<BufferRef> already implements StaticType if BufferRef does, and
|
||||
without this it was not possible to use Buffers in GValues.
|
||||
- Free memory of the appsink/appsrc callbacks with the correct type. It was
|
||||
crashing because of using the wrong type before.
|
||||
- Fix documentation URLs in Cargo.toml.
|
||||
|
||||
### Added
|
||||
- Installation instructions and links to documentation for getting started to
|
||||
README.md.
|
||||
|
||||
## [0.8.1] - 2017-09-15
|
||||
### Added
|
||||
- Implement Send+Sync for Query, Message and Event, and their corresponding
|
||||
|
|
|
@ -15,14 +15,14 @@ build = "build.rs"
|
|||
[dependencies]
|
||||
bitflags = "1.0"
|
||||
libc = "0.2"
|
||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gstreamer-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
gstreamer-base-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
gstreamer-app-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
||||
gstreamer = { path = "../gstreamer" }
|
||||
gstreamer-base = { path = "../gstreamer-base" }
|
||||
glib-sys = "0.5"
|
||||
gobject-sys = "0.5"
|
||||
gstreamer-sys = { version = "0.3", features = ["v1_8"] }
|
||||
gstreamer-base-sys = { version = "0.3", features = ["v1_8"] }
|
||||
gstreamer-app-sys = { version = "0.3", features = ["v1_8"] }
|
||||
glib = "0.4"
|
||||
gstreamer = { version = "0.9", path = "../gstreamer" }
|
||||
gstreamer-base = { version = "0.9", path = "../gstreamer-base" }
|
||||
|
||||
[build-dependencies.rustdoc-stripper]
|
||||
version = "0.1"
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::signal::SignalHandlerId;
|
||||
use glib::signal::connect;
|
||||
|
@ -144,11 +145,12 @@ impl AppSink {
|
|||
}
|
||||
|
||||
pub fn get_property_buffer_list(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "buffer-list".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn set_property_buffer_list(&self, buffer_list: bool) {
|
||||
|
@ -158,11 +160,12 @@ impl AppSink {
|
|||
}
|
||||
|
||||
pub fn get_property_eos(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "eos".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn connect_eos<F: Fn(&AppSink) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId {
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use AppStreamType;
|
||||
use ffi;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::signal::SignalHandlerId;
|
||||
use glib::signal::connect;
|
||||
|
@ -147,11 +148,12 @@ impl AppSrc {
|
|||
}
|
||||
|
||||
pub fn get_property_block(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "block".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn set_property_block(&self, block: bool) {
|
||||
|
@ -161,19 +163,21 @@ impl AppSrc {
|
|||
}
|
||||
|
||||
pub fn get_property_current_level_bytes(&self) -> u64 {
|
||||
let mut value = Value::from(&0u64);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <u64 as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "current-level-bytes".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn get_property_duration(&self) -> u64 {
|
||||
let mut value = Value::from(&0u64);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <u64 as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "duration".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn set_property_duration(&self, duration: u64) {
|
||||
|
@ -183,26 +187,27 @@ impl AppSrc {
|
|||
}
|
||||
|
||||
pub fn get_property_format(&self) -> gst::Format {
|
||||
let mut value = Value::from(&0);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <gst::Format as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "format".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
from_glib(transmute(value.get::<i32>().unwrap()))
|
||||
value.get().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_property_format(&self, format: gst::Format) {
|
||||
let format = format.to_glib() as i32;
|
||||
unsafe {
|
||||
gobject_ffi::g_object_set_property(self.to_glib_none().0, "format".to_glib_none().0, Value::from(&format).to_glib_none().0);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_is_live(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "is-live".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn set_property_is_live(&self, is_live: bool) {
|
||||
|
@ -212,11 +217,12 @@ impl AppSrc {
|
|||
}
|
||||
|
||||
pub fn get_property_max_latency(&self) -> i64 {
|
||||
let mut value = Value::from(&0i64);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <i64 as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "max-latency".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn set_property_max_latency(&self, max_latency: i64) {
|
||||
|
@ -226,11 +232,12 @@ impl AppSrc {
|
|||
}
|
||||
|
||||
pub fn get_property_min_latency(&self) -> i64 {
|
||||
let mut value = Value::from(&0i64);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <i64 as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "min-latency".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn set_property_min_latency(&self, min_latency: i64) {
|
||||
|
@ -240,11 +247,12 @@ impl AppSrc {
|
|||
}
|
||||
|
||||
pub fn get_property_min_percent(&self) -> u32 {
|
||||
let mut value = Value::from(&0u32);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <u32 as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "min-percent".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
pub fn set_property_min_percent(&self, min_percent: u32) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
mod app_sink;
|
||||
|
|
|
@ -5,6 +5,85 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||
|
||||
## [0.9.1] - 2017-11-26
|
||||
### Fixed
|
||||
- Export `FlowError`/`FlowSuccess`, `ClockError`/`ClockSuccess`,
|
||||
`PadLinkError`/`PadLinkSuccess` too
|
||||
|
||||
## [0.9.0] - 2017-11-26
|
||||
### Added
|
||||
- Bindings for (outputting to) the GStreamer logging system
|
||||
- Bindings for the GStreamer base library
|
||||
- Bindings for all the `Pad` functions to override pad behaviour, and pad task
|
||||
functions
|
||||
- Bindings for `StaticCaps` and `StaticPadTemplate`
|
||||
- Bindings for `deep-notify` signal on `Object`
|
||||
- Support for directly creating `Error`/`Warning`/`Info` `Messages` and posting them
|
||||
from an element with context information (file, line, module, etc.) similar
|
||||
to the C `GST_ELEMENT_ERROR` macro
|
||||
- Support for setting custom fields in `Messages`/`Events` during construction
|
||||
- Support for creating Buffers out of anything that is `AsRef<[u8]>` or
|
||||
`AsMut<[u8]>`
|
||||
- Support for using the `Read` trait on `Adapter`
|
||||
- Functions for getting all sink/src/all pads of an `Element`, and all children
|
||||
of a `Bin`
|
||||
- Builder for `Caps` and `Structures` in addition to the existing functions
|
||||
- `AppSrc`/`AppSink` implement `BaseSrc`/`BaseSink` and `URIHandler`
|
||||
- Rust ports of the basic tutorials 1 to 8 from
|
||||
https://gstreamer.freedesktop.org/documentation/tutorials/
|
||||
- "Getting started" and "Installation" sections to the README.md
|
||||
- "dox" feature for generating documentation for all available configurations
|
||||
|
||||
### Fixed
|
||||
- `StackTraceFlags` are only available since 1.12
|
||||
- Worked around macOS requiring a `NSRunLoop` running on the main thread in all
|
||||
examples and tutorials, to be able to show a window or anything else
|
||||
|
||||
### Changed
|
||||
- `ClockTime` is now a wrapper around `Option<u64>` to handle the
|
||||
`CLOCK_TIME_NONE` case better. This wrapper implements all the arithmetic
|
||||
and other traits as needed and ensures that no accidential calculations with
|
||||
`CLOCK_TIME_NONE` can happen
|
||||
- "Values with format", like in `Duration`/`Position`/`Convert` queries or
|
||||
`Seek` events now return a `FormatValue` type. This contains the actual
|
||||
`Format` together with the value and does any required conversions. This
|
||||
also makes it harder to accidentially mix e.g. values in bytes and time
|
||||
- `PadProbeId` does not implement `Clone`/`Copy` anymore
|
||||
- Property notify watches return a custom type instead of ulong
|
||||
- `Error`/`Warning`/`Info` `Messages` can only be created with specific kinds of
|
||||
`glib::Error` now. Using arbitrary ones does not work
|
||||
- `Iterator` bindings were completely rewritten and provide the item type as a
|
||||
generic type parameter now, greatly simplifying its usage
|
||||
- All `glib::Values` are now `glib::SendValue` instead, e.g. in `Caps` and
|
||||
`Structures`, as their content must be possible to send to different threads
|
||||
safely
|
||||
- `Message::get_src()` can return `None`
|
||||
- Allow `None` as `Caps` in `AppSrc`/`AppSink`
|
||||
- Allow everything implementing `Into<Option<&str>>` to be used as a pad name
|
||||
- Moved `copy()` from `GstRc` directly to `MiniObject`
|
||||
- Success/Error enums (like `FlowReturn`, `PadLinkReturn`, `StateChangeReturn`) now
|
||||
implement an `into_result()` function that splits them into a `Result` with
|
||||
the good and bad cases. Also mark them as `#[must_use]` to make it harder to
|
||||
accidentially ignore errors.
|
||||
- Error enums implement the `Error` trait
|
||||
|
||||
- Many examples use the `failure` crate for error handling now, cleaning up the
|
||||
error handling code quite a bit
|
||||
- Lots of other code cleanup, compiler/clippy warning cleanup, etc.
|
||||
|
||||
## [0.8.2] - 2017-11-11
|
||||
### Fixed
|
||||
- Implement StaticType of BufferRef instead of Buffer. Buffer aka
|
||||
GstRc<BufferRef> already implements StaticType if BufferRef does, and
|
||||
without this it was not possible to use Buffers in GValues.
|
||||
- Free memory of the appsink/appsrc callbacks with the correct type. It was
|
||||
crashing because of using the wrong type before.
|
||||
- Fix documentation URLs in Cargo.toml.
|
||||
|
||||
### Added
|
||||
- Installation instructions and links to documentation for getting started to
|
||||
README.md.
|
||||
|
||||
## [0.8.1] - 2017-09-15
|
||||
### Added
|
||||
- Implement Send+Sync for Query, Message and Event, and their corresponding
|
||||
|
|
|
@ -14,12 +14,12 @@ build = "build.rs"
|
|||
|
||||
[dependencies]
|
||||
bitflags = "1.0"
|
||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gstreamer-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
gstreamer-audio-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
||||
gstreamer = { path = "../gstreamer" }
|
||||
glib-sys = "0.5"
|
||||
gobject-sys = "0.5"
|
||||
gstreamer-sys = { version = "0.3", features = ["v1_8"] }
|
||||
gstreamer-audio-sys = { version = "0.3", features = ["v1_8"] }
|
||||
glib = "0.4"
|
||||
gstreamer = { version = "0.9", path = "../gstreamer" }
|
||||
array-init = "0.0"
|
||||
|
||||
[build-dependencies.rustdoc-stripper]
|
||||
|
|
|
@ -17,7 +17,7 @@ use std::str;
|
|||
use glib;
|
||||
use glib::translate::{from_glib, FromGlib, FromGlibPtrNone, ToGlib, ToGlibPtr, ToGlibPtrMut};
|
||||
|
||||
#[derive(PartialEq, Eq, Debug)]
|
||||
#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
|
||||
pub enum AudioEndianness {
|
||||
Unknown,
|
||||
LittleEndian = 1234,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
mod stream_volume;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use StreamVolumeFormat;
|
||||
|
|
|
@ -5,10 +5,110 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||
|
||||
## [0.9.1] - 2017-11-26
|
||||
### Fixed
|
||||
- Export `FlowError`/`FlowSuccess`, `ClockError`/`ClockSuccess`,
|
||||
`PadLinkError`/`PadLinkSuccess` too
|
||||
|
||||
## [0.9.0] - 2017-11-26
|
||||
### Added
|
||||
- Bindings for (outputting to) the GStreamer logging system
|
||||
- Bindings for the GStreamer base library
|
||||
- Bindings for all the `Pad` functions to override pad behaviour, and pad task
|
||||
functions
|
||||
- Bindings for `StaticCaps` and `StaticPadTemplate`
|
||||
- Bindings for `deep-notify` signal on `Object`
|
||||
- Support for directly creating `Error`/`Warning`/`Info` `Messages` and posting them
|
||||
from an element with context information (file, line, module, etc.) similar
|
||||
to the C `GST_ELEMENT_ERROR` macro
|
||||
- Support for setting custom fields in `Messages`/`Events` during construction
|
||||
- Support for creating Buffers out of anything that is `AsRef<[u8]>` or
|
||||
`AsMut<[u8]>`
|
||||
- Support for using the `Read` trait on `Adapter`
|
||||
- Functions for getting all sink/src/all pads of an `Element`, and all children
|
||||
of a `Bin`
|
||||
- Builder for `Caps` and `Structures` in addition to the existing functions
|
||||
- `AppSrc`/`AppSink` implement `BaseSrc`/`BaseSink` and `URIHandler`
|
||||
- Rust ports of the basic tutorials 1 to 8 from
|
||||
https://gstreamer.freedesktop.org/documentation/tutorials/
|
||||
- "Getting started" and "Installation" sections to the README.md
|
||||
- "dox" feature for generating documentation for all available configurations
|
||||
|
||||
### Fixed
|
||||
- `StackTraceFlags` are only available since 1.12
|
||||
- Worked around macOS requiring a `NSRunLoop` running on the main thread in all
|
||||
examples and tutorials, to be able to show a window or anything else
|
||||
|
||||
### Changed
|
||||
- `ClockTime` is now a wrapper around `Option<u64>` to handle the
|
||||
`CLOCK_TIME_NONE` case better. This wrapper implements all the arithmetic
|
||||
and other traits as needed and ensures that no accidential calculations with
|
||||
`CLOCK_TIME_NONE` can happen
|
||||
- "Values with format", like in `Duration`/`Position`/`Convert` queries or
|
||||
`Seek` events now return a `FormatValue` type. This contains the actual
|
||||
`Format` together with the value and does any required conversions. This
|
||||
also makes it harder to accidentially mix e.g. values in bytes and time
|
||||
- `PadProbeId` does not implement `Clone`/`Copy` anymore
|
||||
- Property notify watches return a custom type instead of ulong
|
||||
- `Error`/`Warning`/`Info` `Messages` can only be created with specific kinds of
|
||||
`glib::Error` now. Using arbitrary ones does not work
|
||||
- `Iterator` bindings were completely rewritten and provide the item type as a
|
||||
generic type parameter now, greatly simplifying its usage
|
||||
- All `glib::Values` are now `glib::SendValue` instead, e.g. in `Caps` and
|
||||
`Structures`, as their content must be possible to send to different threads
|
||||
safely
|
||||
- `Message::get_src()` can return `None`
|
||||
- Allow `None` as `Caps` in `AppSrc`/`AppSink`
|
||||
- Allow everything implementing `Into<Option<&str>>` to be used as a pad name
|
||||
- Moved `copy()` from `GstRc` directly to `MiniObject`
|
||||
- Success/Error enums (like `FlowReturn`, `PadLinkReturn`, `StateChangeReturn`) now
|
||||
implement an `into_result()` function that splits them into a `Result` with
|
||||
the good and bad cases. Also mark them as `#[must_use]` to make it harder to
|
||||
accidentially ignore errors.
|
||||
- Error enums implement the `Error` trait
|
||||
|
||||
- Many examples use the `failure` crate for error handling now, cleaning up the
|
||||
error handling code quite a bit
|
||||
- Lots of other code cleanup, compiler/clippy warning cleanup, etc.
|
||||
|
||||
## [0.8.2] - 2017-11-11
|
||||
### Fixed
|
||||
- Implement StaticType of BufferRef instead of Buffer. Buffer aka
|
||||
GstRc<BufferRef> already implements StaticType if BufferRef does, and
|
||||
without this it was not possible to use Buffers in GValues.
|
||||
- Free memory of the appsink/appsrc callbacks with the correct type. It was
|
||||
crashing because of using the wrong type before.
|
||||
- Fix documentation URLs in Cargo.toml.
|
||||
|
||||
### Added
|
||||
- Installation instructions and links to documentation for getting started to
|
||||
README.md.
|
||||
|
||||
## [0.8.1] - 2017-09-15
|
||||
### Added
|
||||
- Implement Send+Sync for Query, Message and Event, and their corresponding
|
||||
Ref types.
|
||||
|
||||
### Fixed
|
||||
- Constructor for gst_player::Player now works properly with GStreamer 1.12
|
||||
when passing a video renderer or signal dispatcher. There was a reference
|
||||
counting bug.
|
||||
- Instead of returning &'static references from functions, return references
|
||||
with a generic, unbound lifetime instead.
|
||||
See https://github.com/rust-lang/rust/pull/42417#issue-233404573
|
||||
- Various "unused external crate" warnings and clippy warnings everywhere.
|
||||
|
||||
### Changed
|
||||
- Remove Cargo.lock from GIT, it's not very useful for library crates.
|
||||
- Run everything through latest rustfmt-nightly.
|
||||
- Use while-let (instead of loop and if-let) and CLOCK_TIME_NONE (instead of
|
||||
u64::MAX) in the examples.
|
||||
|
||||
## [0.8.0] - 2017-08-31
|
||||
|
||||
- Initial release of the autogenerated GStreamer bindings. Older versions
|
||||
(< 0.8.0) of the bindings can be found [here](https://github.com/arturoc/gstreamer1.0-rs).
|
||||
The API of the two is incompatible.
|
||||
|
||||
[Unreleased]: https://github.com/sdroege/gstreamer-rs/compare/0.8.0...HEAD
|
||||
[Unreleased]: https://github.com/sdroege/gstreamer-rs/compare/0.8.1...HEAD
|
||||
[0.8.1]: https://github.com/sdroege/gstreamer-rs/compare/0.8.0...0.8.1
|
||||
|
|
|
@ -14,12 +14,12 @@ build = "build.rs"
|
|||
|
||||
[dependencies]
|
||||
bitflags = "1.0"
|
||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gstreamer-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
gstreamer-base-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
||||
gstreamer = { path = "../gstreamer" }
|
||||
glib-sys = "0.5"
|
||||
gobject-sys = "0.5"
|
||||
gstreamer-sys = { version = "0.3", features = ["v1_8"] }
|
||||
gstreamer-base-sys = { version = "0.3", features = ["v1_8"] }
|
||||
glib = "0.4"
|
||||
gstreamer = { version = "0.9", path = "../gstreamer" }
|
||||
|
||||
[build-dependencies.rustdoc-stripper]
|
||||
version = "0.1"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -313,11 +314,12 @@ impl<O: IsA<BaseSink> + IsA<glib::object::Object>> BaseSinkExt for O {
|
|||
}
|
||||
|
||||
fn get_property_async(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "async".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_async(&self, async: bool) {
|
||||
|
@ -327,11 +329,12 @@ impl<O: IsA<BaseSink> + IsA<glib::object::Object>> BaseSinkExt for O {
|
|||
}
|
||||
|
||||
fn get_property_enable_last_sample(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "enable-last-sample".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_enable_last_sample(&self, enable_last_sample: bool) {
|
||||
|
@ -341,11 +344,12 @@ impl<O: IsA<BaseSink> + IsA<glib::object::Object>> BaseSinkExt for O {
|
|||
}
|
||||
|
||||
fn get_property_qos(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "qos".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_qos(&self, qos: bool) {
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -204,11 +205,12 @@ impl<O: IsA<BaseSrc> + IsA<glib::object::Object>> BaseSrcExt for O {
|
|||
}
|
||||
|
||||
fn get_property_num_buffers(&self) -> i32 {
|
||||
let mut value = Value::from(&0);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <i32 as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "num-buffers".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_num_buffers(&self, num_buffers: i32) {
|
||||
|
@ -218,11 +220,12 @@ impl<O: IsA<BaseSrc> + IsA<glib::object::Object>> BaseSrcExt for O {
|
|||
}
|
||||
|
||||
fn get_property_typefind(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "typefind".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_typefind(&self, typefind: bool) {
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -150,11 +151,12 @@ impl<O: IsA<BaseTransform> + IsA<glib::object::Object>> BaseTransformExt for O {
|
|||
}
|
||||
|
||||
fn get_property_qos(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "qos".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_qos(&self, qos: bool) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
mod adapter;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use BaseSrc;
|
||||
|
|
|
@ -5,6 +5,85 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||
|
||||
## [0.9.1] - 2017-11-26
|
||||
### Fixed
|
||||
- Export `FlowError`/`FlowSuccess`, `ClockError`/`ClockSuccess`,
|
||||
`PadLinkError`/`PadLinkSuccess` too
|
||||
|
||||
## [0.9.0] - 2017-11-26
|
||||
### Added
|
||||
- Bindings for (outputting to) the GStreamer logging system
|
||||
- Bindings for the GStreamer base library
|
||||
- Bindings for all the `Pad` functions to override pad behaviour, and pad task
|
||||
functions
|
||||
- Bindings for `StaticCaps` and `StaticPadTemplate`
|
||||
- Bindings for `deep-notify` signal on `Object`
|
||||
- Support for directly creating `Error`/`Warning`/`Info` `Messages` and posting them
|
||||
from an element with context information (file, line, module, etc.) similar
|
||||
to the C `GST_ELEMENT_ERROR` macro
|
||||
- Support for setting custom fields in `Messages`/`Events` during construction
|
||||
- Support for creating Buffers out of anything that is `AsRef<[u8]>` or
|
||||
`AsMut<[u8]>`
|
||||
- Support for using the `Read` trait on `Adapter`
|
||||
- Functions for getting all sink/src/all pads of an `Element`, and all children
|
||||
of a `Bin`
|
||||
- Builder for `Caps` and `Structures` in addition to the existing functions
|
||||
- `AppSrc`/`AppSink` implement `BaseSrc`/`BaseSink` and `URIHandler`
|
||||
- Rust ports of the basic tutorials 1 to 8 from
|
||||
https://gstreamer.freedesktop.org/documentation/tutorials/
|
||||
- "Getting started" and "Installation" sections to the README.md
|
||||
- "dox" feature for generating documentation for all available configurations
|
||||
|
||||
### Fixed
|
||||
- `StackTraceFlags` are only available since 1.12
|
||||
- Worked around macOS requiring a `NSRunLoop` running on the main thread in all
|
||||
examples and tutorials, to be able to show a window or anything else
|
||||
|
||||
### Changed
|
||||
- `ClockTime` is now a wrapper around `Option<u64>` to handle the
|
||||
`CLOCK_TIME_NONE` case better. This wrapper implements all the arithmetic
|
||||
and other traits as needed and ensures that no accidential calculations with
|
||||
`CLOCK_TIME_NONE` can happen
|
||||
- "Values with format", like in `Duration`/`Position`/`Convert` queries or
|
||||
`Seek` events now return a `FormatValue` type. This contains the actual
|
||||
`Format` together with the value and does any required conversions. This
|
||||
also makes it harder to accidentially mix e.g. values in bytes and time
|
||||
- `PadProbeId` does not implement `Clone`/`Copy` anymore
|
||||
- Property notify watches return a custom type instead of ulong
|
||||
- `Error`/`Warning`/`Info` `Messages` can only be created with specific kinds of
|
||||
`glib::Error` now. Using arbitrary ones does not work
|
||||
- `Iterator` bindings were completely rewritten and provide the item type as a
|
||||
generic type parameter now, greatly simplifying its usage
|
||||
- All `glib::Values` are now `glib::SendValue` instead, e.g. in `Caps` and
|
||||
`Structures`, as their content must be possible to send to different threads
|
||||
safely
|
||||
- `Message::get_src()` can return `None`
|
||||
- Allow `None` as `Caps` in `AppSrc`/`AppSink`
|
||||
- Allow everything implementing `Into<Option<&str>>` to be used as a pad name
|
||||
- Moved `copy()` from `GstRc` directly to `MiniObject`
|
||||
- Success/Error enums (like `FlowReturn`, `PadLinkReturn`, `StateChangeReturn`) now
|
||||
implement an `into_result()` function that splits them into a `Result` with
|
||||
the good and bad cases. Also mark them as `#[must_use]` to make it harder to
|
||||
accidentially ignore errors.
|
||||
- Error enums implement the `Error` trait
|
||||
|
||||
- Many examples use the `failure` crate for error handling now, cleaning up the
|
||||
error handling code quite a bit
|
||||
- Lots of other code cleanup, compiler/clippy warning cleanup, etc.
|
||||
|
||||
## [0.8.2] - 2017-11-11
|
||||
### Fixed
|
||||
- Implement StaticType of BufferRef instead of Buffer. Buffer aka
|
||||
GstRc<BufferRef> already implements StaticType if BufferRef does, and
|
||||
without this it was not possible to use Buffers in GValues.
|
||||
- Free memory of the appsink/appsrc callbacks with the correct type. It was
|
||||
crashing because of using the wrong type before.
|
||||
- Fix documentation URLs in Cargo.toml.
|
||||
|
||||
### Added
|
||||
- Installation instructions and links to documentation for getting started to
|
||||
README.md.
|
||||
|
||||
## [0.8.1] - 2017-09-15
|
||||
### Added
|
||||
- Implement Send+Sync for Query, Message and Event, and their corresponding
|
||||
|
|
|
@ -15,11 +15,11 @@ build = "build.rs"
|
|||
[dependencies]
|
||||
bitflags = "1.0"
|
||||
libc = "0.2"
|
||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gstreamer-player-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_12"] }
|
||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
||||
gstreamer = { path = "../gstreamer", features = ["v1_12"] }
|
||||
glib-sys = "0.5"
|
||||
gobject-sys = "0.5"
|
||||
gstreamer-player-sys = { version = "0.3", features = ["v1_12"] }
|
||||
glib = "0.4"
|
||||
gstreamer = { version = "0.9", path = "../gstreamer", features = ["v1_12"] }
|
||||
|
||||
[build-dependencies.rustdoc-stripper]
|
||||
version = "0.1"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
mod player;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Error;
|
||||
|
@ -11,6 +11,7 @@ use PlayerSubtitleInfo;
|
|||
use PlayerVideoInfo;
|
||||
use PlayerVisualization;
|
||||
use ffi;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::signal::SignalHandlerId;
|
||||
use glib::signal::connect;
|
||||
|
@ -280,11 +281,12 @@ impl Player {
|
|||
}
|
||||
|
||||
pub fn get_property_suburi(&self) -> Option<String> {
|
||||
let mut value = Value::from(None::<&str>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <String as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "suburi".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
pub fn set_property_suburi(&self, suburi: Option<&str>) {
|
||||
|
@ -294,30 +296,30 @@ impl Player {
|
|||
}
|
||||
|
||||
//pub fn get_property_video_multiview_flags(&self) -> /*Ignored*/gst_video::VideoMultiviewFlags {
|
||||
// let mut value = Value::from(&0u32);
|
||||
// unsafe {
|
||||
// let mut value = Value::uninitialized();
|
||||
// gobject_ffi::g_value_init(value.to_glib_none_mut().0, </*Unknown type*/ as StaticType>::static_type().to_glib());
|
||||
// gobject_ffi::g_object_get_property(self.to_glib_none().0, "video-multiview-flags".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
// from_glib(transmute(value.get::<u32>().unwrap()))
|
||||
// value.get().unwrap()
|
||||
// }
|
||||
//}
|
||||
|
||||
//pub fn set_property_video_multiview_flags(&self, video_multiview_flags: /*Ignored*/gst_video::VideoMultiviewFlags) {
|
||||
// let video_multiview_flags = video_multiview_flags.to_glib().bits() as u32;
|
||||
// unsafe {
|
||||
// gobject_ffi::g_object_set_property(self.to_glib_none().0, "video-multiview-flags".to_glib_none().0, Value::from(&video_multiview_flags).to_glib_none().0);
|
||||
// }
|
||||
//}
|
||||
|
||||
//pub fn get_property_video_multiview_mode(&self) -> /*Ignored*/gst_video::VideoMultiviewFramePacking {
|
||||
// let mut value = Value::from(&0);
|
||||
// unsafe {
|
||||
// let mut value = Value::uninitialized();
|
||||
// gobject_ffi::g_value_init(value.to_glib_none_mut().0, </*Unknown type*/ as StaticType>::static_type().to_glib());
|
||||
// gobject_ffi::g_object_get_property(self.to_glib_none().0, "video-multiview-mode".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
// from_glib(transmute(value.get::<i32>().unwrap()))
|
||||
// value.get().unwrap()
|
||||
// }
|
||||
//}
|
||||
|
||||
//pub fn set_property_video_multiview_mode(&self, video_multiview_mode: /*Ignored*/gst_video::VideoMultiviewFramePacking) {
|
||||
// let video_multiview_mode = video_multiview_mode.to_glib() as i32;
|
||||
// unsafe {
|
||||
// gobject_ffi::g_object_set_property(self.to_glib_none().0, "video-multiview-mode".to_glib_none().0, Value::from(&video_multiview_mode).to_glib_none().0);
|
||||
// }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use PlayerStreamInfo;
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use PlayerSignalDispatcher;
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::signal::SignalHandlerId;
|
||||
use glib::signal::connect;
|
||||
|
@ -25,11 +26,12 @@ glib_wrapper! {
|
|||
|
||||
impl PlayerGMainContextSignalDispatcher {
|
||||
pub fn get_property_application_context(&self) -> Option<glib::MainContext> {
|
||||
let mut value = Value::from(None::<&glib::MainContext>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <glib::MainContext as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "application-context".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
pub fn connect_property_application_context_notify<F: Fn(&PlayerGMainContextSignalDispatcher) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use PlayerAudioInfo;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use PlayerStreamInfo;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use PlayerStreamInfo;
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use PlayerVideoRenderer;
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::IsA;
|
||||
use glib::signal::SignalHandlerId;
|
||||
|
@ -58,11 +59,12 @@ impl PlayerVideoOverlayVideoRenderer {
|
|||
//}
|
||||
|
||||
pub fn get_property_video_sink(&self) -> Option<gst::Element> {
|
||||
let mut value = Value::from(None::<&gst::Element>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <gst::Element as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "video-sink".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
pub fn set_property_video_sink<P: IsA<gst::Element> + IsA<glib::object::Object> + glib::value::SetValueOptional>(&self, video_sink: Option<&P>) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -5,6 +5,85 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||
|
||||
## [0.9.1] - 2017-11-26
|
||||
### Fixed
|
||||
- Export `FlowError`/`FlowSuccess`, `ClockError`/`ClockSuccess`,
|
||||
`PadLinkError`/`PadLinkSuccess` too
|
||||
|
||||
## [0.9.0] - 2017-11-26
|
||||
### Added
|
||||
- Bindings for (outputting to) the GStreamer logging system
|
||||
- Bindings for the GStreamer base library
|
||||
- Bindings for all the `Pad` functions to override pad behaviour, and pad task
|
||||
functions
|
||||
- Bindings for `StaticCaps` and `StaticPadTemplate`
|
||||
- Bindings for `deep-notify` signal on `Object`
|
||||
- Support for directly creating `Error`/`Warning`/`Info` `Messages` and posting them
|
||||
from an element with context information (file, line, module, etc.) similar
|
||||
to the C `GST_ELEMENT_ERROR` macro
|
||||
- Support for setting custom fields in `Messages`/`Events` during construction
|
||||
- Support for creating Buffers out of anything that is `AsRef<[u8]>` or
|
||||
`AsMut<[u8]>`
|
||||
- Support for using the `Read` trait on `Adapter`
|
||||
- Functions for getting all sink/src/all pads of an `Element`, and all children
|
||||
of a `Bin`
|
||||
- Builder for `Caps` and `Structures` in addition to the existing functions
|
||||
- `AppSrc`/`AppSink` implement `BaseSrc`/`BaseSink` and `URIHandler`
|
||||
- Rust ports of the basic tutorials 1 to 8 from
|
||||
https://gstreamer.freedesktop.org/documentation/tutorials/
|
||||
- "Getting started" and "Installation" sections to the README.md
|
||||
- "dox" feature for generating documentation for all available configurations
|
||||
|
||||
### Fixed
|
||||
- `StackTraceFlags` are only available since 1.12
|
||||
- Worked around macOS requiring a `NSRunLoop` running on the main thread in all
|
||||
examples and tutorials, to be able to show a window or anything else
|
||||
|
||||
### Changed
|
||||
- `ClockTime` is now a wrapper around `Option<u64>` to handle the
|
||||
`CLOCK_TIME_NONE` case better. This wrapper implements all the arithmetic
|
||||
and other traits as needed and ensures that no accidential calculations with
|
||||
`CLOCK_TIME_NONE` can happen
|
||||
- "Values with format", like in `Duration`/`Position`/`Convert` queries or
|
||||
`Seek` events now return a `FormatValue` type. This contains the actual
|
||||
`Format` together with the value and does any required conversions. This
|
||||
also makes it harder to accidentially mix e.g. values in bytes and time
|
||||
- `PadProbeId` does not implement `Clone`/`Copy` anymore
|
||||
- Property notify watches return a custom type instead of ulong
|
||||
- `Error`/`Warning`/`Info` `Messages` can only be created with specific kinds of
|
||||
`glib::Error` now. Using arbitrary ones does not work
|
||||
- `Iterator` bindings were completely rewritten and provide the item type as a
|
||||
generic type parameter now, greatly simplifying its usage
|
||||
- All `glib::Values` are now `glib::SendValue` instead, e.g. in `Caps` and
|
||||
`Structures`, as their content must be possible to send to different threads
|
||||
safely
|
||||
- `Message::get_src()` can return `None`
|
||||
- Allow `None` as `Caps` in `AppSrc`/`AppSink`
|
||||
- Allow everything implementing `Into<Option<&str>>` to be used as a pad name
|
||||
- Moved `copy()` from `GstRc` directly to `MiniObject`
|
||||
- Success/Error enums (like `FlowReturn`, `PadLinkReturn`, `StateChangeReturn`) now
|
||||
implement an `into_result()` function that splits them into a `Result` with
|
||||
the good and bad cases. Also mark them as `#[must_use]` to make it harder to
|
||||
accidentially ignore errors.
|
||||
- Error enums implement the `Error` trait
|
||||
|
||||
- Many examples use the `failure` crate for error handling now, cleaning up the
|
||||
error handling code quite a bit
|
||||
- Lots of other code cleanup, compiler/clippy warning cleanup, etc.
|
||||
|
||||
## [0.8.2] - 2017-11-11
|
||||
### Fixed
|
||||
- Implement StaticType of BufferRef instead of Buffer. Buffer aka
|
||||
GstRc<BufferRef> already implements StaticType if BufferRef does, and
|
||||
without this it was not possible to use Buffers in GValues.
|
||||
- Free memory of the appsink/appsrc callbacks with the correct type. It was
|
||||
crashing because of using the wrong type before.
|
||||
- Fix documentation URLs in Cargo.toml.
|
||||
|
||||
### Added
|
||||
- Installation instructions and links to documentation for getting started to
|
||||
README.md.
|
||||
|
||||
## [0.8.1] - 2017-09-15
|
||||
### Added
|
||||
- Implement Send+Sync for Query, Message and Event, and their corresponding
|
||||
|
|
|
@ -15,12 +15,12 @@ build = "build.rs"
|
|||
[dependencies]
|
||||
bitflags = "1.0"
|
||||
libc = "0.2"
|
||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gstreamer-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
gstreamer-video-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
||||
gstreamer = { path = "../gstreamer" }
|
||||
glib-sys = "0.5"
|
||||
gobject-sys = "0.5"
|
||||
gstreamer-sys = { version = "0.3", features = ["v1_8"] }
|
||||
gstreamer-video-sys = { version = "0.3", features = ["v1_8"] }
|
||||
glib = "0.4"
|
||||
gstreamer = { version = "0.9", path = "../gstreamer" }
|
||||
|
||||
[build-dependencies.rustdoc-stripper]
|
||||
version = "0.1"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
mod video_overlay;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -14,7 +14,7 @@ use std::str;
|
|||
|
||||
use glib::translate::{from_glib, FromGlib, ToGlib, ToGlibPtr};
|
||||
|
||||
#[derive(PartialEq, Eq, Debug)]
|
||||
#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
|
||||
pub enum VideoEndianness {
|
||||
Unknown,
|
||||
LittleEndian = 1234,
|
||||
|
|
|
@ -38,7 +38,7 @@ impl ToGlib for VideoColorRange {
|
|||
VideoColorRange::Unknown => ffi::GST_VIDEO_COLOR_RANGE_UNKNOWN,
|
||||
VideoColorRange::Range0255 => ffi::GST_VIDEO_COLOR_RANGE_0_255,
|
||||
VideoColorRange::Range16235 => ffi::GST_VIDEO_COLOR_RANGE_16_235,
|
||||
VideoColorRange::__Unknown(value) => unsafe { mem::transmute(value) },
|
||||
VideoColorRange::__Unknown(value) => value,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -70,9 +70,7 @@ impl<'a> glib::value::FromValueOptional<'a> for VideoColorRange {
|
|||
|
||||
impl<'a> glib::value::FromValue<'a> for VideoColorRange {
|
||||
unsafe fn from_value(value: &glib::value::Value) -> Self {
|
||||
from_glib(mem::transmute::<i32, ffi::GstVideoColorRange>(
|
||||
gobject_ffi::g_value_get_enum(value.to_glib_none().0),
|
||||
))
|
||||
from_glib(gobject_ffi::g_value_get_enum(value.to_glib_none().0))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -255,7 +253,7 @@ impl<'a> VideoInfoBuilder<'a> {
|
|||
|
||||
if let Some(multiview_mode) = self.multiview_mode {
|
||||
let ptr = &mut info._gst_reserved as *mut _ as *mut i32;
|
||||
ptr::write(ptr.offset(0), mem::transmute(multiview_mode.to_glib()));
|
||||
ptr::write(ptr.offset(0), multiview_mode.to_glib());
|
||||
}
|
||||
|
||||
if let Some(multiview_flags) = self.multiview_flags {
|
||||
|
@ -267,7 +265,7 @@ impl<'a> VideoInfoBuilder<'a> {
|
|||
{
|
||||
if let Some(field_order) = self.field_order {
|
||||
let ptr = &mut info._gst_reserved as *mut _ as *mut i32;
|
||||
ptr::write(ptr.offset(2), mem::transmute(field_order.to_glib()));
|
||||
ptr::write(ptr.offset(2), field_order.to_glib());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -498,14 +496,14 @@ impl VideoInfo {
|
|||
pub fn multiview_mode(&self) -> ::VideoMultiviewMode {
|
||||
unsafe {
|
||||
let ptr = &self.0._gst_reserved as *const _ as *const i32;
|
||||
from_glib(mem::transmute(ptr::read(ptr.offset(0))))
|
||||
from_glib(ptr::read(ptr.offset(0)))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn multiview_flags(&self) -> ::VideoMultiviewFlags {
|
||||
unsafe {
|
||||
let ptr = &self.0._gst_reserved as *const _ as *const u32;
|
||||
from_glib(mem::transmute(ptr::read(ptr.offset(1))))
|
||||
from_glib(ffi::GstVideoMultiviewFlags::from_bits_truncate(ptr::read(ptr.offset(1))))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -513,7 +511,7 @@ impl VideoInfo {
|
|||
pub fn field_order(&self) -> ::VideoFieldOrder {
|
||||
unsafe {
|
||||
let ptr = &self.0._gst_reserved as *const _ as *const i32;
|
||||
from_glib(mem::transmute(ptr::read(ptr.offset(2))))
|
||||
from_glib(ptr::read(ptr.offset(2)))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,85 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html),
|
||||
specifically the [variant used by Rust](http://doc.crates.io/manifest.html#the-version-field).
|
||||
|
||||
## [0.9.1] - 2017-11-26
|
||||
### Fixed
|
||||
- Export `FlowError`/`FlowSuccess`, `ClockError`/`ClockSuccess`,
|
||||
`PadLinkError`/`PadLinkSuccess` too
|
||||
|
||||
## [0.9.0] - 2017-11-26
|
||||
### Added
|
||||
- Bindings for (outputting to) the GStreamer logging system
|
||||
- Bindings for the GStreamer base library
|
||||
- Bindings for all the `Pad` functions to override pad behaviour, and pad task
|
||||
functions
|
||||
- Bindings for `StaticCaps` and `StaticPadTemplate`
|
||||
- Bindings for `deep-notify` signal on `Object`
|
||||
- Support for directly creating `Error`/`Warning`/`Info` `Messages` and posting them
|
||||
from an element with context information (file, line, module, etc.) similar
|
||||
to the C `GST_ELEMENT_ERROR` macro
|
||||
- Support for setting custom fields in `Messages`/`Events` during construction
|
||||
- Support for creating Buffers out of anything that is `AsRef<[u8]>` or
|
||||
`AsMut<[u8]>`
|
||||
- Support for using the `Read` trait on `Adapter`
|
||||
- Functions for getting all sink/src/all pads of an `Element`, and all children
|
||||
of a `Bin`
|
||||
- Builder for `Caps` and `Structures` in addition to the existing functions
|
||||
- `AppSrc`/`AppSink` implement `BaseSrc`/`BaseSink` and `URIHandler`
|
||||
- Rust ports of the basic tutorials 1 to 8 from
|
||||
https://gstreamer.freedesktop.org/documentation/tutorials/
|
||||
- "Getting started" and "Installation" sections to the README.md
|
||||
- "dox" feature for generating documentation for all available configurations
|
||||
|
||||
### Fixed
|
||||
- `StackTraceFlags` are only available since 1.12
|
||||
- Worked around macOS requiring a `NSRunLoop` running on the main thread in all
|
||||
examples and tutorials, to be able to show a window or anything else
|
||||
|
||||
### Changed
|
||||
- `ClockTime` is now a wrapper around `Option<u64>` to handle the
|
||||
`CLOCK_TIME_NONE` case better. This wrapper implements all the arithmetic
|
||||
and other traits as needed and ensures that no accidential calculations with
|
||||
`CLOCK_TIME_NONE` can happen
|
||||
- "Values with format", like in `Duration`/`Position`/`Convert` queries or
|
||||
`Seek` events now return a `FormatValue` type. This contains the actual
|
||||
`Format` together with the value and does any required conversions. This
|
||||
also makes it harder to accidentially mix e.g. values in bytes and time
|
||||
- `PadProbeId` does not implement `Clone`/`Copy` anymore
|
||||
- Property notify watches return a custom type instead of ulong
|
||||
- `Error`/`Warning`/`Info` `Messages` can only be created with specific kinds of
|
||||
`glib::Error` now. Using arbitrary ones does not work
|
||||
- `Iterator` bindings were completely rewritten and provide the item type as a
|
||||
generic type parameter now, greatly simplifying its usage
|
||||
- All `glib::Values` are now `glib::SendValue` instead, e.g. in `Caps` and
|
||||
`Structures`, as their content must be possible to send to different threads
|
||||
safely
|
||||
- `Message::get_src()` can return `None`
|
||||
- Allow `None` as `Caps` in `AppSrc`/`AppSink`
|
||||
- Allow everything implementing `Into<Option<&str>>` to be used as a pad name
|
||||
- Moved `copy()` from `GstRc` directly to `MiniObject`
|
||||
- Success/Error enums (like `FlowReturn`, `PadLinkReturn`, `StateChangeReturn`) now
|
||||
implement an `into_result()` function that splits them into a `Result` with
|
||||
the good and bad cases. Also mark them as `#[must_use]` to make it harder to
|
||||
accidentially ignore errors.
|
||||
- Error enums implement the `Error` trait
|
||||
|
||||
- Many examples use the `failure` crate for error handling now, cleaning up the
|
||||
error handling code quite a bit
|
||||
- Lots of other code cleanup, compiler/clippy warning cleanup, etc.
|
||||
|
||||
## [0.8.2] - 2017-11-11
|
||||
### Fixed
|
||||
- Implement StaticType of BufferRef instead of Buffer. Buffer aka
|
||||
GstRc<BufferRef> already implements StaticType if BufferRef does, and
|
||||
without this it was not possible to use Buffers in GValues.
|
||||
- Free memory of the appsink/appsrc callbacks with the correct type. It was
|
||||
crashing because of using the wrong type before.
|
||||
- Fix documentation URLs in Cargo.toml.
|
||||
|
||||
### Added
|
||||
- Installation instructions and links to documentation for getting started to
|
||||
README.md.
|
||||
|
||||
## [0.8.1] - 2017-09-15
|
||||
### Added
|
||||
- Implement Send+Sync for Query, Message and Event, and their corresponding
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "gstreamer"
|
||||
version = "0.9.0"
|
||||
version = "0.9.1"
|
||||
authors = ["Sebastian Dröge <sebastian@centricular.com>"]
|
||||
categories = ["api-bindings", "multimedia"]
|
||||
description = "Rust bindings for GStreamer"
|
||||
|
@ -15,10 +15,10 @@ build = "build.rs"
|
|||
[dependencies]
|
||||
bitflags = "1.0"
|
||||
libc = "0.2"
|
||||
glib-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gobject-sys = { git = "https://github.com/gtk-rs/sys" }
|
||||
gstreamer-sys = { git = "https://github.com/sdroege/gstreamer-sys", features = ["v1_8"] }
|
||||
glib = { git = "https://github.com/gtk-rs/glib" }
|
||||
glib-sys = "0.5"
|
||||
gobject-sys = "0.5"
|
||||
gstreamer-sys = { version = "0.3", features = ["v1_8"] }
|
||||
glib = "0.4"
|
||||
num-rational = { version = "0.1.38", default-features = false, features = [] }
|
||||
lazy_static = "0.2"
|
||||
futures = { version = "0.1", optional = true }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
#[allow(unused_imports)]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ChildProxy;
|
||||
|
@ -10,6 +10,7 @@ use Pad;
|
|||
use PadDirection;
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -205,11 +206,12 @@ impl<O: IsA<Bin> + IsA<glib::object::Object>> BinExt for O {
|
|||
}
|
||||
|
||||
fn get_property_async_handling(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "async-handling".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_async_handling(&self, async_handling: bool) {
|
||||
|
@ -219,11 +221,12 @@ impl<O: IsA<Bin> + IsA<glib::object::Object>> BinExt for O {
|
|||
}
|
||||
|
||||
fn get_property_message_forward(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "message-forward".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_message_forward(&self, message_forward: bool) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ClockTime;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ClockTime;
|
||||
use Object;
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -51,7 +52,7 @@ impl Clock {
|
|||
// unsafe { TODO: call ffi::gst_clock_id_wait() }
|
||||
//}
|
||||
|
||||
//pub fn id_wait_async<P: Into<Option</*Unimplemented*/Fundamental: Pointer>>>(id: /*Unimplemented*/ClockID, func: /*Unknown conversion*//*Unimplemented*/ClockCallback, user_data: P, destroy_data: /*Unknown conversion*//*Unimplemented*/DestroyNotify) -> ClockReturn {
|
||||
//pub fn id_wait_async(id: /*Unimplemented*/ClockID, func: /*Unknown conversion*//*Unimplemented*/ClockCallback, destroy_data: /*Unknown conversion*//*Unimplemented*/DestroyNotify) -> ClockReturn {
|
||||
// unsafe { TODO: call ffi::gst_clock_id_wait_async() }
|
||||
//}
|
||||
}
|
||||
|
@ -270,11 +271,12 @@ impl<O: IsA<Clock> + IsA<glib::object::Object>> ClockExt for O {
|
|||
}
|
||||
|
||||
fn get_property_window_size(&self) -> i32 {
|
||||
let mut value = Value::from(&0);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <i32 as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "window-size".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_window_size(&self, window_size: i32) {
|
||||
|
@ -284,11 +286,12 @@ impl<O: IsA<Clock> + IsA<glib::object::Object>> ClockExt for O {
|
|||
}
|
||||
|
||||
fn get_property_window_threshold(&self) -> i32 {
|
||||
let mut value = Value::from(&0);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <i32 as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "window-threshold".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_window_threshold(&self, window_threshold: i32) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Caps;
|
||||
|
@ -7,6 +7,7 @@ use Object;
|
|||
use Structure;
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -119,35 +120,39 @@ impl<O: IsA<Device> + IsA<glib::object::Object>> DeviceExt for O {
|
|||
}
|
||||
|
||||
fn get_property_caps(&self) -> Option<Caps> {
|
||||
let mut value = Value::from(None::<&Caps>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <Caps as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "caps".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
fn get_property_device_class(&self) -> Option<String> {
|
||||
let mut value = Value::from(None::<&str>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <String as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "device-class".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
fn get_property_display_name(&self) -> Option<String> {
|
||||
let mut value = Value::from(None::<&str>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <String as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "display-name".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
fn get_property_properties(&self) -> Option<Structure> {
|
||||
let mut value = Value::from(None::<&Structure>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <Structure as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "properties".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
fn connect_removed<F: Fn(&Self) + Send + Sync + 'static>(&self, f: F) -> SignalHandlerId {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Bus;
|
||||
|
@ -7,6 +7,7 @@ use Device;
|
|||
use Object;
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -132,11 +133,12 @@ impl<O: IsA<DeviceMonitor> + IsA<glib::object::Object>> DeviceMonitorExt for O {
|
|||
}
|
||||
|
||||
fn get_property_show_all(&self) -> bool {
|
||||
let mut value = Value::from(&false);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <bool as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "show-all".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get().unwrap()
|
||||
}
|
||||
value.get().unwrap()
|
||||
}
|
||||
|
||||
fn set_property_show_all(&self, show_all: bool) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Bus;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use DeviceProvider;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Bus;
|
||||
|
@ -85,7 +85,7 @@ pub trait ElementExt {
|
|||
fn add_pad<P: IsA<Pad>>(&self, pad: &P) -> Result<(), glib::error::BoolError>;
|
||||
|
||||
//#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||
//fn call_async<P: Into<Option</*Unimplemented*/Fundamental: Pointer>>>(&self, func: /*Unknown conversion*//*Unimplemented*/ElementCallAsyncFunc, user_data: P, destroy_notify: /*Unknown conversion*//*Unimplemented*/DestroyNotify);
|
||||
//fn call_async(&self, func: /*Unknown conversion*//*Unimplemented*/ElementCallAsyncFunc, destroy_notify: /*Unknown conversion*//*Unimplemented*/DestroyNotify);
|
||||
|
||||
fn change_state(&self, transition: StateChange) -> StateChangeReturn;
|
||||
|
||||
|
@ -199,7 +199,7 @@ impl<O: IsA<Element> + IsA<glib::object::Object>> ElementExt for O {
|
|||
}
|
||||
|
||||
//#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||
//fn call_async<P: Into<Option</*Unimplemented*/Fundamental: Pointer>>>(&self, func: /*Unknown conversion*//*Unimplemented*/ElementCallAsyncFunc, user_data: P, destroy_notify: /*Unknown conversion*//*Unimplemented*/DestroyNotify) {
|
||||
//fn call_async(&self, func: /*Unknown conversion*//*Unimplemented*/ElementCallAsyncFunc, destroy_notify: /*Unknown conversion*//*Unimplemented*/DestroyNotify) {
|
||||
// unsafe { TODO: call ffi::gst_element_call_async() }
|
||||
//}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Caps;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Bin;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Object;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
mod bin;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ClockTime;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Caps;
|
||||
|
@ -18,6 +18,7 @@ use Stream;
|
|||
use TaskState;
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -543,19 +544,21 @@ impl<O: IsA<Pad> + IsA<glib::object::Object>> PadExt for O {
|
|||
}
|
||||
|
||||
fn get_property_caps(&self) -> Option<Caps> {
|
||||
let mut value = Value::from(None::<&Caps>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <Caps as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "caps".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
fn get_property_template(&self) -> Option<PadTemplate> {
|
||||
let mut value = Value::from(None::<&PadTemplate>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <PadTemplate as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "template".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
fn set_property_template(&self, template: Option<&PadTemplate>) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Caps;
|
||||
|
@ -7,6 +7,7 @@ use Pad;
|
|||
use PadDirection;
|
||||
use PadPresence;
|
||||
use ffi;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::IsA;
|
||||
use glib::signal::SignalHandlerId;
|
||||
|
@ -48,26 +49,29 @@ impl PadTemplate {
|
|||
}
|
||||
|
||||
pub fn get_property_direction(&self) -> PadDirection {
|
||||
let mut value = Value::from(&0);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <PadDirection as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "direction".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
from_glib(transmute(value.get::<i32>().unwrap()))
|
||||
value.get().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_name_template(&self) -> Option<String> {
|
||||
let mut value = Value::from(None::<&str>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <String as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "name-template".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
pub fn get_property_presence(&self) -> PadPresence {
|
||||
let mut value = Value::from(&0);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <PadPresence as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "presence".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
from_glib(transmute(value.get::<i32>().unwrap()))
|
||||
value.get().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Bin;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Error;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use ffi;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Object;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Caps;
|
||||
|
@ -7,6 +7,7 @@ use StreamFlags;
|
|||
use StreamType;
|
||||
use TagList;
|
||||
use ffi;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::signal::SignalHandlerId;
|
||||
use glib::signal::connect;
|
||||
|
@ -107,11 +108,12 @@ impl Stream {
|
|||
}
|
||||
|
||||
pub fn get_property_caps(&self) -> Option<Caps> {
|
||||
let mut value = Value::from(None::<&Caps>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <Caps as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "caps".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
pub fn set_property_caps(&self, caps: Option<&Caps>) {
|
||||
|
@ -121,49 +123,51 @@ impl Stream {
|
|||
}
|
||||
|
||||
pub fn get_property_stream_flags(&self) -> StreamFlags {
|
||||
let mut value = Value::from(&0u32);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <StreamFlags as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "stream-flags".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
from_glib(transmute(value.get::<u32>().unwrap()))
|
||||
value.get().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_property_stream_flags(&self, stream_flags: StreamFlags) {
|
||||
let stream_flags = stream_flags.to_glib().bits() as u32;
|
||||
unsafe {
|
||||
gobject_ffi::g_object_set_property(self.to_glib_none().0, "stream-flags".to_glib_none().0, Value::from(&stream_flags).to_glib_none().0);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_stream_id(&self) -> Option<String> {
|
||||
let mut value = Value::from(None::<&str>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <String as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "stream-id".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
pub fn get_property_stream_type(&self) -> StreamType {
|
||||
let mut value = Value::from(&0u32);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <StreamType as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "stream-type".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
from_glib(transmute(value.get::<u32>().unwrap()))
|
||||
value.get().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_property_stream_type(&self, stream_type: StreamType) {
|
||||
let stream_type = stream_type.to_glib().bits() as u32;
|
||||
unsafe {
|
||||
gobject_ffi::g_object_set_property(self.to_glib_none().0, "stream-type".to_glib_none().0, Value::from(&stream_type).to_glib_none().0);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_property_tags(&self) -> Option<TagList> {
|
||||
let mut value = Value::from(None::<&TagList>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <TagList as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "tags".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
pub fn set_property_tags(&self, tags: Option<&TagList>) {
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Object;
|
||||
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||
use Stream;
|
||||
use ffi;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::signal::SignalHandlerId;
|
||||
use glib::signal::connect;
|
||||
|
@ -64,11 +65,12 @@ impl StreamCollection {
|
|||
}
|
||||
|
||||
pub fn get_property_upstream_id(&self) -> Option<String> {
|
||||
let mut value = Value::from(None::<&str>);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <String as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "upstream-id".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
value.get()
|
||||
}
|
||||
value.get()
|
||||
}
|
||||
|
||||
pub fn set_property_upstream_id(&self, upstream_id: Option<&str>) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Clock;
|
||||
|
@ -6,6 +6,7 @@ use ClockType;
|
|||
use Object;
|
||||
use ffi;
|
||||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::Value;
|
||||
use glib::object::Downcast;
|
||||
use glib::object::IsA;
|
||||
|
@ -56,15 +57,15 @@ pub trait SystemClockExt {
|
|||
|
||||
impl<O: IsA<SystemClock> + IsA<glib::object::Object>> SystemClockExt for O {
|
||||
fn get_property_clock_type(&self) -> ClockType {
|
||||
let mut value = Value::from(&0);
|
||||
unsafe {
|
||||
let mut value = Value::uninitialized();
|
||||
gobject_ffi::g_value_init(value.to_glib_none_mut().0, <ClockType as StaticType>::static_type().to_glib());
|
||||
gobject_ffi::g_object_get_property(self.to_glib_none().0, "clock-type".to_glib_none().0, value.to_glib_none_mut().0);
|
||||
from_glib(transmute(value.get::<i32>().unwrap()))
|
||||
value.get().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
fn set_property_clock_type(&self, clock_type: ClockType) {
|
||||
let clock_type = clock_type.to_glib() as i32;
|
||||
unsafe {
|
||||
gobject_ffi::g_object_set_property(self.to_glib_none().0, "clock-type".to_glib_none().0, Value::from(&clock_type).to_glib_none().0);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Element;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Element;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// This file was generated by gir (0409d73) from gir-files (???)
|
||||
// This file was generated by gir (d50d839) from gir-files (???)
|
||||
// DO NOT EDIT
|
||||
|
||||
use Error;
|
||||
|
|
|
@ -371,7 +371,15 @@ impl ToOwned for BufferRef {
|
|||
|
||||
impl fmt::Debug for BufferRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "{:?}", unsafe { self.as_ptr() })
|
||||
f.debug_struct("Buffer")
|
||||
.field("pts", &self.get_pts().to_string())
|
||||
.field("dts", &self.get_dts().to_string())
|
||||
.field("duration", &self.get_duration().to_string())
|
||||
.field("size", &self.get_size())
|
||||
.field("offset", &self.get_offset())
|
||||
.field("offset_end", &self.get_offset_end())
|
||||
.field("flags", &self.get_flags())
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ use ffi;
|
|||
use glib;
|
||||
use glib::StaticType;
|
||||
use glib::translate::{from_glib, from_glib_full};
|
||||
use std::fmt;
|
||||
|
||||
use miniobject::*;
|
||||
use Buffer;
|
||||
|
@ -94,6 +95,20 @@ impl ToOwned for BufferListRef {
|
|||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for BufferListRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
let size = self.iter().map(|b| b.get_size()).sum::<usize>();
|
||||
let (pts, dts) = self.get(0).map(|b| (b.get_pts(), b.get_dts())).unwrap_or((::ClockTime::none(), ::ClockTime::none()));
|
||||
|
||||
f.debug_struct("BufferList")
|
||||
.field("buffers", &self.len())
|
||||
.field("pts", &pts.to_string())
|
||||
.field("dts", &dts.to_string())
|
||||
.field("size", &size)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl StaticType for BufferListRef {
|
||||
fn static_type() -> glib::Type {
|
||||
unsafe { from_glib(ffi::gst_buffer_list_get_type()) }
|
||||
|
|
|
@ -149,7 +149,7 @@ mod futures {
|
|||
pub fn new(bus: &Bus) -> Self {
|
||||
skip_assert_initialized!();
|
||||
let task = Arc::new(Mutex::new(None));
|
||||
let task_clone = task.clone();
|
||||
let task_clone = Arc::clone(&task);
|
||||
|
||||
bus.set_sync_handler(move |_, _| {
|
||||
let mut task = task_clone.lock().unwrap();
|
||||
|
|
|
@ -344,6 +344,14 @@ define_iter!(Iter, &'a CapsRef, &'a StructureRef);
|
|||
define_iter!(IterMut, &'a mut CapsRef, &'a mut StructureRef);
|
||||
|
||||
impl fmt::Debug for CapsRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.debug_tuple("Caps")
|
||||
.field(&self.to_string())
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for CapsRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.write_str(&self.to_string())
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::fmt;
|
||||
use std::ffi::CStr;
|
||||
|
||||
use ffi;
|
||||
|
@ -76,6 +77,15 @@ impl StaticType for ContextRef {
|
|||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for ContextRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.debug_struct("Context")
|
||||
.field("type", &self.get_context_type())
|
||||
.field("structure", &self.get_structure())
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl ToOwned for ContextRef {
|
||||
type Owned = GstRc<ContextRef>;
|
||||
|
||||
|
|
16
gstreamer/src/date_time.rs
Normal file
16
gstreamer/src/date_time.rs
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Copyright (C) 2017 Sebastian Dröge <sebastian@centricular.com>
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use DateTime;
|
||||
use std::fmt;
|
||||
|
||||
impl fmt::Display for DateTime {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.write_str(self.to_iso8601_string().unwrap_or(String::from("None")).as_str())
|
||||
}
|
||||
}
|
|
@ -54,6 +54,7 @@ impl Element {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
|
||||
pub enum ElementMessageType {
|
||||
Error,
|
||||
Warning,
|
||||
|
|
|
@ -12,6 +12,8 @@ use structure::*;
|
|||
|
||||
use std::ptr;
|
||||
use std::mem;
|
||||
use std::cmp;
|
||||
use std::fmt;
|
||||
use std::ffi::CStr;
|
||||
|
||||
use glib;
|
||||
|
@ -21,6 +23,8 @@ use glib::translate::{from_glib, from_glib_full, from_glib_none, ToGlib, ToGlibP
|
|||
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||
use glib::translate::FromGlibPtrContainer;
|
||||
|
||||
use EventType;
|
||||
|
||||
#[repr(C)]
|
||||
pub struct EventRef(ffi::GstEvent);
|
||||
|
||||
|
@ -33,6 +37,60 @@ unsafe impl MiniObject for EventRef {
|
|||
type GstType = ffi::GstEvent;
|
||||
}
|
||||
|
||||
impl EventType {
|
||||
pub fn is_upstream(&self) -> bool {
|
||||
(self.to_glib() as u32) & (ffi::GST_EVENT_TYPE_UPSTREAM.bits()) != 0
|
||||
}
|
||||
|
||||
pub fn is_downstream(&self) -> bool {
|
||||
(self.to_glib() as u32) & (ffi::GST_EVENT_TYPE_DOWNSTREAM.bits()) != 0
|
||||
}
|
||||
|
||||
pub fn is_serialized(&self) -> bool {
|
||||
(self.to_glib() as u32) & (ffi::GST_EVENT_TYPE_SERIALIZED.bits()) != 0
|
||||
}
|
||||
|
||||
pub fn is_sticky(&self) -> bool {
|
||||
(self.to_glib() as u32) & (ffi::GST_EVENT_TYPE_STICKY.bits()) != 0
|
||||
}
|
||||
|
||||
pub fn is_sticky_multi(&self) -> bool {
|
||||
(self.to_glib() as u32) & (ffi::GST_EVENT_TYPE_STICKY_MULTI.bits()) != 0
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for EventType {
|
||||
fn partial_cmp(&self, other: &Self) -> Option<cmp::Ordering> {
|
||||
if !self.is_serialized() || !other.is_serialized() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let v1 = self.to_glib() as u32;
|
||||
let v2 = other.to_glib() as u32;
|
||||
|
||||
let stream_start = ffi::GST_EVENT_STREAM_START as u32;
|
||||
let segment = ffi::GST_EVENT_SEGMENT as u32;
|
||||
let eos = ffi::GST_EVENT_EOS as u32;
|
||||
|
||||
// Strictly ordered range between stream_start and segment,
|
||||
// and EOS is bigger than everything else
|
||||
if v1 >= stream_start && v1 <= segment || v2 >= stream_start && v2 <= segment {
|
||||
Some(v1.cmp(&v2))
|
||||
// If one is EOS, the other is definitely less or equal
|
||||
} else if v1 == eos || v2 == eos {
|
||||
if v1 == v2 {
|
||||
Some(cmp::Ordering::Equal)
|
||||
} else if v1 == eos {
|
||||
Some(cmp::Ordering::Greater)
|
||||
} else {
|
||||
Some(cmp::Ordering::Less)
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl EventRef {
|
||||
pub fn get_seqnum(&self) -> u32 {
|
||||
unsafe { ffi::gst_event_get_seqnum(self.as_mut_ptr()) }
|
||||
|
@ -51,23 +109,27 @@ impl EventRef {
|
|||
}
|
||||
|
||||
pub fn is_upstream(&self) -> bool {
|
||||
unsafe { ((*self.as_ptr()).type_ as u32) & (ffi::GST_EVENT_TYPE_UPSTREAM.bits()) != 0 }
|
||||
self.get_type().is_upstream()
|
||||
}
|
||||
|
||||
pub fn is_downstream(&self) -> bool {
|
||||
unsafe { ((*self.as_ptr()).type_ as u32) & (ffi::GST_EVENT_TYPE_DOWNSTREAM.bits()) != 0 }
|
||||
self.get_type().is_downstream()
|
||||
}
|
||||
|
||||
pub fn is_serialized(&self) -> bool {
|
||||
unsafe { ((*self.as_ptr()).type_ as u32) & (ffi::GST_EVENT_TYPE_SERIALIZED.bits()) != 0 }
|
||||
self.get_type().is_serialized()
|
||||
}
|
||||
|
||||
pub fn is_sticky(&self) -> bool {
|
||||
unsafe { ((*self.as_ptr()).type_ as u32) & (ffi::GST_EVENT_TYPE_STICKY.bits()) != 0 }
|
||||
self.get_type().is_sticky()
|
||||
}
|
||||
|
||||
pub fn is_sticky_multi(&self) -> bool {
|
||||
unsafe { ((*self.as_ptr()).type_ as u32) & (ffi::GST_EVENT_TYPE_STICKY_MULTI.bits()) != 0 }
|
||||
self.get_type().is_sticky_multi()
|
||||
}
|
||||
|
||||
pub fn get_type(&self) -> EventType {
|
||||
unsafe { from_glib((*self.as_ptr()).type_) }
|
||||
}
|
||||
|
||||
pub fn view(&self) -> EventView {
|
||||
|
@ -139,9 +201,9 @@ impl GstRc<EventRef> {
|
|||
}
|
||||
|
||||
#[cfg(any(feature = "v1_10", feature = "dox"))]
|
||||
pub fn new_stream_collection<'a>(
|
||||
stream_collection: &'a ::StreamCollection,
|
||||
) -> StreamCollectionBuilder<'a> {
|
||||
pub fn new_stream_collection(
|
||||
stream_collection: &::StreamCollection,
|
||||
) -> StreamCollectionBuilder {
|
||||
assert_initialized_main_thread!();
|
||||
StreamCollectionBuilder::new(stream_collection)
|
||||
}
|
||||
|
@ -307,6 +369,30 @@ impl glib::types::StaticType for EventRef {
|
|||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for EventRef {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
f.debug_struct("Event")
|
||||
.field("type", & unsafe {
|
||||
let type_ = ffi::gst_event_type_get_name((*self.as_ptr()).type_);
|
||||
CStr::from_ptr(type_).to_str().unwrap()
|
||||
})
|
||||
.field("seqnum", &self.get_seqnum())
|
||||
.field("structure", &self.get_structure())
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl ToOwned for EventRef {
|
||||
type Owned = GstRc<EventRef>;
|
||||
|
||||
fn to_owned(&self) -> GstRc<EventRef> {
|
||||
unsafe {
|
||||
from_glib_full(ffi::gst_mini_object_copy(self.as_ptr() as *const _)
|
||||
as *mut _)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub enum EventView<'a> {
|
||||
FlushStart(FlushStart<'a>),
|
||||
FlushStop(FlushStop<'a>),
|
||||
|
|
|
@ -355,7 +355,7 @@ unsafe extern "C" fn filter_boxed_ref<T: 'static>(boxed: gpointer) -> gpointer {
|
|||
callback_guard!();
|
||||
|
||||
let boxed = Arc::from_raw(boxed as *const (Box<Fn(T) -> bool + Send + Sync + 'static>));
|
||||
let copy = boxed.clone();
|
||||
let copy = Arc::clone(&boxed);
|
||||
|
||||
// Forget it and keep it alive, we will still need it later
|
||||
let _ = Arc::into_raw(boxed);
|
||||
|
|
|
@ -106,6 +106,7 @@ mod parse_context;
|
|||
mod enums;
|
||||
mod clock_time;
|
||||
mod format;
|
||||
mod date_time;
|
||||
pub use object::GstObjectExtManual;
|
||||
pub use element::{ElementExtManual, ElementMessageType, NotifyWatchId};
|
||||
pub use element::{ELEMENT_METADATA_AUTHOR, ELEMENT_METADATA_DESCRIPTION, ELEMENT_METADATA_DOC_URI,
|
||||
|
@ -120,7 +121,8 @@ pub use device_provider::DeviceProviderExtManual;
|
|||
pub use parse_context::ParseContext;
|
||||
#[cfg(any(feature = "futures", feature = "dox"))]
|
||||
pub use bus::BusStream;
|
||||
pub use enums::{StateChangeError, StateChangeSuccess};
|
||||
pub use enums::{ClockError, ClockSuccess, FlowError, FlowSuccess, PadLinkError, PadLinkSuccess,
|
||||
StateChangeError, StateChangeSuccess};
|
||||
pub use clock_time::ClockTime;
|
||||
pub use format::FormatValue;
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue