stream_processor_encoder_factory/
encoders.rs
1use fidl::endpoints::*;
6use fidl_fuchsia_media::*;
7use fidl_fuchsia_mediacodec::*;
8use fuchsia_component::client;
9use futures::future::{self, BoxFuture};
10use futures::FutureExt;
11use stream_processor_test::*;
12
13pub struct EncoderFactory;
14
15impl StreamProcessorFactory for EncoderFactory {
16 fn connect_to_stream_processor(
17 &self,
18 stream: &dyn ElementaryStream,
19 format_details_version_ordinal: u64,
20 ) -> BoxFuture<'_, Result<StreamProcessorProxy>> {
21 let get_encoder = || {
22 let factory = client::connect_to_protocol::<CodecFactoryMarker>()?;
23 let (encoder_client_end, encoder_request) = create_endpoints();
24 let encoder = encoder_client_end.into_proxy();
25 factory.create_encoder(
26 &CreateEncoderParams {
27 input_details: Some(stream.format_details(format_details_version_ordinal)),
28 require_hw: Some(false),
29 ..Default::default()
30 },
31 encoder_request,
32 )?;
33 Ok(encoder)
34 };
35 future::ready(get_encoder()).boxed()
36 }
37}