Index: media/cast/sender/video_sender.cc |
diff --git a/media/cast/sender/video_sender.cc b/media/cast/sender/video_sender.cc |
index 1552749015d14c0bf45779520f930fcfc8ddde08..57d09843e890c76701803a3ccb79c6dc6c5dc211 100644 |
--- a/media/cast/sender/video_sender.cc |
+++ b/media/cast/sender/video_sender.cc |
@@ -38,6 +38,7 @@ size_t GetFixedBitrate(const VideoSenderConfig& video_config) { |
VideoSender::VideoSender( |
scoped_refptr<CastEnvironment> cast_environment, |
const VideoSenderConfig& video_config, |
+ const CastInitializationCallback& initialization_cb, |
const CreateVideoEncodeAcceleratorCallback& create_vea_cb, |
const CreateVideoEncodeMemoryCallback& create_video_encode_mem_cb, |
CastTransportSender* const transport_sender) |
@@ -64,15 +65,26 @@ VideoSender::VideoSender( |
DCHECK_GT(max_unacked_frames_, 0); |
if (video_config.use_external_encoder) { |
- video_encoder_.reset(new ExternalVideoEncoder(cast_environment, |
- video_config, |
- create_vea_cb, |
- create_video_encode_mem_cb)); |
+ video_encoder_.reset(new ExternalVideoEncoder( |
+ cast_environment, |
+ video_config, |
+ base::Bind(&VideoSender::OnEncoderInitialized, |
+ weak_factory_.GetWeakPtr(), initialization_cb), |
+ create_vea_cb, |
+ create_video_encode_mem_cb)); |
} else { |
+ // Software encoder is initialized immediately. |
video_encoder_.reset(new VideoEncoderImpl( |
cast_environment, video_config, max_unacked_frames_)); |
+ cast_initialization_status_ = STATUS_VIDEO_INITIALIZED; |
+ } |
+ |
+ if (cast_initialization_status_ == STATUS_VIDEO_INITIALIZED) { |
+ cast_environment->PostTask( |
+ CastEnvironment::MAIN, |
+ FROM_HERE, |
+ base::Bind(initialization_cb, cast_initialization_status_)); |
} |
- cast_initialization_status_ = STATUS_VIDEO_INITIALIZED; |
media::cast::CastTransportRtpConfig transport_config; |
transport_config.ssrc = video_config.ssrc; |
@@ -214,6 +226,13 @@ void VideoSender::SendEncodedVideoFrame( |
transport_sender_->InsertFrame(ssrc_, *encoded_frame); |
} |
+void VideoSender::OnEncoderInitialized( |
+ const CastInitializationCallback& initialization_cb, |
+ CastInitializationStatus status) { |
+ cast_initialization_status_ = status; |
+ initialization_cb.Run(status); |
+} |
+ |
void VideoSender::OnReceivedCastFeedback(const RtcpCastMessage& cast_feedback) { |
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |