pub struct CodecFactoryProxy { /* private fields */ }

Implementations§

source§

impl CodecFactoryProxy

source

pub fn new(channel: AsyncChannel) -> Self

Create a new Proxy for fuchsia.mediacodec/CodecFactory.

source

pub fn take_event_stream(&self) -> CodecFactoryEventStream

Get a Stream of events from the remote end of the protocol.

§Panics

Panics if the event stream was already taken.

source

pub fn get_detailed_codec_descriptions( &self ) -> QueryResponseFut<CodecFactoryGetDetailedCodecDescriptionsResponse>

A client should call |GetDetailedCodecDescriptions()| to get a list of codecs supported either by software implementations or by underlying hardware.

source

pub fn create_decoder( &self, decoder_params: &CreateDecoderParams, decoder: ServerEnd<StreamProcessorMarker> ) -> Result<(), Error>

CreateDecoder:

decoder_params - See CreateDecoder_Params comments for required and optional parameters for creating a decoder.

decoder - a Codec.NewRequest() which will hopefully be connected to a Codec server, or the Codec channel will get closed if no suitable codec can be found. We don’t return any additional Codec-specific status here because finding the Codec is allowed to be fully async, so we don’t necessarily yet know on return from this method which Codec will be selected, if any.

Rough sequence to create a decoder:

factory = ConnectToEnvironmentService(CodecFactory); CreateDecoder_Params params; [fill out params] CreateDecoder(params, decoder_request);

See use_media_decoder code for more detail.

source

pub fn create_encoder( &self, encoder_params: &CreateEncoderParams, encoder: ServerEnd<StreamProcessorMarker> ) -> Result<(), Error>

CreateEncoder:

encoder_params - See CreateEncoder_Params comments for required and optional parameters for creating a decoder.

encoder - a Codec.NewRequest() which will hopefully be connected to a Codec server, or the Codec channel will get closed if no suitable codec can be found. We don’t return any additional Codec-specific status here because finding the Codec is allowed to be fully async, so we don’t necessarily yet know on return from this method which Codec will be selected, if any.

source

pub fn attach_lifetime_tracking( &self, codec_end: EventPair ) -> Result<(), Error>

AttachLifetimeTracking:

Attach an eventpair endpoint to the next Create{X}(), so that the codec_end will be closed when the number of buffers allocated reaches ‘buffers_remaining’. Multiple eventpair endpoints can be attached per create, with an enforced limit of CODEC_FACTORY_LIFETIME_TRACKING_EVENTPAIR_PER_CREATE_MAX.

The lifetime signalled by this event is intended to track all resources used by the codec, including sysmem-allocated buffers created internally by the codec. The sysmem buffer collections visible to the client, for input and output buffers, are not included in the resources tracked here, because those can be tracked separately via fuchsia.sysmem.BufferCollection.AttachLifetimeTracking(). It is permitted to send a duplicate of codec_end to both this AttachLifetimeTracking() and also to fuchsia.sysmem.BufferCollection.AttachLifetimeTracking(). The ZX_EVENTPAIR_PEER_CLOSED will happen when both/all lifetimes are fully over. This conveniently avoids needing multiple separate async waits by the client.

In the case of server process crashes, or failure of a codec to plumb codec_end to sysmem, ZX_EVENTPAIR_PEER_CLOSED signalled on the peer of codec_end may occur shortly before all resources are freed.

A maximum of CODEC_FACTORY_LIFETIME_TRACKING_EVENTPAIR_PER_CREATE_MAX calls to AttachLifetimeTracking() are allowed before any Create{X}(). There is no way to cancel an attach short of closing the CodecFactory channel. Closing the client end of the eventpair doesn’t subtract from the number of pending attach(es). For this reason, it can be good to only send attach message(s) immediately before the relevant Create{X}(), when it’s known by the client that both the attach message(s) and the Create{X}() messages will be sent.

Closing the client’s end doesn’t result in any action by the server. If the server listens to events from the client end at all, it is for debug logging only.

The server intentionally doesn’t “trust” any bits signalled by the client. This mechanism intentionally uses only ZX_EVENTPAIR_PEER_CLOSED which can’t be triggered early, and is only triggered when all handles to codec_end are closed. No meaning is associated with any of the other signal bits, and clients should functionally ignore any other signal bits on either end of the eventpair or its peer.

The codec_end may lack ZX_RIGHT_SIGNAL or ZX_RIGHT_SIGNAL_PEER, but must have ZX_RIGHT_DUPLICATE (and must have ZX_RIGHT_TRANSFER to transfer without causing CodecFactory channel failure).

Trait Implementations§

source§

impl Clone for CodecFactoryProxy

source§

fn clone(&self) -> CodecFactoryProxy

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl CodecFactoryProxyInterface for CodecFactoryProxy

source§

impl Debug for CodecFactoryProxy

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Proxy for CodecFactoryProxy

§

type Protocol = CodecFactoryMarker

The protocol which this Proxy controls.
source§

fn from_channel(inner: AsyncChannel) -> Self

Create a proxy over the given channel.
source§

fn into_channel(self) -> Result<AsyncChannel, Self>

Attempt to convert the proxy back into a channel. Read more
source§

fn as_channel(&self) -> &AsyncChannel

Get a reference to the proxy’s underlying channel. Read more
§

fn into_client_end(self) -> Result<ClientEnd<Self::Protocol>, Self>

Attempt to convert the proxy back into a client end. Read more
§

fn is_closed(&self) -> bool

Returns true if the proxy has received the PEER_CLOSED signal.
§

fn on_closed(&self) -> OnSignals<'_, Unowned<'_, Handle>>

Returns a future that completes when the proxy receives the PEER_CLOSED signal.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Encode<Ambiguous1> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _offset: usize, _depth: Depth ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<T> Encode<Ambiguous2> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _offset: usize, _depth: Depth ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more