Gst.Promise¶
Fields¶
Name |
Type |
Access |
Description |
---|---|---|---|
parent |
r/w |
parent |
Methods¶
class |
|
class |
|
|
|
|
|
|
|
|
|
|
Details¶
- class Gst.Promise¶
The
Gst.Promise
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_promises>. As with all Future/Promise-like functionality, there is the concept of the producer of the value and the consumer of the value.A
Gst.Promise
is created withGst.Promise.new
() by the consumer and passed to the producer to avoid thread safety issues with the change callback. AGst.Promise
can be replied to with a value (or an error) by the producer withGst.Promise.reply
(). The exact value returned is defined by the API contract of the producer andNone
may be a valid reply.Gst.Promise.interrupt
() is for the consumer to indicate to the producer that the value is not needed anymore and producing that value can stop. TheGst.PromiseResult.EXPIRED
state set by a call toGst.Promise.expire
() indicates to the consumer that a value will never be produced and is intended to be called by a third party that implements some notion of message handling such asGst.Bus
. A callback can also be installed atGst.Promise
creation for result changes withGst.Promise.new_with_change_func
(). The change callback can be used to chainGst.Promises
's together as in the following example.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
Gst.Promise
starts out with aGst.PromiseResult
ofGst.PromiseResult.PENDING
and only ever transitions once into one of the otherGst.PromiseResult
's.In order to support multi-threaded code,
Gst.Promise.reply
(),Gst.Promise.interrupt
() andGst.Promise.expire
() may all be from different threads with some restrictions and the final result of the promise is whichever call is made first. There are two restrictions on ordering:That
Gst.Promise.reply
() andGst.Promise.interrupt
() cannot be called afterGst.Promise.expire
()That
Gst.Promise.reply
() andGst.Promise.interrupt
() cannot be called twice.The change function set with
Gst.Promise.new_with_change_func
() is called directly from either theGst.Promise.reply
(),Gst.Promise.interrupt
() orGst.Promise.expire
() and can be called from an arbitrary thread.Gst.Promise
using APIs can restrict this to a single thread or a subset of threads but that is entirely up to the API that usesGst.Promise
.New in version 1.14.
- classmethod new()[source]¶
- Returns:
a new
Gst.Promise
- Return type:
New in version 1.14.
- classmethod new_with_change_func(func, *user_data)[source]¶
- Parameters:
func (
Gst.PromiseChangeFunc
) – aGst.PromiseChangeFunc
to call
- Returns:
a new
Gst.Promise
- Return type:
func will be called exactly once when transitioning out of
Gst.PromiseResult.PENDING
into any of the otherGst.PromiseResult
states.New in version 1.14.
- expire()[source]¶
Expire a self. This will wake up any waiters with
Gst.PromiseResult.EXPIRED
. Called by a message loop when the parent message is handled and/or destroyed (possibly unanswered).New in version 1.14.
- get_reply()[source]¶
- Returns:
The reply set on self
- Return type:
Retrieve the reply set on self. self must be in
Gst.PromiseResult.REPLIED
and the returned structure is owned by selfNew in version 1.14.
- interrupt()[source]¶
Interrupt waiting for a self. This will wake up any waiters with
Gst.PromiseResult.INTERRUPTED
. Called when the consumer does not want the value produced anymore.New in version 1.14.
- reply(s)[source]¶
- Parameters:
s (
Gst.Structure
orNone
) – aGst.Structure
with the the reply contents
Set a reply on self. This will wake up any waiters with
Gst.PromiseResult.REPLIED
. Called by the producer of the value to indicate success (or failure).If self has already been interrupted by the consumer, then this reply is not visible to the consumer.
New in version 1.14.
- wait()[source]¶
- Returns:
the result of the promise
- Return type:
Wait for self to move out of the
Gst.PromiseResult.PENDING
state. If self is not inGst.PromiseResult.PENDING
then it will return immediately with the current result.New in version 1.14.