Index: media/cast/sender/video_encoder_impl.cc |
diff --git a/media/cast/sender/video_encoder_impl.cc b/media/cast/sender/video_encoder_impl.cc |
index 52ece8ca22e4d05a922516de704e161f91b6bb29..4efe32044a80c2d299691bbe6cb570e379935500 100644 |
--- a/media/cast/sender/video_encoder_impl.cc |
+++ b/media/cast/sender/video_encoder_impl.cc |
@@ -54,7 +54,8 @@ void EncodeVideoFrameOnEncoderThread( |
VideoEncoderImpl::VideoEncoderImpl( |
scoped_refptr<CastEnvironment> cast_environment, |
- const VideoSenderConfig& video_config) |
+ const VideoSenderConfig& video_config, |
+ const CastInitializationCallback& initialization_cb) |
: cast_environment_(cast_environment) { |
CHECK(cast_environment_->HasVideoThread()); |
if (video_config.codec == CODEC_VIDEO_VP8) { |
@@ -75,6 +76,15 @@ VideoEncoderImpl::VideoEncoderImpl( |
dynamic_config_.key_frame_requested = false; |
dynamic_config_.latest_frame_id_to_reference = kStartFrameId; |
dynamic_config_.bit_rate = video_config.start_bitrate; |
+ |
+ if (!initialization_cb.is_null()) { |
+ cast_environment_->PostTask( |
+ CastEnvironment::MAIN, |
+ FROM_HERE, |
+ base::Bind(initialization_cb, |
+ encoder_.get() ? STATUS_VIDEO_INITIALIZED : |
+ STATUS_UNSUPPORTED_VIDEO_CODEC)); |
+ } |
} |
VideoEncoderImpl::~VideoEncoderImpl() { |
@@ -88,11 +98,20 @@ VideoEncoderImpl::~VideoEncoderImpl() { |
} |
} |
+bool VideoEncoderImpl::CanEncodeVariedFrameSizes() const { |
+ // Both the VP8Encoder and FakeSoftwareVideoEncoder support calls to |
+ // EncodeVideoFrame() with different frame sizes. |
+ return true; |
+} |
+ |
bool VideoEncoderImpl::EncodeVideoFrame( |
const scoped_refptr<media::VideoFrame>& video_frame, |
const base::TimeTicks& reference_time, |
const FrameEncodedCallback& frame_encoded_callback) { |
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); |
+ DCHECK(!video_frame->visible_rect().IsEmpty()); |
+ DCHECK(!frame_encoded_callback.is_null()); |
+ |
cast_environment_->PostTask(CastEnvironment::VIDEO, |
FROM_HERE, |
base::Bind(&EncodeVideoFrameOnEncoderThread, |