Index: media/cast/sender/h264_vt_encoder.cc |
diff --git a/media/cast/sender/h264_vt_encoder.cc b/media/cast/sender/h264_vt_encoder.cc |
index 5e253ed26b968d67c1e9a44b34e30d731632f384..98f5ff6a3b42a57f6f3622a06adabb46723fa489 100644 |
--- a/media/cast/sender/h264_vt_encoder.cc |
+++ b/media/cast/sender/h264_vt_encoder.cc |
@@ -224,26 +224,32 @@ class VideoFrameFactoryCVPixelBufferPoolImpl : public VideoFrameFactory { |
} // namespace |
H264VideoToolboxEncoder::H264VideoToolboxEncoder( |
- scoped_refptr<CastEnvironment> cast_environment, |
+ const scoped_refptr<CastEnvironment>& cast_environment, |
const VideoSenderConfig& video_config, |
+ const gfx::Size& frame_size, |
const CastInitializationCallback& initialization_cb) |
: cast_environment_(cast_environment), |
+ |
videotoolbox_glue_(VideoToolboxGlue::Get()), |
frame_id_(kStartFrameId), |
encode_next_frame_as_keyframe_(false) { |
- DCHECK(!initialization_cb.is_null()); |
+ DCHECK(!frame_size.IsEmpty()); |
+ |
CastInitializationStatus initialization_status; |
if (videotoolbox_glue_) { |
- initialization_status = (Initialize(video_config)) |
+ initialization_status = (Initialize(video_config, frame_size)) |
? STATUS_VIDEO_INITIALIZED |
: STATUS_INVALID_VIDEO_CONFIGURATION; |
} else { |
LOG(ERROR) << " VideoToolbox is not available"; |
initialization_status = STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED; |
} |
- cast_environment_->PostTask( |
- CastEnvironment::MAIN, FROM_HERE, |
- base::Bind(initialization_cb, initialization_status)); |
+ if (!initialization_cb.is_null()) { |
+ cast_environment_->PostTask( |
+ CastEnvironment::MAIN, |
+ FROM_HERE, |
+ base::Bind(initialization_cb, initialization_status)); |
+ } |
} |
H264VideoToolboxEncoder::~H264VideoToolboxEncoder() { |
@@ -251,7 +257,8 @@ H264VideoToolboxEncoder::~H264VideoToolboxEncoder() { |
} |
bool H264VideoToolboxEncoder::Initialize( |
- const VideoSenderConfig& video_config) { |
+ const VideoSenderConfig& video_config, |
+ const gfx::Size& frame_size) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(!compression_session_); |
@@ -286,7 +293,7 @@ bool H264VideoToolboxEncoder::Initialize( |
VTCompressionSessionRef session; |
OSStatus status = videotoolbox_glue_->VTCompressionSessionCreate( |
- kCFAllocatorDefault, video_config.width, video_config.height, |
+ kCFAllocatorDefault, frame_size.width(), frame_size.height(), |
CoreMediaGlue::kCMVideoCodecType_H264, encoder_spec, buffer_attributes, |
nullptr /* compressedDataAllocator */, |
&H264VideoToolboxEncoder::CompressionCallback, |
@@ -354,7 +361,8 @@ bool H264VideoToolboxEncoder::EncodeVideoFrame( |
const base::TimeTicks& reference_time, |
const FrameEncodedCallback& frame_encoded_callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(!reference_time.is_null()); |
+ DCHECK(!video_frame->visible_rect().IsEmpty()); |
+ DCHECK(!frame_encoded_callback.is_null()); |
if (!compression_session_) { |
DLOG(ERROR) << " compression session is null"; |