stream_processor_encoder_factory/
encoders.rs

1// Copyright 2019 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use 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}