Index: media/cast/sender/video_sender.cc |
diff --git a/media/cast/sender/video_sender.cc b/media/cast/sender/video_sender.cc |
index 190e9648d52ad4a6ffd85772b4046c903c76f160..a34b55f8cf46edfa23766746ddbd6563069ff393 100644 |
--- a/media/cast/sender/video_sender.cc |
+++ b/media/cast/sender/video_sender.cc |
@@ -17,6 +17,10 @@ |
#include "media/cast/sender/video_encoder_impl.h" |
#include "media/cast/sender/video_frame_factory.h" |
+#if defined(OS_MACOSX) |
+#include "media/cast/sender/h264_vt_encoder.h" |
+#endif |
+ |
namespace media { |
namespace cast { |
@@ -70,6 +74,18 @@ VideoSender::VideoSender( |
weak_factory_(this) { |
cast_initialization_status_ = STATUS_VIDEO_UNINITIALIZED; |
+#if defined(OS_MACOSX) |
+ // On Apple platforms, use the hardware H.264 encoder if possible. It is the |
+ // only reasonable option for iOS. |
+ if (!video_config.use_external_encoder && |
+ video_config.codec == CODEC_VIDEO_H264) { |
+ video_encoder_.reset(new H264VideoToolboxEncoder( |
+ cast_environment, video_config, |
+ base::Bind(&VideoSender::OnEncoderInitialized, |
+ weak_factory_.GetWeakPtr(), initialization_cb))); |
+ } |
+#endif // defined(OS_MACOSX) |
+#if !defined(OS_IOS) |
if (video_config.use_external_encoder) { |
video_encoder_.reset(new ExternalVideoEncoder( |
cast_environment, |
@@ -78,11 +94,12 @@ VideoSender::VideoSender( |
weak_factory_.GetWeakPtr(), initialization_cb), |
create_vea_cb, |
create_video_encode_mem_cb)); |
- } else { |
+ } else if (!video_encoder_) { |
// Software encoder is initialized immediately. |
video_encoder_.reset(new VideoEncoderImpl(cast_environment, video_config)); |
cast_initialization_status_ = STATUS_VIDEO_INITIALIZED; |
} |
+#endif // !defined(OS_IOS) |
if (cast_initialization_status_ == STATUS_VIDEO_INITIALIZED) { |
cast_environment->PostTask( |