Index: extensions/renderer/api/display_source/wifi_display/wifi_display_video_encoder.cc |
diff --git a/extensions/renderer/api/display_source/wifi_display/wifi_display_video_encoder.cc b/extensions/renderer/api/display_source/wifi_display/wifi_display_video_encoder.cc |
index 9d852eb9d5d8711328f5c2047c47682fd7680e68..6735511ff68f5fa491f0fb8d0b5bed4c4c16940d 100644 |
--- a/extensions/renderer/api/display_source/wifi_display/wifi_display_video_encoder.cc |
+++ b/extensions/renderer/api/display_source/wifi_display/wifi_display_video_encoder.cc |
@@ -4,6 +4,7 @@ |
#include "extensions/renderer/api/display_source/wifi_display/wifi_display_video_encoder.h" |
+#include "base/bind.h" |
#include "base/logging.h" |
namespace extensions { |
@@ -25,7 +26,21 @@ WiFiDisplayVideoEncoder::~WiFiDisplayVideoEncoder() = default; |
void WiFiDisplayVideoEncoder::Create( |
const InitParameters& params, |
const VideoEncoderCallback& encoder_callback) { |
- CreateVEA(params, encoder_callback); |
+ CreateVEA(params, base::Bind(&OnCreatedVEA, params, encoder_callback)); |
+} |
+ |
+// static |
+void WiFiDisplayVideoEncoder::OnCreatedVEA( |
+ const InitParameters& params, |
+ const VideoEncoderCallback& encoder_callback, |
+ scoped_refptr<WiFiDisplayVideoEncoder> vea_encoder) { |
+ if (vea_encoder) { |
+ // An accelerated encoder was created successfully. Pass it on. |
+ encoder_callback.Run(vea_encoder); |
+ } else { |
+ // An accelerated encoder was not created. Fall back to a software encoder. |
+ CreateSVC(params, encoder_callback); |
+ } |
} |
void WiFiDisplayVideoEncoder::InsertRawVideoFrame( |