| Top |
| void | (*GstPromiseChangeFunc) () |
| GstPromise * | gst_promise_new () |
| GstPromise * | gst_promise_new_with_change_func () |
| GstPromise * | gst_promise_ref () |
| void | gst_promise_unref () |
| GstPromiseResult | gst_promise_wait () |
| void | gst_promise_reply () |
| void | gst_promise_interrupt () |
| void | gst_promise_expire () |
| const GstStructure * | gst_promise_get_reply () |
The GstPromise object implements the container for values that may be available later. i.e. a Future or a Promise in
https://en.wikipedia.org/wiki/Futures_and_promisesA GstPromise can be created with gst_promise_new(), replied to
with gst_promise_reply(), interrupted with gst_promise_interrupt() and
expired with gst_promise_expire(). A callback can also be installed at
GstPromise creation for result changes with gst_promise_new_with_change_func().
The change callback can be used to chain GstPromises's together as in the
following example.
1 2 3 4 5 6 7 8 9 |
const GstStructure *reply; GstPromise *p; if (gst_promise_wait (promise) != GST_PROMISE_RESULT_REPLIED) return; // interrupted or expired value reply = gst_promise_get_reply (promise); if (error in reply) return; // propagate error p = gst_promise_new_with_change_func (another_promise_change_func, user_data, notify); pass p to promise-using API |
Each GstPromise starts out with a GstPromiseResult of
GST_PROMISE_RESULT_PENDING and only ever transitions out of that result
into one of the other GstPromiseResult.
In order to support multi-threaded code, gst_promise_reply(),
gst_promise_interrupt() and gst_promise_expire() may all be from
different threads with some restrictions, the final result of the promise
is whichever call is made first. There are two restrictions on ordering:
That gst_promise_reply() and gst_promise_interrupt() cannot be called
after gst_promise_expire()
That gst_promise_reply() and gst_promise_interrupt()
cannot be called twice.
void (*GstPromiseChangeFunc) (GstPromise *promise,gpointer user_data);
Since: 1.14
GstPromise * gst_promise_new_with_change_func (GstPromiseChangeFunc func,gpointer user_data,GDestroyNotify notify);
func
will be called exactly once when transitioning out of
GST_PROMISE_RESULT_PENDING into any of the other GstPromiseResult
states.
func |
a GstPromiseChangeFunc to call. |
[scope notified] |
user_data |
argument to call |
[closure] |
notify |
notification function that |
Since: 1.14
GstPromise *
gst_promise_ref (GstPromise *promise);
Increases the refcount of the given promise
by one.
Since: 1.14
void
gst_promise_unref (GstPromise *promise);
Decreases the refcount of the promise. If the refcount reaches 0, the promise will be freed.
Since: 1.14
GstPromiseResult
gst_promise_wait (GstPromise *promise);
Wait for promise
to move out of the GST_PROMISE_RESULT_PENDING state.
If promise
is not in GST_PROMISE_RESULT_PENDING then it will return
immediately with the current result.
Since: 1.14
void gst_promise_reply (GstPromise *promise,GstStructure *s);
Set a reply on promise
. This will wake up any waiters with
GST_PROMISE_RESULT_REPLIED.
promise |
a GstPromise. |
[allow-none] |
s |
a GstStructure with the the reply contents. |
[transfer full] |
Since: 1.14
void
gst_promise_interrupt (GstPromise *promise);
Interrupt waiting for a promise
. This will wake up any waiters with
GST_PROMISE_RESULT_INTERRUPTED
Since: 1.14
void
gst_promise_expire (GstPromise *promise);
Expire a promise
. This will wake up any waiters with
GST_PROMISE_RESULT_EXPIRED
Since: 1.14
const GstStructure *
gst_promise_get_reply (GstPromise *promise);
Retrieve the reply set on promise
. promise
must be in
GST_PROMISE_RESULT_REPLIED and is owned by promise
Since: 1.14
The result of a GstPromise
|
Initial state. Waiting for transition to any other state. |
||
|
Interrupted by the consumer as it doesn't want the value anymore. |
||
|
A producer marked a reply |
||
|
The promise expired (the carrying object lost all refs) and the promise will never be fulfilled. |
Since: 1.14