Commit graph

625 commits

Author SHA1 Message Date
Sebastian Dröge
3c900e6102 Regenerate with latest gir 2018-08-18 00:25:12 +03:00
Sebastian Dröge
a6d9fe4b0a Remove std::iter::Iterator impl from gst::Iterator
It does not work well with possibly errors during iteration and
requiring to possibly resync.
2018-08-13 20:35:28 +03:00
Sebastian Dröge
0d70950821 Implement Pad::sticky_events_foreach() 2018-08-13 19:58:30 +03:00
Sebastian Dröge
999c84f0a0 Implement ValueExt::compare() around std::cmp::Ordering and implement an eq() function
No need for a custom enum
2018-08-10 14:22:15 +03:00
Sebastian Dröge
dba110e8ad Fix build with two-phase-borrows/NLL 2018-08-08 09:16:18 +02:00
Sebastian Dröge
cf9e875878 Implement Ord/PartialOrd on Seqnum 2018-08-06 11:25:44 +03:00
Philippe Normand
58741b7ea2 gstreamer: Implement deinit() function
This function is especially usefull when using the leaks tracer. It was removed
in commit e7a0543c.
2018-08-04 18:39:53 +03:00
Sebastian Dröge
ccca8248c3 Add getter for the current pad mode 2018-08-01 19:28:57 +03:00
François Laignel
0eb6bcf0c0 serde: restrain unneeded visibilities 2018-07-30 23:18:30 +03:00
François Laignel
68263ffc7d Buffer: serde: add a TODO for a future better design attempt
Serialization and deserialization are asymetrical: ser uses string literals
and de uses a dedicated `struct`, leading to possible inconsistencies.

The idea is to rely on a single `struct` for both ser and de. The only
problem is that, in order to avoid unneeded copies, `buffer` requires an owned
`ByteBuf` for de and a borrowed `Bytes` for ser. `Either` could help adapting
to both situations.
2018-07-30 23:18:30 +03:00
François Laignel
3ed7257da9 DateTime: serde: use an enum 2018-07-30 23:18:30 +03:00
François Laignel
9fd5392a16 value: serde: use stringify for types 2018-07-30 23:18:30 +03:00
François Laignel
6bda3ef174 serde: add roundtrip tests
This allows making sure serialization and deserialization are in sync for
types with asymetrical implementations.
2018-07-30 23:18:30 +03:00
François Laignel
64ea419839 Caps: serde as an enum
`Caps` can be `any`, `empty` or matching a list of `Structures`.
2018-07-30 23:18:30 +03:00
François Laignel
9f2f684188 format: serde: avoid redundant () for some types 2018-07-30 23:18:30 +03:00
François Laignel
dfc961679f segment: serde FormattedSegments too
... and use the same `struct` for serialization and deserialization so
that fields mapping consistency is ensured at compilation time.
2018-07-30 23:18:30 +03:00
François Laignel
ab9cd29bd6 serde: fmt pass
Note: clippy didn't raise any warning
2018-07-30 23:18:30 +03:00
François Laignel
d4fb10ef4c Toc: serde: rename loop_ to loop 2018-07-30 23:18:30 +03:00
François Laignel
0aac055727 Caps: serde: use a placeholder for CapsFeature
`CapsFeature` is not available in `gstreamer-rs` yet. Use a placeholder
with a `None` value for now.
2018-07-30 23:18:30 +03:00
François Laignel
fd0c3f4464 Structure: de: pass the new Structure to the Visitor
Use a `DeserializeSeed` to pass the newly created and named `Structure`.
2018-07-30 23:18:30 +03:00
François Laignel
23307a4795 Tags: ser/de: gather tags with the same name together 2018-07-30 23:18:30 +03:00
François Laignel
d856fedf06 Buffer: ser: don't panick if not readable 2018-07-30 23:18:30 +03:00
François Laignel
693121bc55 Buffer: fix instanstiation during deserialization 2018-07-30 23:18:30 +03:00
François Laignel
90b046fbcf serde: separate serde impl and tests from base module
+ fix erroneous `datetime` instead of `buffer` in `BufferRef::serialize`
+ remove ser/de for `Value`s with types `ULong` & `ILong`
2018-07-30 23:18:30 +03:00
François Laignel
3f0cd6fb87 Toc: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
20834e475b Tags: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
4f948e2cce Sample: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
5e6f80cc32 Segment: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
a2c4e78f70 GenericFormattedValue: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
0f1d3bea89 BufferList: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
862afe5cc7 Buffer: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
138a0fb18c ClockTime: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
49d3ee29e9 Caps: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
1ef83c24b8 Structure: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
778e11742f value: serde impl 2018-07-30 23:18:30 +03:00
François Laignel
0d65b7f1ed DateTime: serde impl 2018-07-30 23:18:30 +03:00
Sebastian Dröge
2240ef109f Regenerate with latest GIR and update for the glib::Quark changes 2018-07-30 11:46:40 +03:00
Sebastian Dröge
33a6aab6d7 Run everything through latest rustfmt 2018-07-27 13:36:40 +03:00
Sebastian Dröge
ec8b55ec30 Stream-line pad probe code
Don't take another reference of the data passed through the pad probes,
i.e. keeping buffers writable if they're writable.
2018-07-26 03:14:04 +03:00
Sebastian Dröge
632d5f4c57 Change some empty structs to empty enums
These should only really exist at the type-level.
2018-07-25 10:07:20 +03:00
Sebastian Dröge
26d9d304c4 Update CHANGELOG.md for 0.11.5 2018-07-24 15:55:07 +03:00
Sebastian Dröge
af5470a8b0 Unref the message in sync bus handlers if Drop is returned 2018-07-24 15:35:26 +03:00
Sebastian Dröge
93b32882ee tags: Use to_glib_none() to convert &str to a C string instead of as_ptr()
The latter does not necessarily give us a NUL-terminated string.

Fixes https://github.com/sdroege/gstreamer-rs/issues/122
2018-07-23 10:17:38 +03:00
Sebastian Dröge
694bcaa697 Fix all clippy warnings
Or silence the ones we don't care about.
2018-07-20 10:28:20 +03:00
Sebastian Dröge
fc79b4c4c8 Update CHANGELOG.md for 0.11.4 2018-07-19 18:52:30 +03:00
François Laignel
02a8e9faa0 Tags: more and better getters/adder factorizations 2018-07-12 07:22:39 +02:00
François Laignel
7ca54cf1c5 Tags: factorize get_index unsafe code 2018-07-12 07:22:39 +02:00
François Laignel
0b9edee8d7 Tags: use SendValue for generic getters and iterator 2018-07-12 07:22:39 +02:00
François Laignel
be9ef0d152 Tags: implement generic iterators
This is the continuation of PR #107 by @ystreet
2018-07-12 07:22:39 +02:00
Matthew Waters
2e1f1eadac tags: add dynamic tag retrieval based on string's and Value's
The rust compiler won't complain if you use the wrong types with the
dynamic getter/adder however GStreamer itself does.
2018-07-12 07:22:39 +02:00
Matthew Waters
fa054fe3b0 gst/tags: combine the static tag references into the impl_tag macro
There's no real reason to have them separate when there's already a
macro making types for different tags.
2018-07-12 07:22:39 +02:00
Sebastian Dröge
73a5b26638 Use ParamSpec for the deep-notify signal callback instead of just the name
And allow filtering by property-name via the signal details
2018-07-09 19:47:15 +02:00
Sebastian Dröge
dc32d338ef Let various Caps operations take &CapsRef instead of &Caps 2018-07-06 17:58:54 +02:00
Sebastian Dröge
480d373fbc Caps::subtract() does not take ownership of the arguments and can be implemented for CapsRef 2018-07-06 17:56:55 +02:00
Sebastian Dröge
8c268ecd06 Gracefully return None in Caps::get_structure() if the index is too high 2018-07-06 10:36:00 +02:00
Sebastian Dröge
75acd7ea95 Fix typefind test if typefind factories without caps are available 2018-07-06 10:35:57 +02:00
Sebastian Dröge
e88017f914 Ensure that miniobjects are writable before creating a mutable borrow 2018-07-06 10:29:09 +02:00
Sebastian Dröge
a3dffc2faa Switch from futures to futures-preview crates
Fixes https://github.com/sdroege/gstreamer-rs/issues/118
2018-06-29 07:43:29 +02:00
Sebastian Dröge
e0972ae1e5 Get rid of manual usage of callback_guard! 2018-06-24 14:52:50 +03:00
Sebastian Dröge
2085d170be Get rid of callback_guard! as unwinding through FFI is defined behaviour now and aborts 2018-06-24 14:42:11 +03:00
Sebastian Dröge
bd1fb746de Update to num-rational 0.2 2018-06-22 10:27:14 +03:00
JohanGoversTech
db3fe69415 Change return type of add_probe to support removing (#116)
* Change return type of add_probe to support 0 PadProbeId

* use from_glib for the conversion of the PadProbeId
2018-06-14 15:45:54 +03:00
François Laignel
f4d57a6652 Fix memory issue building a Sample with an info Structure
The following code in a `[test]`:
``` rust
let info = Structure::builder("sample.info")
    .field("f3", &123i32)
    .build();
let sample = Sample:🆕:<GenericFormattedValue>(
        None,
        None,
        None,
        Some(info.as_ref())
    );
```

generates one of the followings executing `cargo test`:
```
- segmentation fault
- signal: 6, SIGABRT: process abort signal
- signal: 11, SIGSEGV: invalid memory reference
```

This is due to `ffi::gst_sample_new` expecting to take ownership of the `info`
`Structure`.
2018-06-12 00:23:10 +03:00
Sebastian Dröge
d2272fefa7 Update CHANGELOG.md for 0.11.3 2018-06-08 10:27:24 +03:00
Sebastian Dröge
1192a027b4 Regenerated with latest GIR and GIR files 2018-05-21 11:55:19 +03:00
Sebastian Dröge
4692806b00 Add Bus::remove_watch()
It was accidentially ignored before
2018-05-19 10:37:09 +03:00
Sebastian Dröge
da6b04abfd Bus::create_watch() can't return None, change it to return no Option 2018-05-19 10:36:15 +03:00
Thibault Saunier
2962f186f7 Print pointer value when formatting debug strings 2018-05-14 09:22:25 +03:00
Sebastian Dröge
be646e78d9 Update to muldiv 0.2 2018-05-11 10:37:19 +03:00
Sebastian Dröge
7429138274 Update CHANGELOG.md for 0.11.2 2018-05-09 12:48:33 +03:00
Sebastian Dröge
c31921e093 Further work-arounds for floating reference handling changes between 1.12 and 1.14
This fixes various memory-safety issues caused by broken reference
counting. We have to handle pre-1.14 and post-1.14 differently in
constructors.

See https://bugzilla.gnome.org/show_bug.cgi?id=743062#c30
2018-05-09 12:20:59 +03:00
Sebastian Dröge
2cefd9aea6 Re-run everything through rustfmt 2018-04-25 11:13:14 +03:00
Sebastian Dröge
46d27e3e75 Regenerate everything with latest GIR 2018-04-23 20:45:15 +03:00
Sebastian Dröge
a276c226fd Port BusStream to futures 0.2 2018-04-23 20:27:17 +03:00
Sebastian Dröge
5dd17d6248 Update CHANGELOG.md for 0.11.1 2018-04-07 20:32:28 +03:00
Sebastian Dröge
03055f4e84 Change Structure/StructureRef to_string() to the minimal required fix
And add a comment to why we need it. No other struct with a to_string()
function is affected.

https://github.com/sdroege/gstreamer-rs/issues/101
2018-04-07 13:37:44 +03:00
Sebastian Dröge
ce9b98f338 Add Display impl for StructureRef too 2018-04-06 13:22:08 +03:00
Sebastian Dröge
f346d57b4f Fix infinite recursion in Structure::to_string()
Instead of StructureRef's to_string(), we were calling
ToString::to_string() in the Display impl. Which then called into itself
again.

Fixes https://github.com/sdroege/gstreamer-rs/issues/101
2018-04-06 13:22:08 +03:00
Guillaume Desmottes
c5617f6a47 WIP: test Structure string conversions 2018-04-06 13:22:08 +03:00
Sebastian Dröge
9a3ef2e9f1 Regenerate with latest GIR and update for the non-bitflags flags in -sys now 2018-04-04 10:47:12 +03:00
Sebastian Dröge
492c3d656c Run everything through rustfmt again 2018-04-01 11:57:58 +03:00
Sebastian Dröge
fca0287dec Use ptr::NonNull in various places 2018-04-01 11:29:55 +03:00
Sebastian Dröge
15116d0f98 Update CHANGELOG.md for 0.11.0 2018-03-20 12:47:58 +02:00
Sebastian Dröge
6d5f7337fc Update version to 0.12.0 2018-03-20 12:37:24 +02:00
Sebastian Dröge
68ba4d23bb Update to using the master branch of gstreamer-sys again 2018-03-20 12:04:16 +02:00
Sebastian Dröge
a33fd41d02 Regenerate everything with latest gir 2018-03-20 11:52:29 +02:00
François Laignel
cd56d60352 Bus::get_pollfd generate doc for both unix & windows
There are different implementations and signatures for `get_pollfd` depending
on whether the target platform is unix or windows. When generating the doc,
we need both implementations to appear regardless of the target platform. This
commit is inspired by the way Rust `std` library deals with `process::Command`
OS dependent variants
(https://doc.rust-lang.org/std/process/struct.Command.html#impl-CommandExt).

Documentation can't be accurate though as we can't use the`std::os::windows`
on `unix` and vice versa. As a workaround a fake fd class matching the other
platform is declared.

This could be further enhanced once `#[doc(cfg(...))]` is stabilized
(https://github.com/rust-lang/rust/issues/43781) by declaring `#[doc(cfg(unix))]`
or `#[doc(cfg(windows))]` instead of the hard coded comments `This is supported
on **Windows/Unix** only`. Unfortunately, these comments disappear when
generating will `--all-features` because they are not part of the documentation
in the gir file.
2018-03-19 13:48:59 +02:00
François Laignel
406eb119d3 message: add test_other_fields
Fixes https://github.com/sdroege/gstreamer-rs/pull/93
2018-03-19 10:32:07 +02:00
Sebastian Dröge
3a755219f4 Add Promise bindings 2018-03-19 10:32:07 +02:00
Sebastian Dröge
0112d22804 Various manual 1.14 API additions and remove deprecated functions 2018-03-19 10:32:07 +02:00
Sebastian Dröge
4864a1e089 Fix build 2018-03-19 10:32:07 +02:00
Sebastian Dröge
7f479b0e14 Use correct gstreamer-sys branch 2018-03-19 10:32:07 +02:00
Sebastian Dröge
1abe9cbeb9 Update gstreamer 2018-03-19 10:32:07 +02:00
François Laignel
88a68dff3e Fix futures crate not being pulled with feature dox
When feature `dox` is selected but not `futures`, the `futures` crate is not
available as a dependency leading to a "can't find crate for `futures`" error.
2018-03-19 10:31:41 +02:00
François Laignel
93442e94dd element: add feature gate for test_call_async
Fixes https://github.com/sdroege/gstreamer-rs/pull/92
2018-03-16 17:51:56 +02:00
Sebastian Dröge
11c974a55e Fix some unused import compiler warnings if using < v1_10 2018-03-16 12:28:20 +02:00
Sebastian Dröge
fc7cda4522 Directly dereference DebugCategory struct to read the threshold and #[inline]
This should improve logging performance if the threshold is not high
enough.
2018-03-16 12:27:36 +02:00
Sebastian Dröge
c38af51bf0 Add Element::call_async() bindings 2018-03-14 15:42:17 +02:00
Sebastian Dröge
de8f4694f5 Add initial BufferPool bindings 2018-03-07 11:08:21 +02:00
Sebastian Dröge
a3b294f0f2 Add back callback guards 2018-03-02 21:34:29 +02:00
Sebastian Dröge
808ff293ec Regenerate everything with latest gir 2018-03-02 21:34:29 +02:00
Sebastian Dröge
4117c01ff2 Run everything through latest rustfmt-nightly 2018-02-22 11:18:37 +01:00
François Laignel
84e4546f72 Toc: implement Debug trait 2018-02-20 19:29:26 +01:00
Sebastian Dröge
f92f0a99e8 Update CHANGELOG.md for 0.10.2 2018-02-18 23:25:11 +01:00
Sebastian Dröge
f1426c82ba Remove callback guards
Since Rust 1.24 it is safe to let panics go to the FFI boundary
2018-02-17 19:58:41 +02:00
François Laignel
c971727193 Query: allow concrete query instantiation
Allow instantiating and dereferencing concrete queries. The motivation
for this proposal is to allow the following usability enhancements:

- Concrete queries mutability guaranteed by the borrow checker,
including for generic functions:
``` rust
    let mut p = Query::new_position(::Format::Time);
    p.get_mut_structure().set("check_mut", &true);
```

- Concrete queries functions available in place:
``` rust
    let mut q = gst::Query::new_duration(gst::Format::Time);
    let duration = if pipeline.query(&mut q) {
        Some(q.get_result())
    } else {
        None
    };
```
2018-02-16 10:33:40 +02:00
Sebastian Dröge
6d0d7a3df8 Regenerate everything with latest GIR 2018-02-06 16:42:34 +02:00
François Laignel
ac31688fbd Value: use new union for GValue_data 2018-02-05 05:28:09 +01:00
fengalin
da924e5d4d Event & Message: factorize common attributes in generic builders
Concrete events and messages share common attributes which can be factorized in generic builder `struct`s. This reduces noise in the concrete implementations.
2018-01-29 17:33:49 +02:00
fengalin
2d1218e6d6 Event, Message & Query: allow dereferencing concrete types to access generic type methods
Implement `deref` for concrete derivatives of `Event`, `Message` and `Query`. This allows accessing generic methods such as `is_sticky` for events, `get_seqnum` for messages or `is_serialized` for queries and `get_structure` for all.
2018-01-29 17:33:49 +02:00
fengalin
86812c1a53 MessageBuilder: comment out other_fields related methods until GStreamer v1.14 is released
These methods are commented out in order to maintain consistency between messages with and without arguments. It will be restored and conditioned to feature "v1_14" when GStreamer v1.14 is released.
2018-01-29 10:07:42 +02:00
fengalin
3c65a50076 Fix building argument-less messages
Building an argument-less message such as eos yields an assertion failure due to the inner structure being null. The short term solution consists in checking that the inner `structure` is not `null` before attempting to insert `other_fields`. The consequence is that `others_fields` defined for argument-less messages will be ignored. A correction will be applied when GStreamer 1.14 is released thank to the introduction of `gst_message_writable_structure` (see https://bugzilla.gnome.org/show_bug.cgi?id=792928). Due to the dependency on GStreamer 1.14, the correction will be only available under the activation of a feature "v1_14".

Events are not affected as the build method the availability of `gst_event_writable_structure` and this function "will never return NULL". However, we can avoid a `structure` allocation for argument-less messages without `other_fields`.
2018-01-29 10:07:42 +02:00
Sebastian Dröge
ad219dd171 Remove PAD_PROBE_ID_INVALID and Default impls for PadProbeId and NotifyWatchId
These should never ever be 0, and passing 0 to any of the functions
using them will result in assertions.
2018-01-25 21:06:39 +02:00
Sebastian Dröge
98290bcc55 Update CHANGELOG.md for 0.10.1 2018-01-03 17:08:46 +02:00
Sebastian Dröge
65468c1fc8 Add Sample::get_info() and deprecate get_structure()
For consistency with the C API naming.
2017-12-30 12:03:03 +02:00
Sebastian Dröge
4a9cb50670 Add Sample::with_buffer_list() constructor 2017-12-30 12:02:48 +02:00
Sebastian Dröge
f47b30b8d1 Add Debug impl for Sample 2017-12-30 12:02:33 +02:00
Sebastian Dröge
755982bb38 Correctly mark Stream and StreamType as requiring version 1.10 at least
Should fix https://github.com/sdroege/gstreamer-rs/issues/68
2017-12-26 18:13:15 +01:00
Sebastian Dröge
c56251d673 Don't require a mutable self for TagSetterExtManual::add()
Like all GObjects, mutation works through interior mutability.
2017-12-23 11:43:09 +02:00
Sebastian Dröge
4a5987d03d Update versions to 0.11.0 2017-12-22 15:06:06 +02:00
Sebastian Dröge
95562b8d22 Update CHANGELOG.md for 0.10.0 2017-12-22 14:44:24 +02:00
Sebastian Dröge
9b6efb2339 Fix various clippy warnings 2017-12-20 21:46:58 +02:00
Sebastian Dröge
15ea81e473 Derive Clone on ErrorMessage 2017-12-20 20:08:00 +02:00
Sebastian Dröge
9066cf0634 Add ErrorMessage type
This can be used to propagate an element error via a Result until the
place where it can be actually posted on an element.
2017-12-20 20:00:05 +02:00
Sebastian Dröge
e0dc84c10a Run everything through rustfmt again 2017-12-20 19:30:14 +02:00
Sebastian Dröge
f439f14ec3 SystemClock::set_default() can accept None 2017-12-20 18:57:16 +02:00
Sebastian Dröge
95c9f92549 Add StreamCollection::iter() 2017-12-20 18:54:56 +02:00
Sebastian Dröge
67a46b3bf5 Most Preset functions that return a bool signal an error with this, use a Result 2017-12-20 18:47:04 +02:00
Sebastian Dröge
f2729fb730 Preset::set_app_dir() returning false is an error, make it a Result 2017-12-20 18:44:57 +02:00
Sebastian Dröge
d182584c25 Object::set_name() should not accept NULL 2017-12-20 18:35:41 +02:00
Sebastian Dröge
55c8cf69f3 update_registry() returning false is not an error
It means that there were no changes.
2017-12-20 18:22:30 +02:00
Sebastian Dröge
e34212d517 parse_bin_from_description() return value is not nullable, except for errors 2017-12-20 18:22:30 +02:00
Sebastian Dröge
210119d9aa Element::set_clock() allows None for the clock parameter 2017-12-20 18:22:30 +02:00
Sebastian Dröge
6d7acd200d Element::set_bus() allows None for the bus parameter 2017-12-20 18:10:50 +02:00
Sebastian Dröge
241bb823d5 Element::link_pads_full() should return a Result instead of a bool 2017-12-20 18:07:55 +02:00
Sebastian Dröge
e2970db84c Failure to post a message is an error, so return a Result instead of a bool 2017-12-20 18:07:28 +02:00
Sebastian Dröge
6d8cfa5de0 Add support for TypeFind and implement Ord on Rank and TypeFindProbability
Fixes https://github.com/sdroege/gstreamer-rs/issues/11
2017-12-19 19:14:12 +02:00
Sebastian Dröge
12ee7358e3 Add bindings for TypeFindFactory 2017-12-18 09:53:08 +02:00
Sebastian Dröge
5dd89d01e2 DeviceMonitor/Provider::start() should return a Result 2017-12-18 09:49:15 +02:00
Sebastian Dröge
48958d381e Implement Sync for DateTime
It's immutable.
2017-12-18 09:42:27 +02:00
Sebastian Dröge
9223386750 Remove clock parameter from Clock::(un)adjust_with_calibration()
It's useless and not used.
2017-12-18 09:39:37 +02:00
Sebastian Dröge
9a7ede1dcc Bus::add_signal_watch_full() should take a Priority, not u32 for the priority 2017-12-18 09:39:14 +02:00
Sebastian Dröge
49627b8de7 Various nullability fixes everywhere and hide enum->string functions 2017-12-17 18:29:22 +02:00
Sebastian Dröge
5108c941ed Various nullability fixes to plugin bindings, and add add_dependency() API
Also fix structure ownership for the cache data API
2017-12-17 14:26:17 +02:00
Sebastian Dröge
4b2fd0e593 Require SendValue for value::Array and value::List 2017-12-17 14:06:22 +02:00
Sebastian Dröge
2035bba437 Make value of Bitmask public 2017-12-17 11:57:37 +02:00
Sebastian Dröge
1f6fd3def7 Structure intersection can return None 2017-12-17 11:52:52 +02:00
Sebastian Dröge
dfdae187a3 Filter in caps queries can be None, and there could be no resulting caps 2017-12-17 11:32:01 +02:00
Sebastian Dröge
ffb5869dd1 Use the correct pad type for the proxy/ghost pad default pad functions 2017-12-17 11:24:03 +02:00
Sebastian Dröge
62058ab1c3 Use &ToSendValue for the stream-status stream_object in the builder 2017-12-16 18:39:50 +02:00
Sebastian Dröge
ccf6c1a632 Owner of structure-change and stream-status messages is mandatory 2017-12-16 18:39:33 +02:00
Sebastian Dröge
bcf6b34c1b Code/text of progress messages is mandatory 2017-12-16 18:38:53 +02:00
Sebastian Dröge
974e681a5d Move optional taglist/entry_struct fields into the Redirect builder from the constructor 2017-12-16 18:13:25 +02:00
Sebastian Dröge
7bc1fce97d Move value for PropertyNotification message into the builder instead of constructor 2017-12-16 18:10:10 +02:00
Sebastian Dröge
c2f075ed8d Description of debug categories is optional
Also add a getter for the description of a debug category
2017-12-16 17:56:23 +02:00
Sebastian Dröge
f7c971874d Implement Display and Error for IteratorError 2017-12-16 17:48:38 +02:00
Sebastian Dröge
7065d1d884 Add constants for COPY_ALL and COPY_METADATA buffer copy flags 2017-12-16 17:40:47 +02:00
Sebastian Dröge
fa05ee7b08 Various fixes for nullability in the event bindings
The origin in protection events is optional, the stream id in
stream-start events is not.

Also return a segment reference instead of a segment copy when parsing a
segment event.
2017-12-16 17:30:50 +02:00
Sebastian Dröge
9608ef52ec Mark Segment as #[repr(C)] 2017-12-16 17:30:37 +02:00
Sebastian Dröge
b9c4e4cd6e Allow no value for the PropertyNotify message
It can contain no value.

Also use &ToSendValue instead of an actual value for building the
message.
2017-12-16 15:37:06 +02:00
Sebastian Dröge
52ca97e7e6 Let ChildProxy::set_child_property() take a &ToValue instead of an actual Value 2017-12-16 15:24:18 +02:00
Sebastian Dröge
3de73d89f2 Add Buffer::copy_into() and add flags parameter to ::copy_region()
Also ::copy_deep() can fail, return an Option<_>
2017-12-16 15:15:42 +02:00
Sebastian Dröge
18f99073c1 Use from_glib_none/full directly on potential NULL pointers if Option<_> is returned
The implementation for Option<_> is doing exactly what we did manually
here.
2017-12-16 15:07:26 +02:00
Sebastian Dröge
8a2c6a3246 Implement AsRef<[u8]>, AsMut, Deref, DerefMut, PartialEq, Eq and Debug for BufferMap too 2017-12-13 11:00:29 +02:00
Sebastian Dröge
e37c3d684c Fix PartialEq for MappedBuffer
No need to map the buffer again, we can just compare the slice directly.
2017-12-13 11:00:02 +02:00
Sebastian Dröge
5dff6026be Also implement Deref/DerefMut for MappedBuffer for &[u8] 2017-12-13 10:55:26 +02:00
Sebastian Dröge
85fdc8bf13 Implement AsRef<[u8]>, AsMut, Debug, PartialEq and Eq for MappedBuffer 2017-12-13 09:58:41 +02:00
Sebastian Dröge
298cb754c9 Fix precision handling in ClockTime Display impl 2017-12-10 12:31:41 +02:00
Sebastian Dröge
5065bc76ee Rename FormattedValue::from_glib/to_glib to from_raw/to_raw_value
Otherwise we conflict with GLib translation traits, which causes some
annoyances.
2017-12-10 12:10:25 +02:00
Sebastian Dröge
c99928d030 Change FormatValue related API to be more convenient to use
FormatValue is now renamed to GenericFormattedValue and the API slightly
changed. In addition there is now a FormattedValue trait, and a
SpecificFormattedValue trait plus types for Bytes, Buffers and the
existing ClockTime.

This allows to create functions like
  Pad::query_duration<F: SpecificFormattedValue>() -> Option<F>
and doesn't require the caller to unwrap the generic value anymore,
which is completely unneeded in these cases.

In addition, Segment became FormattedSegment<T> with API to
upcast/downcast between the specific formatted values and the generic
formatted value. This greatly simplifies usage of Segments.
2017-12-09 19:45:18 +02:00
Sebastian Dröge
520a9bb879 Use downcast_unchecked() for sender in deep-notify signal handler
This is guaranteed to be of the correct type.
2017-12-09 18:08:57 +02:00
Sebastian Dröge
963557b79f Query::get_structure() can also return NULL 2017-12-06 13:43:37 +02:00
Sebastian Dröge
1f80df493a Let the glib::Value destructor clean up our values instead of doing so manually 2017-12-06 11:17:59 +02:00
Sebastian Dröge
ad7b21ba55 Use unwrap_or_else() for the default value in the DateTime Display impl 2017-12-05 23:20:10 +02:00
Sebastian Dröge
05c51dd778 Change all values in Segment to FormatValue 2017-12-05 23:16:12 +02:00
Sebastian Dröge
e6da3554ee Use ClockTime for the Duration tag
And implement the Value traits for ClockTime
2017-12-05 22:54:03 +02:00
Sebastian Dröge
f1c6c4fd06 Change various integers to FormatValue and ClockTime in events/queries/messages 2017-12-05 22:43:37 +02:00
Sebastian Dröge
801a7ed43c Use ClockTime instead of u64 for the Gap event 2017-12-05 21:36:56 +02:00
Sebastian Dröge
55f044dd83 Add newtype wrappers and INVALID constants for event/message GroupId and Seqnum 2017-12-05 21:33:04 +02:00
Sebastian Dröge
97b786a0c7 Regenerate element bindings for gst_element_remove_pad() annotation fix 2017-12-04 18:12:55 +02:00
Sebastian Dröge
c965422410 Update to lazy_static 1.0 2017-12-04 11:11:26 +02:00
Sebastian Dröge
88ff4289d1 Add Event::set_running_time_offset() 2017-12-03 17:13:46 +02:00
Sebastian Dröge
e5bbf93670 Registry::scan_path() returning false is not an error 2017-12-03 14:54:52 +02:00
Sebastian Dröge
6015e74f0e Regenerate with gir filename/utf8 fixes 2017-12-03 14:51:16 +02:00
Sebastian Dröge
49e1fe1c3f Add bindings for Registry and PluginFeature 2017-12-03 14:40:38 +02:00
Sebastian Dröge
c6c7693550 Add Buffer::get_dts_or_pts() 2017-12-02 12:15:07 +02:00
Sebastian Dröge
411f54afed Run everything to rustfmt again 2017-12-01 19:02:53 +02:00
Sebastian Dröge
0920008869 Print clock times as actual time in Segment/Buffer/BufferList debug output 2017-12-01 19:02:29 +02:00
Sebastian Dröge
fccb1eca5e Implement fmt::Debug more consistently for miniobjects and various other types 2017-12-01 11:34:01 +02:00
Sebastian Dröge
c57d5523d2 Implement ToOwned for Message/Event/QueryRef 2017-12-01 11:34:01 +02:00
Sebastian Dröge
1576ff6c32 Event/Message::get_structure() can return None 2017-12-01 11:33:21 +02:00
Sebastian Dröge
7342a0fb98 Implement some functions on EventType and implement PartialOrd for serialized events 2017-11-29 18:55:56 +02:00
Sebastian Dröge
8a2e78e586 Regenerate with latest GIR to fix various issues with property getters
Get rid of unneeded transmutes and actually initialize flags/enum
GValues with the correct type instead of using integers.
2017-11-27 19:16:34 +02:00
Sebastian Dröge
b198ee21da Let Sample::new(), TagList::add(), Structure::set() and others take more values by reference instead of by value 2017-11-27 14:34:02 +02:00
Sebastian Dröge
2508f432f4 Remove some unneeded lifetime annotations 2017-11-27 14:03:33 +02:00
Sebastian Dröge
52d13c010a Add TagListRef::merge() and ::insert() 2017-11-27 14:03:33 +02:00
Sebastian Dröge
029527a6d4 Toc::merge() doesn't take ownership of the taglist 2017-11-27 14:03:33 +02:00
Sebastian Dröge
8c697b3a27 Use Arc::clone(&val) instead of val.clone() to make it more explicit that only the Arc cloned here 2017-11-27 14:03:33 +02:00
Sebastian Dröge
34f70ee0d7 Derive more useful traits for various enums 2017-11-27 14:03:30 +02:00
Sebastian Dröge
80ebc86e94 Update CHANGELOG.md from 0.9.1 2017-11-26 20:42:53 +02:00
Sebastian Dröge
eee82fd402 Export FlowError/Success, ClockError/Success, PadLinkError/Success too 2017-11-26 20:40:05 +02:00
Sebastian Dröge
ea3d08d65a Update CHANGELOG.md with 0.9.0 2017-11-26 19:49:56 +02:00
Sebastian Dröge
f1e095eb0e Update versions to 0.10.0 2017-11-26 18:33:12 +02:00
Sebastian Dröge
94ba143c74 Allow anything that implements Into<Option<&str>> to be used for creating new pads 2017-11-21 16:16:56 +02:00
Sebastian Dröge
1dbc63dcb3 Message::get_src() can return None
The src is optional
2017-11-16 13:58:42 +02:00
Sebastian Dröge
d430467ed5 Don't require Send for Structure::get()
Otherwise we won't be able to get references here.
2017-11-16 13:39:01 +02:00
Sebastian Dröge
9085474e37 Fix error/warning/info message macros that use format strings 2017-11-16 13:37:52 +02:00
Sebastian Dröge
7eb8429046 Run everything through latest rustfmt-nightly again 2017-11-15 22:33:51 +02:00
Sebastian Dröge
0629a0283e Use SendValue instead of Value for all our GValue usage
We require types that can be sent between threads.
2017-11-15 20:32:52 +02:00
Sebastian Dröge
9734ec29cc Implement macros for Element::message_full_with_details()
Allows attaching arbitrary structures to error/warning/info messages
2017-11-15 17:03:19 +02:00
Sebastian Dröge
d4bd1c2d76 Add dox feature to everything as needed 2017-11-12 13:33:02 +01:00
Sebastian Dröge
a557a8d66e Require the dox feature of dependant crates 2017-11-12 12:58:30 +01:00
Sebastian Dröge
d857fbd349 Add helper macros for generating error/warning/info messages 2017-11-11 16:43:29 +01:00
Sebastian Dröge
5494e5b827 Use u32 instead of i32 for Element::message_full() line numbers 2017-11-11 16:38:54 +01:00
Sebastian Dröge
126159c762 Run everything through rustfmt once again 2017-11-11 13:31:01 +01:00
Sebastian Dröge
2fc3470fa1 Add a Builder for caps and structures 2017-11-11 13:18:50 +01:00
Sebastian Dröge
f823ef9cf7 Add constants for SECONDS, etc in u64 2017-11-11 13:00:50 +01:00
Sebastian Dröge
d5b2f5900c Add API for converting ClockTime to/from mseconds, useconds, nseconds 2017-11-11 12:44:58 +01:00
Sebastian Dröge
246a54368d Clean up Query API a bit
There's now get_result() instead of get(), and separate getters for only
getting the constructor arguments of each query (otherwise query
handlers will get useless values when trying to answer a query).
2017-11-11 12:27:30 +01:00
Sebastian Dröge
c39c0c7264 Implement ClockTime as ClockTime(Option<u64>)
And also implement a FormatValue type that holds a value together with
its format to make usage of the positions/durations/seek positions/etc
more convenient and safe.

Fixes https://github.com/sdroege/gstreamer-rs/issues/3
2017-11-11 11:57:29 +01:00
Sebastian Dröge
f6ffa6919f Run latest commit through rustfmt 2017-11-10 18:24:44 +01:00
Philippe Normand
93a1b3929c Implement Error trait for error enums. 2017-11-10 17:51:06 +01:00
Sebastian Dröge
5d266bf31b Regenerate with latest GIR
Which gives us mappings between instance and class struct for now.
2017-11-09 13:33:40 +02:00
Sebastian Dröge
95204c2294 Add Success/Error variants of #[must_use] enums
And implement basically the Try trait for them. This will be replaced by
the Try trait once it is stable.

Fixes https://github.com/sdroege/gstreamer-rs/issues/44
2017-11-06 11:43:54 +02:00
Sebastian Dröge
e8638c1630 Mark various enums that can signal errors as #[must_use]
See https://github.com/sdroege/gstreamer-rs/issues/44
2017-11-05 19:16:50 +02:00
Sebastian Dröge
3179806f01 Regenerate everything with latest GIR
And fix-up manual code
2017-11-05 19:08:39 +02:00
Sebastian Dröge
99a60e921d Ignore property notify functions
They're manually implemented now.
2017-11-04 12:12:07 +02:00
Sebastian Dröge
3193c19131 Add a table of contents to the README.md 2017-10-31 21:08:40 +02:00
Sebastian Dröge
1b5762c02f Update README.md with installation instructions and some links for getting started
https://github.com/sdroege/gstreamer-rs/issues/49
https://github.com/sdroege/gstreamer-rs/issues/50
2017-10-30 13:00:39 +02:00
Sebastian Dröge
b58f4cd1ed Add Object::connect_deep_notify() and test 2017-10-27 23:03:45 +02:00
Sebastian Dröge
ec6dde855a Replace ulong for the property notify watches with a custom NotifyWatchId type 2017-10-27 17:55:48 +02:00
Sebastian Dröge
a1a841afc8 Require Send+'static for Buffer::from_*slice() 2017-10-26 14:02:36 +02:00
Sebastian Dröge
f08f0f6f15 Add tests for Bin::get_children() and Element::get_*pads() 2017-10-26 13:29:37 +02:00
Sebastian Dröge
95317267ec Add BinExtManual::get_children() that returns a Vec<Element>
This is sometimes more convenient than using the iterator.
2017-10-25 12:58:22 +02:00
Sebastian Dröge
20729497a2 Add ElementExtManual::get_{,src,sink}pads() functions
These can sometimes be more usable than the iterator based approach
2017-10-25 12:58:22 +02:00
Sebastian Dröge
f30121ec53 Add private utils module with a MutexGuard around GMutex 2017-10-25 12:58:16 +02:00
Sebastian Dröge
342d89dd44 Allow creating buffers from AsRef<[u8]> and AsMut<[u8]>
Not just from Vec<u8>.
2017-10-20 18:37:38 +02:00
Sebastian Dröge
e1d134c4be Run everything through latest rustfmt-nightly 2017-10-17 12:06:51 +03:00
Sebastian Dröge
9a6713b901 Store pointers for static caps and pad templates
We don't own them, we don't want to copy them. They're *statically*
allocated things in C.
2017-10-15 11:27:08 +03:00
Sebastian Dröge
9206ddba61 Add StaticCaps and StaticPadTemplate bindings
No way to create them though, just use lazy_static from Rust instead if
something like this is needed.
2017-10-15 11:08:56 +03:00
Sebastian Dröge
1f16a39ca4 Move gst_mini_object_copy() from GstRc<T> to MiniObject directly
It can also be called on the shallow references.
2017-10-12 17:58:46 +03:00
Sebastian Dröge
b773c0b46a Fix compilation again now that GstRc::get_mut() requires &mut self again 2017-10-11 15:39:27 +03:00
Sebastian Dröge
5589d5221f Revert "Don't require &mut self for GstRc::get_mut()"
This reverts commit 4b77c18b5b.

It unfortunately allows to get multiple mutable references to the same
underlying data, which is not allowed.
2017-10-11 15:30:55 +03:00
Sebastian Dröge
d85be4fe03 Don't make variable mutable if not needed 2017-10-09 16:38:13 +03:00
Sebastian Dröge
4b77c18b5b Don't require &mut self for GstRc::get_mut() 2017-10-05 14:48:33 +03:00
Sebastian Dröge
19c5556239 Regenerate with latest GIR 2017-10-01 15:52:15 +02:00
Sebastian Dröge
19e40a5e2c Remove accidental leftover debug output 2017-09-18 20:44:59 +03:00
Sebastian Dröge
e026c2f652 Directly poke at GstPad struct for retrieving pad function data
glib-sys was just fixed: https://github.com/gtk-rs/sys/pull/62
2017-09-18 17:26:42 +03:00
Sebastian Dröge
f4958b71d7 Add test for pad tasks 2017-09-18 01:53:02 +03:00
Sebastian Dröge
c471a67e78 Add test for pad chain/event function and fix-up code
Need to handle NULL parents, and also work-around incomplete GstPad
struct definition in gstreamer-sys due to GHookList being incomplete.
2017-09-18 01:45:39 +03:00