Index: extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.cc |
diff --git a/extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.cc b/extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.cc |
index 4da3d3fef791330b31be0342005b4578859e948c..65e4d8ec0a499a8c394a4ec743a6c066d4e482c0 100644 |
--- a/extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.cc |
+++ b/extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.cc |
@@ -15,6 +15,7 @@ namespace extensions { |
namespace { |
const char kErrorVideoEncoderError[] = "Unrepairable video encoder error"; |
+const char kErrorUnableSendMedia[] = "Unable to send media"; |
} // namespace |
@@ -22,10 +23,16 @@ WiFiDisplayMediaPipeline::WiFiDisplayMediaPipeline( |
wds::SessionType type, |
const WiFiDisplayVideoEncoder::InitParameters& video_parameters, |
const wds::AudioCodec& audio_codec, |
+ const std::string& sink_ip_address, |
+ const std::pair<int, int>& sink_rtp_ports, |
+ const RegisterMediaServiceCallback& service_callback, |
const ErrorCallback& error_callback) |
: type_(type), |
video_parameters_(video_parameters), |
audio_codec_(audio_codec), |
+ sink_ip_address_(sink_ip_address), |
+ sink_rtp_ports_(sink_rtp_ports), |
+ service_callback_(service_callback), |
error_callback_(error_callback), |
weak_factory_(this) { |
} |
@@ -35,11 +42,17 @@ std::unique_ptr<WiFiDisplayMediaPipeline> WiFiDisplayMediaPipeline::Create( |
wds::SessionType type, |
const WiFiDisplayVideoEncoder::InitParameters& video_parameters, |
const wds::AudioCodec& audio_codec, |
+ const std::string& sink_ip_address, |
+ const std::pair<int, int>& sink_rtp_ports, |
+ const RegisterMediaServiceCallback& service_callback, |
const ErrorCallback& error_callback) { |
return std::unique_ptr<WiFiDisplayMediaPipeline>( |
new WiFiDisplayMediaPipeline(type, |
video_parameters, |
audio_codec, |
+ sink_ip_address, |
+ sink_rtp_ports, |
+ service_callback, |
error_callback)); |
} |
@@ -70,7 +83,10 @@ void WiFiDisplayMediaPipeline::Initialize( |
return; |
} |
- init_completion_callback_.Run(true); |
+ service_callback_.Run( |
+ mojo::GetProxy(&media_service_), |
+ base::Bind(&WiFiDisplayMediaPipeline::OnMediaServiceRegistered, |
+ weak_factory_.GetWeakPtr())); |
} |
void WiFiDisplayMediaPipeline::CreateVideoEncoder() { |
@@ -128,7 +144,21 @@ void WiFiDisplayMediaPipeline::OnVideoEncoderCreated( |
weak_factory_.GetWeakPtr()); |
auto error_callback = base::Bind(error_callback_, kErrorVideoEncoderError); |
video_encoder_->SetCallbacks(encoded_callback, error_callback); |
- init_completion_callback_.Run(true); |
+ |
+ service_callback_.Run( |
+ mojo::GetProxy(&media_service_), |
+ base::Bind(&WiFiDisplayMediaPipeline::OnMediaServiceRegistered, |
+ weak_factory_.GetWeakPtr())); |
+} |
+ |
+void WiFiDisplayMediaPipeline::OnMediaServiceRegistered() { |
+ DCHECK(media_service_); |
+ auto error_callback = base::Bind(error_callback_, kErrorUnableSendMedia); |
+ media_service_.set_connection_error_handler(error_callback); |
+ media_service_->SetDesinationPoint( |
+ sink_ip_address_, |
+ static_cast<int32_t>(sink_rtp_ports_.first), |
+ init_completion_callback_); |
} |
void WiFiDisplayMediaPipeline::OnEncodedVideoFrame( |
@@ -143,7 +173,8 @@ void WiFiDisplayMediaPipeline::OnEncodedVideoFrame( |
bool WiFiDisplayMediaPipeline::OnPacketizedMediaDatagramPacket( |
WiFiDisplayMediaDatagramPacket media_datagram_packet) { |
- NOTIMPLEMENTED(); |
+ DCHECK(media_service_); |
+ media_service_->SendMediaPacket(std::move(media_datagram_packet)); |
return true; |
} |