Class Promise
- All Implemented Interfaces:
Proxy
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_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 GstPromise
is created with gst_promise_new() by the consumer and passed
to the producer to avoid thread safety issues with the change callback.
A GstPromise
can be replied to with a value (or an error) by the producer
with gst_promise_reply(). The exact value returned is defined by the API
contract of the producer and null
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. The GSTPROMISERESULTEXPIRED
state set by a call
to gst_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 as GstBus
.
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.
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
PromiseResult.PENDING
and only ever transitions once
into one of the other GstPromiseResult
's.
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 and the final result of the promise is whichever call is made first. There are two restrictions on ordering:
1. That gst_promise_reply() and gst_promise_interrupt() cannot be called after gst_promise_expire() 2. That gst_promise_reply() and gst_promise_interrupt() cannot be called twice.
The change function set with gst_promise_new_with_change_func() is
called directly from either the gst_promise_reply(),
gst_promise_interrupt() or gst_promise_expire() and can be called
from an arbitrary thread. GstPromise
using APIs can restrict this to
a single thread or a subset of threads but that is entirely up to the API
that uses GstPromise
.
-
Constructor Summary
ConstructorDescriptionPromise()
Promise
(MemorySegment address) Create a Promise proxy instance for the provided memory address. -
Method Summary
Modifier and TypeMethodDescriptionvoid
expire()
Expire a this Promise.static MemoryLayout
The memory layout of the native struct.getReply()
Retrieve the reply set on this Promise.static Type
getType()
Get the GType of the Promise classvoid
Interrupt waiting for a this Promise.Read the value of the fieldparent
.ref()
Increases the refcount of the given this Promise by one.void
Set a reply on this Promise.void
unref()
Decreases the refcount of the promise.wait_()
Wait for this Promise to move out of thePromiseResult.PENDING
state.static Promise
func
will be called exactly once when transitioning out ofPromiseResult.PENDING
into any of the otherGstPromiseResult
states.void
writeParent
(MiniObject parent) Write a value in the fieldparent
.Methods inherited from class io.github.jwharm.javagi.base.ProxyInstance
equals, handle, hashCode
-
Constructor Details
-
Promise
Create a Promise proxy instance for the provided memory address.- Parameters:
address
- the memory address of the native object
-
Promise
public Promise()
-
-
Method Details
-
getType
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
readParent
Read the value of the fieldparent
.- Returns:
- The value of the field
parent
-
writeParent
Write a value in the fieldparent
.- Parameters:
parent
- The new value for the fieldparent
-
withChangeFunc
func
will be called exactly once when transitioning out ofPromiseResult.PENDING
into any of the otherGstPromiseResult
states.- Parameters:
func
- aGstPromiseChangeFunc
to call- Returns:
- a new
GstPromise
-
expire
public void expire()Expire a this Promise. This will wake up any waiters withPromiseResult.EXPIRED
. Called by a message loop when the parent message is handled and/or destroyed (possibly unanswered). -
getReply
Retrieve the reply set on this Promise. this Promise must be inPromiseResult.REPLIED
and the returned structure is owned by this Promise- Returns:
- The reply set on this Promise
-
interrupt
public void interrupt()Interrupt waiting for a this Promise. This will wake up any waiters withPromiseResult.INTERRUPTED
. Called when the consumer does not want the value produced anymore. -
ref
-
reply
Set a reply on this Promise. This will wake up any waiters withPromiseResult.REPLIED
. Called by the producer of the value to indicate success (or failure).If this Promise has already been interrupted by the consumer, then this reply is not visible to the consumer.
- Parameters:
s
- aGstStructure
with the the reply contents
-
unref
public void unref()Decreases the refcount of the promise. If the refcount reaches 0, the promise will be freed. -
wait_
Wait for this Promise to move out of thePromiseResult.PENDING
state. If this Promise is not inPromiseResult.PENDING
then it will return immediately with the current result.- Returns:
- the result of the promise
-