receiver_session_client.cc 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright 2021 The Chromium 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. #include "fuchsia_web/webengine/browser/receiver_session_client.h"
  5. #include "base/bind.h"
  6. #include "components/cast/message_port/fuchsia/message_port_fuchsia.h"
  7. #include "components/cast/message_port/message_port.h"
  8. #include "components/cast_streaming/browser/public/receiver_session.h"
  9. #include "components/cast_streaming/public/config_conversions.h"
  10. #include "components/cast_streaming/public/mojom/demuxer_connector.mojom.h"
  11. #include "media/base/audio_decoder_config.h"
  12. #include "media/base/video_decoder_config.h"
  13. ReceiverSessionClient::ReceiverSessionClient(
  14. fidl::InterfaceRequest<fuchsia::web::MessagePort> message_port_request,
  15. bool video_only_receiver)
  16. : message_port_request_(std::move(message_port_request)),
  17. video_only_receiver_(video_only_receiver) {
  18. DCHECK(message_port_request_);
  19. }
  20. ReceiverSessionClient::~ReceiverSessionClient() = default;
  21. void ReceiverSessionClient::SetDemuxerConnector(
  22. mojo::AssociatedRemote<cast_streaming::mojom::DemuxerConnector>
  23. demuxer_connector) {
  24. DCHECK(message_port_request_);
  25. // TODO: Add streaming session Constraints based on system capabilities
  26. // (see crbug.com/1013412) and DisplayDescription (see crbug.com/1087520).
  27. // TODO(crbug.com/1218498): Only populate codecs corresponding to those called
  28. // out by build flags.
  29. auto stream_config =
  30. std::make_unique<cast_streaming::ReceiverSession::AVConstraints>(
  31. cast_streaming::ToVideoCaptureConfigCodecs(
  32. #if BUILDFLAG(USE_PROPRIETARY_CODECS)
  33. media::VideoCodec::kH264,
  34. #endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
  35. media::VideoCodec::kVP8),
  36. video_only_receiver_ ? cast_streaming::ToAudioCaptureConfigCodecs()
  37. : cast_streaming::ToAudioCaptureConfigCodecs(
  38. #if BUILDFLAG(USE_PROPRIETARY_CODECS)
  39. media::AudioCodec::kAAC,
  40. #endif // BUILDFLAG(USE_PROPRIETARY_CODECS)
  41. media::AudioCodec::kOpus));
  42. receiver_session_ = cast_streaming::ReceiverSession::Create(
  43. std::move(stream_config),
  44. base::BindOnce(
  45. [](fidl::InterfaceRequest<fuchsia::web::MessagePort> port)
  46. -> std::unique_ptr<cast_api_bindings::MessagePort> {
  47. return cast_api_bindings::MessagePortFuchsia::Create(
  48. std::move(port));
  49. },
  50. std::move(message_port_request_)));
  51. receiver_session_->StartStreamingAsync(std::move(demuxer_connector));
  52. }
  53. bool ReceiverSessionClient::HasReceiverSession() {
  54. return !!receiver_session_;
  55. }