| Index: content/renderer/media/video_capture_impl.cc
|
| diff --git a/content/renderer/media/video_capture_impl.cc b/content/renderer/media/video_capture_impl.cc
|
| index 9c5c53449e7b22f38445f8cc5ee2eb15a353ac34..9b104d28a7a1dd0517843d55e1a18f10a0fd6d13 100644
|
| --- a/content/renderer/media/video_capture_impl.cc
|
| +++ b/content/renderer/media/video_capture_impl.cc
|
| @@ -52,27 +52,31 @@ VideoCaptureImpl::VideoCaptureImpl(
|
| state_(VIDEO_CAPTURE_STATE_STOPPED),
|
| weak_factory_(this) {
|
| DCHECK(filter);
|
| - render_io_thread_checker_.DetachFromThread();
|
| }
|
|
|
| VideoCaptureImpl::~VideoCaptureImpl() {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| }
|
|
|
| void VideoCaptureImpl::Init() {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + // For creating callbacks in unittest, this class may be constructed from a
|
| + // different thread than the IO thread, e.g. wherever unittest runs on.
|
| + // Therefore, this function should define the thread ownership.
|
| +#if DCHECK_IS_ON()
|
| + io_message_loop_ = base::MessageLoopProxy::current();
|
| +#endif
|
| message_filter_->AddDelegate(this);
|
| }
|
|
|
| void VideoCaptureImpl::DeInit() {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| if (state_ == VIDEO_CAPTURE_STATE_STARTED)
|
| Send(new VideoCaptureHostMsg_Stop(device_id_));
|
| message_filter_->RemoveDelegate(this);
|
| }
|
|
|
| void VideoCaptureImpl::SuspendCapture(bool suspend) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| Send(suspend ?
|
| static_cast<IPC::Message*>(new VideoCaptureHostMsg_Pause(device_id_)) :
|
| static_cast<IPC::Message*>(
|
| @@ -84,7 +88,7 @@ void VideoCaptureImpl::StartCapture(
|
| const media::VideoCaptureParams& params,
|
| const VideoCaptureStateUpdateCB& state_update_cb,
|
| const VideoCaptureDeliverFrameCB& deliver_frame_cb) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| ClientInfo client_info;
|
| client_info.params = params;
|
| client_info.state_update_cb = state_update_cb;
|
| @@ -132,7 +136,7 @@ void VideoCaptureImpl::StartCapture(
|
| }
|
|
|
| void VideoCaptureImpl::StopCapture(int client_id) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
|
|
| // A client ID can be in only one client list.
|
| // If this ID is in any client list, we can just remove it from
|
| @@ -153,7 +157,7 @@ void VideoCaptureImpl::StopCapture(int client_id) {
|
|
|
| void VideoCaptureImpl::GetDeviceSupportedFormats(
|
| const VideoCaptureDeviceFormatsCB& callback) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| device_formats_cb_queue_.push_back(callback);
|
| if (device_formats_cb_queue_.size() == 1)
|
| Send(new VideoCaptureHostMsg_GetDeviceSupportedFormats(device_id_,
|
| @@ -162,7 +166,7 @@ void VideoCaptureImpl::GetDeviceSupportedFormats(
|
|
|
| void VideoCaptureImpl::GetDeviceFormatsInUse(
|
| const VideoCaptureDeviceFormatsCB& callback) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| device_formats_in_use_cb_queue_.push_back(callback);
|
| if (device_formats_in_use_cb_queue_.size() == 1)
|
| Send(
|
| @@ -172,7 +176,7 @@ void VideoCaptureImpl::GetDeviceFormatsInUse(
|
| void VideoCaptureImpl::OnBufferCreated(
|
| base::SharedMemoryHandle handle,
|
| int length, int buffer_id) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
|
|
| // In case client calls StopCapture before the arrival of created buffer,
|
| // just close this buffer and return.
|
| @@ -196,7 +200,7 @@ void VideoCaptureImpl::OnBufferCreated(
|
| }
|
|
|
| void VideoCaptureImpl::OnBufferDestroyed(int buffer_id) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
|
|
| const ClientBufferMap::iterator iter = client_buffers_.find(buffer_id);
|
| if (iter == client_buffers_.end())
|
| @@ -212,7 +216,7 @@ void VideoCaptureImpl::OnBufferReceived(int buffer_id,
|
| const gfx::Rect& visible_rect,
|
| base::TimeTicks timestamp,
|
| const base::DictionaryValue& metadata) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
|
|
| if (state_ != VIDEO_CAPTURE_STATE_STARTED || suspended_) {
|
| Send(new VideoCaptureHostMsg_BufferReady(device_id_, buffer_id, 0));
|
| @@ -261,7 +265,7 @@ void VideoCaptureImpl::OnMailboxBufferReceived(
|
| const gfx::Size& packed_frame_size,
|
| base::TimeTicks timestamp,
|
| const base::DictionaryValue& metadata) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
|
|
| if (state_ != VIDEO_CAPTURE_STATE_STARTED || suspended_) {
|
| Send(new VideoCaptureHostMsg_BufferReady(device_id_, buffer_id, 0));
|
| @@ -288,13 +292,13 @@ void VideoCaptureImpl::OnClientBufferFinished(
|
| int buffer_id,
|
| const scoped_refptr<ClientBuffer>& /* ignored_buffer */,
|
| uint32 release_sync_point) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| Send(new VideoCaptureHostMsg_BufferReady(
|
| device_id_, buffer_id, release_sync_point));
|
| }
|
|
|
| void VideoCaptureImpl::OnStateChanged(VideoCaptureState state) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
|
|
| switch (state) {
|
| case VIDEO_CAPTURE_STATE_STARTED:
|
| @@ -336,7 +340,7 @@ void VideoCaptureImpl::OnStateChanged(VideoCaptureState state) {
|
|
|
| void VideoCaptureImpl::OnDeviceSupportedFormatsEnumerated(
|
| const media::VideoCaptureFormats& supported_formats) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| for (size_t i = 0; i < device_formats_cb_queue_.size(); ++i)
|
| device_formats_cb_queue_[i].Run(supported_formats);
|
| device_formats_cb_queue_.clear();
|
| @@ -344,14 +348,14 @@ void VideoCaptureImpl::OnDeviceSupportedFormatsEnumerated(
|
|
|
| void VideoCaptureImpl::OnDeviceFormatsInUseReceived(
|
| const media::VideoCaptureFormats& formats_in_use) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| for (size_t i = 0; i < device_formats_in_use_cb_queue_.size(); ++i)
|
| device_formats_in_use_cb_queue_[i].Run(formats_in_use);
|
| device_formats_in_use_cb_queue_.clear();
|
| }
|
|
|
| void VideoCaptureImpl::OnDelegateAdded(int32 device_id) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| DVLOG(1) << "OnDelegateAdded: device_id " << device_id;
|
|
|
| device_id_ = device_id;
|
| @@ -366,7 +370,7 @@ void VideoCaptureImpl::OnDelegateAdded(int32 device_id) {
|
| }
|
|
|
| void VideoCaptureImpl::StopDevice() {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
|
|
| if (state_ == VIDEO_CAPTURE_STATE_STARTED) {
|
| state_ = VIDEO_CAPTURE_STATE_STOPPING;
|
| @@ -376,7 +380,7 @@ void VideoCaptureImpl::StopDevice() {
|
| }
|
|
|
| void VideoCaptureImpl::RestartCapture() {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| DCHECK_EQ(state_, VIDEO_CAPTURE_STATE_STOPPED);
|
|
|
| int width = 0;
|
| @@ -397,7 +401,7 @@ void VideoCaptureImpl::RestartCapture() {
|
| }
|
|
|
| void VideoCaptureImpl::StartCaptureInternal() {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| DCHECK(device_id_);
|
|
|
| Send(new VideoCaptureHostMsg_Start(device_id_, session_id_, params_));
|
| @@ -405,12 +409,12 @@ void VideoCaptureImpl::StartCaptureInternal() {
|
| }
|
|
|
| void VideoCaptureImpl::Send(IPC::Message* message) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| message_filter_->Send(message);
|
| }
|
|
|
| bool VideoCaptureImpl::RemoveClient(int client_id, ClientInfoMap* clients) {
|
| - DCHECK(render_io_thread_checker_.CalledOnValidThread());
|
| + DCHECK(io_message_loop_->BelongsToCurrentThread());
|
| bool found = false;
|
|
|
| const ClientInfoMap::iterator it = clients->find(client_id);
|
|
|