[go: nahoru, domu]

blob: cfa9270a857be7649e0586eb7b5467ab9a7c2892 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "fuchsia_web/webengine/browser/receiver_session_client.h"
#include "base/bind.h"
#include "components/cast/message_port/fuchsia/message_port_fuchsia.h"
#include "components/cast/message_port/message_port.h"
#include "components/cast_streaming/browser/public/receiver_session.h"
#include "components/cast_streaming/public/config_conversions.h"
#include "components/cast_streaming/public/mojom/demuxer_connector.mojom.h"
#include "media/base/audio_decoder_config.h"
#include "media/base/video_decoder_config.h"
ReceiverSessionClient::ReceiverSessionClient(
fidl::InterfaceRequest<fuchsia::web::MessagePort> message_port_request,
bool video_only_receiver)
: message_port_request_(std::move(message_port_request)),
video_only_receiver_(video_only_receiver) {
DCHECK(message_port_request_);
}
ReceiverSessionClient::~ReceiverSessionClient() = default;
void ReceiverSessionClient::SetDemuxerConnector(
mojo::AssociatedRemote<cast_streaming::mojom::DemuxerConnector>
demuxer_connector) {
DCHECK(message_port_request_);
// TODO: Add streaming session Constraints based on system capabilities
// (see crbug.com/1013412) and DisplayDescription (see crbug.com/1087520).
// TODO(crbug.com/1218498): Only populate codecs corresponding to those called
// out by build flags.
auto stream_config =
std::make_unique<cast_streaming::ReceiverSession::AVConstraints>(
cast_streaming::ToVideoCaptureConfigCodecs(
#if BUILDFLAG(USE_PROPRIETARY_CODECS)
media::VideoCodec::kH264,
#endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
media::VideoCodec::kVP8),
video_only_receiver_ ? cast_streaming::ToAudioCaptureConfigCodecs()
: cast_streaming::ToAudioCaptureConfigCodecs(
#if BUILDFLAG(USE_PROPRIETARY_CODECS)
media::AudioCodec::kAAC,
#endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
media::AudioCodec::kOpus));
receiver_session_ = cast_streaming::ReceiverSession::Create(
std::move(stream_config),
base::BindOnce(
[](fidl::InterfaceRequest<fuchsia::web::MessagePort> port)
-> std::unique_ptr<cast_api_bindings::MessagePort> {
return cast_api_bindings::MessagePortFuchsia::Create(
std::move(port));
},
std::move(message_port_request_)));
receiver_session_->StartStreamingAsync(std::move(demuxer_connector));
}
bool ReceiverSessionClient::HasReceiverSession() {
return !!receiver_session_;
}