Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Unified Diff: extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.cc

Issue 1908563002: [chrome.displaySource] Consolidate media pipeline initialization. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 65e4d8ec0a499a8c394a4ec743a6c066d4e482c0..e346de1196b4d849e2c13c45817ed74c15c67d95 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
@@ -71,31 +71,61 @@ void WiFiDisplayMediaPipeline::RequestIDRPicture() {
video_encoder_->RequestIDRPicture();
}
+enum WiFiDisplayMediaPipeline::InitializationStep : unsigned {
+ INITIALIZE_FIRST,
+ INITIALIZE_MEDIA_PACKETIZER = INITIALIZE_FIRST,
+ INITIALIZE_VIDEO_ENCODER,
+ INITIALIZE_MEDIA_SERVICE,
+ INITIALIZE_LAST = INITIALIZE_MEDIA_SERVICE
+};
+
void WiFiDisplayMediaPipeline::Initialize(
const InitCompletionCallback& callback) {
- DCHECK(init_completion_callback_.is_null());
- init_completion_callback_ = callback;
-
- CreateMediaPacketizer();
+ DCHECK(!video_encoder_ && !packetizer_);
+ OnInitialize(callback, INITIALIZE_FIRST, true);
+}
- if (type_ & wds::VideoSession) {
- CreateVideoEncoder();
+void WiFiDisplayMediaPipeline::OnInitialize(
+ const InitCompletionCallback& callback,
+ InitializationStep current_step,
+ bool success) {
+ if (!success) {
+ callback.Run(false);
return;
}
- service_callback_.Run(
- mojo::GetProxy(&media_service_),
- base::Bind(&WiFiDisplayMediaPipeline::OnMediaServiceRegistered,
- weak_factory_.GetWeakPtr()));
-}
+ InitStepCompletionCallback init_step_callback;
+ if (current_step < INITIALIZE_LAST) {
+ InitializationStep next_step =
+ static_cast<InitializationStep>(current_step + 1u);
+ init_step_callback = base::Bind(&WiFiDisplayMediaPipeline::OnInitialize,
+ weak_factory_.GetWeakPtr(), callback, next_step);
+ }
-void WiFiDisplayMediaPipeline::CreateVideoEncoder() {
- DCHECK(!video_encoder_);
- auto result_callback =
- base::Bind(&WiFiDisplayMediaPipeline::OnVideoEncoderCreated,
- weak_factory_.GetWeakPtr());
- WiFiDisplayVideoEncoder::Create(video_parameters_,
- result_callback);
+ switch (current_step) {
+ case INITIALIZE_MEDIA_PACKETIZER:
+ DCHECK(!packetizer_);
+ CreateMediaPacketizer();
+ init_step_callback.Run(true);
+ break;
+ case INITIALIZE_VIDEO_ENCODER:
+ DCHECK(!video_encoder_);
+ if (type_ & wds::VideoSession) {
+ auto result_callback =
+ base::Bind(&WiFiDisplayMediaPipeline::OnVideoEncoderCreated,
+ weak_factory_.GetWeakPtr(), init_step_callback);
+ WiFiDisplayVideoEncoder::Create(video_parameters_, result_callback);
+ } else {
+ init_step_callback.Run(true);
+ }
+ break;
+ case INITIALIZE_MEDIA_SERVICE:
+ service_callback_.Run(
+ mojo::GetProxy(&media_service_),
+ base::Bind(&WiFiDisplayMediaPipeline::OnMediaServiceRegistered,
+ weak_factory_.GetWeakPtr(), callback));
+ break;
+ }
}
void WiFiDisplayMediaPipeline::CreateMediaPacketizer() {
@@ -133,11 +163,15 @@ void WiFiDisplayMediaPipeline::CreateMediaPacketizer() {
}
void WiFiDisplayMediaPipeline::OnVideoEncoderCreated(
+ const InitStepCompletionCallback& callback,
scoped_refptr<WiFiDisplayVideoEncoder> video_encoder) {
+ DCHECK(!video_encoder_);
+
if (!video_encoder) {
- init_completion_callback_.Run(false);
+ callback.Run(false);
return;
}
+
video_encoder_ = std::move(video_encoder);
auto encoded_callback = base::Bind(
&WiFiDisplayMediaPipeline::OnEncodedVideoFrame,
@@ -145,20 +179,18 @@ void WiFiDisplayMediaPipeline::OnVideoEncoderCreated(
auto error_callback = base::Bind(error_callback_, kErrorVideoEncoderError);
video_encoder_->SetCallbacks(encoded_callback, error_callback);
- service_callback_.Run(
- mojo::GetProxy(&media_service_),
- base::Bind(&WiFiDisplayMediaPipeline::OnMediaServiceRegistered,
- weak_factory_.GetWeakPtr()));
+ callback.Run(true);
}
-void WiFiDisplayMediaPipeline::OnMediaServiceRegistered() {
+void WiFiDisplayMediaPipeline::OnMediaServiceRegistered(
+ const InitCompletionCallback& callback) {
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_);
+ callback);
}
void WiFiDisplayMediaPipeline::OnEncodedVideoFrame(
« no previous file with comments | « extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698