pub struct CodecFactoryProxy { /* private fields */ }
Implementations§
Source§impl CodecFactoryProxy
impl CodecFactoryProxy
Sourcepub fn new(channel: AsyncChannel) -> Self
pub fn new(channel: AsyncChannel) -> Self
Create a new Proxy for fuchsia.mediacodec/CodecFactory.
Sourcepub fn take_event_stream(&self) -> CodecFactoryEventStream
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.
Sourcepub fn get_detailed_codec_descriptions(
&self,
) -> QueryResponseFut<CodecFactoryGetDetailedCodecDescriptionsResponse, DefaultFuchsiaResourceDialect>
pub fn get_detailed_codec_descriptions( &self, ) -> QueryResponseFut<CodecFactoryGetDetailedCodecDescriptionsResponse, DefaultFuchsiaResourceDialect>
A client should call |GetDetailedCodecDescriptions()| to get a list of codecs supported either by software implementations or by underlying hardware.
Sourcepub fn create_decoder(
&self,
decoder_params: &CreateDecoderParams,
decoder: ServerEnd<StreamProcessorMarker>,
) -> Result<(), Error>
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.
Sourcepub fn create_encoder(
&self,
encoder_params: &CreateEncoderParams,
encoder: ServerEnd<StreamProcessorMarker>,
) -> Result<(), Error>
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.
Sourcepub fn attach_lifetime_tracking(
&self,
codec_end: EventPair,
) -> Result<(), Error>
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
impl Clone for CodecFactoryProxy
Source§fn clone(&self) -> CodecFactoryProxy
fn clone(&self) -> CodecFactoryProxy
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl CodecFactoryProxyInterface for CodecFactoryProxy
impl CodecFactoryProxyInterface for CodecFactoryProxy
type GetDetailedCodecDescriptionsResponseFut = QueryResponseFut<CodecFactoryGetDetailedCodecDescriptionsResponse>
fn get_detailed_codec_descriptions( &self, ) -> Self::GetDetailedCodecDescriptionsResponseFut
fn create_decoder( &self, decoder_params: &CreateDecoderParams, decoder: ServerEnd<StreamProcessorMarker>, ) -> Result<(), Error>
fn create_encoder( &self, encoder_params: &CreateEncoderParams, encoder: ServerEnd<StreamProcessorMarker>, ) -> Result<(), Error>
fn attach_lifetime_tracking(&self, codec_end: EventPair) -> Result<(), Error>
Source§impl Debug for CodecFactoryProxy
impl Debug for CodecFactoryProxy
Source§impl Proxy for CodecFactoryProxy
impl Proxy for CodecFactoryProxy
Source§type Protocol = CodecFactoryMarker
type Protocol = CodecFactoryMarker
Proxy
controls.Source§fn from_channel(inner: AsyncChannel) -> Self
fn from_channel(inner: AsyncChannel) -> Self
Source§fn into_channel(self) -> Result<AsyncChannel, Self>
fn into_channel(self) -> Result<AsyncChannel, Self>
Source§fn as_channel(&self) -> &AsyncChannel
fn as_channel(&self) -> &AsyncChannel
§fn into_client_end(self) -> Result<ClientEnd<Self::Protocol>, Self>
fn into_client_end(self) -> Result<ClientEnd<Self::Protocol>, Self>
Auto Trait Implementations§
impl Freeze for CodecFactoryProxy
impl !RefUnwindSafe for CodecFactoryProxy
impl Send for CodecFactoryProxy
impl Sync for CodecFactoryProxy
impl Unpin for CodecFactoryProxy
impl !UnwindSafe for CodecFactoryProxy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)