| 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));
|
|
|
|
|